diff --git a/.gitignore b/.gitignore index 9a12e18c..37a3356b 100644 --- a/.gitignore +++ b/.gitignore @@ -174,4 +174,5 @@ $RECYCLE.BIN/ # Custom rules (everything added below won't be overriden by 'Generate .gitignore File' if you use 'Update' option) lib/ -tmp/ \ No newline at end of file +tmp/ +.vscode/launch.json diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 00000000..a576f17d --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,81 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Debug APIMatic CLI", + "skipFiles": ["/"], + "program": "${workspaceFolder}/bin/run", + "args": [ + // "api:validate", + // "--file=C:/Users/User/Desktop/spec/Errors.yaml", + // "--file=https://petstore.swagger.io/v2/swagger.json" + // "api:transform", + // "--format=OpenApi3Json", + // "--file=C:/Users/User/Desktop/test-cli/spec/Calculator.json", + // "--destination=C:/Users/User/Desktop/test-cli/spec" + // "auth:logout", + // "auth:login", + // "auth:status" + // "portal:quickstart", + // "portal:generate", + // "portal:new:toc", + //"--expand-endpoints", + //"--expand-models", + // "--force", + // "--folder", + // "test-source", + // "--destination", + // "test-portal", + // "portal:serve", + // "api:transform", + // "--help" + // "--folder=C:/Users/User/Desktop/demo/portal", + // "--destination=C:\\Users\\User\\Desktop\\demo\\portal\\api-portal" + // "--source=C:/Users/User/Desktop/demo/portal/", + // "--destination=C:/Users/User/Desktop/demo/portal/api-portal2", + // "--source=C:/Users/User/Desktop/demo/portal", + // "--source=\"C:\\Users\\User\\Desktop\\test-cli\"", + // "--destination=\"C:\\Users\\User\\Desktop\\demo\\portal\\api-portal\"", + // "--destination=\"C:\\Users\\User\\Desktop\\demo\\api-portal\"", + // "--source=C:/Users/User/Desktop/test-cli", + // "--destination=C:/Users/User/Desktop/test-cli/api-portal", + // "--source=C:\\Users\\User\\Desktop\\test-cli-2", + // "--destination=C:\\Users\\User\\Desktop\\test-cli-2\\generated_portal" + // "--port=70000" + // "--ignore=C:/Users/User/Desktop/demo/portal/content,C:/Users/User/Desktop/demo/portal/static/images/logo.png", + // "--no-reload", + // "--auth-key=\"invalidApiKey\"", + // "--help" + ], + "console": "externalTerminal", + "preLaunchTask": "tsc: build - tsconfig.json" + }, + { + "type": "node", + "request": "launch", + "name": "Debug CLI Tests", + "program": "${workspaceFolder}/node_modules/mocha/bin/_mocha", + "args": [ + "--require", + "ts-node/register", + "--project", + "${workspaceFolder}/tsconfig.json", + "--forbid-only", + "test/**/*.test.ts", + "--timeout", + "99999", + ], + "cwd": "${workspaceFolder}", + "runtimeArgs": [ + "--nolazy", + "--inspect-brk", + "--trace-warnings" + ], + "internalConsoleOptions": "openOnSessionStart", + "skipFiles": ["/**"], + "console": "integratedTerminal" + } + ] +} \ No newline at end of file diff --git a/README.md b/README.md index e2b1c3df..a1f3eff2 100644 --- a/README.md +++ b/README.md @@ -272,7 +272,7 @@ USAGE $ apimatic portal:serve [-p ] [-d ] [-s ] [-o] [--no-reload] [-i ] [--auth-key ] FLAGS - -d, --destination= [default: ./api-portal] Directory to store and serve the generated portal. + -d, --destination= [default: ./generated_portal] Directory to store and serve the generated portal. -i, --ignore= Comma-separated list of files/directories to ignore. -o, --open Open the portal in the default browser. -p, --port= [default: 3000] Port to serve the portal. @@ -285,7 +285,7 @@ DESCRIPTION Generate and deploy a Docs as Code portal with hot reload. EXAMPLES - $ apimatic portal:serve --source="./" --destination="./api-portal" --port=3000 --open --no-reload + $ apimatic portal:serve --source="./" --destination="./generated_portal" --port=3000 --open --no-reload ``` _See code: [src/commands/portal/serve.ts](https://github.com/apimatic/apimatic-cli/blob/v1.0.1-alpha.11/src/commands/portal/serve.ts)_ diff --git a/package-lock.json b/package-lock.json index 932079e2..7f62ef86 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,8 +9,12 @@ "version": "1.0.1-alpha.11", "license": "MIT", "dependencies": { - "@apimatic/sdk": "^0.1.0-alpha.2", - "@clack/prompts": "^0.10.0", + "@apimatic/authentication-adapters": "^0.5.4", + "@apimatic/axios-client-adapter": "^0.3.7", + "@apimatic/core": "^0.10.16", + "@apimatic/schema": "^0.7.14", + "@apimatic/sdk": "file:./lib/sdk", + "@clack/prompts": "^0.11.0", "@oclif/core": "^4.2.8", "@oclif/plugin-autocomplete": "^3.2.24", "@oclif/plugin-help": "^6.2.26", @@ -31,7 +35,8 @@ "striptags": "^3.2.0", "treeify": "^1.1.0", "tslib": "^2.5.0", - "unzipper": "^0.12.3" + "unzipper": "^0.12.3", + "yaml": "^2.8.0" }, "bin": { "apimatic": "bin/run" @@ -39,28 +44,29 @@ "devDependencies": { "@commitlint/cli": "^15.0.0", "@commitlint/config-conventional": "^15.0.0", - "@oclif/test": "^4.1.11", + "@oclif/test": "^4.1.13", "@types/adm-zip": "^0.5.5", "@types/archiver": "^5.1.1", "@types/base-64": "^1.0.0", - "@types/chai": "^4.2.22", + "@types/chai": "^4.3.20", "@types/connect-livereload": "^0.5.1", "@types/express": "^4.17.13", "@types/fs-extra": "^9.0.13", "@types/livereload": "^0.9.2", "@types/mocha": "^5.2.7", - "@types/node": "^10.17.60", + "@types/node": "^20.17.50", "@types/treeify": "^1.0.3", "@types/unzipper": "^0.10.4", "@typescript-eslint/eslint-plugin": "^8.0.0", "@typescript-eslint/parser": "^8.0.0", - "chai": "^4.3.4", + "chai": "^4.5.0", "eslint": "^9.21.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-import": "^2.25.2", "husky": "^7.0.4", "lint-staged": "^11.2.6", - "mocha": "^11.1.0", + "mocha": "^11.5.0", + "nock": "^14.0.4", "nyc": "^17.1.0", "oclif": "^4.17.34", "prettier": "^2.4.1", @@ -72,10 +78,36 @@ "node": ">=20.0.0" } }, + "../apimatic-sdk-for-js-updated": { + "name": "apimatic-apilib", + "version": "3.0.0", + "extraneous": true, + "license": "MIT", + "dependencies": { + "@apimatic/authentication-adapters": "^0.5.4", + "@apimatic/axios-client-adapter": "^0.3.7", + "@apimatic/core": "^0.10.16", + "@apimatic/schema": "^0.7.14" + }, + "devDependencies": { + "@apimatic/test-utilities": "^0.0.1", + "@types/jest": "^29.4.0", + "@typescript-eslint/eslint-plugin": "^5.52.0", + "@typescript-eslint/parser": "^5.52.0", + "eslint": "^8.34.0", + "jest": "^29.4.3", + "rimraf": "^3.0.2", + "ts-jest": "29.2.6", + "tslib": "^2.5.0", + "typescript": "^4.9.5" + }, + "engines": { + "node": ">=14.17.0" + } + }, + "lib/sdk": {}, "node_modules/@ampproject/remapping": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -87,14 +119,14 @@ } }, "node_modules/@apimatic/authentication-adapters": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/@apimatic/authentication-adapters/-/authentication-adapters-0.5.6.tgz", - "integrity": "sha512-7/m+KLIpsiO83uWtCBRZKmpDtCLBoW5yIM9sOsHslI6RKbGWXu/cTnIE07nlrePLQhfX0+dO/Jl9vfFKIoLYzw==", + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/@apimatic/authentication-adapters/-/authentication-adapters-0.5.8.tgz", + "integrity": "sha512-PVFAKil48WAB8arXmnBBkGK0uJ4uFtUQU6sTW0+yhY2U1FnaRLiBZA0ZlaoHau4M1IEmVY2a5FMredMdRP32Mw==", "license": "MIT", "dependencies": { - "@apimatic/core-interfaces": "^0.2.8", - "@apimatic/http-headers": "^0.3.4", - "@apimatic/http-query": "^0.3.4", + "@apimatic/core-interfaces": "^0.2.9", + "@apimatic/http-headers": "^0.3.5", + "@apimatic/http-query": "^0.3.5", "tslib": "^2.8.1" }, "engines": { @@ -102,58 +134,34 @@ } }, "node_modules/@apimatic/axios-client-adapter": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@apimatic/axios-client-adapter/-/axios-client-adapter-0.2.2.tgz", - "integrity": "sha512-cbMd/CiIUmbtYpHjQgptptkeeWWko8MtuOI5rJfqxL/ElYI0ABSytdO5fuT4Q+hXQHQrkPRgL2z9yUMRoFEARg==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@apimatic/axios-client-adapter/-/axios-client-adapter-0.3.9.tgz", + "integrity": "sha512-3g7uJ/TzU7DA8f+aqFSmQOqdKbOlzPF1qcDvrZglB0Sw/CLAVvqzsr6b5KZUJrgY2gSOgCe1DJr22Zy8N2UbTA==", "license": "MIT", "dependencies": { - "@apimatic/convert-to-stream": "^0.1.0", - "@apimatic/core-interfaces": "^0.2.0", - "@apimatic/file-wrapper": "^0.3.0", - "@apimatic/http-headers": "^0.3.0", - "@apimatic/http-query": "^0.3.0", + "@apimatic/convert-to-stream": "^0.1.5", + "@apimatic/core-interfaces": "^0.2.9", + "@apimatic/file-wrapper": "^0.3.5", + "@apimatic/http-headers": "^0.3.5", + "@apimatic/http-query": "^0.3.5", "@apimatic/json-bigint": "^1.2.0", - "@apimatic/schema": "^0.7.0", - "axios": "^0.21.1", + "@apimatic/schema": "^0.7.16", + "axios": "^1.8.4", "detect-browser": "^5.3.0", - "detect-node": "^2.0.4", - "form-data": "^3.0.0", + "detect-node": "^2.1.0", + "form-data": "^4.0.1", "lodash.flatmap": "^4.5.0", "tiny-warning": "^1.0.3", - "tslib": "^2.1.0" + "tslib": "^2.8.1" }, "engines": { "node": ">=14.15.0 || >=16.0.0" } }, - "node_modules/@apimatic/axios-client-adapter/node_modules/axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.14.0" - } - }, - "node_modules/@apimatic/axios-client-adapter/node_modules/form-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.3.tgz", - "integrity": "sha512-q5YBMeWy6E2Un0nMGWMgI65MAKtaylxfNJGJxpGh45YDciZB4epbWpaAfImil6CPAPTYB4sh0URQNDRIZG5F2w==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "mime-types": "^2.1.35" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/@apimatic/convert-to-stream": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@apimatic/convert-to-stream/-/convert-to-stream-0.1.4.tgz", - "integrity": "sha512-QlAUUN/NT4IbajpnFw+w+4GAPwuTtPAEUMBGGKX4M2XLuv8QA4Asag6V19gLsnWFdzcu7mwpjGn+O4tsOlArMQ==", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@apimatic/convert-to-stream/-/convert-to-stream-0.1.5.tgz", + "integrity": "sha512-aMGxQFXh97KAqHf6owcXCZVFDqq7SUnTaeGWgduHBf1Aji1+m4j+HKR28IMzoWtMzItxqZFbauQYEC6UIwIK9A==", "license": "ISC", "dependencies": { "tslib": "2.8.1" @@ -163,18 +171,18 @@ } }, "node_modules/@apimatic/core": { - "version": "0.10.17", - "resolved": "https://registry.npmjs.org/@apimatic/core/-/core-0.10.17.tgz", - "integrity": "sha512-8AHBm0Y0cjDDtJBgx+TkGXWLWadG+zltMiew7vmrADT8GGhKX/JfMV0R9ae+E1kmnF+C2g/IH/muNx6+HH15pA==", + "version": "0.10.19", + "resolved": "https://registry.npmjs.org/@apimatic/core/-/core-0.10.19.tgz", + "integrity": "sha512-yctmGm8kFZHntyGfCCnJSyGNd1R7Rv1HYE9KVOfnVImkWZwqPPuaYNrq2zaySig0nSopE5Pq4eGMwrOpfqSLJA==", "license": "MIT", "dependencies": { "@apimatic/convert-to-stream": "^0.0.2", - "@apimatic/core-interfaces": "^0.2.8", - "@apimatic/file-wrapper": "^0.3.4", - "@apimatic/http-headers": "^0.3.4", - "@apimatic/http-query": "^0.3.4", + "@apimatic/core-interfaces": "^0.2.9", + "@apimatic/file-wrapper": "^0.3.5", + "@apimatic/http-headers": "^0.3.5", + "@apimatic/http-query": "^0.3.5", "@apimatic/json-bigint": "^1.2.0", - "@apimatic/schema": "^0.7.15", + "@apimatic/schema": "^0.7.16", "detect-browser": "^5.3.0", "detect-node": "^2.1.0", "form-data": "^4.0.1", @@ -189,12 +197,12 @@ } }, "node_modules/@apimatic/core-interfaces": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/@apimatic/core-interfaces/-/core-interfaces-0.2.8.tgz", - "integrity": "sha512-3o9CkUMeRrg8uE1dDqcvh3MOFIOPqdNRmpFEzhJa5oc0IqHHVhCSU21V9jBe0jB1+Zxc9uHWsq55QXFpliFq8Q==", + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@apimatic/core-interfaces/-/core-interfaces-0.2.9.tgz", + "integrity": "sha512-kHzsbQ+fyb/Sl96OmlqvBJUa25a/69YQmQlYIFx3+Lk69hDtGcpdQsNygNsbAxQJ1oOCkFQ7TjK9Ny6KDeMyQg==", "license": "MIT", "dependencies": { - "@apimatic/file-wrapper": "^0.3.4", + "@apimatic/file-wrapper": "^0.3.5", "tslib": "^2.8.1" }, "engines": { @@ -211,9 +219,9 @@ } }, "node_modules/@apimatic/file-wrapper": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@apimatic/file-wrapper/-/file-wrapper-0.3.4.tgz", - "integrity": "sha512-XMY2Zh1pMOY1mGoz9axxR5Q5MDhdyArh2BxSfdJkRe76t2CiXdmw/+kPgBiX9QvXJXc0rcsDClqg4WMxamDepw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@apimatic/file-wrapper/-/file-wrapper-0.3.5.tgz", + "integrity": "sha512-N/iItJrHrKomLXyL5CDZSIGwRLYcO8sO08VueQHr0RFRkkeT4ZoEKSP5L/c4SfXtImCFWvoVXpHtG28w6pnYzQ==", "license": "MIT", "dependencies": { "tslib": "2.8.1" @@ -223,9 +231,9 @@ } }, "node_modules/@apimatic/http-headers": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@apimatic/http-headers/-/http-headers-0.3.4.tgz", - "integrity": "sha512-ECKyQt9QaRu8nwFJS50HMKKhs+lO191URDUQ5CRzgtGPudmrrmB35I1lz3oVjXelyoJANog2IEGhx3nqoSYD7Q==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@apimatic/http-headers/-/http-headers-0.3.5.tgz", + "integrity": "sha512-S5BXweey0RvmRxVQIoG+UWrztxmrHq8nXXJPBljH17/5iPtOGlxNylsUxEYHLY2EaV2LCHqp6zHlk47CUUEHiQ==", "license": "MIT", "dependencies": { "tslib": "2.8.1" @@ -235,12 +243,12 @@ } }, "node_modules/@apimatic/http-query": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@apimatic/http-query/-/http-query-0.3.4.tgz", - "integrity": "sha512-6s5DS7dMq1lEJ+9AsTIiMyTXGX9xX5vOnduNSw8csSaQJ5lwMP4O4QzHFT3IFrvctKp/pfS75P0HYGV+9ciltg==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@apimatic/http-query/-/http-query-0.3.5.tgz", + "integrity": "sha512-n6GG8TA/XP+PaLpWLta/6e0NUou0yahtDF7YY+8G5YXJ47OCP0i4rD90OKrwLlyyDwEgdw1pAuikVuLbaSMCgA==", "license": "MIT", "dependencies": { - "@apimatic/file-wrapper": "^0.3.4", + "@apimatic/file-wrapper": "^0.3.5", "tslib": "^2.8.1" }, "engines": { @@ -254,9 +262,9 @@ "license": "MIT" }, "node_modules/@apimatic/schema": { - "version": "0.7.15", - "resolved": "https://registry.npmjs.org/@apimatic/schema/-/schema-0.7.15.tgz", - "integrity": "sha512-wJVQPYYJwG9TuMJLvddH7VJ7x5tRK3ycZvcsheeEL9xD2BmTIV5w5ni14gjvmLIbivRsHmMcUkCVhIEssjg+Zg==", + "version": "0.7.16", + "resolved": "https://registry.npmjs.org/@apimatic/schema/-/schema-0.7.16.tgz", + "integrity": "sha512-4u855UE/A3/8t9vqxI4Ma8wpVKCvWtXHQGaOnThdeE8ZDoo4Ha+R+jmxi3DoOkDWNeGe2vyEVDP1xGyxvjuZ2g==", "license": "MIT", "dependencies": { "tslib": "^2.8.1" @@ -266,24 +274,11 @@ } }, "node_modules/@apimatic/sdk": { - "version": "0.1.0-alpha.2", - "resolved": "https://registry.npmjs.org/@apimatic/sdk/-/sdk-0.1.0-alpha.2.tgz", - "integrity": "sha512-Dosc/UiO20jZXDak+OSNxXJuQ/FeSEAQLh7ncU904RY5KjCon0zAGNebTO0FFOW1Oqks6ulOTogrSc/YNIXl3w==", - "license": "MIT", - "dependencies": { - "@apimatic/authentication-adapters": "^0.5.0", - "@apimatic/axios-client-adapter": "^0.2.0", - "@apimatic/core": "^0.10.0", - "@apimatic/schema": "^0.7.0" - }, - "engines": { - "node": ">=14.17.0" - } + "resolved": "lib/sdk", + "link": true }, "node_modules/@aws-crypto/crc32": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", - "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -297,8 +292,6 @@ }, "node_modules/@aws-crypto/crc32c": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz", - "integrity": "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -309,8 +302,6 @@ }, "node_modules/@aws-crypto/sha1-browser": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz", - "integrity": "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -324,8 +315,6 @@ }, "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/is-array-buffer": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -337,8 +326,6 @@ }, "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-buffer-from": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -351,8 +338,6 @@ }, "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-utf8": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -365,8 +350,6 @@ }, "node_modules/@aws-crypto/sha256-browser": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", - "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -381,8 +364,6 @@ }, "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -394,8 +375,6 @@ }, "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -408,8 +387,6 @@ }, "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -422,8 +399,6 @@ }, "node_modules/@aws-crypto/sha256-js": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", - "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -437,8 +412,6 @@ }, "node_modules/@aws-crypto/supports-web-crypto": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", - "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -447,8 +420,6 @@ }, "node_modules/@aws-crypto/util": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", - "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -459,8 +430,6 @@ }, "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -472,8 +441,6 @@ }, "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -486,8 +453,6 @@ }, "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -500,8 +465,6 @@ }, "node_modules/@aws-sdk/client-cloudfront": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudfront/-/client-cloudfront-3.758.0.tgz", - "integrity": "sha512-kAIMe+cwH+ZuK/rM3L8NdM8rS5cnCoFTgCbjF4GVjDnZJ8JlNm3oRIKAK55mmgtGLuqEz1h6QVLrV01/fNvYaA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -554,8 +517,6 @@ }, "node_modules/@aws-sdk/client-s3": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.758.0.tgz", - "integrity": "sha512-f8SlhU9/93OC/WEI6xVJf/x/GoQFj9a/xXK6QCtr5fvCjfSLgMVFmKTiIl/tgtDRzxUDc8YS6EGtbHjJ3Y/atg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -622,8 +583,6 @@ }, "node_modules/@aws-sdk/client-sso": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.758.0.tgz", - "integrity": "sha512-BoGO6IIWrLyLxQG6txJw6RT2urmbtlwfggapNCrNPyYjlXpzTSJhBYjndg7TpDATFd0SXL0zm8y/tXsUXNkdYQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -672,8 +631,6 @@ }, "node_modules/@aws-sdk/core": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.758.0.tgz", - "integrity": "sha512-0RswbdR9jt/XKemaLNuxi2gGr4xGlHyGxkTdhSQzCyUe9A9OPCoLl3rIESRguQEech+oJnbHk/wuiwHqTuP9sg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -695,8 +652,6 @@ }, "node_modules/@aws-sdk/credential-provider-env": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.758.0.tgz", - "integrity": "sha512-N27eFoRrO6MeUNumtNHDW9WOiwfd59LPXPqDrIa3kWL/s+fOKFHb9xIcF++bAwtcZnAxKkgpDCUP+INNZskE+w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -712,8 +667,6 @@ }, "node_modules/@aws-sdk/credential-provider-http": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.758.0.tgz", - "integrity": "sha512-Xt9/U8qUCiw1hihztWkNeIR+arg6P+yda10OuCHX6kFVx3auTlU7+hCqs3UxqniGU4dguHuftf3mRpi5/GJ33Q==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -734,8 +687,6 @@ }, "node_modules/@aws-sdk/credential-provider-ini": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.758.0.tgz", - "integrity": "sha512-cymSKMcP5d+OsgetoIZ5QCe1wnp2Q/tq+uIxVdh9MbfdBBEnl9Ecq6dH6VlYS89sp4QKuxHxkWXVnbXU3Q19Aw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -759,8 +710,6 @@ }, "node_modules/@aws-sdk/credential-provider-node": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.758.0.tgz", - "integrity": "sha512-+DaMv63wiq7pJrhIQzZYMn4hSarKiizDoJRvyR7WGhnn0oQ/getX9Z0VNCV3i7lIFoLNTb7WMmQ9k7+z/uD5EQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -783,8 +732,6 @@ }, "node_modules/@aws-sdk/credential-provider-process": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.758.0.tgz", - "integrity": "sha512-AzcY74QTPqcbXWVgjpPZ3HOmxQZYPROIBz2YINF0OQk0MhezDWV/O7Xec+K1+MPGQO3qS6EDrUUlnPLjsqieHA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -801,8 +748,6 @@ }, "node_modules/@aws-sdk/credential-provider-sso": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.758.0.tgz", - "integrity": "sha512-x0FYJqcOLUCv8GLLFDYMXRAQKGjoM+L0BG4BiHYZRDf24yQWFCAZsCQAYKo6XZYh2qznbsW6f//qpyJ5b0QVKQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -821,8 +766,6 @@ }, "node_modules/@aws-sdk/credential-provider-web-identity": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.758.0.tgz", - "integrity": "sha512-XGguXhBqiCXMXRxcfCAVPlMbm3VyJTou79r/3mxWddHWF0XbhaQiBIbUz6vobVTD25YQRbWSmSch7VA8kI5Lrw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -839,8 +782,6 @@ }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.734.0.tgz", - "integrity": "sha512-etC7G18aF7KdZguW27GE/wpbrNmYLVT755EsFc8kXpZj8D6AFKxc7OuveinJmiy0bYXAMspJUWsF6CrGpOw6CQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -858,8 +799,6 @@ }, "node_modules/@aws-sdk/middleware-expect-continue": { "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.734.0.tgz", - "integrity": "sha512-P38/v1l6HjuB2aFUewt7ueAW5IvKkFcv5dalPtbMGRhLeyivBOHwbCyuRKgVs7z7ClTpu9EaViEGki2jEQqEsQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -874,8 +813,6 @@ }, "node_modules/@aws-sdk/middleware-flexible-checksums": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.758.0.tgz", - "integrity": "sha512-o8Rk71S08YTKLoSobucjnbj97OCGaXgpEDNKXpXaavUM5xLNoHCLSUPRCiEN86Ivqxg1n17Y2nSRhfbsveOXXA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -899,8 +836,6 @@ }, "node_modules/@aws-sdk/middleware-host-header": { "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.734.0.tgz", - "integrity": "sha512-LW7RRgSOHHBzWZnigNsDIzu3AiwtjeI2X66v+Wn1P1u+eXssy1+up4ZY/h+t2sU4LU36UvEf+jrZti9c6vRnFw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -915,8 +850,6 @@ }, "node_modules/@aws-sdk/middleware-location-constraint": { "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.734.0.tgz", - "integrity": "sha512-EJEIXwCQhto/cBfHdm3ZOeLxd2NlJD+X2F+ZTOxzokuhBtY0IONfC/91hOo5tWQweerojwshSMHRCKzRv1tlwg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -930,8 +863,6 @@ }, "node_modules/@aws-sdk/middleware-logger": { "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.734.0.tgz", - "integrity": "sha512-mUMFITpJUW3LcKvFok176eI5zXAUomVtahb9IQBwLzkqFYOrMJvWAvoV4yuxrJ8TlQBG8gyEnkb9SnhZvjg67w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -945,8 +876,6 @@ }, "node_modules/@aws-sdk/middleware-recursion-detection": { "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.734.0.tgz", - "integrity": "sha512-CUat2d9ITsFc2XsmeiRQO96iWpxSKYFjxvj27Hc7vo87YUHRnfMfnc8jw1EpxEwMcvBD7LsRa6vDNky6AjcrFA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -961,8 +890,6 @@ }, "node_modules/@aws-sdk/middleware-sdk-s3": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.758.0.tgz", - "integrity": "sha512-6mJ2zyyHPYSV6bAcaFpsdoXZJeQlR1QgBnZZ6juY/+dcYiuyWCdyLUbGzSZSE7GTfx6i+9+QWFeoIMlWKgU63A==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -987,8 +914,6 @@ }, "node_modules/@aws-sdk/middleware-ssec": { "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.734.0.tgz", - "integrity": "sha512-d4yd1RrPW/sspEXizq2NSOUivnheac6LPeLSLnaeTbBG9g1KqIqvCzP1TfXEqv2CrWfHEsWtJpX7oyjySSPvDQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1002,8 +927,6 @@ }, "node_modules/@aws-sdk/middleware-user-agent": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.758.0.tgz", - "integrity": "sha512-iNyehQXtQlj69JCgfaOssgZD4HeYGOwxcaKeG6F+40cwBjTAi0+Ph1yfDwqk2qiBPIRWJ/9l2LodZbxiBqgrwg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1021,8 +944,6 @@ }, "node_modules/@aws-sdk/nested-clients": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.758.0.tgz", - "integrity": "sha512-YZ5s7PSvyF3Mt2h1EQulCG93uybprNGbBkPmVuy/HMMfbFTt4iL3SbKjxqvOZelm86epFfj7pvK7FliI2WOEcg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1071,8 +992,6 @@ }, "node_modules/@aws-sdk/region-config-resolver": { "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.734.0.tgz", - "integrity": "sha512-Lvj1kPRC5IuJBr9DyJ9T9/plkh+EfKLy+12s/mykOy1JaKHDpvj+XGy2YO6YgYVOb8JFtaqloid+5COtje4JTQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1089,8 +1008,6 @@ }, "node_modules/@aws-sdk/signature-v4-multi-region": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.758.0.tgz", - "integrity": "sha512-0RPCo8fYJcrenJ6bRtiUbFOSgQ1CX/GpvwtLU2Fam1tS9h2klKK8d74caeV6A1mIUvBU7bhyQ0wMGlwMtn3EYw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1107,8 +1024,6 @@ }, "node_modules/@aws-sdk/token-providers": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.758.0.tgz", - "integrity": "sha512-ckptN1tNrIfQUaGWm/ayW1ddG+imbKN7HHhjFdS4VfItsP0QQOB0+Ov+tpgb4MoNR4JaUghMIVStjIeHN2ks1w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1125,8 +1040,6 @@ }, "node_modules/@aws-sdk/types": { "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.734.0.tgz", - "integrity": "sha512-o11tSPTT70nAkGV1fN9wm/hAIiLPyWX6SuGf+9JyTp7S/rC2cFWhR26MvA69nplcjNaXVzB0f+QFrLXXjOqCrg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1139,8 +1052,6 @@ }, "node_modules/@aws-sdk/util-arn-parser": { "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.723.0.tgz", - "integrity": "sha512-ZhEfvUwNliOQROcAk34WJWVYTlTa4694kSVhDSjW6lE1bMataPnIN8A0ycukEzBXmd8ZSoBcQLn6lKGl7XIJ5w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1152,8 +1063,6 @@ }, "node_modules/@aws-sdk/util-endpoints": { "version": "3.743.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.743.0.tgz", - "integrity": "sha512-sN1l559zrixeh5x+pttrnd0A3+r34r0tmPkJ/eaaMaAzXqsmKU/xYre9K3FNnsSS1J1k4PEfk/nHDTVUgFYjnw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1168,8 +1077,6 @@ }, "node_modules/@aws-sdk/util-locate-window": { "version": "3.723.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.723.0.tgz", - "integrity": "sha512-Yf2CS10BqK688DRsrKI/EO6B8ff5J86NXe4C+VCysK7UOgN0l1zOTeTukZ3H8Q9tYYX3oaF1961o8vRkFm7Nmw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1181,8 +1088,6 @@ }, "node_modules/@aws-sdk/util-user-agent-browser": { "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.734.0.tgz", - "integrity": "sha512-xQTCus6Q9LwUuALW+S76OL0jcWtMOVu14q+GoLnWPUM7QeUw963oQcLhF7oq0CtaLLKyl4GOUfcwc773Zmwwng==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1194,8 +1099,6 @@ }, "node_modules/@aws-sdk/util-user-agent-node": { "version": "3.758.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.758.0.tgz", - "integrity": "sha512-A5EZw85V6WhoKMV2hbuFRvb9NPlxEErb4HPO6/SPXYY4QrjprIzScHxikqcWv1w4J3apB1wto9LPU3IMsYtfrw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1219,8 +1122,6 @@ }, "node_modules/@aws-sdk/xml-builder": { "version": "3.734.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.734.0.tgz", - "integrity": "sha512-Zrjxi5qwGEcUsJ0ru7fRtW74WcTS0rbLcehoFB+rN1GRi2hbLcFaYs4PwVA5diLeAJH0gszv3x4Hr/S87MfbKQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1233,8 +1134,6 @@ }, "node_modules/@babel/code-frame": { "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1248,8 +1147,6 @@ }, "node_modules/@babel/compat-data": { "version": "7.26.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", - "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", "dev": true, "license": "MIT", "engines": { @@ -1258,8 +1155,6 @@ }, "node_modules/@babel/core": { "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz", - "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==", "dev": true, "license": "MIT", "dependencies": { @@ -1289,15 +1184,11 @@ }, "node_modules/@babel/core/node_modules/convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, "license": "MIT" }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -1306,8 +1197,6 @@ }, "node_modules/@babel/generator": { "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.9.tgz", - "integrity": "sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==", "dev": true, "license": "MIT", "dependencies": { @@ -1323,8 +1212,6 @@ }, "node_modules/@babel/helper-compilation-targets": { "version": "7.26.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", - "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", "dev": true, "license": "MIT", "dependencies": { @@ -1340,8 +1227,6 @@ }, "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, "license": "ISC", "dependencies": { @@ -1350,8 +1235,6 @@ }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -1360,15 +1243,11 @@ }, "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, "license": "ISC" }, "node_modules/@babel/helper-module-imports": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", "dev": true, "license": "MIT", "dependencies": { @@ -1381,8 +1260,6 @@ }, "node_modules/@babel/helper-module-transforms": { "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", "dev": true, "license": "MIT", "dependencies": { @@ -1399,8 +1276,6 @@ }, "node_modules/@babel/helper-string-parser": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "dev": true, "license": "MIT", "engines": { @@ -1409,8 +1284,6 @@ }, "node_modules/@babel/helper-validator-identifier": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true, "license": "MIT", "engines": { @@ -1419,8 +1292,6 @@ }, "node_modules/@babel/helper-validator-option": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", "dev": true, "license": "MIT", "engines": { @@ -1429,8 +1300,6 @@ }, "node_modules/@babel/helpers": { "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.9.tgz", - "integrity": "sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==", "dev": true, "license": "MIT", "dependencies": { @@ -1443,8 +1312,6 @@ }, "node_modules/@babel/parser": { "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.9.tgz", - "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", "dev": true, "license": "MIT", "dependencies": { @@ -1459,8 +1326,6 @@ }, "node_modules/@babel/template": { "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", - "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", "dev": true, "license": "MIT", "dependencies": { @@ -1474,8 +1339,6 @@ }, "node_modules/@babel/traverse": { "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.9.tgz", - "integrity": "sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==", "dev": true, "license": "MIT", "dependencies": { @@ -1493,8 +1356,6 @@ }, "node_modules/@babel/traverse/node_modules/globals": { "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, "license": "MIT", "engines": { @@ -1503,8 +1364,6 @@ }, "node_modules/@babel/types": { "version": "7.26.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.9.tgz", - "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", "dev": true, "license": "MIT", "dependencies": { @@ -1516,9 +1375,9 @@ } }, "node_modules/@clack/core": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.4.1.tgz", - "integrity": "sha512-Pxhij4UXg8KSr7rPek6Zowm+5M22rbd2g1nfojHJkxp5YkFqiZ2+YLEM/XGVIzvGOcM0nqjIFxrpDwWRZYWYjA==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.5.0.tgz", + "integrity": "sha512-p3y0FIOwaYRUPRcMO7+dlmLh8PSRcrjuTndsiA0WAFbWES0mLZlrjVoBRZ9DzkPFJZG6KGkJmoEAY0ZcVWTkow==", "license": "MIT", "dependencies": { "picocolors": "^1.0.0", @@ -1526,20 +1385,18 @@ } }, "node_modules/@clack/prompts": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-0.10.0.tgz", - "integrity": "sha512-H3rCl6CwW1NdQt9rE3n373t7o5cthPv7yUoxF2ytZvyvlJv89C5RYMJu83Hed8ODgys5vpBU0GKxIRG83jd8NQ==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-0.11.0.tgz", + "integrity": "sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw==", "license": "MIT", "dependencies": { - "@clack/core": "0.4.1", + "@clack/core": "0.5.0", "picocolors": "^1.0.0", "sisteransi": "^1.0.5" } }, "node_modules/@commitlint/cli": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-15.0.0.tgz", - "integrity": "sha512-Y5xmDCweytqzo4N4lOI2YRiuX35xTjcs8n5hUceBH8eyK0YbwtgWX50BJOH2XbkwEmII9blNhlBog6AdQsqicg==", "dev": true, "license": "MIT", "dependencies": { @@ -1562,8 +1419,6 @@ }, "node_modules/@commitlint/config-conventional": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-15.0.0.tgz", - "integrity": "sha512-eZBRL8Lk3hMNHp1wUMYj0qrZQEsST1ai7KHR8J1IDD9aHgT7L2giciibuQ+Og7vxVhR5WtYDvh9xirXFVPaSkQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1575,8 +1430,6 @@ }, "node_modules/@commitlint/ensure": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-15.0.0.tgz", - "integrity": "sha512-7DV4iNIald3vycwaWBNGk5FbonaNzOlU8nBe5m5AgU2dIeNKuXwLm+zzJzG27j0Ho56rgz//3F6RIvmsoxY9ZA==", "dev": true, "license": "MIT", "dependencies": { @@ -1589,8 +1442,6 @@ }, "node_modules/@commitlint/execute-rule": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-15.0.0.tgz", - "integrity": "sha512-pyE4ApxjbWhb1TXz5vRiGwI2ssdMMgZbaaheZq1/7WC0xRnqnIhE1yUC1D2q20qPtvkZPstTYvMiRVtF+DvjUg==", "dev": true, "license": "MIT", "engines": { @@ -1599,8 +1450,6 @@ }, "node_modules/@commitlint/format": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-15.0.0.tgz", - "integrity": "sha512-bPhAfqwRhPk92WiuY0ktEJNpRRHSCd+Eg1MdhGyL9Bl3U25E5zvuInA+dNctnzZiOBSH/37ZaD0eOKCpQE6acg==", "dev": true, "license": "MIT", "dependencies": { @@ -1613,8 +1462,6 @@ }, "node_modules/@commitlint/is-ignored": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-15.0.0.tgz", - "integrity": "sha512-edtnkf2QZ/7e/YCJDgn1WDw9wfF1WfOitW5YEoSOb4SxjJEb/oE87kxNPZ2j8mnDMuunspcMfGHeg6fRlwaEWg==", "dev": true, "license": "MIT", "dependencies": { @@ -1627,8 +1474,6 @@ }, "node_modules/@commitlint/lint": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-15.0.0.tgz", - "integrity": "sha512-hUi2+Im/2dJ5FBvWnodypTkg+5haCgsDzB0fyMApWLUA1IucYUAqRCQCW5em1Mhk9Crw1pd5YzFNikhIclkqCw==", "dev": true, "license": "MIT", "dependencies": { @@ -1643,8 +1488,6 @@ }, "node_modules/@commitlint/load": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-15.0.0.tgz", - "integrity": "sha512-Ak1YPeOhvxmY3ioe0o6m1yLGvUAYb4BdfGgShU8jiTCmU3Mnmms0Xh/kfQz8AybhezCC3AmVTyBLaBZxOHR8kg==", "dev": true, "license": "MIT", "dependencies": { @@ -1664,8 +1507,6 @@ }, "node_modules/@commitlint/load/node_modules/typescript": { "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, "license": "Apache-2.0", "bin": { @@ -1678,8 +1519,6 @@ }, "node_modules/@commitlint/message": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-15.0.0.tgz", - "integrity": "sha512-L8euabzboKavPuDJsdIYAY2wx97LbiGEYsckMo6NmV8pOun50c8hQx6ouXFSAx4pp+mX9yUGmMiVqfrk2LKDJQ==", "dev": true, "license": "MIT", "engines": { @@ -1688,8 +1527,6 @@ }, "node_modules/@commitlint/parse": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-15.0.0.tgz", - "integrity": "sha512-7fweM67tZfBNS7zw1KTuuT5K2u9nGytUJqFqT/1Ln3Na9cBCsoAqR47mfsNOTlRCgGwakm4xiQ7BpS2gN0OGuw==", "dev": true, "license": "MIT", "dependencies": { @@ -1703,8 +1540,6 @@ }, "node_modules/@commitlint/read": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-15.0.0.tgz", - "integrity": "sha512-5yI1o2HKZFVe7RTjL7IhuhHMKar/MDNY34vEHqqz9gMI7BK/rdP8uVb4Di1efl2V0UPnwID0nPKWESjQ8Ti0gw==", "dev": true, "license": "MIT", "dependencies": { @@ -1719,8 +1554,6 @@ }, "node_modules/@commitlint/read/node_modules/fs-extra": { "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1734,8 +1567,6 @@ }, "node_modules/@commitlint/resolve-extends": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-15.0.0.tgz", - "integrity": "sha512-7apfRJjgJsKja7lHsPfEFixKjA/fk/UeD3owkOw1174yYu4u8xBDLSeU3IinGPdMuF9m245eX8wo7vLUy+EBSg==", "dev": true, "license": "MIT", "dependencies": { @@ -1750,8 +1581,6 @@ }, "node_modules/@commitlint/rules": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-15.0.0.tgz", - "integrity": "sha512-SqXfp6QUlwBS+0IZm4FEA/NmmAwcFQIkG3B05BtemOVWXQdZ8j1vV6hDwvA9oMPCmUSrrGpHOtZK7HaHhng2yA==", "dev": true, "license": "MIT", "dependencies": { @@ -1767,8 +1596,6 @@ }, "node_modules/@commitlint/to-lines": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-15.0.0.tgz", - "integrity": "sha512-mY3MNA9ujPqVpiJjTYG9MDsYCobue5PJFO0MfcIzS1mCVvngH8ZFTPAh1fT5t+t1h876boS88+9WgqjRvbYItw==", "dev": true, "license": "MIT", "engines": { @@ -1777,8 +1604,6 @@ }, "node_modules/@commitlint/top-level": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-15.0.0.tgz", - "integrity": "sha512-7Gz3t7xcuuUw1d1Nou6YLaztzp2Em+qZ6YdCzrqYc+aquca3Vt0O696nuiBDU/oE+tls4Hx2CNpAbWhTgEwB5A==", "dev": true, "license": "MIT", "dependencies": { @@ -1790,8 +1615,6 @@ }, "node_modules/@commitlint/types": { "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-15.0.0.tgz", - "integrity": "sha512-OMSLX+QJnyNoTwws54ULv9sOvuw9GdVezln76oyUd4YbMMJyaav62aSXDuCdWyL2sm9hTkSzyEi52PNaIj/vqw==", "dev": true, "license": "MIT", "dependencies": { @@ -1803,8 +1626,6 @@ }, "node_modules/@endemolshinegroup/cosmiconfig-typescript-loader": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@endemolshinegroup/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-3.0.2.tgz", - "integrity": "sha512-QRVtqJuS1mcT56oHpVegkKBlgtWjXw/gHNWO3eL9oyB5Sc7HBoc2OLG/nYpVfT/Jejvo3NUrD0Udk7XgoyDKkA==", "dev": true, "license": "MIT", "dependencies": { @@ -1822,8 +1643,6 @@ }, "node_modules/@endemolshinegroup/cosmiconfig-typescript-loader/node_modules/diff": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -1832,8 +1651,6 @@ }, "node_modules/@endemolshinegroup/cosmiconfig-typescript-loader/node_modules/ts-node": { "version": "9.1.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", - "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", "dev": true, "license": "MIT", "dependencies": { @@ -1859,8 +1676,6 @@ }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", - "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", "dev": true, "license": "MIT", "dependencies": { @@ -1878,8 +1693,6 @@ }, "node_modules/@eslint-community/regexpp": { "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, "license": "MIT", "engines": { @@ -1888,8 +1701,6 @@ }, "node_modules/@eslint/config-array": { "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz", - "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1903,8 +1714,6 @@ }, "node_modules/@eslint/config-array/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "license": "MIT", "dependencies": { @@ -1914,8 +1723,6 @@ }, "node_modules/@eslint/config-array/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -1927,8 +1734,6 @@ }, "node_modules/@eslint/core": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", - "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1940,8 +1745,6 @@ }, "node_modules/@eslint/eslintrc": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.0.tgz", - "integrity": "sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1964,8 +1767,6 @@ }, "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "license": "MIT", "dependencies": { @@ -1975,8 +1776,6 @@ }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -1988,8 +1787,6 @@ }, "node_modules/@eslint/js": { "version": "9.21.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.21.0.tgz", - "integrity": "sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw==", "dev": true, "license": "MIT", "engines": { @@ -1998,8 +1795,6 @@ }, "node_modules/@eslint/object-schema": { "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", - "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2008,8 +1803,6 @@ }, "node_modules/@eslint/plugin-kit": { "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz", - "integrity": "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2022,8 +1815,6 @@ }, "node_modules/@humanfs/core": { "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2032,8 +1823,6 @@ }, "node_modules/@humanfs/node": { "version": "0.16.6", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", - "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2046,8 +1835,6 @@ }, "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", - "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2060,8 +1847,6 @@ }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2074,8 +1859,6 @@ }, "node_modules/@humanwhocodes/retry": { "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", - "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2088,8 +1871,6 @@ }, "node_modules/@inquirer/confirm": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.2.0.tgz", - "integrity": "sha512-oOIwPs0Dvq5220Z8lGL/6LHRTEr9TgLHmiI99Rj1PJ1p1czTys+olrgBqZk4E2qC0YTzeHprxSQmoHioVdJ7Lw==", "dev": true, "license": "MIT", "dependencies": { @@ -2102,8 +1883,6 @@ }, "node_modules/@inquirer/core": { "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.2.1.tgz", - "integrity": "sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==", "dev": true, "license": "MIT", "dependencies": { @@ -2126,8 +1905,6 @@ }, "node_modules/@inquirer/core/node_modules/@inquirer/type": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-2.0.0.tgz", - "integrity": "sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==", "dev": true, "license": "MIT", "dependencies": { @@ -2139,8 +1916,6 @@ }, "node_modules/@inquirer/core/node_modules/@types/node": { "version": "22.13.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.9.tgz", - "integrity": "sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==", "dev": true, "license": "MIT", "dependencies": { @@ -2149,8 +1924,6 @@ }, "node_modules/@inquirer/core/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==", "dev": true, "license": "MIT", "engines": { @@ -2159,8 +1932,6 @@ }, "node_modules/@inquirer/core/node_modules/signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "license": "ISC", "engines": { @@ -2172,8 +1943,6 @@ }, "node_modules/@inquirer/core/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==", "dev": true, "license": "MIT", "dependencies": { @@ -2185,8 +1954,6 @@ }, "node_modules/@inquirer/core/node_modules/wrap-ansi": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "license": "MIT", "dependencies": { @@ -2200,8 +1967,6 @@ }, "node_modules/@inquirer/figures": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.10.tgz", - "integrity": "sha512-Ey6176gZmeqZuY/W/nZiUyvmb1/qInjcpiZjXWi6nON+nxJpD1bxtSoBxNliGISae32n6OwbY+TSXPZ1CfS4bw==", "license": "MIT", "engines": { "node": ">=18" @@ -2209,8 +1974,6 @@ }, "node_modules/@inquirer/input": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-2.3.0.tgz", - "integrity": "sha512-XfnpCStx2xgh1LIRqPXrTNEEByqQWoxsWYzNRSEUxJ5c6EQlhMogJ3vHKu8aXuTacebtaZzMAHwEL0kAflKOBw==", "dev": true, "license": "MIT", "dependencies": { @@ -2223,8 +1986,6 @@ }, "node_modules/@inquirer/select": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-2.5.0.tgz", - "integrity": "sha512-YmDobTItPP3WcEI86GvPo+T2sRHkxxOq/kXmsBjHS5BVXUgvgZ5AfJjkvQvZr03T81NnI3KrrRuMzeuYUQRFOA==", "dev": true, "license": "MIT", "dependencies": { @@ -2240,8 +2001,6 @@ }, "node_modules/@inquirer/type": { "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.5.tgz", - "integrity": "sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==", "dev": true, "license": "MIT", "dependencies": { @@ -2253,8 +2012,6 @@ }, "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==", "license": "ISC", "dependencies": { "string-width": "^5.1.2", @@ -2270,8 +2027,6 @@ }, "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==", "license": "MIT", "engines": { "node": ">=12" @@ -2282,14 +2037,10 @@ }, "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==", "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", @@ -2305,8 +2056,6 @@ }, "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==", "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", @@ -2322,8 +2071,6 @@ }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "license": "ISC", "dependencies": { @@ -2339,8 +2086,6 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "license": "MIT", "dependencies": { @@ -2349,8 +2094,6 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", "dependencies": { @@ -2363,8 +2106,6 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "license": "MIT", "dependencies": { @@ -2377,8 +2118,6 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", "dependencies": { @@ -2390,8 +2129,6 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", "dependencies": { @@ -2406,8 +2143,6 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", "dependencies": { @@ -2419,8 +2154,6 @@ }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, "license": "MIT", "engines": { @@ -2429,8 +2162,6 @@ }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", "dev": true, "license": "MIT", "dependencies": { @@ -2444,8 +2175,6 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "license": "MIT", "engines": { @@ -2454,8 +2183,6 @@ }, "node_modules/@jridgewell/set-array": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, "license": "MIT", "engines": { @@ -2464,15 +2191,11 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2482,8 +2205,6 @@ }, "node_modules/@kwsites/file-exists": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", - "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", "license": "MIT", "dependencies": { "debug": "^4.1.1" @@ -2491,14 +2212,28 @@ }, "node_modules/@kwsites/promise-deferred": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", - "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", "license": "MIT" }, + "node_modules/@mswjs/interceptors": { + "version": "0.38.6", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.38.6.tgz", + "integrity": "sha512-qFlpmObPqeUs4u3oFYv/OM/xyX+pNa5TRAjqjvMhbGYlyMhzSrE5UfncL2rUcEeVfD9Gebgff73hPwqcOwJQNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@open-draft/deferred-promise": "^2.2.0", + "@open-draft/logger": "^0.3.0", + "@open-draft/until": "^2.0.0", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.3", + "strict-event-emitter": "^0.5.1" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", @@ -2510,8 +2245,6 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "license": "MIT", "engines": { "node": ">= 8" @@ -2519,8 +2252,6 @@ }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", @@ -2532,8 +2263,6 @@ }, "node_modules/@oclif/core": { "version": "4.2.8", - "resolved": "https://registry.npmjs.org/@oclif/core/-/core-4.2.8.tgz", - "integrity": "sha512-OWv4Va6bERxIhrYcnUGzyhGRqktc64lJO6cZ3UwkzJDpfR8ZrbCxRfKRBBah1i8kzUlOAeAXnpbMBMah3skKwA==", "license": "MIT", "dependencies": { "ansi-escapes": "^4.3.2", @@ -2561,8 +2290,6 @@ }, "node_modules/@oclif/core/node_modules/semver": { "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -2573,8 +2300,6 @@ }, "node_modules/@oclif/plugin-autocomplete": { "version": "3.2.24", - "resolved": "https://registry.npmjs.org/@oclif/plugin-autocomplete/-/plugin-autocomplete-3.2.24.tgz", - "integrity": "sha512-KGz7ypHhahRJWy0sB+mNvLLJiMWEt4pgjCFIpcBhkZhc090H4e4QhGR6Xp2430rQgStPcnUa0BYcVZJPojAsDQ==", "license": "MIT", "dependencies": { "@oclif/core": "^4", @@ -2588,8 +2313,6 @@ }, "node_modules/@oclif/plugin-help": { "version": "6.2.26", - "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-6.2.26.tgz", - "integrity": "sha512-5KdldxEizbV3RsHOddN4oMxrX/HL6z79S94tbxEHVZ/dJKDWzfyCpgC9axNYqwmBF2pFZkozl/l7t3hCGOdalw==", "license": "MIT", "dependencies": { "@oclif/core": "^4" @@ -2600,8 +2323,6 @@ }, "node_modules/@oclif/plugin-not-found": { "version": "3.2.44", - "resolved": "https://registry.npmjs.org/@oclif/plugin-not-found/-/plugin-not-found-3.2.44.tgz", - "integrity": "sha512-UF6GD/aDbElP6LJMZSSq72NvK0aQwtQ+fkjn0VLU9o1vNAA3M2K0tGL7lduZGQNw8LejOhr25eR4aXeRCgKb2A==", "license": "MIT", "dependencies": { "@inquirer/prompts": "^7.3.2", @@ -2615,8 +2336,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/checkbox": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.1.2.tgz", - "integrity": "sha512-PL9ixC5YsPXzXhAZFUPmkXGxfgjkdfZdPEPPmt4kFwQ4LBMDG9n/nHXYRGGZSKZJs+d1sGKWgS2GiPzVRKUdtQ==", "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.7", @@ -2639,8 +2358,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/confirm": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.6.tgz", - "integrity": "sha512-6ZXYK3M1XmaVBZX6FCfChgtponnL0R6I7k8Nu+kaoNkT828FVZTcca1MqmWQipaW2oNREQl5AaPCUOOCVNdRMw==", "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.7", @@ -2660,8 +2377,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/core": { "version": "10.1.7", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.7.tgz", - "integrity": "sha512-AA9CQhlrt6ZgiSy6qoAigiA1izOa751ugX6ioSjqgJ+/Gd+tEN/TORk5sUYNjXuHWfW0r1n/a6ak4u/NqHHrtA==", "license": "MIT", "dependencies": { "@inquirer/figures": "^1.0.10", @@ -2687,8 +2402,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/editor": { "version": "4.2.7", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.7.tgz", - "integrity": "sha512-gktCSQtnSZHaBytkJKMKEuswSk2cDBuXX5rxGFv306mwHfBPjg5UAldw9zWGoEyvA9KpRDkeM4jfrx0rXn0GyA==", "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.7", @@ -2709,8 +2422,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/expand": { "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.9.tgz", - "integrity": "sha512-Xxt6nhomWTAmuSX61kVgglLjMEFGa+7+F6UUtdEUeg7fg4r9vaFttUUKrtkViYYrQBA5Ia1tkOJj2koP9BuLig==", "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.7", @@ -2731,8 +2442,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/input": { "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.1.6.tgz", - "integrity": "sha512-1f5AIsZuVjPT4ecA8AwaxDFNHny/tSershP/cTvTDxLdiIGTeILNcKozB0LaYt6mojJLUbOYhpIxicaYf7UKIQ==", "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.7", @@ -2752,8 +2461,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/number": { "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.9.tgz", - "integrity": "sha512-iN2xZvH3tyIYXLXBvlVh0npk1q/aVuKXZo5hj+K3W3D4ngAEq/DkLpofRzx6oebTUhBvOgryZ+rMV0yImKnG3w==", "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.7", @@ -2773,8 +2480,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/password": { "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.9.tgz", - "integrity": "sha512-xBEoOw1XKb0rIN208YU7wM7oJEHhIYkfG7LpTJAEW913GZeaoQerzf5U/LSHI45EVvjAdgNXmXgH51cUXKZcJQ==", "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.7", @@ -2795,8 +2500,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/prompts": { "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.3.2.tgz", - "integrity": "sha512-G1ytyOoHh5BphmEBxSwALin3n1KGNYB6yImbICcRQdzXfOGbuJ9Jske/Of5Sebk339NSGGNfUshnzK8YWkTPsQ==", "license": "MIT", "dependencies": { "@inquirer/checkbox": "^4.1.2", @@ -2824,8 +2527,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/rawlist": { "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.0.9.tgz", - "integrity": "sha512-+5t6ebehKqgoxV8fXwE49HkSF2Rc9ijNiVGEQZwvbMI61/Q5RcD+jWD6Gs1tKdz5lkI8GRBL31iO0HjGK1bv+A==", "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.7", @@ -2846,8 +2547,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/search": { "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.0.9.tgz", - "integrity": "sha512-DWmKztkYo9CvldGBaRMr0ETUHgR86zE6sPDVOHsqz4ISe9o1LuiWfgJk+2r75acFclA93J/lqzhT0dTjCzHuoA==", "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.7", @@ -2869,8 +2568,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/select": { "version": "4.0.9", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.0.9.tgz", - "integrity": "sha512-BpJyJe7Dkhv2kz7yG7bPSbJLQuu/rqyNlF1CfiiFeFwouegfH+zh13KDyt6+d9DwucKo7hqM3wKLLyJxZMO+Xg==", "license": "MIT", "dependencies": { "@inquirer/core": "^10.1.7", @@ -2893,8 +2590,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/@inquirer/type": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.4.tgz", - "integrity": "sha512-2MNFrDY8jkFYc9Il9DgLsHhMzuHnOYM1+CUYVWbzu9oT0hC7V7EcYvdCKeoll/Fcci04A+ERZ9wcc7cQ8lTkIA==", "license": "MIT", "engines": { "node": ">=18" @@ -2910,8 +2605,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/@types/node": { "version": "22.13.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.9.tgz", - "integrity": "sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==", "license": "MIT", "optional": true, "peer": true, @@ -2921,8 +2614,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "license": "MIT", "engines": { "node": ">=8" @@ -2930,8 +2621,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/mute-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", - "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", "license": "ISC", "engines": { "node": "^18.17.0 || >=20.5.0" @@ -2939,8 +2628,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "license": "ISC", "engines": { "node": ">=14" @@ -2951,8 +2638,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -2963,8 +2648,6 @@ }, "node_modules/@oclif/plugin-not-found/node_modules/wrap-ansi": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -2977,8 +2660,6 @@ }, "node_modules/@oclif/plugin-warn-if-update-available": { "version": "3.1.35", - "resolved": "https://registry.npmjs.org/@oclif/plugin-warn-if-update-available/-/plugin-warn-if-update-available-3.1.35.tgz", - "integrity": "sha512-gQfFW0UfT3msq/3O3idgBq4CA3cyXzFtrkoG7MK4FXVK0wxIdG0EVgJn4/o3jqjWO7t+93siCXyq56CGTGUZWQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2994,14 +2675,14 @@ } }, "node_modules/@oclif/test": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/@oclif/test/-/test-4.1.11.tgz", - "integrity": "sha512-j689R13E2so1Rj6jJUfQ67yJ4N7u6L5KFzv87cvUfD9AZ79xAtCxGrd34/iOLUDJmv1huFt/0QumBcjKoWUSYw==", + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@oclif/test/-/test-4.1.13.tgz", + "integrity": "sha512-pulrTiJRhoAKizFf6y5WeHvM2JyoRiZKV0H8qqYEoE0UHDKqInNmfGJyp8Ip6lTVQeMv1U8YCAXOS/HiWPVWeg==", "dev": true, "license": "MIT", "dependencies": { - "ansis": "^3.16.0", - "debug": "^4.4.0" + "ansis": "^3.17.0", + "debug": "^4.4.1" }, "engines": { "node": ">=18.0.0" @@ -3010,10 +2691,33 @@ "@oclif/core": ">= 3.0.0" } }, + "node_modules/@open-draft/deferred-promise": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", + "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@open-draft/logger": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz", + "integrity": "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-node-process": "^1.2.0", + "outvariant": "^1.4.0" + } + }, + "node_modules/@open-draft/until": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz", + "integrity": "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==", + "dev": true, + "license": "MIT" + }, "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==", "license": "MIT", "optional": true, "engines": { @@ -3022,8 +2726,6 @@ }, "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==", "dev": true, "license": "MIT", "engines": { @@ -3032,8 +2734,6 @@ }, "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==", "dev": true, "license": "MIT", "dependencies": { @@ -3045,15 +2745,11 @@ }, "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true, "license": "ISC" }, "node_modules/@pnpm/npm-conf": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", - "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", "dev": true, "license": "MIT", "dependencies": { @@ -3067,15 +2763,11 @@ }, "node_modules/@rtsao/scc": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", "dev": true, "license": "MIT" }, "node_modules/@sindresorhus/is": { "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", - "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", "dev": true, "license": "MIT", "engines": { @@ -3087,8 +2779,6 @@ }, "node_modules/@smithy/abort-controller": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.1.tgz", - "integrity": "sha512-fiUIYgIgRjMWznk6iLJz35K2YxSLHzLBA/RC6lBrKfQ8fHbPfvk7Pk9UvpKoHgJjI18MnbPuEju53zcVy6KF1g==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3101,8 +2791,6 @@ }, "node_modules/@smithy/chunked-blob-reader": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.0.0.tgz", - "integrity": "sha512-+sKqDBQqb036hh4NPaUiEkYFkTUGYzRsn3EuFhyfQfMy6oGHEUJDurLP9Ufb5dasr/XiAmPNMr6wa9afjQB+Gw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3114,8 +2802,6 @@ }, "node_modules/@smithy/chunked-blob-reader-native": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.0.0.tgz", - "integrity": "sha512-R9wM2yPmfEMsUmlMlIgSzOyICs0x9uu7UTHoccMyt7BWw8shcGM8HqB355+BZCPBcySvbTYMs62EgEQkNxz2ig==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3128,8 +2814,6 @@ }, "node_modules/@smithy/config-resolver": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.0.1.tgz", - "integrity": "sha512-Igfg8lKu3dRVkTSEm98QpZUvKEOa71jDX4vKRcvJVyRc3UgN3j7vFMf0s7xLQhYmKa8kyJGQgUJDOV5V3neVlQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3145,8 +2829,6 @@ }, "node_modules/@smithy/core": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.1.5.tgz", - "integrity": "sha512-HLclGWPkCsekQgsyzxLhCQLa8THWXtB5PxyYN+2O6nkyLt550KQKTlbV2D1/j5dNIQapAZM1+qFnpBFxZQkgCA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3165,8 +2847,6 @@ }, "node_modules/@smithy/credential-provider-imds": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.1.tgz", - "integrity": "sha512-l/qdInaDq1Zpznpmev/+52QomsJNZ3JkTl5yrTl02V6NBgJOQ4LY0SFw/8zsMwj3tLe8vqiIuwF6nxaEwgf6mg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3182,8 +2862,6 @@ }, "node_modules/@smithy/eventstream-codec": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.0.1.tgz", - "integrity": "sha512-Q2bCAAR6zXNVtJgifsU16ZjKGqdw/DyecKNgIgi7dlqw04fqDu0mnq+JmGphqheypVc64CYq3azSuCpAdFk2+A==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3198,8 +2876,6 @@ }, "node_modules/@smithy/eventstream-serde-browser": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.0.1.tgz", - "integrity": "sha512-HbIybmz5rhNg+zxKiyVAnvdM3vkzjE6ccrJ620iPL8IXcJEntd3hnBl+ktMwIy12Te/kyrSbUb8UCdnUT4QEdA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3213,8 +2889,6 @@ }, "node_modules/@smithy/eventstream-serde-config-resolver": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.0.1.tgz", - "integrity": "sha512-lSipaiq3rmHguHa3QFF4YcCM3VJOrY9oq2sow3qlhFY+nBSTF/nrO82MUQRPrxHQXA58J5G1UnU2WuJfi465BA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3227,8 +2901,6 @@ }, "node_modules/@smithy/eventstream-serde-node": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.0.1.tgz", - "integrity": "sha512-o4CoOI6oYGYJ4zXo34U8X9szDe3oGjmHgsMGiZM0j4vtNoT+h80TLnkUcrLZR3+E6HIxqW+G+9WHAVfl0GXK0Q==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3242,8 +2914,6 @@ }, "node_modules/@smithy/eventstream-serde-universal": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.0.1.tgz", - "integrity": "sha512-Z94uZp0tGJuxds3iEAZBqGU2QiaBHP4YytLUjwZWx+oUeohCsLyUm33yp4MMBmhkuPqSbQCXq5hDet6JGUgHWA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3257,8 +2927,6 @@ }, "node_modules/@smithy/fetch-http-handler": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.1.tgz", - "integrity": "sha512-3aS+fP28urrMW2KTjb6z9iFow6jO8n3MFfineGbndvzGZit3taZhKWtTorf+Gp5RpFDDafeHlhfsGlDCXvUnJA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3274,8 +2942,6 @@ }, "node_modules/@smithy/hash-blob-browser": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.0.1.tgz", - "integrity": "sha512-rkFIrQOKZGS6i1D3gKJ8skJ0RlXqDvb1IyAphksaFOMzkn3v3I1eJ8m7OkLj0jf1McP63rcCEoLlkAn/HjcTRw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3290,8 +2956,6 @@ }, "node_modules/@smithy/hash-node": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.1.tgz", - "integrity": "sha512-TJ6oZS+3r2Xu4emVse1YPB3Dq3d8RkZDKcPr71Nj/lJsdAP1c7oFzYqEn1IBc915TsgLl2xIJNuxCz+gLbLE0w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3306,8 +2970,6 @@ }, "node_modules/@smithy/hash-stream-node": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.0.1.tgz", - "integrity": "sha512-U1rAE1fxmReCIr6D2o/4ROqAQX+GffZpyMt3d7njtGDr2pUNmAKRWa49gsNVhCh2vVAuf3wXzWwNr2YN8PAXIw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3321,8 +2983,6 @@ }, "node_modules/@smithy/invalid-dependency": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.1.tgz", - "integrity": "sha512-gdudFPf4QRQ5pzj7HEnu6FhKRi61BfH/Gk5Yf6O0KiSbr1LlVhgjThcvjdu658VE6Nve8vaIWB8/fodmS1rBPQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3335,8 +2995,6 @@ }, "node_modules/@smithy/is-array-buffer": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz", - "integrity": "sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3348,8 +3006,6 @@ }, "node_modules/@smithy/md5-js": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.0.1.tgz", - "integrity": "sha512-HLZ647L27APi6zXkZlzSFZIjpo8po45YiyjMGJZM3gyDY8n7dPGdmxIIljLm4gPt/7rRvutLTTkYJpZVfG5r+A==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3363,8 +3019,6 @@ }, "node_modules/@smithy/middleware-content-length": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.1.tgz", - "integrity": "sha512-OGXo7w5EkB5pPiac7KNzVtfCW2vKBTZNuCctn++TTSOMpe6RZO/n6WEC1AxJINn3+vWLKW49uad3lo/u0WJ9oQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3378,8 +3032,6 @@ }, "node_modules/@smithy/middleware-endpoint": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.0.6.tgz", - "integrity": "sha512-ftpmkTHIFqgaFugcjzLZv3kzPEFsBFSnq1JsIkr2mwFzCraZVhQk2gqN51OOeRxqhbPTkRFj39Qd2V91E/mQxg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3398,8 +3050,6 @@ }, "node_modules/@smithy/middleware-retry": { "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.0.7.tgz", - "integrity": "sha512-58j9XbUPLkqAcV1kHzVX/kAR16GT+j7DUZJqwzsxh1jtz7G82caZiGyyFgUvogVfNTg3TeAOIJepGc8TXF4AVQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3419,8 +3069,6 @@ }, "node_modules/@smithy/middleware-retry/node_modules/uuid": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", "dev": true, "funding": [ "https://github.com/sponsors/broofa", @@ -3433,8 +3081,6 @@ }, "node_modules/@smithy/middleware-serde": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.2.tgz", - "integrity": "sha512-Sdr5lOagCn5tt+zKsaW+U2/iwr6bI9p08wOkCp6/eL6iMbgdtc2R5Ety66rf87PeohR0ExI84Txz9GYv5ou3iQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3447,8 +3093,6 @@ }, "node_modules/@smithy/middleware-stack": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.1.tgz", - "integrity": "sha512-dHwDmrtR/ln8UTHpaIavRSzeIk5+YZTBtLnKwDW3G2t6nAupCiQUvNzNoHBpik63fwUaJPtlnMzXbQrNFWssIA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3461,8 +3105,6 @@ }, "node_modules/@smithy/node-config-provider": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.0.1.tgz", - "integrity": "sha512-8mRTjvCtVET8+rxvmzRNRR0hH2JjV0DFOmwXPrISmTIJEfnCBugpYYGAsCj8t41qd+RB5gbheSQ/6aKZCQvFLQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3477,8 +3119,6 @@ }, "node_modules/@smithy/node-http-handler": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.3.tgz", - "integrity": "sha512-dYCLeINNbYdvmMLtW0VdhW1biXt+PPCGazzT5ZjKw46mOtdgToQEwjqZSS9/EN8+tNs/RO0cEWG044+YZs97aA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3494,8 +3134,6 @@ }, "node_modules/@smithy/property-provider": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.1.tgz", - "integrity": "sha512-o+VRiwC2cgmk/WFV0jaETGOtX16VNPp2bSQEzu0whbReqE1BMqsP2ami2Vi3cbGVdKu1kq9gQkDAGKbt0WOHAQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3508,8 +3146,6 @@ }, "node_modules/@smithy/protocol-http": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.0.1.tgz", - "integrity": "sha512-TE4cpj49jJNB/oHyh/cRVEgNZaoPaxd4vteJNB0yGidOCVR0jCw/hjPVsT8Q8FRmj8Bd3bFZt8Dh7xGCT+xMBQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3522,8 +3158,6 @@ }, "node_modules/@smithy/querystring-builder": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.1.tgz", - "integrity": "sha512-wU87iWZoCbcqrwszsOewEIuq+SU2mSoBE2CcsLwE0I19m0B2gOJr1MVjxWcDQYOzHbR1xCk7AcOBbGFUYOKvdg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3537,8 +3171,6 @@ }, "node_modules/@smithy/querystring-parser": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.1.tgz", - "integrity": "sha512-Ma2XC7VS9aV77+clSFylVUnPZRindhB7BbmYiNOdr+CHt/kZNJoPP0cd3QxCnCFyPXC4eybmyE98phEHkqZ5Jw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3551,8 +3183,6 @@ }, "node_modules/@smithy/service-error-classification": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.1.tgz", - "integrity": "sha512-3JNjBfOWpj/mYfjXJHB4Txc/7E4LVq32bwzE7m28GN79+M1f76XHflUaSUkhOriprPDzev9cX/M+dEB80DNDKA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3564,8 +3194,6 @@ }, "node_modules/@smithy/shared-ini-file-loader": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.1.tgz", - "integrity": "sha512-hC8F6qTBbuHRI/uqDgqqi6J0R4GtEZcgrZPhFQnMhfJs3MnUTGSnR1NSJCJs5VWlMydu0kJz15M640fJlRsIOw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3578,8 +3206,6 @@ }, "node_modules/@smithy/signature-v4": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.0.1.tgz", - "integrity": "sha512-nCe6fQ+ppm1bQuw5iKoeJ0MJfz2os7Ic3GBjOkLOPtavbD1ONoyE3ygjBfz2ythFWm4YnRm6OxW+8p/m9uCoIA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3598,8 +3224,6 @@ }, "node_modules/@smithy/smithy-client": { "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.1.6.tgz", - "integrity": "sha512-UYDolNg6h2O0L+cJjtgSyKKvEKCOa/8FHYJnBobyeoeWDmNpXjwOAtw16ezyeu1ETuuLEOZbrynK0ZY1Lx9Jbw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3617,8 +3241,6 @@ }, "node_modules/@smithy/types": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.1.0.tgz", - "integrity": "sha512-enhjdwp4D7CXmwLtD6zbcDMbo6/T6WtuuKCY49Xxc6OMOmUWlBEBDREsxxgV2LIdeQPW756+f97GzcgAwp3iLw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3630,8 +3252,6 @@ }, "node_modules/@smithy/url-parser": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.1.tgz", - "integrity": "sha512-gPXcIEUtw7VlK8f/QcruNXm7q+T5hhvGu9tl63LsJPZ27exB6dtNwvh2HIi0v7JcXJ5emBxB+CJxwaLEdJfA+g==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3645,8 +3265,6 @@ }, "node_modules/@smithy/util-base64": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.0.0.tgz", - "integrity": "sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3660,8 +3278,6 @@ }, "node_modules/@smithy/util-body-length-browser": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz", - "integrity": "sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3673,8 +3289,6 @@ }, "node_modules/@smithy/util-body-length-node": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz", - "integrity": "sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3686,8 +3300,6 @@ }, "node_modules/@smithy/util-buffer-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz", - "integrity": "sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3700,8 +3312,6 @@ }, "node_modules/@smithy/util-config-provider": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz", - "integrity": "sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3713,8 +3323,6 @@ }, "node_modules/@smithy/util-defaults-mode-browser": { "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.7.tgz", - "integrity": "sha512-CZgDDrYHLv0RUElOsmZtAnp1pIjwDVCSuZWOPhIOBvG36RDfX1Q9+6lS61xBf+qqvHoqRjHxgINeQz47cYFC2Q==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3730,8 +3338,6 @@ }, "node_modules/@smithy/util-defaults-mode-node": { "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.7.tgz", - "integrity": "sha512-79fQW3hnfCdrfIi1soPbK3zmooRFnLpSx3Vxi6nUlqaaQeC5dm8plt4OTNDNqEEEDkvKghZSaoti684dQFVrGQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3749,8 +3355,6 @@ }, "node_modules/@smithy/util-endpoints": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.1.tgz", - "integrity": "sha512-zVdUENQpdtn9jbpD9SCFK4+aSiavRb9BxEtw9ZGUR1TYo6bBHbIoi7VkrFQ0/RwZlzx0wRBaRmPclj8iAoJCLA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3764,8 +3368,6 @@ }, "node_modules/@smithy/util-hex-encoding": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz", - "integrity": "sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3777,8 +3379,6 @@ }, "node_modules/@smithy/util-middleware": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.1.tgz", - "integrity": "sha512-HiLAvlcqhbzhuiOa0Lyct5IIlyIz0PQO5dnMlmQ/ubYM46dPInB+3yQGkfxsk6Q24Y0n3/JmcA1v5iEhmOF5mA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3791,8 +3391,6 @@ }, "node_modules/@smithy/util-retry": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.1.tgz", - "integrity": "sha512-WmRHqNVwn3kI3rKk1LsKcVgPBG6iLTBGC1iYOV3GQegwJ3E8yjzHytPt26VNzOWr1qu0xE03nK0Ug8S7T7oufw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3806,8 +3404,6 @@ }, "node_modules/@smithy/util-stream": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.1.2.tgz", - "integrity": "sha512-44PKEqQ303d3rlQuiDpcCcu//hV8sn+u2JBo84dWCE0rvgeiVl0IlLMagbU++o0jCWhYCsHaAt9wZuZqNe05Hw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3826,8 +3422,6 @@ }, "node_modules/@smithy/util-uri-escape": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz", - "integrity": "sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3839,8 +3433,6 @@ }, "node_modules/@smithy/util-utf8": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz", - "integrity": "sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3853,8 +3445,6 @@ }, "node_modules/@smithy/util-waiter": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.0.2.tgz", - "integrity": "sha512-piUTHyp2Axx3p/kc2CIJkYSv0BAaheBQmbACZgQSSfWUumWNW+R1lL+H9PDBxKJkvOeEX+hKYEFiwO8xagL8AQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3868,8 +3458,6 @@ }, "node_modules/@szmarczak/http-timer": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", "dev": true, "license": "MIT", "dependencies": { @@ -3881,14 +3469,10 @@ }, "node_modules/@tokenizer/token": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", - "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", "license": "MIT" }, "node_modules/@types/adm-zip": { "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@types/adm-zip/-/adm-zip-0.5.7.tgz", - "integrity": "sha512-DNEs/QvmyRLurdQPChqq0Md4zGvPwHerAJYWk9l2jCbD1VPpnzRJorOdiq4zsw09NFbYnhfsoEhWtxIzXpn2yw==", "dev": true, "license": "MIT", "dependencies": { @@ -3897,8 +3481,6 @@ }, "node_modules/@types/archiver": { "version": "5.3.4", - "resolved": "https://registry.npmjs.org/@types/archiver/-/archiver-5.3.4.tgz", - "integrity": "sha512-Lj7fLBIMwYFgViVVZHEdExZC3lVYsl+QL0VmdNdIzGZH544jHveYWij6qdnBgJQDnR7pMKliN9z2cPZFEbhyPw==", "dev": true, "license": "MIT", "dependencies": { @@ -3907,15 +3489,11 @@ }, "node_modules/@types/base-64": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/base-64/-/base-64-1.0.2.tgz", - "integrity": "sha512-uPgKMmM9fmn7I+Zi6YBqctOye4SlJsHKcisjHIMWpb2YKZRc36GpKyNuQ03JcT+oNXg1m7Uv4wU94EVltn8/cw==", "dev": true, "license": "MIT" }, "node_modules/@types/body-parser": { "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "dev": true, "license": "MIT", "dependencies": { @@ -3932,8 +3510,6 @@ }, "node_modules/@types/connect": { "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, "license": "MIT", "dependencies": { @@ -3942,8 +3518,6 @@ }, "node_modules/@types/connect-livereload": { "version": "0.5.32", - "resolved": "https://registry.npmjs.org/@types/connect-livereload/-/connect-livereload-0.5.32.tgz", - "integrity": "sha512-2x/n+cMGdnumlUyktVY2qrZn+OMBjrmmFEAZlbe3AXG5nk3qguvdw3vVvd54orFLd3UrmV7vOK7vcXlqzGEf2w==", "dev": true, "license": "MIT", "dependencies": { @@ -3952,15 +3526,11 @@ }, "node_modules/@types/estree": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", "dev": true, "license": "MIT" }, "node_modules/@types/express": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3972,8 +3542,6 @@ }, "node_modules/@types/express-serve-static-core": { "version": "4.19.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", - "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", "dev": true, "license": "MIT", "dependencies": { @@ -3985,8 +3553,6 @@ }, "node_modules/@types/fs-extra": { "version": "9.0.13", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", - "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", "dev": true, "license": "MIT", "dependencies": { @@ -3995,36 +3561,26 @@ }, "node_modules/@types/http-cache-semantics": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", "dev": true, "license": "MIT" }, "node_modules/@types/http-errors": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", "dev": true, "license": "MIT" }, "node_modules/@types/json-schema": { "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true, "license": "MIT" }, "node_modules/@types/json5": { "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true, "license": "MIT" }, "node_modules/@types/livereload": { "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@types/livereload/-/livereload-0.9.5.tgz", - "integrity": "sha512-2RXcRKdivPmn67pwjytvHoRv46AeXaLYVUWA0zkel1XSAOH5i71G0KfUdE5u3g80T155gR3Fo3ilVaqparLsVA==", "dev": true, "license": "MIT", "dependencies": { @@ -4033,29 +3589,21 @@ }, "node_modules/@types/mime": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", "dev": true, "license": "MIT" }, "node_modules/@types/minimist": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", "dev": true, "license": "MIT" }, "node_modules/@types/mocha": { "version": "5.2.7", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", - "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==", "dev": true, "license": "MIT" }, "node_modules/@types/mute-stream": { "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz", - "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==", "dev": true, "license": "MIT", "dependencies": { @@ -4063,44 +3611,44 @@ } }, "node_modules/@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", + "version": "20.17.50", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.50.tgz", + "integrity": "sha512-Mxiq0ULv/zo1OzOhwPqOA13I81CV/W3nvd3ChtQZRT5Cwz3cr0FKo/wMSsbTqL3EXpaBAEQhva2B8ByRkOIh9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/node/node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", "dev": true, "license": "MIT" }, "node_modules/@types/normalize-package-data": { "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true, "license": "MIT" }, "node_modules/@types/parse-json": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", - "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", "dev": true, "license": "MIT" }, "node_modules/@types/qs": { "version": "6.9.18", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", - "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", "dev": true, "license": "MIT" }, "node_modules/@types/range-parser": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", "dev": true, "license": "MIT" }, "node_modules/@types/readdir-glob": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@types/readdir-glob/-/readdir-glob-1.1.5.tgz", - "integrity": "sha512-raiuEPUYqXu+nvtY2Pe8s8FEmZ3x5yAH4VkLdihcPdalvsHltomrRC9BzuStrJ9yk06470hS0Crw0f1pXqD+Hg==", "dev": true, "license": "MIT", "dependencies": { @@ -4109,8 +3657,6 @@ }, "node_modules/@types/send": { "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", "dev": true, "license": "MIT", "dependencies": { @@ -4120,8 +3666,6 @@ }, "node_modules/@types/serve-static": { "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", "dev": true, "license": "MIT", "dependencies": { @@ -4132,15 +3676,11 @@ }, "node_modules/@types/treeify": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@types/treeify/-/treeify-1.0.3.tgz", - "integrity": "sha512-hx0o7zWEUU4R2Amn+pjCBQQt23Khy/Dk56gQU5xi5jtPL1h83ACJCeFaB2M/+WO1AntvWrSoVnnCAfI1AQH4Cg==", "dev": true, "license": "MIT" }, "node_modules/@types/unzipper": { "version": "0.10.11", - "resolved": "https://registry.npmjs.org/@types/unzipper/-/unzipper-0.10.11.tgz", - "integrity": "sha512-D25im2zjyMCcgL9ag6N46+wbtJBnXIr7SI4zHf9eJD2Dw2tEB5e+p5MYkrxKIVRscs5QV0EhtU9rgXSPx90oJg==", "dev": true, "license": "MIT", "dependencies": { @@ -4149,15 +3689,11 @@ }, "node_modules/@types/wrap-ansi": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz", - "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==", "dev": true, "license": "MIT" }, "node_modules/@types/ws": { "version": "8.5.14", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.14.tgz", - "integrity": "sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==", "dev": true, "license": "MIT", "dependencies": { @@ -4166,8 +3702,6 @@ }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.26.0.tgz", - "integrity": "sha512-cLr1J6pe56zjKYajK6SSSre6nl1Gj6xDp1TY0trpgPzjVbgDwd09v2Ws37LABxzkicmUjhEeg/fAUjPJJB1v5Q==", "dev": true, "license": "MIT", "dependencies": { @@ -4196,8 +3730,6 @@ }, "node_modules/@typescript-eslint/parser": { "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.26.0.tgz", - "integrity": "sha512-mNtXP9LTVBy14ZF3o7JG69gRPBK/2QWtQd0j0oH26HcY/foyJJau6pNUez7QrM5UHnSvwlQcJXKsk0I99B9pOA==", "dev": true, "license": "MIT", "dependencies": { @@ -4221,8 +3753,6 @@ }, "node_modules/@typescript-eslint/scope-manager": { "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.26.0.tgz", - "integrity": "sha512-E0ntLvsfPqnPwng8b8y4OGuzh/iIOm2z8U3S9zic2TeMLW61u5IH2Q1wu0oSTkfrSzwbDJIB/Lm8O3//8BWMPA==", "dev": true, "license": "MIT", "dependencies": { @@ -4239,8 +3769,6 @@ }, "node_modules/@typescript-eslint/type-utils": { "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.26.0.tgz", - "integrity": "sha512-ruk0RNChLKz3zKGn2LwXuVoeBcUMh+jaqzN461uMMdxy5H9epZqIBtYj7UiPXRuOpaALXGbmRuZQhmwHhaS04Q==", "dev": true, "license": "MIT", "dependencies": { @@ -4263,8 +3791,6 @@ }, "node_modules/@typescript-eslint/types": { "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.26.0.tgz", - "integrity": "sha512-89B1eP3tnpr9A8L6PZlSjBvnJhWXtYfZhECqlBl1D9Lme9mHO6iWlsprBtVenQvY1HMhax1mWOjhtL3fh/u+pA==", "dev": true, "license": "MIT", "engines": { @@ -4277,8 +3803,6 @@ }, "node_modules/@typescript-eslint/typescript-estree": { "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.26.0.tgz", - "integrity": "sha512-tiJ1Hvy/V/oMVRTbEOIeemA2XoylimlDQ03CgPPNaHYZbpsc78Hmngnt+WXZfJX1pjQ711V7g0H7cSJThGYfPQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4304,8 +3828,6 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true, "license": "ISC", "bin": { @@ -4317,8 +3839,6 @@ }, "node_modules/@typescript-eslint/utils": { "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.26.0.tgz", - "integrity": "sha512-2L2tU3FVwhvU14LndnQCA2frYC8JnPDVKyQtWFPf8IYFMt/ykEN1bPolNhNbCVgOmdzTlWdusCTKA/9nKrf8Ig==", "dev": true, "license": "MIT", "dependencies": { @@ -4341,8 +3861,6 @@ }, "node_modules/@typescript-eslint/visitor-keys": { "version": "8.26.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.26.0.tgz", - "integrity": "sha512-2z8JQJWAzPdDd51dRQ/oqIJxe99/hoLIqmf8RMCAJQtYDc535W/Jt2+RTP4bP0aKeBG1F65yjIZuczOXCmbWwg==", "dev": true, "license": "MIT", "dependencies": { @@ -4359,8 +3877,6 @@ }, "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -4372,8 +3888,6 @@ }, "node_modules/abort-controller": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "license": "MIT", "dependencies": { "event-target-shim": "^5.0.0" @@ -4384,8 +3898,6 @@ }, "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==", "license": "MIT", "dependencies": { "mime-types": "~2.1.34", @@ -4397,8 +3909,6 @@ }, "node_modules/acorn": { "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, "license": "MIT", "bin": { @@ -4410,8 +3920,6 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -4420,8 +3928,6 @@ }, "node_modules/adm-zip": { "version": "0.5.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz", - "integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==", "license": "MIT", "engines": { "node": ">=12.0" @@ -4429,8 +3935,6 @@ }, "node_modules/aggregate-error": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "license": "MIT", "dependencies": { @@ -4443,8 +3947,6 @@ }, "node_modules/aggregate-error/node_modules/clean-stack": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, "license": "MIT", "engines": { @@ -4453,8 +3955,6 @@ }, "node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", "dependencies": { @@ -4470,8 +3970,6 @@ }, "node_modules/ansi-colors": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true, "license": "MIT", "engines": { @@ -4480,8 +3978,6 @@ }, "node_modules/ansi-escapes": { "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "license": "MIT", "dependencies": { "type-fest": "^0.21.3" @@ -4495,8 +3991,6 @@ }, "node_modules/ansi-regex": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "license": "MIT", "engines": { "node": ">=12" @@ -4507,8 +4001,6 @@ }, "node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -4522,8 +4014,6 @@ }, "node_modules/ansis": { "version": "3.17.0", - "resolved": "https://registry.npmjs.org/ansis/-/ansis-3.17.0.tgz", - "integrity": "sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==", "license": "ISC", "engines": { "node": ">=14" @@ -4531,8 +4021,6 @@ }, "node_modules/anymatch": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", @@ -4544,8 +4032,6 @@ }, "node_modules/append-transform": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", - "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", "dev": true, "license": "MIT", "dependencies": { @@ -4557,8 +4043,6 @@ }, "node_modules/archiver": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz", - "integrity": "sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==", "license": "MIT", "dependencies": { "archiver-utils": "^5.0.2", @@ -4575,8 +4059,6 @@ }, "node_modules/archiver-utils": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-5.0.2.tgz", - "integrity": "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==", "license": "MIT", "dependencies": { "glob": "^10.0.0", @@ -4593,29 +4075,21 @@ }, "node_modules/archy": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", "dev": true, "license": "MIT" }, "node_modules/arg": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true, "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, "license": "Python-2.0" }, "node_modules/array-buffer-byte-length": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, "license": "MIT", "dependencies": { @@ -4631,21 +4105,15 @@ }, "node_modules/array-flatten": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "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==", "dev": true, "license": "MIT" }, "node_modules/array-includes": { "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4665,8 +4133,6 @@ }, "node_modules/array-union": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "license": "MIT", "engines": { "node": ">=8" @@ -4674,8 +4140,6 @@ }, "node_modules/array.prototype.findlastindex": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4695,8 +4159,6 @@ }, "node_modules/array.prototype.flat": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", - "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", "dev": true, "license": "MIT", "dependencies": { @@ -4714,8 +4176,6 @@ }, "node_modules/array.prototype.flatmap": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", - "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, "license": "MIT", "dependencies": { @@ -4733,8 +4193,6 @@ }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4755,8 +4213,6 @@ }, "node_modules/arrify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, "license": "MIT", "engines": { @@ -4765,15 +4221,11 @@ }, "node_modules/asap": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", "dev": true, "license": "MIT" }, "node_modules/assertion-error": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true, "license": "MIT", "engines": { @@ -4782,8 +4234,6 @@ }, "node_modules/astral-regex": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, "license": "MIT", "engines": { @@ -4792,14 +4242,10 @@ }, "node_modules/async": { "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", "license": "MIT" }, "node_modules/async-function": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", "dev": true, "license": "MIT", "engines": { @@ -4808,8 +4254,6 @@ }, "node_modules/async-retry": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", - "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", "dev": true, "license": "MIT", "dependencies": { @@ -4818,14 +4262,10 @@ }, "node_modules/asynckit": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "license": "MIT" }, "node_modules/available-typed-arrays": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4839,9 +4279,9 @@ } }, "node_modules/axios": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.1.tgz", - "integrity": "sha512-NN+fvwH/kV01dYUQ3PTOZns4LWtWhOFCAhQ/pHb88WQ1hNe5V/dvFwc4VJcDL11LT9xSX0QtsR8sWUuyOuOq7g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz", + "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", @@ -4851,33 +4291,23 @@ }, "node_modules/b4a": { "version": "1.6.7", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", - "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==", "license": "Apache-2.0" }, "node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "license": "MIT" }, "node_modules/bare-events": { "version": "2.5.4", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz", - "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==", "license": "Apache-2.0", "optional": true }, "node_modules/base-64": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", - "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==", "license": "MIT" }, "node_modules/base64-js": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "funding": [ { "type": "github", @@ -4896,8 +4326,6 @@ }, "node_modules/binary-extensions": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "license": "MIT", "engines": { "node": ">=8" @@ -4908,14 +4336,10 @@ }, "node_modules/bluebird": { "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "license": "MIT" }, "node_modules/body-parser": { "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -4938,8 +4362,6 @@ }, "node_modules/body-parser/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -4947,21 +4369,15 @@ }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, "node_modules/bowser": { "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", "dev": true, "license": "MIT" }, "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==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -4969,8 +4385,6 @@ }, "node_modules/braces": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -4981,15 +4395,11 @@ }, "node_modules/browser-stdout": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true, "license": "ISC" }, "node_modules/browserslist": { "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", "dev": true, "funding": [ { @@ -5021,8 +4431,6 @@ }, "node_modules/buffer": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "funding": [ { "type": "github", @@ -5045,8 +4453,6 @@ }, "node_modules/buffer-crc32": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz", - "integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==", "license": "MIT", "engines": { "node": ">=8.0.0" @@ -5054,15 +4460,11 @@ }, "node_modules/buffer-from": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true, "license": "MIT" }, "node_modules/bytes": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -5070,8 +4472,6 @@ }, "node_modules/cacheable-lookup": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", - "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", "dev": true, "license": "MIT", "engines": { @@ -5080,8 +4480,6 @@ }, "node_modules/cacheable-request": { "version": "10.2.14", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", - "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5099,8 +4497,6 @@ }, "node_modules/caching-transform": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", - "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", "dev": true, "license": "MIT", "dependencies": { @@ -5115,8 +4511,6 @@ }, "node_modules/call-bind": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, "license": "MIT", "dependencies": { @@ -5134,8 +4528,6 @@ }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -5147,8 +4539,6 @@ }, "node_modules/call-bound": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -5163,8 +4553,6 @@ }, "node_modules/callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "license": "MIT", "engines": { @@ -5173,8 +4561,6 @@ }, "node_modules/camel-case": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "dev": true, "license": "MIT", "dependencies": { @@ -5184,8 +4570,6 @@ }, "node_modules/camelcase": { "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "license": "MIT", "engines": { @@ -5194,8 +4578,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==", "dev": true, "license": "MIT", "dependencies": { @@ -5212,8 +4594,6 @@ }, "node_modules/caniuse-lite": { "version": "1.0.30001702", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001702.tgz", - "integrity": "sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==", "dev": true, "funding": [ { @@ -5233,8 +4613,6 @@ }, "node_modules/capital-case": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz", - "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", "dev": true, "license": "MIT", "dependencies": { @@ -5264,8 +4642,6 @@ }, "node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -5280,8 +4656,6 @@ }, "node_modules/chalk/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -5292,8 +4666,6 @@ }, "node_modules/change-case": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-4.1.2.tgz", - "integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==", "dev": true, "license": "MIT", "dependencies": { @@ -5313,14 +4685,10 @@ }, "node_modules/chardet": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "license": "MIT" }, "node_modules/check-error": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, "license": "MIT", "dependencies": { @@ -5332,8 +4700,6 @@ }, "node_modules/chokidar": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "license": "MIT", "dependencies": { "anymatch": "~3.1.2", @@ -5356,8 +4722,6 @@ }, "node_modules/clean-stack": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-3.0.1.tgz", - "integrity": "sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==", "license": "MIT", "dependencies": { "escape-string-regexp": "4.0.0" @@ -5371,8 +4735,6 @@ }, "node_modules/cli-cursor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "license": "MIT", "dependencies": { @@ -5384,8 +4746,6 @@ }, "node_modules/cli-spinners": { "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "license": "MIT", "engines": { "node": ">=6" @@ -5396,8 +4756,6 @@ }, "node_modules/cli-truncate": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dev": true, "license": "MIT", "dependencies": { @@ -5413,8 +4771,6 @@ }, "node_modules/cli-width": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", - "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", "license": "ISC", "engines": { "node": ">= 12" @@ -5422,8 +4778,6 @@ }, "node_modules/cliui": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "license": "ISC", "dependencies": { @@ -5437,8 +4791,6 @@ }, "node_modules/cliui/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==", "dev": true, "license": "MIT", "engines": { @@ -5447,8 +4799,6 @@ }, "node_modules/cliui/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==", "dev": true, "license": "MIT", "dependencies": { @@ -5460,8 +4810,6 @@ }, "node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -5472,21 +4820,15 @@ }, "node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, "node_modules/colorette": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", "dev": true, "license": "MIT" }, "node_modules/combined-stream": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" @@ -5497,8 +4839,6 @@ }, "node_modules/commander": { "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true, "license": "MIT", "engines": { @@ -5507,15 +4847,11 @@ }, "node_modules/commondir": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "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==", "dev": true, "license": "MIT", "dependencies": { @@ -5525,8 +4861,6 @@ }, "node_modules/compress-commons": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz", - "integrity": "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==", "license": "MIT", "dependencies": { "crc-32": "^1.2.0", @@ -5541,14 +4875,10 @@ }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "license": "MIT" }, "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==", "dev": true, "license": "MIT", "dependencies": { @@ -5558,8 +4888,6 @@ }, "node_modules/connect-livereload": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/connect-livereload/-/connect-livereload-0.6.1.tgz", - "integrity": "sha512-3R0kMOdL7CjJpU66fzAkCe6HNtd3AavCS4m+uW4KtJjrdGPT0SQEZieAYd+cm+lJoBznNQ4lqipYWkhBMgk00g==", "license": "MIT", "engines": { "node": "*" @@ -5567,8 +4895,6 @@ }, "node_modules/constant-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-3.0.4.tgz", - "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5579,8 +4905,6 @@ }, "node_modules/content-disposition": { "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" @@ -5591,8 +4915,6 @@ }, "node_modules/content-type": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -5600,8 +4922,6 @@ }, "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, "license": "ISC", "dependencies": { @@ -5614,8 +4934,6 @@ }, "node_modules/conventional-changelog-conventionalcommits": { "version": "4.6.3", - "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz", - "integrity": "sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==", "dev": true, "license": "ISC", "dependencies": { @@ -5629,8 +4947,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -5650,15 +4966,11 @@ }, "node_modules/convert-source-map": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "dev": true, "license": "MIT" }, "node_modules/cookie": { "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -5666,20 +4978,14 @@ }, "node_modules/cookie-signature": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "license": "MIT" }, "node_modules/core-util-is": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "license": "MIT" }, "node_modules/cosmiconfig": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, "license": "MIT", "dependencies": { @@ -5693,10 +4999,17 @@ "node": ">=10" } }, + "node_modules/cosmiconfig/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/crc-32": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", "license": "Apache-2.0", "bin": { "crc32": "bin/crc32.njs" @@ -5707,8 +5020,6 @@ }, "node_modules/crc32-stream": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz", - "integrity": "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==", "license": "MIT", "dependencies": { "crc-32": "^1.2.0", @@ -5720,15 +5031,11 @@ }, "node_modules/create-require": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true, "license": "MIT" }, "node_modules/cross-spawn": { "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -5741,8 +5048,6 @@ }, "node_modules/dargs": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", "dev": true, "license": "MIT", "engines": { @@ -5751,8 +5056,6 @@ }, "node_modules/data-view-buffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5769,8 +5072,6 @@ }, "node_modules/data-view-byte-length": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5787,8 +5088,6 @@ }, "node_modules/data-view-byte-offset": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5804,9 +5103,9 @@ } }, "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -5822,8 +5121,6 @@ }, "node_modules/decamelize": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, "license": "MIT", "engines": { @@ -5832,8 +5129,6 @@ }, "node_modules/decamelize-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, "license": "MIT", "dependencies": { @@ -5849,8 +5144,6 @@ }, "node_modules/decamelize-keys/node_modules/map-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, "license": "MIT", "engines": { @@ -5859,8 +5152,6 @@ }, "node_modules/decompress-response": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5875,8 +5166,6 @@ }, "node_modules/decompress-response/node_modules/mimic-response": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true, "license": "MIT", "engines": { @@ -5888,8 +5177,6 @@ }, "node_modules/deep-eql": { "version": "4.1.4", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", - "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", "dev": true, "license": "MIT", "dependencies": { @@ -5901,15 +5188,11 @@ }, "node_modules/deep-is": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true, "license": "MIT" }, "node_modules/default-require-extensions": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", - "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", "dev": true, "license": "MIT", "dependencies": { @@ -5924,8 +5207,6 @@ }, "node_modules/defer-to-connect": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true, "license": "MIT", "engines": { @@ -5934,8 +5215,6 @@ }, "node_modules/define-data-property": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "license": "MIT", "dependencies": { @@ -5952,8 +5231,6 @@ }, "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==", "license": "MIT", "engines": { "node": ">=8" @@ -5961,8 +5238,6 @@ }, "node_modules/define-properties": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "license": "MIT", "dependencies": { @@ -5979,8 +5254,6 @@ }, "node_modules/delayed-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "license": "MIT", "engines": { "node": ">=0.4.0" @@ -5988,8 +5261,6 @@ }, "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==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -5997,8 +5268,6 @@ }, "node_modules/destroy": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "license": "MIT", "engines": { "node": ">= 0.8", @@ -6013,8 +5282,6 @@ }, "node_modules/detect-indent": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-7.0.1.tgz", - "integrity": "sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==", "dev": true, "license": "MIT", "engines": { @@ -6023,8 +5290,6 @@ }, "node_modules/detect-newline": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-4.0.1.tgz", - "integrity": "sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==", "dev": true, "license": "MIT", "engines": { @@ -6041,9 +5306,9 @@ "license": "MIT" }, "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -6052,8 +5317,6 @@ }, "node_modules/dir-glob": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "license": "MIT", "dependencies": { "path-type": "^4.0.0" @@ -6064,8 +5327,6 @@ }, "node_modules/doctrine": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -6077,8 +5338,6 @@ }, "node_modules/dot-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", "dev": true, "license": "MIT", "dependencies": { @@ -6088,8 +5347,6 @@ }, "node_modules/dot-prop": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -6101,8 +5358,6 @@ }, "node_modules/dunder-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", @@ -6115,8 +5370,6 @@ }, "node_modules/duplexer2": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", "license": "BSD-3-Clause", "dependencies": { "readable-stream": "^2.0.2" @@ -6124,14 +5377,10 @@ }, "node_modules/duplexer2/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "license": "MIT" }, "node_modules/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==", "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", @@ -6145,14 +5394,10 @@ }, "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==", "license": "MIT" }, "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==", "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" @@ -6160,20 +5405,14 @@ }, "node_modules/eastasianwidth": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "license": "MIT" }, "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==", "license": "MIT" }, "node_modules/ejs": { "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "license": "Apache-2.0", "dependencies": { "jake": "^10.8.5" @@ -6187,21 +5426,15 @@ }, "node_modules/electron-to-chromium": { "version": "1.5.112", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.112.tgz", - "integrity": "sha512-oen93kVyqSb3l+ziUgzIOlWt/oOuy4zRmpwestMn4rhFWAoFJeFuCVte9F2fASjeZZo7l/Cif9TiyrdW4CwEMA==", "dev": true, "license": "ISC" }, "node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "license": "MIT" }, "node_modules/encodeurl": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -6209,8 +5442,6 @@ }, "node_modules/enquirer": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6223,8 +5454,6 @@ }, "node_modules/enquirer/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==", "dev": true, "license": "MIT", "engines": { @@ -6233,8 +5462,6 @@ }, "node_modules/enquirer/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==", "dev": true, "license": "MIT", "dependencies": { @@ -6246,8 +5473,6 @@ }, "node_modules/error-ex": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "license": "MIT", "dependencies": { @@ -6256,8 +5481,6 @@ }, "node_modules/es-abstract": { "version": "1.23.9", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", - "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", "dev": true, "license": "MIT", "dependencies": { @@ -6322,8 +5545,6 @@ }, "node_modules/es-define-property": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -6331,8 +5552,6 @@ }, "node_modules/es-errors": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -6340,8 +5559,6 @@ }, "node_modules/es-object-atoms": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -6352,8 +5569,6 @@ }, "node_modules/es-set-tostringtag": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -6367,8 +5582,6 @@ }, "node_modules/es-shim-unscopables": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", - "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", "dev": true, "license": "MIT", "dependencies": { @@ -6380,8 +5593,6 @@ }, "node_modules/es-to-primitive": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, "license": "MIT", "dependencies": { @@ -6398,15 +5609,11 @@ }, "node_modules/es6-error": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true, "license": "MIT" }, "node_modules/escalade": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, "license": "MIT", "engines": { @@ -6415,14 +5622,10 @@ }, "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==", "license": "MIT" }, "node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "license": "MIT", "engines": { "node": ">=10" @@ -6433,8 +5636,6 @@ }, "node_modules/eslint": { "version": "9.21.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.21.0.tgz", - "integrity": "sha512-KjeihdFqTPhOMXTt7StsDxriV4n66ueuF/jfPNC3j/lduHwr/ijDwJMsF+wyMJethgiKi5wniIE243vi07d3pg==", "dev": true, "license": "MIT", "dependencies": { @@ -6493,8 +5694,6 @@ }, "node_modules/eslint-config-prettier": { "version": "8.10.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", - "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", "dev": true, "license": "MIT", "bin": { @@ -6506,8 +5705,6 @@ }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "license": "MIT", "dependencies": { @@ -6518,8 +5715,6 @@ }, "node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6528,8 +5723,6 @@ }, "node_modules/eslint-module-utils": { "version": "2.12.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", - "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "dev": true, "license": "MIT", "dependencies": { @@ -6546,8 +5739,6 @@ }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6556,8 +5747,6 @@ }, "node_modules/eslint-plugin-import": { "version": "2.31.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", - "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, "license": "MIT", "dependencies": { @@ -6590,8 +5779,6 @@ }, "node_modules/eslint-plugin-import/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "license": "MIT", "dependencies": { @@ -6601,8 +5788,6 @@ }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6611,8 +5796,6 @@ }, "node_modules/eslint-plugin-import/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -6624,8 +5807,6 @@ }, "node_modules/eslint-plugin-import/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -6634,8 +5815,6 @@ }, "node_modules/eslint-scope": { "version": "8.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", - "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -6651,8 +5830,6 @@ }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "license": "Apache-2.0", "engines": { @@ -6664,8 +5841,6 @@ }, "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "license": "MIT", "dependencies": { @@ -6675,8 +5850,6 @@ }, "node_modules/eslint/node_modules/eslint-visitor-keys": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -6688,8 +5861,6 @@ }, "node_modules/eslint/node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "license": "ISC", "dependencies": { @@ -6701,8 +5872,6 @@ }, "node_modules/eslint/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -6714,8 +5883,6 @@ }, "node_modules/espree": { "version": "10.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", - "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -6732,8 +5899,6 @@ }, "node_modules/espree/node_modules/eslint-visitor-keys": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -6745,8 +5910,6 @@ }, "node_modules/esprima": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, "license": "BSD-2-Clause", "bin": { @@ -6759,8 +5922,6 @@ }, "node_modules/esquery": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -6772,8 +5933,6 @@ }, "node_modules/esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -6785,8 +5944,6 @@ }, "node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -6795,8 +5952,6 @@ }, "node_modules/esutils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -6805,8 +5960,6 @@ }, "node_modules/etag": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -6814,8 +5967,6 @@ }, "node_modules/event-target-shim": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "license": "MIT", "engines": { "node": ">=6" @@ -6823,8 +5974,6 @@ }, "node_modules/events": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "license": "MIT", "engines": { "node": ">=0.8.x" @@ -6832,8 +5981,6 @@ }, "node_modules/execa": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "license": "MIT", "dependencies": { @@ -6856,8 +6003,6 @@ }, "node_modules/express": { "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "license": "MIT", "dependencies": { "accepts": "~1.3.8", @@ -6902,8 +6047,6 @@ }, "node_modules/express/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -6911,14 +6054,10 @@ }, "node_modules/express/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, "node_modules/external-editor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "license": "MIT", "dependencies": { "chardet": "^0.7.0", @@ -6931,21 +6070,15 @@ }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true, "license": "MIT" }, "node_modules/fast-fifo": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", "license": "MIT" }, "node_modules/fast-glob": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -6960,15 +6093,11 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true, "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz", - "integrity": "sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==", "license": "MIT", "dependencies": { "fastest-levenshtein": "^1.0.7" @@ -6976,8 +6105,6 @@ }, "node_modules/fast-xml-parser": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", - "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", "dev": true, "funding": [ { @@ -6999,8 +6126,6 @@ }, "node_modules/fastest-levenshtein": { "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "license": "MIT", "engines": { "node": ">= 4.9.1" @@ -7008,8 +6133,6 @@ }, "node_modules/fastq": { "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -7017,8 +6140,6 @@ }, "node_modules/file-entry-cache": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7030,8 +6151,6 @@ }, "node_modules/file-type": { "version": "15.0.1", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-15.0.1.tgz", - "integrity": "sha512-0LieQlSA3bWUdErNrxzxfI4rhsvNAVPBO06R8pTc1hp9SE6nhqlVyvhcaXoMmtXkBTPnQenbMPLW9X76hH76oQ==", "license": "MIT", "dependencies": { "readable-web-to-node-stream": "^2.0.0", @@ -7048,8 +6167,6 @@ }, "node_modules/filelist": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "license": "Apache-2.0", "dependencies": { "minimatch": "^5.0.1" @@ -7057,8 +6174,6 @@ }, "node_modules/filelist/node_modules/minimatch": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" @@ -7069,8 +6184,6 @@ }, "node_modules/fill-range": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -7081,8 +6194,6 @@ }, "node_modules/finalhandler": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "license": "MIT", "dependencies": { "debug": "2.6.9", @@ -7099,8 +6210,6 @@ }, "node_modules/finalhandler/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -7108,14 +6217,10 @@ }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, "node_modules/find-cache-dir": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, "license": "MIT", "dependencies": { @@ -7132,8 +6237,6 @@ }, "node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { @@ -7149,8 +6252,6 @@ }, "node_modules/find-yarn-workspace-root": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", - "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -7159,8 +6260,6 @@ }, "node_modules/flat": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, "license": "BSD-3-Clause", "bin": { @@ -7169,8 +6268,6 @@ }, "node_modules/flat-cache": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", "dependencies": { @@ -7183,15 +6280,11 @@ }, "node_modules/flatted": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", "dev": true, "license": "ISC" }, "node_modules/follow-redirects": { "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", "funding": [ { "type": "individual", @@ -7210,8 +6303,6 @@ }, "node_modules/for-each": { "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, "license": "MIT", "dependencies": { @@ -7226,8 +6317,6 @@ }, "node_modules/foreground-child": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "license": "ISC", "dependencies": { "cross-spawn": "^7.0.6", @@ -7242,8 +6331,6 @@ }, "node_modules/foreground-child/node_modules/signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "license": "ISC", "engines": { "node": ">=14" @@ -7254,8 +6341,6 @@ }, "node_modules/form-data": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", - "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", @@ -7269,8 +6354,6 @@ }, "node_modules/form-data-encoder": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", - "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", "dev": true, "license": "MIT", "engines": { @@ -7279,8 +6362,6 @@ }, "node_modules/forwarded": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -7288,8 +6369,6 @@ }, "node_modules/fresh": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -7297,8 +6376,6 @@ }, "node_modules/fromentries": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", "dev": true, "funding": [ { @@ -7318,8 +6395,6 @@ }, "node_modules/fs-extra": { "version": "11.3.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", - "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -7330,24 +6405,8 @@ "node": ">=14.14" } }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/function-bind": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7355,8 +6414,6 @@ }, "node_modules/function.prototype.name": { "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, "license": "MIT", "dependencies": { @@ -7376,8 +6433,6 @@ }, "node_modules/functions-have-names": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, "license": "MIT", "funding": { @@ -7386,8 +6441,6 @@ }, "node_modules/gensync": { "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, "license": "MIT", "engines": { @@ -7396,8 +6449,6 @@ }, "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==", "dev": true, "license": "ISC", "engines": { @@ -7406,8 +6457,6 @@ }, "node_modules/get-func-name": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, "license": "MIT", "engines": { @@ -7416,8 +6465,6 @@ }, "node_modules/get-intrinsic": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -7440,15 +6487,11 @@ }, "node_modules/get-own-enumerable-property-symbols": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", "dev": true, "license": "ISC" }, "node_modules/get-package-type": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "license": "MIT", "engines": { "node": ">=8.0.0" @@ -7456,8 +6499,6 @@ }, "node_modules/get-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", @@ -7469,8 +6510,6 @@ }, "node_modules/get-stdin": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", - "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", "dev": true, "license": "MIT", "engines": { @@ -7482,8 +6521,6 @@ }, "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==", "dev": true, "license": "MIT", "engines": { @@ -7495,8 +6532,6 @@ }, "node_modules/get-symbol-description": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "license": "MIT", "dependencies": { @@ -7513,8 +6548,6 @@ }, "node_modules/git-hooks-list": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-3.2.0.tgz", - "integrity": "sha512-ZHG9a1gEhUMX1TvGrLdyWb9kDopCBbTnI8z4JgRMYxsijWipgjSEYoPWqBuIB0DnRnvqlQSEeVmzpeuPm7NdFQ==", "dev": true, "license": "MIT", "funding": { @@ -7523,8 +6556,6 @@ }, "node_modules/git-raw-commits": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", - "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", "dev": true, "license": "MIT", "dependencies": { @@ -7543,15 +6574,11 @@ }, "node_modules/github-slugger": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", - "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", "dev": true, "license": "ISC" }, "node_modules/glob": { "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", @@ -7570,8 +6597,6 @@ }, "node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -7582,8 +6607,6 @@ }, "node_modules/global-dirs": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==", "dev": true, "license": "MIT", "dependencies": { @@ -7595,8 +6618,6 @@ }, "node_modules/globals": { "version": "14.0.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", - "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, "license": "MIT", "engines": { @@ -7608,8 +6629,6 @@ }, "node_modules/globalthis": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7625,8 +6644,6 @@ }, "node_modules/globby": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "license": "MIT", "dependencies": { "array-union": "^2.1.0", @@ -7645,8 +6662,6 @@ }, "node_modules/gopd": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -7657,8 +6672,6 @@ }, "node_modules/got": { "version": "13.0.0", - "resolved": "https://registry.npmjs.org/got/-/got-13.0.0.tgz", - "integrity": "sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==", "dev": true, "license": "MIT", "dependencies": { @@ -7683,21 +6696,15 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "license": "ISC" }, "node_modules/graphemer": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true, "license": "MIT" }, "node_modules/hard-rejection": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, "license": "MIT", "engines": { @@ -7706,8 +6713,6 @@ }, "node_modules/has-bigints": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, "license": "MIT", "engines": { @@ -7719,8 +6724,6 @@ }, "node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "license": "MIT", "engines": { "node": ">=8" @@ -7728,8 +6731,6 @@ }, "node_modules/has-property-descriptors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "license": "MIT", "dependencies": { @@ -7741,8 +6742,6 @@ }, "node_modules/has-proto": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7757,8 +6756,6 @@ }, "node_modules/has-symbols": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -7769,8 +6766,6 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" @@ -7784,8 +6779,6 @@ }, "node_modules/hasha": { "version": "5.2.2", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", - "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7801,8 +6794,6 @@ }, "node_modules/hasha/node_modules/type-fest": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -7811,8 +6802,6 @@ }, "node_modules/hasown": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -7823,8 +6812,6 @@ }, "node_modules/he": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, "license": "MIT", "bin": { @@ -7833,8 +6820,6 @@ }, "node_modules/header-case": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/header-case/-/header-case-2.0.4.tgz", - "integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==", "dev": true, "license": "MIT", "dependencies": { @@ -7844,8 +6829,6 @@ }, "node_modules/hosted-git-info": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "license": "ISC", "dependencies": { @@ -7857,22 +6840,16 @@ }, "node_modules/html-escaper": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true, "license": "MIT" }, "node_modules/http-cache-semantics": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", "dev": true, "license": "BSD-2-Clause" }, "node_modules/http-call": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/http-call/-/http-call-5.3.0.tgz", - "integrity": "sha512-ahwimsC23ICE4kPl9xTBjKB4inbRaeLyZeRunC/1Jy/Z6X8tv22MEAjK+KBOMSVLaqXPTTmd8638waVIKLGx2w==", "dev": true, "license": "ISC", "dependencies": { @@ -7889,8 +6866,6 @@ }, "node_modules/http-call/node_modules/parse-json": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, "license": "MIT", "dependencies": { @@ -7903,8 +6878,6 @@ }, "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==", "license": "MIT", "dependencies": { "depd": "2.0.0", @@ -7919,8 +6892,6 @@ }, "node_modules/http2-wrapper": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7933,8 +6904,6 @@ }, "node_modules/http2-wrapper/node_modules/quick-lru": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true, "license": "MIT", "engines": { @@ -7946,8 +6915,6 @@ }, "node_modules/human-signals": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -7956,8 +6923,6 @@ }, "node_modules/husky": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/husky/-/husky-7.0.4.tgz", - "integrity": "sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ==", "dev": true, "license": "MIT", "bin": { @@ -7972,8 +6937,6 @@ }, "node_modules/iconv-lite": { "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" @@ -7984,8 +6947,6 @@ }, "node_modules/ieee754": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "funding": [ { "type": "github", @@ -8004,8 +6965,6 @@ }, "node_modules/ignore": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "license": "MIT", "engines": { "node": ">= 4" @@ -8013,8 +6972,6 @@ }, "node_modules/import-fresh": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8030,8 +6987,6 @@ }, "node_modules/import-fresh/node_modules/resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, "license": "MIT", "engines": { @@ -8040,8 +6995,6 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "license": "MIT", "engines": { @@ -8050,8 +7003,6 @@ }, "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==", "license": "MIT", "engines": { "node": ">=8" @@ -8059,21 +7010,15 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "license": "ISC" }, "node_modules/ini": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, "license": "ISC" }, "node_modules/internal-slot": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "license": "MIT", "dependencies": { @@ -8087,8 +7032,6 @@ }, "node_modules/ipaddr.js": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "license": "MIT", "engines": { "node": ">= 0.10" @@ -8096,8 +7039,6 @@ }, "node_modules/is-array-buffer": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, "license": "MIT", "dependencies": { @@ -8114,15 +7055,11 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true, "license": "MIT" }, "node_modules/is-async-function": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8141,8 +7078,6 @@ }, "node_modules/is-bigint": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8157,8 +7092,6 @@ }, "node_modules/is-binary-path": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" @@ -8169,8 +7102,6 @@ }, "node_modules/is-boolean-object": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, "license": "MIT", "dependencies": { @@ -8186,8 +7117,6 @@ }, "node_modules/is-callable": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "license": "MIT", "engines": { @@ -8199,8 +7128,6 @@ }, "node_modules/is-core-module": { "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, "license": "MIT", "dependencies": { @@ -8215,8 +7142,6 @@ }, "node_modules/is-data-view": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "license": "MIT", "dependencies": { @@ -8233,8 +7158,6 @@ }, "node_modules/is-date-object": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "license": "MIT", "dependencies": { @@ -8250,8 +7173,6 @@ }, "node_modules/is-docker": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "license": "MIT", "bin": { "is-docker": "cli.js" @@ -8265,8 +7186,6 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -8274,8 +7193,6 @@ }, "node_modules/is-finalizationregistry": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, "license": "MIT", "dependencies": { @@ -8290,8 +7207,6 @@ }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "license": "MIT", "engines": { "node": ">=8" @@ -8299,8 +7214,6 @@ }, "node_modules/is-generator-function": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8318,8 +7231,6 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -8330,8 +7241,6 @@ }, "node_modules/is-map": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, "license": "MIT", "engines": { @@ -8341,10 +7250,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-node-process": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", + "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==", + "dev": true, + "license": "MIT" + }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "license": "MIT", "engines": { "node": ">=0.12.0" @@ -8352,8 +7266,6 @@ }, "node_modules/is-number-object": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, "license": "MIT", "dependencies": { @@ -8369,8 +7281,6 @@ }, "node_modules/is-obj": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true, "license": "MIT", "engines": { @@ -8379,8 +7289,6 @@ }, "node_modules/is-plain-obj": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, "license": "MIT", "engines": { @@ -8389,8 +7297,6 @@ }, "node_modules/is-regex": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "license": "MIT", "dependencies": { @@ -8408,8 +7314,6 @@ }, "node_modules/is-regexp": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", "dev": true, "license": "MIT", "engines": { @@ -8418,8 +7322,6 @@ }, "node_modules/is-retry-allowed": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", "dev": true, "license": "MIT", "engines": { @@ -8428,8 +7330,6 @@ }, "node_modules/is-set": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, "license": "MIT", "engines": { @@ -8441,8 +7341,6 @@ }, "node_modules/is-shared-array-buffer": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, "license": "MIT", "dependencies": { @@ -8457,8 +7355,6 @@ }, "node_modules/is-stream": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "license": "MIT", "engines": { "node": ">=8" @@ -8469,8 +7365,6 @@ }, "node_modules/is-string": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "license": "MIT", "dependencies": { @@ -8486,8 +7380,6 @@ }, "node_modules/is-symbol": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "license": "MIT", "dependencies": { @@ -8504,8 +7396,6 @@ }, "node_modules/is-text-path": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", "dev": true, "license": "MIT", "dependencies": { @@ -8517,8 +7407,6 @@ }, "node_modules/is-typed-array": { "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8533,14 +7421,10 @@ }, "node_modules/is-typedarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "license": "MIT" }, "node_modules/is-unicode-supported": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, "license": "MIT", "engines": { @@ -8552,8 +7436,6 @@ }, "node_modules/is-weakmap": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, "license": "MIT", "engines": { @@ -8565,8 +7447,6 @@ }, "node_modules/is-weakref": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", "dev": true, "license": "MIT", "dependencies": { @@ -8581,8 +7461,6 @@ }, "node_modules/is-weakset": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8598,8 +7476,6 @@ }, "node_modules/is-windows": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, "license": "MIT", "engines": { @@ -8608,8 +7484,6 @@ }, "node_modules/is-wsl": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "license": "MIT", "dependencies": { "is-docker": "^2.0.0" @@ -8620,21 +7494,15 @@ }, "node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "license": "ISC" }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -8643,8 +7511,6 @@ }, "node_modules/istanbul-lib-hook": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", - "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -8656,8 +7522,6 @@ }, "node_modules/istanbul-lib-instrument": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", - "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -8673,8 +7537,6 @@ }, "node_modules/istanbul-lib-instrument/node_modules/semver": { "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true, "license": "ISC", "bin": { @@ -8686,8 +7548,6 @@ }, "node_modules/istanbul-lib-processinfo": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", - "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", "dev": true, "license": "ISC", "dependencies": { @@ -8704,8 +7564,6 @@ }, "node_modules/istanbul-lib-processinfo/node_modules/p-map": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8717,8 +7575,6 @@ }, "node_modules/istanbul-lib-report": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -8732,8 +7588,6 @@ }, "node_modules/istanbul-lib-report/node_modules/make-dir": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "license": "MIT", "dependencies": { @@ -8748,8 +7602,6 @@ }, "node_modules/istanbul-lib-report/node_modules/semver": { "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true, "license": "ISC", "bin": { @@ -8761,8 +7613,6 @@ }, "node_modules/istanbul-lib-report/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -8774,8 +7624,6 @@ }, "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -8789,8 +7637,6 @@ }, "node_modules/istanbul-reports": { "version": "3.1.7", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", - "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -8803,8 +7649,6 @@ }, "node_modules/jackspeak": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -8818,8 +7662,6 @@ }, "node_modules/jake": { "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", "license": "Apache-2.0", "dependencies": { "async": "^3.2.3", @@ -8836,8 +7678,6 @@ }, "node_modules/jake/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -8846,8 +7686,6 @@ }, "node_modules/jake/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -8858,8 +7696,6 @@ }, "node_modules/js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true, "license": "MIT" }, @@ -8868,7 +7704,6 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -8878,8 +7713,6 @@ }, "node_modules/jsesc": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, "license": "MIT", "bin": { @@ -8891,22 +7724,16 @@ }, "node_modules/json-buffer": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true, "license": "MIT" }, "node_modules/json-parse-better-errors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true, "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true, "license": "MIT" }, @@ -8918,22 +7745,23 @@ }, "node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true, "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true, "license": "MIT" }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "license": "ISC" + }, "node_modules/json5": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "license": "MIT", "bin": { @@ -8945,8 +7773,6 @@ }, "node_modules/jsonfile": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "license": "MIT", "dependencies": { "universalify": "^2.0.0" @@ -8957,8 +7783,6 @@ }, "node_modules/jsonparse": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true, "engines": [ "node >= 0.2.0" @@ -8967,8 +7791,6 @@ }, "node_modules/JSONStream": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, "license": "(MIT OR Apache-2.0)", "dependencies": { @@ -8984,8 +7806,6 @@ }, "node_modules/keyv": { "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "license": "MIT", "dependencies": { @@ -8994,8 +7814,6 @@ }, "node_modules/kind-of": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "license": "MIT", "engines": { @@ -9004,8 +7822,6 @@ }, "node_modules/lazystream": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "license": "MIT", "dependencies": { "readable-stream": "^2.0.5" @@ -9016,14 +7832,10 @@ }, "node_modules/lazystream/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "license": "MIT" }, "node_modules/lazystream/node_modules/readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", @@ -9037,14 +7849,10 @@ }, "node_modules/lazystream/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "license": "MIT" }, "node_modules/lazystream/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" @@ -9052,8 +7860,6 @@ }, "node_modules/levn": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9066,8 +7872,6 @@ }, "node_modules/lilconfig": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", "license": "MIT", "engines": { "node": ">=14" @@ -9078,15 +7882,11 @@ }, "node_modules/lines-and-columns": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true, "license": "MIT" }, "node_modules/lint-staged": { "version": "11.2.6", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-11.2.6.tgz", - "integrity": "sha512-Vti55pUnpvPE0J9936lKl0ngVeTdSZpEdTNhASbkaWX7J5R9OEifo1INBGQuGW4zmy6OG+TcWPJ3m5yuy5Q8Tg==", "dev": true, "license": "MIT", "dependencies": { @@ -9114,8 +7914,6 @@ }, "node_modules/listr2": { "version": "3.14.0", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", - "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", "dev": true, "license": "MIT", "dependencies": { @@ -9142,15 +7940,11 @@ }, "node_modules/listr2/node_modules/colorette": { "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true, "license": "MIT" }, "node_modules/livereload": { "version": "0.9.3", - "resolved": "https://registry.npmjs.org/livereload/-/livereload-0.9.3.tgz", - "integrity": "sha512-q7Z71n3i4X0R9xthAryBdNGVGAO2R5X+/xXpmKeuPMrteg+W2U8VusTKV3YiJbXZwKsOlFlHe+go6uSNjfxrZw==", "license": "MIT", "dependencies": { "chokidar": "^3.5.0", @@ -9167,14 +7961,10 @@ }, "node_modules/livereload-js": { "version": "3.4.1", - "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-3.4.1.tgz", - "integrity": "sha512-5MP0uUeVCec89ZbNOT/i97Mc+q3SxXmiUGhRFOTmhrGPn//uWVQdCvcLJDy64MSBR5MidFdOR7B9viumoavy6g==", "license": "MIT" }, "node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { @@ -9189,8 +7979,6 @@ }, "node_modules/lodash": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "license": "MIT" }, "node_modules/lodash.defaultsdeep": { @@ -9207,30 +7995,22 @@ }, "node_modules/lodash.flattendeep": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", "dev": true, "license": "MIT" }, "node_modules/lodash.get": { "name": "lodash", "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true, "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true, "license": "MIT" }, "node_modules/log-symbols": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "license": "MIT", "dependencies": { @@ -9246,8 +8026,6 @@ }, "node_modules/log-update": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", "dev": true, "license": "MIT", "dependencies": { @@ -9265,8 +8043,6 @@ }, "node_modules/log-update/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==", "dev": true, "license": "MIT", "engines": { @@ -9275,8 +8051,6 @@ }, "node_modules/log-update/node_modules/slice-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9293,8 +8067,6 @@ }, "node_modules/log-update/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==", "dev": true, "license": "MIT", "dependencies": { @@ -9306,8 +8078,6 @@ }, "node_modules/log-update/node_modules/wrap-ansi": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "license": "MIT", "dependencies": { @@ -9321,8 +8091,6 @@ }, "node_modules/loupe": { "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, "license": "MIT", "dependencies": { @@ -9331,8 +8099,6 @@ }, "node_modules/lower-case": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", "dev": true, "license": "MIT", "dependencies": { @@ -9341,8 +8107,6 @@ }, "node_modules/lowercase-keys": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", "dev": true, "license": "MIT", "engines": { @@ -9354,8 +8118,6 @@ }, "node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "license": "ISC", "dependencies": { @@ -9367,8 +8129,6 @@ }, "node_modules/make-dir": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "license": "MIT", "dependencies": { @@ -9383,8 +8143,6 @@ }, "node_modules/make-dir/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -9393,15 +8151,11 @@ }, "node_modules/make-error": { "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true, "license": "ISC" }, "node_modules/map-obj": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, "license": "MIT", "engines": { @@ -9413,8 +8167,6 @@ }, "node_modules/math-intrinsics": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -9422,8 +8174,6 @@ }, "node_modules/media-typer": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -9431,8 +8181,6 @@ }, "node_modules/meow": { "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, "license": "MIT", "dependencies": { @@ -9457,8 +8205,6 @@ }, "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==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -9470,8 +8216,6 @@ }, "node_modules/merge-descriptors": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -9479,15 +8223,11 @@ }, "node_modules/merge-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true, "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "license": "MIT", "engines": { "node": ">= 8" @@ -9495,8 +8235,6 @@ }, "node_modules/methods": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -9504,8 +8242,6 @@ }, "node_modules/micromatch": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "license": "MIT", "dependencies": { "braces": "^3.0.3", @@ -9517,8 +8253,6 @@ }, "node_modules/mime": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "license": "MIT", "bin": { "mime": "cli.js" @@ -9529,8 +8263,6 @@ }, "node_modules/mime-db": { "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -9538,8 +8270,6 @@ }, "node_modules/mime-types": { "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "license": "MIT", "dependencies": { "mime-db": "1.52.0" @@ -9550,8 +8280,6 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, "license": "MIT", "engines": { @@ -9560,8 +8288,6 @@ }, "node_modules/mimic-response": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", - "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", "dev": true, "license": "MIT", "engines": { @@ -9573,8 +8299,6 @@ }, "node_modules/min-indent": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, "license": "MIT", "engines": { @@ -9583,8 +8307,6 @@ }, "node_modules/minimatch": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" @@ -9598,8 +8320,6 @@ }, "node_modules/minimist": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, "license": "MIT", "funding": { @@ -9608,8 +8328,6 @@ }, "node_modules/minimist-options": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, "license": "MIT", "dependencies": { @@ -9623,33 +8341,31 @@ }, "node_modules/minipass": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/mocha": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.1.0.tgz", - "integrity": "sha512-8uJR5RTC2NgpY3GrYcgpZrsEd9zKbPDpob1RezyR2upGHRQtHWofmzTMzTMSV6dru3tj5Ukt0+Vnq1qhFEEwAg==", + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.5.0.tgz", + "integrity": "sha512-VKDjhy6LMTKm0WgNEdlY77YVsD49LZnPSXJAaPNL9NRYQADxvORsyG1DIQY6v53BKTnlNbEE2MbVCDbnxr4K3w==", "dev": true, "license": "MIT", "dependencies": { - "ansi-colors": "^4.1.3", "browser-stdout": "^1.3.1", - "chokidar": "^3.5.3", + "chokidar": "^4.0.1", "debug": "^4.3.5", - "diff": "^5.2.0", + "diff": "^7.0.0", "escape-string-regexp": "^4.0.0", "find-up": "^5.0.0", "glob": "^10.4.5", "he": "^1.2.0", "js-yaml": "^4.1.0", "log-symbols": "^4.1.0", - "minimatch": "^5.1.6", + "minimatch": "^9.0.5", "ms": "^2.1.3", + "picocolors": "^1.1.1", "serialize-javascript": "^6.0.2", "strip-json-comments": "^3.1.1", "supports-color": "^8.1.1", @@ -9666,23 +8382,38 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "node_modules/mocha/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "readdirp": "^4.0.1" }, "engines": { - "node": ">=10" + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/mocha/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, "node_modules/mocha/node_modules/yargs-parser": { "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, "license": "ISC", "engines": { @@ -9691,14 +8422,10 @@ }, "node_modules/ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, "node_modules/mute-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", "dev": true, "license": "ISC", "engines": { @@ -9707,15 +8434,11 @@ }, "node_modules/natural-compare": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true, "license": "MIT" }, "node_modules/negotiator": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -9723,8 +8446,6 @@ }, "node_modules/no-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dev": true, "license": "MIT", "dependencies": { @@ -9732,16 +8453,27 @@ "tslib": "^2.0.3" } }, + "node_modules/nock": { + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/nock/-/nock-14.0.4.tgz", + "integrity": "sha512-86fh+gIKH8H02+y0/HKAOZZXn6OwgzXvl6JYwfjvKkoKxUWz54wIIDU/+w24xzMvk/R8pNVXOrvTubyl+Ml6cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@mswjs/interceptors": "^0.38.5", + "json-stringify-safe": "^5.0.1", + "propagate": "^2.0.0" + }, + "engines": { + "node": ">=18.20.0 <20 || >=20.12.1" + } + }, "node_modules/node-int64": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "license": "MIT" }, "node_modules/node-preload": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", - "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9753,15 +8485,11 @@ }, "node_modules/node-releases": { "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", "dev": true, "license": "MIT" }, "node_modules/normalize-package-data": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -9776,8 +8504,6 @@ }, "node_modules/normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -9785,8 +8511,6 @@ }, "node_modules/normalize-url": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", - "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", "dev": true, "license": "MIT", "engines": { @@ -9798,8 +8522,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -9811,8 +8533,6 @@ }, "node_modules/nyc": { "version": "17.1.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-17.1.0.tgz", - "integrity": "sha512-U42vQ4czpKa0QdI1hu950XuNhYqgoM+ZF1HT+VuUHL9hPfDPVvNQyltmMqdE9bUHMVa+8yNbc3QKTj8zQhlVxQ==", "dev": true, "license": "ISC", "dependencies": { @@ -9853,8 +8573,6 @@ }, "node_modules/nyc/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==", "dev": true, "license": "MIT", "engines": { @@ -9863,8 +8581,6 @@ }, "node_modules/nyc/node_modules/cliui": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, "license": "ISC", "dependencies": { @@ -9875,8 +8591,6 @@ }, "node_modules/nyc/node_modules/find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", "dependencies": { @@ -9889,8 +8603,6 @@ }, "node_modules/nyc/node_modules/locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", "dependencies": { @@ -9902,8 +8614,6 @@ }, "node_modules/nyc/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", "dependencies": { @@ -9918,8 +8628,6 @@ }, "node_modules/nyc/node_modules/p-locate": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", "dependencies": { @@ -9931,8 +8639,6 @@ }, "node_modules/nyc/node_modules/p-map": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9944,8 +8650,6 @@ }, "node_modules/nyc/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==", "dev": true, "license": "MIT", "dependencies": { @@ -9957,8 +8661,6 @@ }, "node_modules/nyc/node_modules/wrap-ansi": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "license": "MIT", "dependencies": { @@ -9972,15 +8674,11 @@ }, "node_modules/nyc/node_modules/y18n": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true, "license": "ISC" }, "node_modules/nyc/node_modules/yargs": { "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, "license": "MIT", "dependencies": { @@ -10002,8 +8700,6 @@ }, "node_modules/nyc/node_modules/yargs-parser": { "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "license": "ISC", "dependencies": { @@ -10016,8 +8712,6 @@ }, "node_modules/object-inspect": { "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -10028,8 +8722,6 @@ }, "node_modules/object-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "license": "MIT", "engines": { @@ -10038,8 +8730,6 @@ }, "node_modules/object.assign": { "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, "license": "MIT", "dependencies": { @@ -10059,8 +8749,6 @@ }, "node_modules/object.fromentries": { "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10078,8 +8766,6 @@ }, "node_modules/object.groupby": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10093,8 +8779,6 @@ }, "node_modules/object.values": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", - "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, "license": "MIT", "dependencies": { @@ -10112,8 +8796,6 @@ }, "node_modules/oclif": { "version": "4.17.34", - "resolved": "https://registry.npmjs.org/oclif/-/oclif-4.17.34.tgz", - "integrity": "sha512-zog6l7Xndexoq0lQIKyHIspr0OQQBiXQ97xTCZC4hUmgxKoxLVUV4HmHfegAxiTC/5Kmp5+z72b+BysNU2RlVQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10151,8 +8833,6 @@ }, "node_modules/oclif/node_modules/fs-extra": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "license": "MIT", "dependencies": { @@ -10166,8 +8846,6 @@ }, "node_modules/oclif/node_modules/hosted-git-info": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", "dev": true, "license": "ISC", "dependencies": { @@ -10179,8 +8857,6 @@ }, "node_modules/oclif/node_modules/jsonfile": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "license": "MIT", "optionalDependencies": { @@ -10189,15 +8865,11 @@ }, "node_modules/oclif/node_modules/lru-cache": { "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, "license": "ISC" }, "node_modules/oclif/node_modules/normalize-package-data": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", - "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -10211,8 +8883,6 @@ }, "node_modules/oclif/node_modules/semver": { "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true, "license": "ISC", "bin": { @@ -10224,8 +8894,6 @@ }, "node_modules/oclif/node_modules/universalify": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, "license": "MIT", "engines": { @@ -10234,8 +8902,6 @@ }, "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==", "license": "MIT", "dependencies": { "ee-first": "1.1.1" @@ -10246,8 +8912,6 @@ }, "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, "license": "MIT", "dependencies": { @@ -10262,8 +8926,6 @@ }, "node_modules/open": { "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "license": "MIT", "dependencies": { "define-lazy-prop": "^2.0.0", @@ -10279,8 +8941,6 @@ }, "node_modules/optionator": { "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "license": "MIT", "dependencies": { @@ -10297,30 +8957,29 @@ }, "node_modules/optionator/node_modules/fast-levenshtein": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true, "license": "MIT" }, "node_modules/opts": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/opts/-/opts-2.0.2.tgz", - "integrity": "sha512-k41FwbcLnlgnFh69f4qdUfvDQ+5vaSDnVPFI/y5XuhKRq97EnVVneO9F1ESVCdiVu4fCS2L8usX3mU331hB7pg==", "license": "BSD-2-Clause" }, "node_modules/os-tmpdir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/outvariant": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz", + "integrity": "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==", + "dev": true, + "license": "MIT" + }, "node_modules/own-keys": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", "dev": true, "license": "MIT", "dependencies": { @@ -10337,8 +8996,6 @@ }, "node_modules/p-cancelable": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", "dev": true, "license": "MIT", "engines": { @@ -10347,8 +9004,6 @@ }, "node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10363,8 +9018,6 @@ }, "node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { @@ -10379,8 +9032,6 @@ }, "node_modules/p-map": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10395,8 +9046,6 @@ }, "node_modules/p-try": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, "license": "MIT", "engines": { @@ -10405,8 +9054,6 @@ }, "node_modules/package-hash": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", - "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", "dev": true, "license": "ISC", "dependencies": { @@ -10421,14 +9068,10 @@ }, "node_modules/package-json-from-dist": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", "license": "BlueOak-1.0.0" }, "node_modules/param-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", "dev": true, "license": "MIT", "dependencies": { @@ -10438,8 +9081,6 @@ }, "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "license": "MIT", "dependencies": { @@ -10451,8 +9092,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==", "dev": true, "license": "MIT", "dependencies": { @@ -10470,8 +9109,6 @@ }, "node_modules/parseurl": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -10479,8 +9116,6 @@ }, "node_modules/pascal-case": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "dev": true, "license": "MIT", "dependencies": { @@ -10490,8 +9125,6 @@ }, "node_modules/path-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", - "integrity": "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==", "dev": true, "license": "MIT", "dependencies": { @@ -10501,8 +9134,6 @@ }, "node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { @@ -10511,8 +9142,6 @@ }, "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "license": "MIT", "engines": { "node": ">=8" @@ -10520,15 +9149,11 @@ }, "node_modules/path-parse": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true, "license": "MIT" }, "node_modules/path-scurry": { "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", @@ -10543,20 +9168,14 @@ }, "node_modules/path-scurry/node_modules/lru-cache": { "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "license": "ISC" }, "node_modules/path-to-regexp": { "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", "license": "MIT" }, "node_modules/path-type": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "license": "MIT", "engines": { "node": ">=8" @@ -10564,8 +9183,6 @@ }, "node_modules/pathval": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true, "license": "MIT", "engines": { @@ -10574,8 +9191,6 @@ }, "node_modules/peek-readable": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz", - "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==", "license": "MIT", "engines": { "node": ">=8" @@ -10587,14 +9202,10 @@ }, "node_modules/picocolors": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "license": "MIT", "engines": { "node": ">=8.6" @@ -10605,8 +9216,6 @@ }, "node_modules/pkg-dir": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10618,8 +9227,6 @@ }, "node_modules/pkg-dir/node_modules/find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", "dependencies": { @@ -10632,8 +9239,6 @@ }, "node_modules/pkg-dir/node_modules/locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", "dependencies": { @@ -10645,8 +9250,6 @@ }, "node_modules/pkg-dir/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", "dependencies": { @@ -10661,8 +9264,6 @@ }, "node_modules/pkg-dir/node_modules/p-locate": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", "dependencies": { @@ -10674,8 +9275,6 @@ }, "node_modules/please-upgrade-node": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", "dev": true, "license": "MIT", "dependencies": { @@ -10684,8 +9283,6 @@ }, "node_modules/possible-typed-array-names": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "dev": true, "license": "MIT", "engines": { @@ -10694,8 +9291,6 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "license": "MIT", "engines": { @@ -10704,8 +9299,6 @@ }, "node_modules/prettier": { "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, "license": "MIT", "bin": { @@ -10720,8 +9313,6 @@ }, "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==", "license": "MIT", "engines": { "node": ">= 0.6.0" @@ -10729,14 +9320,10 @@ }, "node_modules/process-nextick-args": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "license": "MIT" }, "node_modules/process-on-spawn": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.1.0.tgz", - "integrity": "sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -10746,17 +9333,23 @@ "node": ">=8" } }, + "node_modules/propagate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", + "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, "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==", "dev": true, "license": "ISC" }, "node_modules/proxy-addr": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "license": "MIT", "dependencies": { "forwarded": "0.2.0", @@ -10768,14 +9361,10 @@ }, "node_modules/proxy-from-env": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "license": "MIT" }, "node_modules/punycode": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "license": "MIT", "engines": { @@ -10785,8 +9374,6 @@ "node_modules/q": { "name": "promise", "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", "dev": true, "license": "MIT", "dependencies": { @@ -10795,8 +9382,6 @@ }, "node_modules/qs": { "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.6" @@ -10810,8 +9395,6 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "funding": [ { "type": "github", @@ -10830,8 +9413,6 @@ }, "node_modules/quick-lru": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, "license": "MIT", "engines": { @@ -10840,8 +9421,6 @@ }, "node_modules/randombytes": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10850,8 +9429,6 @@ }, "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==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -10859,8 +9436,6 @@ }, "node_modules/raw-body": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -10874,8 +9449,6 @@ }, "node_modules/read-pkg": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "license": "MIT", "dependencies": { @@ -10890,8 +9463,6 @@ }, "node_modules/read-pkg-up": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "license": "MIT", "dependencies": { @@ -10908,8 +9479,6 @@ }, "node_modules/read-pkg-up/node_modules/find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", "dependencies": { @@ -10922,8 +9491,6 @@ }, "node_modules/read-pkg-up/node_modules/locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", "dependencies": { @@ -10935,8 +9502,6 @@ }, "node_modules/read-pkg-up/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", "dependencies": { @@ -10951,8 +9516,6 @@ }, "node_modules/read-pkg-up/node_modules/p-locate": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", "dependencies": { @@ -10964,8 +9527,6 @@ }, "node_modules/read-pkg-up/node_modules/type-fest": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -10974,15 +9535,11 @@ }, "node_modules/read-pkg/node_modules/hosted-git-info": { "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true, "license": "ISC" }, "node_modules/read-pkg/node_modules/normalize-package-data": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -10994,8 +9551,6 @@ }, "node_modules/read-pkg/node_modules/semver": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { @@ -11004,8 +9559,6 @@ }, "node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -11014,8 +9567,6 @@ }, "node_modules/readable-stream": { "version": "4.7.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", - "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", @@ -11030,14 +9581,10 @@ }, "node_modules/readable-web-to-node-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-2.0.0.tgz", - "integrity": "sha512-+oZJurc4hXpaaqsN68GoZGQAQIA3qr09Or4fqEsargABnbe5Aau8hFn6ISVleT3cpY/0n/8drn7huyyEvTbghA==", "license": "MIT" }, "node_modules/readdir-glob": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", - "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", "license": "Apache-2.0", "dependencies": { "minimatch": "^5.1.0" @@ -11045,8 +9592,6 @@ }, "node_modules/readdir-glob/node_modules/minimatch": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" @@ -11057,8 +9602,6 @@ }, "node_modules/readdirp": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "license": "MIT", "dependencies": { "picomatch": "^2.2.1" @@ -11069,8 +9612,6 @@ }, "node_modules/redent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "license": "MIT", "dependencies": { @@ -11083,8 +9624,6 @@ }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "dev": true, "license": "MIT", "dependencies": { @@ -11106,8 +9645,6 @@ }, "node_modules/regexp.prototype.flags": { "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, "license": "MIT", "dependencies": { @@ -11127,8 +9664,6 @@ }, "node_modules/registry-auth-token": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.0.tgz", - "integrity": "sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==", "dev": true, "license": "MIT", "dependencies": { @@ -11140,8 +9675,6 @@ }, "node_modules/release-zalgo": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", "dev": true, "license": "ISC", "dependencies": { @@ -11153,8 +9686,6 @@ }, "node_modules/require-directory": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, "license": "MIT", "engines": { @@ -11163,15 +9694,11 @@ }, "node_modules/require-main-filename": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true, "license": "ISC" }, "node_modules/resolve": { "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dev": true, "license": "MIT", "dependencies": { @@ -11191,15 +9718,11 @@ }, "node_modules/resolve-alpn": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", "dev": true, "license": "MIT" }, "node_modules/resolve-from": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "license": "MIT", "engines": { @@ -11208,8 +9731,6 @@ }, "node_modules/resolve-global": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-global/-/resolve-global-1.0.0.tgz", - "integrity": "sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==", "dev": true, "license": "MIT", "dependencies": { @@ -11221,8 +9742,6 @@ }, "node_modules/responselike": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", - "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", "dev": true, "license": "MIT", "dependencies": { @@ -11237,8 +9756,6 @@ }, "node_modules/restore-cursor": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "license": "MIT", "dependencies": { @@ -11251,8 +9768,6 @@ }, "node_modules/retry": { "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true, "license": "MIT", "engines": { @@ -11261,8 +9776,6 @@ }, "node_modules/reusify": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "license": "MIT", "engines": { "iojs": ">=1.0.0", @@ -11271,15 +9784,11 @@ }, "node_modules/rfdc": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", "dev": true, "license": "MIT" }, "node_modules/rimraf": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", - "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", "dev": true, "license": "ISC", "dependencies": { @@ -11298,8 +9807,6 @@ }, "node_modules/run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "funding": [ { "type": "github", @@ -11321,8 +9828,6 @@ }, "node_modules/rxjs": { "version": "7.8.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11331,8 +9836,6 @@ }, "node_modules/safe-array-concat": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -11351,8 +9854,6 @@ }, "node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", @@ -11371,8 +9872,6 @@ }, "node_modules/safe-push-apply": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", "dev": true, "license": "MIT", "dependencies": { @@ -11388,8 +9887,6 @@ }, "node_modules/safe-regex-test": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, "license": "MIT", "dependencies": { @@ -11406,14 +9903,10 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, "node_modules/semver": { "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "license": "ISC", "dependencies": { @@ -11428,15 +9921,11 @@ }, "node_modules/semver-compare": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", "dev": true, "license": "MIT" }, "node_modules/send": { "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "license": "MIT", "dependencies": { "debug": "2.6.9", @@ -11459,8 +9948,6 @@ }, "node_modules/send/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -11468,14 +9955,10 @@ }, "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, "node_modules/send/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==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -11483,8 +9966,6 @@ }, "node_modules/sentence-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", - "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==", "dev": true, "license": "MIT", "dependencies": { @@ -11495,8 +9976,6 @@ }, "node_modules/serialize-javascript": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -11505,8 +9984,6 @@ }, "node_modules/serve-static": { "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "license": "MIT", "dependencies": { "encodeurl": "~2.0.0", @@ -11520,15 +9997,11 @@ }, "node_modules/set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true, "license": "ISC" }, "node_modules/set-function-length": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "license": "MIT", "dependencies": { @@ -11545,8 +10018,6 @@ }, "node_modules/set-function-name": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11561,8 +10032,6 @@ }, "node_modules/set-proto": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", "dev": true, "license": "MIT", "dependencies": { @@ -11576,14 +10045,10 @@ }, "node_modules/setprototypeof": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "license": "ISC" }, "node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -11594,8 +10059,6 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "license": "MIT", "engines": { "node": ">=8" @@ -11603,8 +10066,6 @@ }, "node_modules/side-channel": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -11622,8 +10083,6 @@ }, "node_modules/side-channel-list": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -11638,8 +10097,6 @@ }, "node_modules/side-channel-map": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -11656,8 +10113,6 @@ }, "node_modules/side-channel-weakmap": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -11675,15 +10130,11 @@ }, "node_modules/signal-exit": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, "license": "ISC" }, "node_modules/simple-git": { "version": "3.27.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.27.0.tgz", - "integrity": "sha512-ivHoFS9Yi9GY49ogc6/YAi3Fl9ROnF4VyubNylgCkA+RVqLaKWnDSzXOVzya8csELIaWaYNutsEuAhZrtOjozA==", "license": "MIT", "dependencies": { "@kwsites/file-exists": "^1.1.1", @@ -11703,8 +10154,6 @@ }, "node_modules/slash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "license": "MIT", "engines": { "node": ">=8" @@ -11712,8 +10161,6 @@ }, "node_modules/slice-ansi": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11727,8 +10174,6 @@ }, "node_modules/snake-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", "dev": true, "license": "MIT", "dependencies": { @@ -11738,15 +10183,11 @@ }, "node_modules/sort-object-keys": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-1.1.3.tgz", - "integrity": "sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==", "dev": true, "license": "MIT" }, "node_modules/sort-package-json": { "version": "2.15.1", - "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-2.15.1.tgz", - "integrity": "sha512-9x9+o8krTT2saA9liI4BljNjwAbvUnWf11Wq+i/iZt8nl2UGYnf3TH5uBydE7VALmP7AGwlfszuEeL8BDyb0YA==", "dev": true, "license": "MIT", "dependencies": { @@ -11765,8 +10206,6 @@ }, "node_modules/sort-package-json/node_modules/is-plain-obj": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "dev": true, "license": "MIT", "engines": { @@ -11778,8 +10217,6 @@ }, "node_modules/sort-package-json/node_modules/semver": { "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true, "license": "ISC", "bin": { @@ -11791,8 +10228,6 @@ }, "node_modules/source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -11801,8 +10236,6 @@ }, "node_modules/source-map-support": { "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "license": "MIT", "dependencies": { @@ -11812,8 +10245,6 @@ }, "node_modules/spawn-wrap": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", - "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", "dev": true, "license": "ISC", "dependencies": { @@ -11830,8 +10261,6 @@ }, "node_modules/spawn-wrap/node_modules/foreground-child": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, "license": "ISC", "dependencies": { @@ -11844,8 +10273,6 @@ }, "node_modules/spdx-correct": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -11855,15 +10282,11 @@ }, "node_modules/spdx-exceptions": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true, "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "license": "MIT", "dependencies": { @@ -11873,15 +10296,11 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.21", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", - "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", "dev": true, "license": "CC0-1.0" }, "node_modules/split2": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, "license": "ISC", "dependencies": { @@ -11890,8 +10309,6 @@ }, "node_modules/split2/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "license": "MIT", "dependencies": { @@ -11905,15 +10322,11 @@ }, "node_modules/sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true, "license": "BSD-3-Clause" }, "node_modules/statuses": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -11921,8 +10334,6 @@ }, "node_modules/streamx": { "version": "2.22.0", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz", - "integrity": "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==", "license": "MIT", "dependencies": { "fast-fifo": "^1.3.2", @@ -11932,10 +10343,15 @@ "bare-events": "^2.2.0" } }, + "node_modules/strict-event-emitter": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz", + "integrity": "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==", + "dev": true, + "license": "MIT" + }, "node_modules/string_decoder": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" @@ -11943,8 +10359,6 @@ }, "node_modules/string-argv": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", "dev": true, "license": "MIT", "engines": { @@ -11953,8 +10367,6 @@ }, "node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -11968,8 +10380,6 @@ "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==", "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -11982,8 +10392,6 @@ }, "node_modules/string-width-cjs/node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "license": "MIT", "engines": { "node": ">=8" @@ -11991,8 +10399,6 @@ }, "node_modules/string-width-cjs/node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -12003,8 +10409,6 @@ }, "node_modules/string-width/node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "license": "MIT", "engines": { "node": ">=8" @@ -12012,8 +10416,6 @@ }, "node_modules/string-width/node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -12024,8 +10426,6 @@ }, "node_modules/string.prototype.trim": { "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, "license": "MIT", "dependencies": { @@ -12046,8 +10446,6 @@ }, "node_modules/string.prototype.trimend": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12065,8 +10463,6 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "license": "MIT", "dependencies": { @@ -12083,8 +10479,6 @@ }, "node_modules/stringify-object": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -12098,8 +10492,6 @@ }, "node_modules/stringify-object/node_modules/is-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", "dev": true, "license": "MIT", "engines": { @@ -12108,8 +10500,6 @@ }, "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==", "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" @@ -12124,8 +10514,6 @@ "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==", "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -12136,8 +10524,6 @@ }, "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "license": "MIT", "engines": { "node": ">=8" @@ -12145,8 +10531,6 @@ }, "node_modules/strip-bom": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, "license": "MIT", "engines": { @@ -12155,8 +10539,6 @@ }, "node_modules/strip-final-newline": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, "license": "MIT", "engines": { @@ -12165,8 +10547,6 @@ }, "node_modules/strip-indent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12178,8 +10558,6 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "license": "MIT", "engines": { @@ -12191,14 +10569,10 @@ }, "node_modules/striptags": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/striptags/-/striptags-3.2.0.tgz", - "integrity": "sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw==", "license": "MIT" }, "node_modules/strnum": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", - "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", "dev": true, "funding": [ { @@ -12210,8 +10584,6 @@ }, "node_modules/strtok3": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz", - "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==", "license": "MIT", "dependencies": { "@tokenizer/token": "^0.3.0", @@ -12227,8 +10599,6 @@ }, "node_modules/supports-color": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -12242,8 +10612,6 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, "license": "MIT", "engines": { @@ -12255,8 +10623,6 @@ }, "node_modules/tar-stream": { "version": "3.1.7", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", - "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", "license": "MIT", "dependencies": { "b4a": "^1.6.4", @@ -12266,8 +10632,6 @@ }, "node_modules/test-exclude": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, "license": "ISC", "dependencies": { @@ -12281,8 +10645,6 @@ }, "node_modules/test-exclude/node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "license": "MIT", "dependencies": { @@ -12292,8 +10654,6 @@ }, "node_modules/test-exclude/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -12305,8 +10665,6 @@ }, "node_modules/text-decoder": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", - "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", "license": "Apache-2.0", "dependencies": { "b4a": "^1.6.4" @@ -12314,8 +10672,6 @@ }, "node_modules/text-extensions": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true, "license": "MIT", "engines": { @@ -12324,15 +10680,11 @@ }, "node_modules/through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true, "license": "MIT" }, "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, "license": "MIT", "dependencies": { @@ -12341,8 +10693,6 @@ }, "node_modules/through2/node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "license": "MIT", "dependencies": { @@ -12356,8 +10706,6 @@ }, "node_modules/tiny-jsonc": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tiny-jsonc/-/tiny-jsonc-1.0.2.tgz", - "integrity": "sha512-f5QDAfLq6zIVSyCZQZhhyl0QS6MvAyTxgz4X4x3+EoCktNWEYJ6PeoEA97fyb98njpBNNi88ybpD7m+BDFXaCw==", "dev": true, "license": "MIT" }, @@ -12369,8 +10717,6 @@ }, "node_modules/tinyglobby": { "version": "0.2.12", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", - "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", "dev": true, "license": "MIT", "dependencies": { @@ -12386,8 +10732,6 @@ }, "node_modules/tinyglobby/node_modules/fdir": { "version": "6.4.3", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", - "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", "dev": true, "license": "MIT", "peerDependencies": { @@ -12401,8 +10745,6 @@ }, "node_modules/tinyglobby/node_modules/picomatch": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, "license": "MIT", "engines": { @@ -12414,8 +10756,6 @@ }, "node_modules/tmp": { "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "license": "MIT", "dependencies": { "os-tmpdir": "~1.0.2" @@ -12426,8 +10766,6 @@ }, "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -12438,8 +10776,6 @@ }, "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==", "license": "MIT", "engines": { "node": ">=0.6" @@ -12447,8 +10783,6 @@ }, "node_modules/token-types": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-2.1.1.tgz", - "integrity": "sha512-wnQcqlreS6VjthyHO3Y/kpK/emflxDBNhlNUPfh7wE39KnuDdOituXomIbyI79vBtF0Ninpkh72mcuRHo+RG3Q==", "license": "MIT", "dependencies": { "@tokenizer/token": "^0.1.1", @@ -12464,14 +10798,10 @@ }, "node_modules/token-types/node_modules/@tokenizer/token": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.1.1.tgz", - "integrity": "sha512-XO6INPbZCxdprl+9qa/AAbFFOMzzwqYxpjPgLICrMD6C2FCw6qfJOPcBk6JqqPLSaZ/Qx87qn4rpPmPMwaAK6w==", "license": "MIT" }, "node_modules/treeify": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", - "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", "license": "MIT", "engines": { "node": ">=0.6" @@ -12479,8 +10809,6 @@ }, "node_modules/trim-newlines": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true, "license": "MIT", "engines": { @@ -12489,8 +10817,6 @@ }, "node_modules/ts-api-utils": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", - "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", "dev": true, "license": "MIT", "engines": { @@ -12502,8 +10828,6 @@ }, "node_modules/ts-node": { "version": "8.10.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz", - "integrity": "sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==", "dev": true, "license": "MIT", "dependencies": { @@ -12528,8 +10852,6 @@ }, "node_modules/ts-node/node_modules/diff": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -12538,8 +10860,6 @@ }, "node_modules/tsconfig-paths": { "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "license": "MIT", "dependencies": { @@ -12551,8 +10871,6 @@ }, "node_modules/tsconfig-paths/node_modules/json5": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "license": "MIT", "dependencies": { @@ -12564,8 +10882,6 @@ }, "node_modules/tsconfig-paths/node_modules/strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "license": "MIT", "engines": { @@ -12574,14 +10890,10 @@ }, "node_modules/tslib": { "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, "node_modules/tunnel-agent": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12593,8 +10905,6 @@ }, "node_modules/type-check": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "license": "MIT", "dependencies": { @@ -12606,8 +10916,6 @@ }, "node_modules/type-detect": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", - "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", "dev": true, "license": "MIT", "engines": { @@ -12616,8 +10924,6 @@ }, "node_modules/type-fest": { "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" @@ -12628,8 +10934,6 @@ }, "node_modules/type-is": { "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "license": "MIT", "dependencies": { "media-typer": "0.3.0", @@ -12641,8 +10945,6 @@ }, "node_modules/typed-array-buffer": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, "license": "MIT", "dependencies": { @@ -12656,8 +10958,6 @@ }, "node_modules/typed-array-byte-length": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, "license": "MIT", "dependencies": { @@ -12676,8 +10976,6 @@ }, "node_modules/typed-array-byte-offset": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12698,8 +10996,6 @@ }, "node_modules/typed-array-length": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, "license": "MIT", "dependencies": { @@ -12719,8 +11015,6 @@ }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "license": "MIT", "dependencies": { "is-typedarray": "^1.0.0" @@ -12728,8 +11022,6 @@ }, "node_modules/typescript": { "version": "5.8.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", - "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -12742,8 +11034,6 @@ }, "node_modules/unbox-primitive": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, "license": "MIT", "dependencies": { @@ -12761,15 +11051,11 @@ }, "node_modules/undici-types": { "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", "devOptional": true, "license": "MIT" }, "node_modules/universalify": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "license": "MIT", "engines": { "node": ">= 10.0.0" @@ -12777,8 +11063,6 @@ }, "node_modules/unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -12786,8 +11070,6 @@ }, "node_modules/unzipper": { "version": "0.12.3", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.12.3.tgz", - "integrity": "sha512-PZ8hTS+AqcGxsaQntl3IRBw65QrBI6lxzqDEL7IAo/XCEqRTKGfOX56Vea5TH9SZczRVxuzk1re04z/YjuYCJA==", "license": "MIT", "dependencies": { "bluebird": "~3.7.2", @@ -12799,8 +11081,6 @@ }, "node_modules/update-browserslist-db": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "dev": true, "funding": [ { @@ -12830,8 +11110,6 @@ }, "node_modules/upper-case": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz", - "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", "dev": true, "license": "MIT", "dependencies": { @@ -12840,8 +11118,6 @@ }, "node_modules/upper-case-first": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", - "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", "dev": true, "license": "MIT", "dependencies": { @@ -12850,8 +11126,6 @@ }, "node_modules/uri-js": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -12860,14 +11134,10 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "license": "MIT" }, "node_modules/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==", "license": "MIT", "engines": { "node": ">= 0.4.0" @@ -12875,8 +11145,6 @@ }, "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, "license": "MIT", "bin": { @@ -12885,8 +11153,6 @@ }, "node_modules/validate-npm-package-license": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -12896,8 +11162,6 @@ }, "node_modules/validate-npm-package-name": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", - "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", "dev": true, "license": "ISC", "engines": { @@ -12906,8 +11170,6 @@ }, "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==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -12915,8 +11177,6 @@ }, "node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -12930,8 +11190,6 @@ }, "node_modules/which-boxed-primitive": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, "license": "MIT", "dependencies": { @@ -12950,8 +11208,6 @@ }, "node_modules/which-builtin-type": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", - "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -12978,8 +11234,6 @@ }, "node_modules/which-collection": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "license": "MIT", "dependencies": { @@ -12997,15 +11251,11 @@ }, "node_modules/which-module": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", "dev": true, "license": "ISC" }, "node_modules/which-typed-array": { "version": "1.1.18", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", - "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", "dev": true, "license": "MIT", "dependencies": { @@ -13025,8 +11275,6 @@ }, "node_modules/widest-line": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", "license": "MIT", "dependencies": { "string-width": "^4.0.0" @@ -13037,8 +11285,6 @@ }, "node_modules/word-wrap": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, "license": "MIT", "engines": { @@ -13047,21 +11293,15 @@ }, "node_modules/wordwrap": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "license": "MIT" }, "node_modules/workerpool": { "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", - "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", "dev": true, "license": "Apache-2.0" }, "node_modules/wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -13078,8 +11318,6 @@ "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==", "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -13095,8 +11333,6 @@ }, "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "license": "MIT", "engines": { "node": ">=8" @@ -13104,8 +11340,6 @@ }, "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -13116,8 +11350,6 @@ }, "node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "license": "MIT", "engines": { "node": ">=8" @@ -13125,8 +11357,6 @@ }, "node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -13137,8 +11367,6 @@ }, "node_modules/write-file-atomic": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, "license": "ISC", "dependencies": { @@ -13150,8 +11378,6 @@ }, "node_modules/ws": { "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "license": "MIT", "engines": { "node": ">=8.3.0" @@ -13171,8 +11397,6 @@ }, "node_modules/y18n": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, "license": "ISC", "engines": { @@ -13181,25 +11405,22 @@ }, "node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, "license": "ISC" }, "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, - "license": "ISC", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", + "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", + "bin": { + "yaml": "bin.mjs" + }, "engines": { - "node": ">= 6" + "node": ">= 14.6" } }, "node_modules/yargs": { "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "license": "MIT", "dependencies": { @@ -13217,8 +11438,6 @@ }, "node_modules/yargs-parser": { "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "license": "ISC", "engines": { @@ -13227,8 +11446,6 @@ }, "node_modules/yargs-unparser": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, "license": "MIT", "dependencies": { @@ -13243,8 +11460,6 @@ }, "node_modules/yargs-unparser/node_modules/camelcase": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "license": "MIT", "engines": { @@ -13256,8 +11471,6 @@ }, "node_modules/yargs-unparser/node_modules/decamelize": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, "license": "MIT", "engines": { @@ -13269,8 +11482,6 @@ }, "node_modules/yargs-unparser/node_modules/is-plain-obj": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, "license": "MIT", "engines": { @@ -13279,8 +11490,6 @@ }, "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==", "dev": true, "license": "ISC", "engines": { @@ -13289,8 +11498,6 @@ }, "node_modules/yn": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, "license": "MIT", "engines": { @@ -13299,8 +11506,6 @@ }, "node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", "engines": { @@ -13312,8 +11517,6 @@ }, "node_modules/yoctocolors-cjs": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", - "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", "license": "MIT", "engines": { "node": ">=18" @@ -13324,8 +11527,6 @@ }, "node_modules/zip-stream": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz", - "integrity": "sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==", "license": "MIT", "dependencies": { "archiver-utils": "^5.0.0", @@ -13335,6 +11536,12 @@ "engines": { "node": ">= 14" } + }, + "sdk": { + "extraneous": true + }, + "src/sdk": { + "extraneous": true } } } diff --git a/package.json b/package.json index 1ac9066a..229d854a 100644 --- a/package.json +++ b/package.json @@ -43,8 +43,12 @@ "lint:fix": "eslint --fix \"src/**/*.{js,ts}\" --quiet" }, "dependencies": { - "@apimatic/sdk": "^0.1.0-alpha.2", - "@clack/prompts": "^0.10.0", + "@apimatic/authentication-adapters": "^0.5.4", + "@apimatic/axios-client-adapter": "^0.3.7", + "@apimatic/core": "^0.10.16", + "@apimatic/schema": "^0.7.14", + "@apimatic/sdk": "file:./lib/sdk", + "@clack/prompts": "^0.11.0", "@oclif/core": "^4.2.8", "@oclif/plugin-autocomplete": "^3.2.24", "@oclif/plugin-help": "^6.2.26", @@ -65,33 +69,35 @@ "striptags": "^3.2.0", "treeify": "^1.1.0", "tslib": "^2.5.0", - "unzipper": "^0.12.3" + "unzipper": "^0.12.3", + "yaml": "^2.8.0" }, "devDependencies": { "@commitlint/cli": "^15.0.0", "@commitlint/config-conventional": "^15.0.0", - "@oclif/test": "^4.1.11", + "@oclif/test": "^4.1.13", "@types/adm-zip": "^0.5.5", "@types/archiver": "^5.1.1", "@types/base-64": "^1.0.0", - "@types/chai": "^4.2.22", + "@types/chai": "^4.3.20", "@types/connect-livereload": "^0.5.1", "@types/express": "^4.17.13", "@types/fs-extra": "^9.0.13", "@types/livereload": "^0.9.2", "@types/mocha": "^5.2.7", - "@types/node": "^10.17.60", + "@types/node": "^20.17.50", "@types/treeify": "^1.0.3", "@types/unzipper": "^0.10.4", "@typescript-eslint/eslint-plugin": "^8.0.0", "@typescript-eslint/parser": "^8.0.0", - "chai": "^4.3.4", + "chai": "^4.5.0", "eslint": "^9.21.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-import": "^2.25.2", "husky": "^7.0.4", "lint-staged": "^11.2.6", - "mocha": "^11.1.0", + "mocha": "^11.5.0", + "nock": "^14.0.4", "nyc": "^17.1.0", "oclif": "^4.17.34", "prettier": "^2.4.1", diff --git a/src/actions/portal/generate.ts b/src/actions/portal/generate.ts new file mode 100644 index 00000000..9f4be364 --- /dev/null +++ b/src/actions/portal/generate.ts @@ -0,0 +1,80 @@ +import * as path from "path"; +import * as fs from "fs-extra"; +import { PortalService } from "../../infrastructure/services/portal-service"; +import { PortalPaths, GeneratePortalParams, GenerateFlags } from "../../types/portal/generate"; +import { Result } from "../../types/common/result"; +import { + getGeneratedFilesPaths, + validateAndZipPortalSource, + deleteFile, + extractZipFile, + getMessageInRedColor +} from "../../utils/utils"; +import { PortalGeneratePrompts } from "../../prompts/portal/generate"; + +export class PortalGenerateAction { + private readonly prompts: PortalGeneratePrompts; + + constructor() { + this.prompts = new PortalGeneratePrompts(); + } + + async generatePortal(paths: PortalPaths, flags: GenerateFlags, configDir: string): Promise { + this.prompts.displayPortalGenerationMessage(); + const pathsToIgnore = getGeneratedFilesPaths(paths.sourceFolderPath, paths.generatedPortalArtifactsFolderPath); + + //TODO: Refactor this method, carries dual responsibility. + const sourceBuildInputZipFilePath = await validateAndZipPortalSource( + paths.sourceFolderPath, + path.join(paths.sourceFolderPath, ".portal_source.zip"), + pathsToIgnore + ); + + const generatePortalParams: GeneratePortalParams = { + sourceBuildInputZipFilePath: sourceBuildInputZipFilePath, + generatedPortalArtifactsFolderPath: paths.generatedPortalArtifactsFolderPath, + generatedPortalArtifactsZipFilePath: paths.generatedPortalArtifactsZipFilePath, + overrideAuthKey: flags["auth-key"] ?? null, + generateZipFile: flags.zip + }; + + const docsPortalService = new PortalService(); + const portalGenerationResult = await docsPortalService.generateOnPremPortal(generatePortalParams, configDir); + await deleteFile(sourceBuildInputZipFilePath); + + if (portalGenerationResult.isSuccess()) { + await this.saveGeneratedPortalStreamToZipFile( + portalGenerationResult.value!, + paths.generatedPortalArtifactsZipFilePath + ); + + if (flags.zip) { + this.prompts.displayOutroMessage(paths.generatedPortalArtifactsZipFilePath); + } + + await extractZipFile(paths.generatedPortalArtifactsZipFilePath, paths.generatedPortalArtifactsFolderPath); + await deleteFile(paths.generatedPortalArtifactsZipFilePath); + + this.prompts.displayPortalGenerationSuccessMessage(); + this.prompts.displayOutroMessage(paths.generatedPortalArtifactsFolderPath); + } else { + this.prompts.displayPortalGenerationErrorMessage(); + this.prompts.logError( + getMessageInRedColor(`${portalGenerationResult.error!}`) + ); + } + } + + private async saveGeneratedPortalStreamToZipFile( + data: NodeJS.ReadableStream, + generatedPortalArtifactsZipFilePath: string + ): Promise { + const writeStream = fs.createWriteStream(generatedPortalArtifactsZipFilePath); + await new Promise((resolve, reject) => { + data + .pipe(writeStream) + .on("finish", () => resolve()) + .on("error", (error) => reject(Result.failure(`Failed to save downloaded portal to file: ${error.message}`))); + }); + } +} diff --git a/src/actions/portal/new/toc.ts b/src/actions/portal/new/toc.ts new file mode 100644 index 00000000..082d9bf4 --- /dev/null +++ b/src/actions/portal/new/toc.ts @@ -0,0 +1,181 @@ +import * as path from "path"; +import * as fs from "fs-extra"; +import { PortalNewTocPrompts } from "../../../prompts/portal/new/toc"; +import { Result } from "../../../types/common/result"; +import { getMessageInRedColor } from "../../../utils/utils"; +import { SdlParser } from "../../../application/portal/new/toc/sdl-parser"; +import { TocStructureGenerator } from "../../../application/portal/new/toc/toc-structure-generator"; +import { TocContentParser } from "../../../application/portal/new/toc/toc-content-parser"; +import { TocEndpoint, TocGroup, TocModel } from "../../../types/toc/toc"; + +const DEFAULT_TOC_FILENAME = "toc.yml"; +const APIMATIC_BUILD_FILENAME = "APIMATIC-BUILD.json"; + +export class PortalNewTocAction { + private readonly prompts: PortalNewTocPrompts; + private readonly sdlParser: SdlParser; + private readonly tocGenerator: TocStructureGenerator; + private readonly contentParser: TocContentParser; + + constructor() { + this.prompts = new PortalNewTocPrompts(); + this.sdlParser = new SdlParser(); + this.tocGenerator = new TocStructureGenerator(); + this.contentParser = new TocContentParser(); + } + + async createToc( + workingDirectory: string, + configDir: string, + destination?: string, + force: boolean = false, + expandEndpoints: boolean = false, + expandModels: boolean = false + ): Promise> { + try { + const tocDir = await this.getDestinationPath(workingDirectory, destination); + const tocPath = path.join(tocDir, DEFAULT_TOC_FILENAME); + const tocCheckResult = await this.handleExistingToc(tocPath, force); + if (!tocCheckResult.isSuccess()) { + return tocCheckResult; + } + + const { endpointGroups, models } = await this.extractSdlComponents( + workingDirectory, + configDir, + expandEndpoints, + expandModels + ); + + const contentGroups = await this.extractContentGroups(workingDirectory); + + const toc = this.tocGenerator.createTocStructure( + endpointGroups, + models, + expandEndpoints, + expandModels, + contentGroups + ); + const yamlString = this.tocGenerator.transformToYaml(toc); + this.writeToc(tocPath, yamlString, "utf8"); + + this.prompts.displayOutroMessage(tocPath); + return Result.success(tocPath); + } catch (error) { + this.prompts.logError(getMessageInRedColor(`${error}`)); + return Result.failure(`❌ An unexpected error occurred while generating the TOC file.`); + } + } + + private async writeToc(path: string, content: string, encoding: string) { + await fs.ensureFile(path); + await fs.writeFile(path, content, encoding); + } + + private async handleExistingToc(tocPath: string, force: boolean): Promise> { + const shouldContinue = await this.checkExistingToc(tocPath, force); + if (!shouldContinue) { + return Result.cancelled("Operation was cancelled by the user."); + } + return Result.success("TOC check passed."); + } + + private async extractSdlComponents( + workingDirectory: string, + configDir: string, + expandEndpoints: boolean, + expandModels: boolean + ): Promise<{ endpointGroups: Map; models: TocModel[] }> { + if (!expandEndpoints && !expandModels) { + return { endpointGroups: new Map(), models: [] }; + } + + this.prompts.startProgressIndicatorWithMessage("Extracting endpoints and/or models from the API specification..."); + const specFolderPath = await this.getSpecFolderPath(workingDirectory); + + if (!(await fs.pathExists(specFolderPath))) { + this.prompts.stopProgressIndicatorWithMessage(`⚠️ Could not find the specification folder at: ${specFolderPath}`); + this.prompts.displayInfo("Falling back to default TOC structure without expanded endpoints or models..."); + return { endpointGroups: new Map(), models: [] }; + } + + const sdlResult = await this.sdlParser.getTocComponentsFromSdl(specFolderPath, workingDirectory, configDir); + + if (!sdlResult.isSuccess()) { + this.prompts.stopProgressIndicatorWithMessage(`⚠️ ${sdlResult.error!}`); + this.prompts.displayInfo("Falling back to default TOC structure without expanded endpoints or models..."); + return { endpointGroups: new Map(), models: [] }; + } + + this.prompts.stopProgressIndicatorWithMessage("✅ Successfully extracted endpoints and/or models from the specification."); + return sdlResult.value!; + + } + + private async extractContentGroups(workingDirectory: string): Promise { + const contentFolderPath = await this.getContentFolderPath(workingDirectory); + + if (!(await fs.pathExists(contentFolderPath))) { + this.prompts.displayInfo(`⚠️ Could not locate the content folder at: ${contentFolderPath}`); + this.prompts.displayInfo("Skipping custom content addition in TOC..."); + return []; + } + + return await this.contentParser.parseContentFolder(contentFolderPath, contentFolderPath); + } + + private async getDestinationPath(workingDirectory: string, providedDestination?: string): Promise { + if (providedDestination === undefined) { + const inferredDestination = await this.getContentFolderPath(workingDirectory); + return inferredDestination; + } + return providedDestination; + } + + private async checkExistingToc(tocPath: string, force: boolean): Promise { + if ((await fs.pathExists(tocPath)) && !force) { + return await this.prompts.overwriteExistingTocPrompt(); + } + return true; + } + + private async getContentFolderPath(workingDirectory: string): Promise { + const buildFilePath = path.join(workingDirectory, APIMATIC_BUILD_FILENAME); + const defaultContentFolder = path.join(workingDirectory, "content"); + + if (!(await fs.pathExists(buildFilePath))) { + return defaultContentFolder; + } + + try { + const buildConfig = await fs.readJson(buildFilePath, "utf8"); + + if (buildConfig.generatePortal?.contentFolder == null) { + return defaultContentFolder; + } + return path.join(workingDirectory, buildConfig.generatePortal.contentFolder, "content"); + } catch { + return defaultContentFolder; + } + } + + private async getSpecFolderPath(workingDirectory: string): Promise { + const buildFilePath = path.join(workingDirectory, APIMATIC_BUILD_FILENAME); + const defaultSpecFolder = path.join(workingDirectory, "spec"); + + if (!(await fs.pathExists(buildFilePath))) { + return defaultSpecFolder; + } + + try { + const buildConfig = await fs.readJson(buildFilePath, "utf8"); + + if (buildConfig.generatePortal?.apiSpecPath == null) { + return defaultSpecFolder; + } + return path.join(workingDirectory, buildConfig.generatePortal.apiSpecPath); + } catch { + return defaultSpecFolder; + } + } +} diff --git a/src/application/portal/new/toc/sdl-parser.ts b/src/application/portal/new/toc/sdl-parser.ts new file mode 100644 index 00000000..198ccf39 --- /dev/null +++ b/src/application/portal/new/toc/sdl-parser.ts @@ -0,0 +1,66 @@ +import * as path from "path"; +import { PortalService } from "../../../../infrastructure/services/portal-service"; +import { validateAndZipPortalSource, deleteFile } from "../../../../utils/utils"; +import { TocEndpoint, TocModel } from "../../../../types/toc/toc"; +import { Result } from "../../../../types/common/result"; +import { Sdl, SdlEndpoint, SdlModel } from "../../../../types/sdl/sdl"; + +export class SdlParser { + private readonly portalService: PortalService; + + constructor() { + this.portalService = new PortalService(); + } + + async getTocComponentsFromSdl(specFolderPath: string, workingDirectory: string, configDir: string): Promise;models: TocModel[];},string>> { + const sourceSpecInputZipFilePath = await validateAndZipPortalSource( + specFolderPath, + path.join(workingDirectory, ".spec_source.zip") + ); + + try { + const result = await this.portalService.generateSdl(sourceSpecInputZipFilePath, configDir); + + if (!result.isSuccess()) { + return Result.failure("Failed to extract endpoints/models from the specification. Please validate your spec using APIMatic’s interactive VS Code extension") + } + + const sdl : Sdl = result.value! + const endpointGroups = this.extractEndpointGroups(sdl); + const models = this.extractModels(sdl); + + return Result.success({ endpointGroups, models }); + } finally { + await deleteFile(sourceSpecInputZipFilePath); + } + } + + private extractEndpointGroups(sdl: Sdl): Map { + const endpointGroups = new Map(); + + const endpoints = sdl.Endpoints.map((e: SdlEndpoint): TocEndpoint => ({ + generate: null, + from: "endpoint", + endpointName: e.Name, + endpointGroup: e.Group + })); + + endpoints.forEach((endpoint: TocEndpoint) => { + const group = endpoint.endpointGroup; + if (!endpointGroups.has(group)) { + endpointGroups.set(group, []); + } + endpointGroups.get(group)!.push(endpoint); + }); + + return endpointGroups; + } + + private extractModels(sdl: Sdl): TocModel[] { + return sdl.CustomTypes.map((e: SdlModel): TocModel => ({ + generate: null, + from: "model", + modelName: e.Name + })); + } +} \ No newline at end of file diff --git a/src/application/portal/new/toc/toc-content-parser.ts b/src/application/portal/new/toc/toc-content-parser.ts new file mode 100644 index 00000000..2e7e01aa --- /dev/null +++ b/src/application/portal/new/toc/toc-content-parser.ts @@ -0,0 +1,48 @@ +import * as path from "path"; +import * as fs from "fs-extra"; +import { TocGroup, TocCustomPage } from "../../../../types/toc/toc"; + +export class TocContentParser { + async parseContentFolder(contentFolderPath: string, workingDirectory: string): Promise { + const items = await fs.readdir(contentFolderPath); + const contentItems: (TocGroup | TocCustomPage)[] = []; + + for (const item of items) { + const itemPath = path.join(contentFolderPath, item); + const stats = await fs.stat(itemPath); + + if (stats.isDirectory()) { + const subItems = await this.parseContentFolder(itemPath, workingDirectory); + if (subItems.length > 0) { + contentItems.push({ + group: item, + items: subItems[0].items // Take items from the Custom Content group + }); + } + } else if (stats.isFile() && item.endsWith(".md")) { + const relativePath = path.relative(workingDirectory, itemPath); + const pageName = path.basename(item, ".md"); + + contentItems.push({ + page: pageName, + file: this.normalizePath(relativePath) + }); + } + } + + // Return empty array if no markdown files were found + if (contentItems.length === 0) { + return []; + } + + // Wrap everything under a "Custom Content" group + return [{ + group: "Custom Content", + items: contentItems + }]; + } + + private normalizePath(path: string) : string { + return path.replace(/\\/g, '/'); + } +} \ No newline at end of file diff --git a/src/application/portal/new/toc/toc-structure-generator.ts b/src/application/portal/new/toc/toc-structure-generator.ts new file mode 100644 index 00000000..f86e33e1 --- /dev/null +++ b/src/application/portal/new/toc/toc-structure-generator.ts @@ -0,0 +1,99 @@ +import { stringify } from "yaml"; +import { Toc, TocGroup, TocEndpoint, TocModel, TocEndpointGroupOverview } from "../../../../types/toc/toc"; + +export class TocStructureGenerator { + createTocStructure( + endpointGroups: Map, + models: TocModel[], + expandEndpoints: boolean = false, + expandModels: boolean = false, + contentGroups: TocGroup[] = [] + ): Toc { + const tocStructure: Toc = { + toc: [] + }; + + // Add Getting Started section + tocStructure.toc.push({ + group: "Getting Started", + items: [ + { + generate: "How to Get Started", + from: "getting-started" + } + ] + }); + + // Add content groups + if (contentGroups.length > 0) { + tocStructure.toc.push(...contentGroups); + } + + // Add API Endpoints section + if (!expandEndpoints || endpointGroups.size === 0) { + tocStructure.toc.push({ + generate: "API Endpoints", + from: "endpoints" + }); + } else { + tocStructure.toc.push({ + group: "API Endpoints", + items: Array.from(endpointGroups).map(([groupName, endpoints]) => ({ + group: groupName, + items: [ + { + generate: null, + from: "endpoint-group-overview", + endpointGroup: groupName + } as TocEndpointGroupOverview, + ...endpoints + ] + })) + }); + } + + // Add Models section + if (!expandModels || models.length === 0) { + tocStructure.toc.push({ + generate: "Models", + from: "models" + }); + } else { + tocStructure.toc.push({ + group: "Models", + items: models + }); + } + + //Add Sdk Infra section + tocStructure.toc.push({ + generate: "SDK Infrastructure", + from: "sdk-infra" + }); + + return tocStructure; + } + + transformToYaml(toc: Toc): string { + const transformedToc = this.transformKeys(toc); + return stringify(transformedToc, { + indent: 2, + nullStr: "" + }); + } + + private transformKeys(obj: any): any { + if (Array.isArray(obj)) { + return obj.map((item) => this.transformKeys(item)); + } + if (obj !== null && typeof obj === "object") { + return Object.fromEntries( + Object.entries(obj).map(([key, value]) => [ + key.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase(), + this.transformKeys(value) + ]) + ); + } + return obj; + } +} \ No newline at end of file diff --git a/src/client-utils/sdk-client.ts b/src/client-utils/sdk-client.ts index c3733f10..48021fb6 100644 --- a/src/client-utils/sdk-client.ts +++ b/src/client-utils/sdk-client.ts @@ -105,7 +105,9 @@ export class SDKClient { if (overrideAuthKey) { return new Client({ timeout: 0, - authorization: `X-Auth-Key ${overrideAuthKey}` + customHeaderAuthenticationCredentials: { + 'Authorization': `X-Auth-Key ${overrideAuthKey}` + } }); } let storedAuthInfo: AuthInfo | null = await getAuthInfo(configDir); @@ -117,7 +119,9 @@ export class SDKClient { if (storedAuthInfo.authKey !== "") { return new Client({ timeout: 0, - authorization: `X-Auth-Key ${storedAuthInfo.authKey}` + customHeaderAuthenticationCredentials: { + 'Authorization': `X-Auth-Key ${storedAuthInfo.authKey}` + } }); } else { throw new Error("Please login first or provide an authKey"); diff --git a/src/commands/api/transform.ts b/src/commands/api/transform.ts index 3b60420c..1186d2dd 100644 --- a/src/commands/api/transform.ts +++ b/src/commands/api/transform.ts @@ -26,7 +26,7 @@ Success! Your transformed file is located at D:/swagger_raml.yaml static flags = { format: Flags.string({ - parse: async (format: string) => getValidFormat(format.toUpperCase()), + parse: async (format: string) => getValidFormat(format), required: true, description: `specification format to transform API specification into ${formats}` diff --git a/src/commands/api/validate.ts b/src/commands/api/validate.ts index f8be1471..9b2d9c6f 100644 --- a/src/commands/api/validate.ts +++ b/src/commands/api/validate.ts @@ -1,7 +1,7 @@ import * as fs from "fs-extra"; import { ux, Flags, Command } from "@oclif/core"; -import { ApiError, APIValidationExternalApisController, ApiValidationSummary, Client } from "@apimatic/sdk"; +import { ApiError, ApiValidationExternalApIsController, ApiValidationSummary, Client } from "@apimatic/sdk"; import { AuthenticationError, loggers } from "../../types/utils"; import { SDKClient } from "../../client-utils/sdk-client"; @@ -42,7 +42,7 @@ Specification file provided is valid const overrideAuthKey = flags["auth-key"] ? flags["auth-key"] : null; const client: Client = await SDKClient.getInstance().getClient(overrideAuthKey, this.config.configDir); - const apiValidationController: APIValidationExternalApisController = new APIValidationExternalApisController( + const apiValidationController: ApiValidationExternalApIsController = new ApiValidationExternalApIsController( client ); diff --git a/src/commands/portal/generate.ts b/src/commands/portal/generate.ts index 81f9542e..9451d269 100644 --- a/src/commands/portal/generate.ts +++ b/src/commands/portal/generate.ts @@ -1,15 +1,16 @@ import * as path from "path"; import * as fs from "fs-extra"; +import { Command, Flags } from "@oclif/core"; +import { GenerateFlags, PortalPaths } from "../../types/portal/generate"; +import { getMessageInRedColor } from "../../utils/utils"; +import { PortalGeneratePrompts } from "../../prompts/portal/generate"; +import { PortalGenerateAction } from "../../actions/portal/generate"; +import { Result } from "../../types/common/result"; -import { ux, Command, Flags } from "@oclif/core"; -import { Client, DocsPortalManagementController } from "@apimatic/sdk"; - -import { AxiosError } from "axios"; -import { SDKClient } from "../../client-utils/sdk-client"; -import { GeneratePortalParams } from "../../types/portal/generate"; -import { downloadDocsPortal } from "../../controllers/portal/generate"; -import { zipDirectory, replaceHTML, isJSONParsable } from "../../utils/utils"; -import { AuthenticationError } from "../../types/utils"; +const DEFAULT_FOLDER = "./"; +const DEFAULT_DESTINATION = path.resolve("./"); +const GENERATED_PORTAL_ARTIFACTS_FOLDER = "generated_portal"; +const GENERATED_PORTAL_ARTIFACTS_ZIP = ".generated_portal.zip"; export default class PortalGenerate extends Command { static description = @@ -17,17 +18,24 @@ export default class PortalGenerate extends Command { static flags = { folder: Flags.string({ - parse: async (input) => path.resolve(input), - default: "./", + parse: async (input: string) => path.resolve(input), + default: DEFAULT_FOLDER, description: "path to the input directory containing API specifications and config files" }), destination: Flags.string({ - parse: async (input) => path.resolve(input), - default: path.resolve("./"), + parse: async (input: string) => path.resolve(input), + default: DEFAULT_DESTINATION, description: "path to the downloaded portal" }), - force: Flags.boolean({ char: "f", default: false, description: "overwrite if a portal exists in the destination" }), - zip: Flags.boolean({ default: false, description: "download the generated portal as a .zip archive" }), + force: Flags.boolean({ + char: "f", + default: false, + description: "overwrite if a portal exists in the destination" + }), + zip: Flags.boolean({ + default: false, + description: "download the generated portal as a .zip archive" + }), "auth-key": Flags.string({ default: "", description: "override current authentication state with an authentication key" @@ -40,79 +48,67 @@ Your portal has been generated at D:/ ` ]; - async run() { + private readonly prompts: PortalGeneratePrompts; + + constructor(argv: string[], config: any) { + super(argv, config); + this.prompts = new PortalGeneratePrompts(); + } + + async run(): Promise { const { flags } = await this.parse(PortalGenerate); - const zip = flags.zip; - const sourceFolderPath: string = flags.folder; - const portalFolderPath: string = path.join(flags.destination, "generated_portal"); - const zippedPortalPath: string = path.join(flags.destination, "generated_portal.zip"); + const paths = await this.getPortalPaths(flags as GenerateFlags); + const portalGenerateAction = new PortalGenerateAction(); - const overrideAuthKey: string | null = flags["auth-key"] ? flags["auth-key"] : null; + const shouldContinueWithExistingPortal = await this.checkExistingPortal(paths, flags as GenerateFlags); + if (!shouldContinueWithExistingPortal) { + process.exit(1); + } - // Check if at destination, portal already exists and throw error if force flag is not set for both zip and extracted - if (fs.existsSync(portalFolderPath) && !flags.force && !zip) { - throw new Error(`Can't download portal to path ${portalFolderPath}, because it already exists`); - } else if (fs.existsSync(zippedPortalPath) && !flags.force && zip) { - throw new Error(`Can't download portal to path ${zippedPortalPath}, because it already exists`); + const validationResult = await this.validatePaths(paths); + if (validationResult.isFailed()) { + this.error(validationResult.error!); } - try { - if (!(await fs.pathExists(flags.destination))) { - throw new Error(`Destination path ${flags.destination} does not exist`); - } else if (!(await fs.pathExists(flags.folder))) { - throw new Error(`Portal build folder ${flags.folder} does not exist`); - } - const client: Client = await SDKClient.getInstance().getClient(overrideAuthKey, this.config.configDir); - const docsPortalController: DocsPortalManagementController = new DocsPortalManagementController(client); - const zippedBuildFilePath = await zipDirectory(sourceFolderPath, flags.destination); + await portalGenerateAction.generatePortal(paths, flags as GenerateFlags, this.config.configDir); + } - const generatePortalParams: GeneratePortalParams = { - zippedBuildFilePath, - portalFolderPath, - zippedPortalPath, - docsPortalController, - overrideAuthKey, - zip - }; - ux.action.start('Generating portal'); - const generatedPortalPath: string = await downloadDocsPortal(generatePortalParams, this.config.configDir); - ux.action.stop(); - this.log(`Your portal has been generated at ${generatedPortalPath}`); - } catch (error) { - if (error && (error as AxiosError).response) { - const apiError = error as AxiosError; - const apiResponse = apiError.response; + private async getPortalPaths(flags: GenerateFlags): Promise { + return { + sourceFolderPath: flags.folder, + destinationFolderPath: flags.destination, + generatedPortalArtifactsFolderPath: path.join(flags.destination, GENERATED_PORTAL_ARTIFACTS_FOLDER), + generatedPortalArtifactsZipFilePath: path.join(flags.destination, GENERATED_PORTAL_ARTIFACTS_ZIP) + }; + } - if (apiResponse) { - const responseData = (apiResponse.data as string).toString(); + private async validatePaths(paths: PortalPaths): Promise> { + if (!(await fs.pathExists(paths.sourceFolderPath))) { + return Result.failure( + getMessageInRedColor(`Portal build input folder ${paths.sourceFolderPath} does not exist.`) + ); + } + if (!(await fs.pathExists(path.dirname(paths.generatedPortalArtifactsFolderPath)))) { + return Result.failure( + getMessageInRedColor( + `Destination path ${path.dirname(paths.generatedPortalArtifactsFolderPath)} does not exist.` + ) + ); + } - if (apiResponse.status === 422 && responseData.length > 0 && isJSONParsable(responseData)) { - const nestedErrors = JSON.parse(responseData); + return Result.success("Paths validated successfully."); + } - if (nestedErrors.error) { - return this.error(replaceHTML(nestedErrors.error)); - } else if (nestedErrors.message) { - return this.error(replaceHTML(nestedErrors.message)); - } - } else if (apiResponse.status === 401 && responseData.length > 0) { - this.error("You are not authorized to perform this action"); - } else if (apiResponse.status === 403 && apiResponse.statusText) { - return this.error("Your subscription does not allow on premise portal generation"); - } else { - return this.error(apiError.message); - } - } - } else if ((error as AuthenticationError).statusCode === 401) { - this.error("You are not authorized to perform this action"); - } else if ( - (error as AuthenticationError).statusCode === 402 && - (error as AuthenticationError).body && - typeof (error as AuthenticationError).body === "string" - ) { - this.error((error as AuthenticationError).body); - } else { - this.error(`${(error as Error).message}`); + private async checkExistingPortal(paths: PortalPaths, flags: GenerateFlags): Promise { + if (fs.existsSync(paths.generatedPortalArtifactsFolderPath) && !flags.force && !flags.zip) { + if (!(await this.prompts.overwriteExistingPortalArtifactsPrompt())) { + return false; + } + } else if (fs.existsSync(paths.generatedPortalArtifactsZipFilePath) && !flags.force && flags.zip) { + if (!(await this.prompts.existingDestinationPortalZipPrompt())) { + return false; } } + return true; } } diff --git a/src/commands/portal/new/toc.ts b/src/commands/portal/new/toc.ts new file mode 100644 index 00000000..d43732f3 --- /dev/null +++ b/src/commands/portal/new/toc.ts @@ -0,0 +1,67 @@ +import * as path from "path"; +import { Command, Flags } from "@oclif/core"; +import { PortalNewTocAction } from "../../../actions/portal/new/toc"; + +const DEFAULT_FOLDER = process.cwd(); + +export default class PortalNewToc extends Command { + static description = + "Generates a new Table of Contents (TOC) file used for the generation of your API documentation portal. The output is a YAML file with the .yml extension."; + + static flags = { + destination: Flags.string({ + parse: async (input: string) => path.resolve(input), + description: "optional path where the generated TOC file will be saved. Defaults to the current working directory if not provided.", + }), + folder: Flags.string({ + parse: async (input: string) => path.resolve(input), + description: "path to the working directory containing the API project files. Defaults to the current working directory if not specified.", + default: DEFAULT_FOLDER + }), + force: Flags.boolean({ + default: false, + description: "overwrite the TOC file if one already exists at the destination.", + }), + "expand-endpoints": Flags.boolean({ + default: false, + description: "include individual entries for each endpoint in the generated TOC. Requires a valid API specification in the working directory." + }), + "expand-models": Flags.boolean({ + default: false, + description: "include individual entries for each model in the generated TOC. Requires a valid API specification in the working directory." + }) + }; + + static examples = [ + `$ apimatic portal:new:toc --destination="./portal/content/" +A new toc file has been created at ./portal/content/toc.yml +`, + `$ apimatic portal:new:toc --folder="./my-project" +A new toc file has been created at ./my-project/content/toc.yml +`, + `$ apimatic portal:new:toc --folder="./my-project" --destination="./portal/content/" +A new toc file has been created at ./portal/content/toc.yml +` + ]; + + constructor(argv: string[], config: any) { + super(argv, config); + } + + async run(): Promise { + const { flags } = await this.parse(PortalNewToc); + const portalNewTocAction = new PortalNewTocAction(); + const result = await portalNewTocAction.createToc( + flags.folder, + this.config.configDir, + flags.destination, + flags.force, + flags["expand-endpoints"], + flags["expand-models"] + ); + + if (result.isFailed()) { + this.error(result.error!); + } + } +} \ No newline at end of file diff --git a/src/commands/portal/quickstart.ts b/src/commands/portal/quickstart.ts index 4649513f..5f34451c 100644 --- a/src/commands/portal/quickstart.ts +++ b/src/commands/portal/quickstart.ts @@ -1,5 +1,5 @@ import { Command } from "@oclif/core"; -import { APIValidationExternalApisController, ApiValidationSummary, Client } from "@apimatic/sdk"; +import { ApiValidationExternalApIsController, ApiValidationSummary, Client } from "@apimatic/sdk"; import { SDKClient } from "../../client-utils/sdk-client"; import { PortalQuickstartPrompts } from "../../prompts/portal/quickstart"; import { PortalQuickstartController } from "../../controllers/portal/quickstart"; @@ -7,7 +7,7 @@ import { SpecFile } from "../../types/portal/quickstart"; import { getMessageInRedColor } from "../../utils/utils"; export default class PortalQuickstart extends Command { - static description = "Create your first API Portal using APIMatic’s Docs as Code offering."; + static description = "Create your first API Portal using APIMatic's Docs as Code offering."; static examples = ["$ apimatic portal:quickstart"]; @@ -15,9 +15,9 @@ export default class PortalQuickstart extends Command { prompts: PortalQuickstartPrompts, controller: PortalQuickstartController ): Promise { - const spec = await prompts.specPrompt(); + const specPath = await prompts.specPrompt(); - const specFile = await controller.getSpecFile(spec); + const specFile = await controller.getSpecFile(specPath); prompts.displaySpecValidationMessage(); @@ -28,27 +28,18 @@ export default class PortalQuickstart extends Command { prompts: PortalQuickstartPrompts, controller: PortalQuickstartController, specFile: SpecFile, - apiValidationController: APIValidationExternalApisController + apiValidationController: ApiValidationExternalApIsController ): Promise { - try { - const apiValidationSummary = await controller.getSpecValidationSummary(specFile, apiValidationController); - - if (!apiValidationSummary.success) { - prompts.displaySpecValidationFailureMessage(); - await prompts.specValidationFailurePrompt(); - } else { - prompts.displaySpecValidationSuccessMessage(); - } + const apiValidationSummary = await controller.getSpecValidationSummary(prompts, specFile, apiValidationController); - return apiValidationSummary; - } catch (error) { - prompts.displaySpecValidationErrorMessage(); - this.error( - getMessageInRedColor( - "The specified path/URL does not point to a valid API Definition file. Please provide a valid API Definition file and try again." - ) - ); + if (!apiValidationSummary.success) { + prompts.displaySpecValidationFailureMessage(); + await prompts.specValidationFailurePrompt(); + } else { + prompts.displaySpecValidationSuccessMessage(); } + + return apiValidationSummary; } private async getBuildDirectory( @@ -58,17 +49,17 @@ export default class PortalQuickstart extends Command { apiValidationSummary: ApiValidationSummary, languages: string[] ): Promise { - const directory = await prompts.buildDirectoryPrompt(); + const buildDirectoryPath = await prompts.buildDirectoryPrompt(); prompts.displayBuildDirectoryGenerationMessage(); - await controller.setupBuildDirectory(prompts, directory, specFile, apiValidationSummary, languages); + await controller.setupBuildDirectory(prompts, buildDirectoryPath, specFile, apiValidationSummary, languages); - prompts.displayBuildDirectoryGenerationSuccessMessage(directory); + prompts.displayBuildDirectoryGenerationSuccessMessage(buildDirectoryPath); - prompts.displayBuildDirectoryAsTree(directory); + prompts.displayBuildDirectoryAsTree(buildDirectoryPath); - return directory; + return buildDirectoryPath; } private async getGeneratedPortalPath( @@ -108,7 +99,7 @@ export default class PortalQuickstart extends Command { } const client: Client = await SDKClient.getInstance().getClient(null, this.config.configDir); - const apiValidationController: APIValidationExternalApisController = new APIValidationExternalApisController( + const apiValidationController: ApiValidationExternalApIsController = new ApiValidationExternalApIsController( client ); @@ -128,9 +119,11 @@ export default class PortalQuickstart extends Command { const generatedPortalPath = await this.getGeneratedPortalPath(prompts, controller, directory); - controller.servePortal(generatedPortalPath, directory, this.config.configDir); - - prompts.displayOutroMessage(); + const serverStarted = await controller.servePortal(generatedPortalPath, directory, this.config.configDir); + + if (serverStarted) { + prompts.displayOutroMessage(directory); + } } catch (error) { this.error(getMessageInRedColor(error instanceof Error ? error.message : String(error))); } diff --git a/src/commands/portal/serve.ts b/src/commands/portal/serve.ts index 4f874e20..a5ef76ea 100644 --- a/src/commands/portal/serve.ts +++ b/src/commands/portal/serve.ts @@ -4,7 +4,7 @@ import { Command, Flags } from "@oclif/core"; import { generatePortal } from "../../controllers/portal/serve"; import { PortalServerService } from "../../services/portal/server"; import { PortalServePrompts } from "../../prompts/portal/serve"; -import { cleanUpGeneratedPortalFiles, getMessageInRedColor } from "../../utils/utils"; +import { cleanUpGeneratedPortalFiles, getGeneratedFilesPaths, getMessageInRedColor } from "../../utils/utils"; import { PortalServeValidator } from "../../validators/portal/serveValidator"; export default class PortalServe extends Command { @@ -19,7 +19,7 @@ export default class PortalServe extends Command { destination: Flags.string({ char: "d", description: "Directory to store and serve the generated portal.", - default: "./api-portal", + default: "./generated_portal", parse: async (input) => path.resolve(input) }), source: Flags.string({ @@ -49,17 +49,9 @@ export default class PortalServe extends Command { }; static examples = [ - '$ apimatic portal:serve --source="./" --destination="./api-portal" --port=3000 --open --no-reload' + '$ apimatic portal:serve --source="./" --destination="./generated_portal" --port=3000 --open --no-reload' ]; - private getGeneratedFilesPaths(sourceDir: string, portalDir: string): string[] { - const generatedZipPath = path.join(sourceDir, "portal_source.zip"); - const generatedPortalZipPath = path.join(sourceDir, "generated_portal.zip"); - const generatedPortalPath = path.join(path.dirname(portalDir), "api-portal"); - - return [generatedZipPath, generatedPortalPath, generatedPortalZipPath]; - } - async run() { const { flags } = await this.parse(PortalServe); const ignoredPaths = flags.ignore.split(",").map((path) => path.trim()); @@ -70,7 +62,7 @@ export default class PortalServe extends Command { const serverService = new PortalServerService(); const prompts = new PortalServePrompts(); const validator = new PortalServeValidator(this.error); - const allIgnoredPaths = [...ignoredPaths, ...this.getGeneratedFilesPaths(sourceDir, portalDir)]; + const allIgnoredPaths = [...ignoredPaths, ...getGeneratedFilesPaths(sourceDir, portalDir)]; await validator.validate(port, flags.destination, sourceDir, portalDir); diff --git a/src/commands/sdk/generate.ts b/src/commands/sdk/generate.ts index 4aeb8d67..b1dc6718 100644 --- a/src/commands/sdk/generate.ts +++ b/src/commands/sdk/generate.ts @@ -3,7 +3,7 @@ import * as fs from "fs-extra"; import { Command, Flags } from "@oclif/core"; import { SDKClient } from "../../client-utils/sdk-client"; -import { ApiError, Client, CodeGenerationExternalApisController } from "@apimatic/sdk"; +import { ApiError, Client, CodeGenerationExternalApIsController } from "@apimatic/sdk"; import { replaceHTML, isJSONParsable, getFileNameFromPath } from "../../utils/utils"; import { getSDKGenerationId, downloadGeneratedSDK } from "../../controllers/sdk/generate"; @@ -17,8 +17,8 @@ export default class SdkGenerate extends Command { parse: async (input) => input.toUpperCase(), required: true, description: `language platform for sdk -Simple: CSHARP|JAVA|PYTHON|RUBY|PHP|TYPESCRIPT -Legacy: CS_NET_STANDARD_LIB|JAVA_ECLIPSE_JRE_LIB|PHP_GENERIC_LIB|PYTHON_GENERIC_LIB|RUBY_GENERIC_LIB|TS_GENERIC_LIB` +Simple: CSHARP|JAVA|PYTHON|RUBY|PHP|TYPESCRIPT|GO +Legacy: CS_NET_STANDARD_LIB|JAVA_ECLIPSE_JRE_LIB|PHP_GENERIC_LIB_V2|PYTHON_GENERIC_LIB|RUBY_GENERIC_LIB|TS_GENERIC_LIB|GO_GENERIC_LIB` }), file: Flags.string({ parse: async (input) => path.resolve(input), @@ -83,7 +83,7 @@ Success! Your SDK is located at swagger_sdk_csharp const overrideAuthKey = flags["auth-key"] ? flags["auth-key"] : null; const client: Client = await SDKClient.getInstance().getClient(overrideAuthKey, this.config.configDir); - const sdkGenerationController: CodeGenerationExternalApisController = new CodeGenerationExternalApisController( + const sdkGenerationController: CodeGenerationExternalApIsController = new CodeGenerationExternalApIsController( client ); diff --git a/src/controllers/api/transform.ts b/src/controllers/api/transform.ts index 8472ee3b..01bcbf89 100644 --- a/src/controllers/api/transform.ts +++ b/src/controllers/api/transform.ts @@ -32,7 +32,7 @@ export const getTransformationId = async ( url: url, exportFormat: format as ExportFormats }; - generation = await transformationController.transformViaURL(body); + generation = await transformationController.transformViaUrl(body); } else { throw new Error("Please provide a specification file"); } diff --git a/src/controllers/api/validate.ts b/src/controllers/api/validate.ts index e718aa19..3e59ca31 100644 --- a/src/controllers/api/validate.ts +++ b/src/controllers/api/validate.ts @@ -1,43 +1,34 @@ import * as fs from "fs-extra"; -import { ApiResponse, FileWrapper } from "@apimatic/sdk"; +import { ApiResponse, ApiValidationExternalApIsController, ApiValidationSummary, ContentType, FileWrapper } from "@apimatic/sdk"; import { GetValidationParams } from "../../types/api/validate"; -import { APIValidationExternalApisController, ApiValidationSummary, ContentType } from "@apimatic/sdk"; import { createTempDirectory, deleteFile, zipDirectory } from "../../utils/utils"; export const getValidationSummary = async ( { file, url }: GetValidationParams, - apiValidationController: APIValidationExternalApisController + apiValidationController: ApiValidationExternalApIsController ): Promise => { let validation: ApiResponse; if (file) { const fileStatus = fs.statSync(file); - if (fileStatus.isDirectory()){ + if (fileStatus.isDirectory()) { const tempDir = await createTempDirectory(); + const zipPath = await zipDirectory(file, tempDir); + const zipFile = new FileWrapper(fs.createReadStream(zipPath)); + validation = await apiValidationController.validateApiViaFile(ContentType.EnumMultipartformdata, zipFile); - try { - const zipPath = await zipDirectory(file, tempDir); - const zipFile = new FileWrapper(fs.createReadStream(zipPath)); - validation = await apiValidationController.validateAPIViaFile(ContentType.EnumMultipartformdata, zipFile); - - await deleteFile(zipPath); - } - catch (error) { - throw new Error("There was an error validating your spec file."); - } - finally { - await fs.remove(tempDir); - } - } - else { + await deleteFile(zipPath); + + await fs.remove(tempDir); + } else { const fileDescriptor = new FileWrapper(fs.createReadStream(file)); - validation = await apiValidationController.validateAPIViaFile(ContentType.EnumMultipartformdata, fileDescriptor); + validation = await apiValidationController.validateApiViaFile(ContentType.EnumMultipartformdata, fileDescriptor); } } else if (url) { - validation = await apiValidationController.validateAPIViaURL(url); + validation = await apiValidationController.validateApiViaUrl(url); } else { throw new Error("Please provide a specification file"); } - + return validation.result; }; diff --git a/src/controllers/portal/generate.ts b/src/controllers/portal/generate.ts index e68f9a3f..1fd91c57 100644 --- a/src/controllers/portal/generate.ts +++ b/src/controllers/portal/generate.ts @@ -1,72 +1,139 @@ import * as fs from "fs-extra"; -import * as FormData from "form-data"; -import { baseURL } from "../../config/env"; -import { deleteFile, extractZipFile } from "../../utils/utils"; -import { GeneratePortalParams } from "../../types/portal/generate"; +import { deleteFile, extractZipFile, getMessageInRedColor, parseStreamBodyToJson } from "../../utils/utils"; +import { ErrorResponse, GeneratePortalParams } from "../../types/portal/generate"; import { AuthInfo, getAuthInfo } from "../../client-utils/auth-manager"; -import { AxiosRequestConfig, AxiosResponse, CancelTokenSource } from "axios"; +import { + ApiError, + ApiResponse, + Client, + ContentType, + DocsPortalManagementController, + FileWrapper, + ProblemDetailsError, + UnauthorizedResponseError +} from "@apimatic/sdk"; +import { Result } from "../../types/common/result"; +const CONTENT_TYPE = ContentType.EnumMultipartformdata; +const TIMEOUT = 0; -import axiosInstance from "../../config/axios-config"; +export const downloadDocsPortal = async ( + params: GeneratePortalParams, + configDir: string +): Promise> => { + if (!(await fs.pathExists(params.sourceBuildInputZipFilePath))) { + return Result.failure("Build file doesn't exist"); + } -//TODO: Remove after SDK is patched -const downloadPortalAxios = async (zippedBuildFilePath: string, configDir: string, overrideAuthKey: string | null, cancellationToken: CancelTokenSource | null) => { - const formData = new FormData(); const authInfo: AuthInfo | null = await getAuthInfo(configDir); - let authorizationHeader = ""; - if (overrideAuthKey) - { - authorizationHeader = `X-Auth-Key ${overrideAuthKey}`; + const authorizationHeader = createAuthorizationHeader(authInfo, params.overrideAuthKey); + const client = createApiClient(authorizationHeader); + const docsPortalManagementController = new DocsPortalManagementController(client); + + try { + const stream = await generatePortalFromSyncEndpoint(docsPortalManagementController, params.sourceBuildInputZipFilePath); + await saveGeneratedPortalStreamToZipFile(stream, params.generatedPortalArtifactsZipFilePath); + await deleteFile(params.sourceBuildInputZipFilePath); + + if (params.generateZipFile) { + return Result.success(params.generatedPortalArtifactsZipFilePath); + } + + await extractZipFile(params.generatedPortalArtifactsZipFilePath, params.generatedPortalArtifactsFolderPath); + await deleteFile(params.generatedPortalArtifactsZipFilePath); + + return Result.success(params.generatedPortalArtifactsFolderPath); + } catch (error) { + return handlePortalGenerationErrors(error, params); } - else if (authInfo) { - authorizationHeader = `X-Auth-Key ${authInfo.authKey}`; +}; + +const createAuthorizationHeader = (authInfo: AuthInfo | null, overrideAuthKey: string | null): string => { + if (overrideAuthKey) { + return `X-Auth-Key ${overrideAuthKey}`; + } + if (!authInfo) { + return ""; } - formData.append("file", fs.createReadStream(zippedBuildFilePath)); - const config: AxiosRequestConfig = { - headers: { - Authorization: authorizationHeader, - "User-Agent": "APIMatic CLI", - ...formData.getHeaders() + return `X-Auth-Key ${authInfo.authKey}`; +}; + +const createApiClient = (authorizationHeader: string): Client => { + return new Client({ + customHeaderAuthenticationCredentials: { + Authorization: authorizationHeader }, - responseType: "arraybuffer" - }; + timeout: TIMEOUT + }); +}; - if (cancellationToken) { - config.cancelToken = cancellationToken.token; - } +const generatePortalFromSyncEndpoint = async ( + docsPortalManagementController: DocsPortalManagementController, + zippedBuildFilePath: string +): Promise => { + const file = new FileWrapper(fs.createReadStream(zippedBuildFilePath)); + const response: ApiResponse = + await docsPortalManagementController.generateOnPremPortalViaBuildInput(CONTENT_TYPE, file); - const { data }: AxiosResponse = await axiosInstance.post(`${baseURL}/portal`, formData, config); - return data; + return response.result as NodeJS.ReadableStream; }; -// Download Docs Portal -export const downloadDocsPortal = async ( - { zippedBuildFilePath, portalFolderPath, zippedPortalPath, overrideAuthKey, zip }: GeneratePortalParams, - configDir: string, - cancellationToken: CancelTokenSource | null = null -) => { - // Check if the build file exists for the user or not - if (!(await fs.pathExists(zippedBuildFilePath))) { - throw new Error("Build file doesn't exist"); - } - // TODO: ***CRITICAL*** Remove this call once the SDK is patched - const data: ArrayBuffer = await downloadPortalAxios(zippedBuildFilePath, configDir, overrideAuthKey, cancellationToken); +const saveGeneratedPortalStreamToZipFile = async (data: NodeJS.ReadableStream, generatedPortalArtifactsZipFilePath: string): Promise => { + const writeStream = fs.createWriteStream(generatedPortalArtifactsZipFilePath); + await new Promise((resolve, reject) => { + data + .pipe(writeStream) + .on("finish", () => resolve()) + .on("error", (error) => + reject(Result.failure(`Failed to save downloaded portal to file: ${error.message}`)) + ); + }); +}; - await deleteFile(zippedBuildFilePath); - await fs.writeFile(zippedPortalPath, data); +const handlePortalGenerationErrors = async (error: unknown, params: GeneratePortalParams): Promise> => { + if (error instanceof UnauthorizedResponseError) { + //401 + const body = await parseErrorResponse(error); + return Result.failure(getMessageInRedColor(body.message ?? "Unauthorized access")); + } else if (error instanceof ProblemDetailsError) { + //400 & 403 + const body = await parseErrorResponse(error); + const message = body.errors[Object.keys(body.errors)[0]][0]; + return Result.failure(getMessageInRedColor(body.title + " " + (body.detail ?? "") + ":\n" + message)); + } else if (error instanceof ApiError && error.statusCode === 422) { + //422 + await extractErrorZipFile(error, params); + return Result.failure( + getMessageInRedColor( + "An error occurred during portal generation due to an issue with the input. An error report has been written at the destination path: " + + params.generatedPortalArtifactsFolderPath + ) + ); + } else { + return Result.failure(getMessageInRedColor(error instanceof Error ? error.message : String(error))); + } +}; - // TODO: Uncomment this code block when the SDK is patched - // const file: FileWrapper = new FileWrapper(fs.createReadStream(zippedBuildFilePath)); - // const { result }: ApiResponse = - // await docsPortalController.generateOnPremPortalViaBuildInput(file); - // if ((data as NodeJS.ReadableStream).readable) { - // await writeFileUsingReadableStream(data as NodeJS.ReadableStream, zippedPortalPath); - if (!zip) { - await extractZipFile(zippedPortalPath, portalFolderPath); - await deleteFile(zippedPortalPath); +const parseErrorResponse = async (error: unknown): Promise => { + if (error instanceof Error && "body" in error) { + const stream = (error as { body: NodeJS.ReadableStream }).body; + return await parseStreamBodyToJson(stream); } + throw error; +}; + +const extractErrorZipFile = async (error: ApiError, params: GeneratePortalParams): Promise => { + const data = error.body as NodeJS.ReadableStream; + const writeStream = fs.createWriteStream(params.generatedPortalArtifactsZipFilePath); + + await new Promise((resolve, reject) => { + data + .pipe(writeStream) + .on("finish", () => resolve()) + .on("error", reject); + }); - return zip ? zippedPortalPath : portalFolderPath; - // } else { - // throw new Error("Couldn't download the portal"); - // } -}; \ No newline at end of file + if (!params.generateZipFile) { + await extractZipFile(params.generatedPortalArtifactsZipFilePath, params.generatedPortalArtifactsFolderPath); + await deleteFile(params.generatedPortalArtifactsZipFilePath); + } +}; diff --git a/src/controllers/portal/quickstart.ts b/src/controllers/portal/quickstart.ts index c45d7b80..5b3c2475 100644 --- a/src/controllers/portal/quickstart.ts +++ b/src/controllers/portal/quickstart.ts @@ -5,7 +5,7 @@ import * as filetype from "file-type"; import * as fs from "fs"; import * as fsextra from "fs-extra"; import { getAuthInfo } from "../../client-utils/auth-manager"; -import { APIValidationExternalApisController, ApiValidationSummary } from "@apimatic/sdk"; +import { ApiError, ApiValidationExternalApIsController, ApiValidationSummary } from "@apimatic/sdk"; import { LoginCredentials, SpecFile } from "../../types/portal/quickstart"; import { SDKClient } from "../../client-utils/sdk-client"; import { @@ -18,11 +18,12 @@ import { cleanUpGeneratedPortalFiles } from "../../utils/utils"; import { getValidationSummary } from "../api/validate"; -import { GetValidationParams } from "../../types/api/validate"; +import { APIValidateError, AuthorizationError, GetValidationParams } from "../../types/api/validate"; import { generatePortal } from "./serve"; import { metadataFileContent, staticPortalRepoUrl } from "../../config/env"; import { PortalServerService } from "../../services/portal/server"; import { PortalQuickstartPrompts } from "../../prompts/portal/quickstart"; +import { AuthenticationError } from "../../types/utils"; export class PortalQuickstartController { private readonly specUrl = @@ -131,17 +132,85 @@ export class PortalQuickstartController { } async getSpecValidationSummary( + prompts: PortalQuickstartPrompts, specFile: SpecFile, - apiValidationController: APIValidationExternalApisController + apiValidationController: ApiValidationExternalApIsController ): Promise { const validationFlags: GetValidationParams = { file: specFile.filePath, url: specFile.url }; - const validationSummary = getValidationSummary(validationFlags, apiValidationController); - - return validationSummary; + try { + const validationSummary = await getValidationSummary(validationFlags, apiValidationController); + return validationSummary; + } + catch (error) { + prompts.displaySpecValidationErrorMessage(); + if (axios.isAxiosError(error)) { + if (error.response) { + if (error.response.status === 400) { + throw new Error( + getMessageInRedColor( + `The provided spec file is not valid. Please ensure that the spec you have provided is a valid API definition file.` + ) + ); + } else if (error.response.status === 500) { + throw new Error( + getMessageInRedColor( + `The server encountered an error while validating your spec file, please try again later. If the issue persists, contact our team at support@apimatic.io` + ) + ); + } else { + throw new Error( + getMessageInRedColor( + `Something went wrong while validating your spec file. The server returned the following error ${error.response.status} ${error.response.statusText}. Please try again later. If the issue persists, contact our team at support@apimatic.io` + ) + ); + } + } else if (error.request) { + if (error.code === "ECONNABORTED") { + throw new Error(getMessageInRedColor(`The spec validation request timed out. Please try again.`)); + } else if (error.code === "ENOTFOUND" || error.code === "ERR_NETWORK") { + throw new Error( + getMessageInRedColor( + `Network error encountered while validating the spec file. Please check your connection and try again.` + ) + ); + } else { + throw new Error( + getMessageInRedColor( + `Something went wrong while validating the spec file, please try again. If the issue persists, reach out to our support team at support@apimatic.io` + ) + ); + } + } else { + throw new Error(getMessageInRedColor(`Failed to validate spec file: ${error.message}`)); + } + } else if ((error as ApiError).result) { + const apiError = error as ApiError; + if ((error as AuthorizationError).body && apiError.statusCode === 401) { + throw new Error("You are not authorized to perform this action."); + } else { + throw new Error((error as Error).message); + } + } else if ((error as AuthenticationError).statusCode === 401) { + throw new Error("You are not authorized to perform this action."); + } else if ( + (error as AuthenticationError).statusCode === 402 && + (error as AuthenticationError).body && + typeof (error as AuthenticationError).body === "string" + ) { + throw new Error((error as AuthenticationError).body); + } + else { + throw new Error( + getMessageInRedColor( + `Something went wrong while validating the spec file, please try again later. If the issue persists, contact our team at support@apimatic.io` + ) + ); + } + } } async setupBuildDirectory( @@ -212,7 +281,7 @@ export class PortalQuickstartController { } async generatePortalArtifacts(targetFolder: string, configDir: string): Promise { - const generatedPortalPath = path.join(targetFolder, "api-portal"); + const generatedPortalPath = path.join(targetFolder, "generated_portal"); try { await generatePortal(targetFolder, generatedPortalPath, configDir); @@ -227,7 +296,7 @@ export class PortalQuickstartController { ) ); } else if (error.response.status === 403) { - throw new Error(getMessageInRedColor(`Access denied. It looks like you don’t have access to APIMatic’s Docs as Code offering. Check your subscription details and contact our team at support@apimatic.io if you believe this is a mistake.`)); + throw new Error(getMessageInRedColor(`Access denied. It looks like you don't have access to APIMatic's Docs as Code offering. Check your subscription details and contact our team at support@apimatic.io if you believe this is a mistake.`)); } else if (error.response.status === 422) { throw new Error( getMessageInRedColor( @@ -268,12 +337,14 @@ export class PortalQuickstartController { } } - async servePortal(generatedPortalPath: string, targetFolder: string, configDir: string): Promise { + async servePortal(generatedPortalPath: string, targetFolder: string, configDir: string): Promise { const server = new PortalServerService(); server.setupServer(generatedPortalPath); - await server.startServer( + await cleanUpGeneratedPortalFiles(targetFolder); + + return await server.startServer( { generatedPortalPath, targetFolder, @@ -283,7 +354,5 @@ export class PortalQuickstartController { false, false ); - - await cleanUpGeneratedPortalFiles(targetFolder); } } diff --git a/src/controllers/portal/serve.ts b/src/controllers/portal/serve.ts index 3da8b1c4..feebd6d4 100644 --- a/src/controllers/portal/serve.ts +++ b/src/controllers/portal/serve.ts @@ -1,16 +1,15 @@ import * as path from "path"; import * as chokidar from "chokidar"; -import { Client, DocsPortalManagementController } from "@apimatic/sdk"; -import { SDKClient } from "../../client-utils/sdk-client"; import { cleanUpGeneratedPortalFiles, + getGeneratedFilesPaths, getMessageInMagentaColor, getMessageInRedColor, validateAndZipPortalSource } from "../../utils/utils"; import { GeneratePortalParams } from "../../types/portal/generate"; import { downloadDocsPortal } from "./generate"; -import axios, { CancelTokenSource } from "axios"; +import axios from "axios"; const progressSpinner = { frames: ["◒", "◐", "◓", "◑"].map((frame) => getMessageInMagentaColor(frame)), @@ -55,14 +54,10 @@ export const watchAndRegeneratePortal = async ( ignoredPaths: string[] = [] ) => { // Convert ignoredPaths to absolute paths for consistent comparison - const generatedZipPath = path.join(sourceDir, "portal_source.zip"); - const generatedPortalZipPath = path.join(sourceDir, "generated_portal.zip"); - const generatedPortalPath = path.join(path.dirname(portalDir), "api-portal"); + const generatedFilesPaths = getGeneratedFilesPaths(sourceDir, portalDir); const absoluteIgnoredPaths = [ ...ignoredPaths.filter((ignoredPath) => ignoredPath.trim() !== ""), - generatedZipPath, - generatedPortalZipPath, - generatedPortalPath + ...generatedFilesPaths ].map((ignoredPath) => path.resolve(sourceDir, ignoredPath)); const watcher = chokidar.watch(sourceDir, { @@ -73,20 +68,12 @@ export const watchAndRegeneratePortal = async ( const deletedDirectories = new Set(); - let cancellationToken: CancelTokenSource | null = null; - watcher .on("all", async (event, path) => { if (event == "unlinkDir") { deletedDirectories.add(path); } - if (cancellationToken) { - cancellationToken.cancel("New portal regeneration request, operation cancelled."); - } - - cancellationToken = axios.CancelToken.source(); - if (event == "unlink") { for (const dir of deletedDirectories) { if (path.startsWith(dir)) { @@ -94,7 +81,7 @@ export const watchAndRegeneratePortal = async ( } } } - await handleFileChange(sourceDir, portalDir, configDir, overrideAuthKey, absoluteIgnoredPaths, cancellationToken); + await handleFileChange(sourceDir, portalDir, configDir, overrideAuthKey, absoluteIgnoredPaths); }) .on("error", (error: Error) => { console.error("Watcher error:", error); @@ -108,28 +95,23 @@ export const generatePortal = async ( portalDir: string, configDir: string, ignoredPaths: string[] = [], - overrideAuthKey: string | null = null, - cancellationToken: CancelTokenSource | null = null + overrideAuthKey: string | null = null ) => { - const client: Client = await SDKClient.getInstance().getClient(overrideAuthKey, configDir); - const docsPortalController: DocsPortalManagementController = new DocsPortalManagementController(client); - const zippedBuildFilePath = await validateAndZipPortalSource( sourceDir, - path.join(sourceDir, "portal_source.zip"), + path.join(sourceDir, ".portal_source.zip"), ignoredPaths ); const generatePortalParams: GeneratePortalParams = { - zippedBuildFilePath, - portalFolderPath: portalDir, - zippedPortalPath: path.join(sourceDir, "generated_portal.zip"), - docsPortalController, + sourceBuildInputZipFilePath: zippedBuildFilePath, + generatedPortalArtifactsFolderPath: portalDir, + generatedPortalArtifactsZipFilePath: path.join(sourceDir, ".generated_portal.zip"), overrideAuthKey, - zip: false + generateZipFile: false }; - await downloadDocsPortal(generatePortalParams, configDir, cancellationToken); + await downloadDocsPortal(generatePortalParams, configDir); }; async function handleFileChange( @@ -137,12 +119,11 @@ async function handleFileChange( portalDir: string, configDir: string, overrideAuthKey: string | null, - absoluteIgnoredPaths: string[], - cancellationToken: CancelTokenSource | null + absoluteIgnoredPaths: string[] ) { progressSpinner.start(); try { - await generatePortal(sourceDir, portalDir, configDir, absoluteIgnoredPaths, overrideAuthKey, cancellationToken); + await generatePortal(sourceDir, portalDir, configDir, absoluteIgnoredPaths, overrideAuthKey); progressSpinner.stop(); await cleanUpGeneratedPortalFiles(sourceDir); } catch (error) { diff --git a/src/controllers/sdk/generate.ts b/src/controllers/sdk/generate.ts index 514917df..620ae809 100644 --- a/src/controllers/sdk/generate.ts +++ b/src/controllers/sdk/generate.ts @@ -1,19 +1,18 @@ import * as fs from "fs-extra"; import { ux } from "@oclif/core"; -import { - CodeGenerationExternalApisController, +import { ApiResponse, + CodeGenerationExternalApIsController, UserCodeGeneration, Platforms, - GenerateSdkViaUrlRequest -} from "@apimatic/sdk"; -import { ApiResponse, FileWrapper } from "@apimatic/sdk"; + GenerateSdkViaUrlRequest, + FileWrapper } from "@apimatic/sdk"; import { GenerationIdParams, SimplePlatforms, DownloadSDKParams } from "../../types/sdk/generate"; import { unzipFile, writeFileUsingReadableStream } from "../../utils/utils"; export const getSDKGenerationId = async ( { file, url, platform }: GenerationIdParams, - sdkGenerationController: CodeGenerationExternalApisController + sdkGenerationController: CodeGenerationExternalApIsController ): Promise => { ux.action.start("Generating SDK"); @@ -21,14 +20,14 @@ export const getSDKGenerationId = async ( const sdkPlatform = getSDKPlatform(platform) as Platforms; if (file) { const fileDescriptor = new FileWrapper(fs.createReadStream(file)); - generation = await sdkGenerationController.generateSDKViaFile(fileDescriptor, sdkPlatform); + generation = await sdkGenerationController.generateSdkViaFile(fileDescriptor, sdkPlatform); } else if (url) { // If url to spec file is provided const body: GenerateSdkViaUrlRequest = { url: url, template: sdkPlatform }; - generation = await sdkGenerationController.generateSDKViaURL(body); + generation = await sdkGenerationController.generateSdkViaUrl(body); } else { throw new Error("Please provide a specification file"); } @@ -51,10 +50,10 @@ const getSDKPlatform = (platform: string): Platforms | SimplePlatforms => { // Download Platform export const downloadGeneratedSDK = async ( { codeGenId, zippedSDKPath, sdkFolderPath, zip }: DownloadSDKParams, - sdkGenerationController: CodeGenerationExternalApisController + sdkGenerationController: CodeGenerationExternalApIsController ): Promise => { ux.action.start("Downloading SDK"); - const { result }: ApiResponse = await sdkGenerationController.downloadSDK(codeGenId); + const { result }: ApiResponse = await sdkGenerationController.downloadSdk(codeGenId); if ((result as NodeJS.ReadableStream).readable) { if (!zip) { await unzipFile(result as NodeJS.ReadableStream, sdkFolderPath); diff --git a/src/infrastructure/services/portal-service.ts b/src/infrastructure/services/portal-service.ts new file mode 100644 index 00000000..d503656b --- /dev/null +++ b/src/infrastructure/services/portal-service.ts @@ -0,0 +1,176 @@ +import * as fsExtra from "fs-extra"; +import * as fs from "fs"; +import * as path from "path"; +import { + ContentType, + DocsPortalManagementController, + Client, + UnauthorizedResponseError, + ProblemDetailsError, + FileWrapper, + ApiResponse, + ApiError, + TransformationController, + Transformation, + ExportFormats, + InternalServerErrorResponseError +} from "@apimatic/sdk"; +import { AuthInfo, getAuthInfo } from "../../client-utils/auth-manager"; +import { GeneratePortalParams, ErrorResponse } from "../../types/portal/generate"; +import { Result } from "../../types/common/result"; +import { getMessageInRedColor, parseStreamBodyToJson, extractZipFile, deleteFile } from "../../utils/utils"; +import { TransformationData } from "../../types/api/transform"; +import { Sdl } from "../../types/sdl/sdl"; + +export class PortalService { + private readonly CONTENT_TYPE = ContentType.EnumMultipartformdata; + private readonly TIMEOUT = 0; + + async generateOnPremPortal( + params: GeneratePortalParams, + configDir: string + ): Promise> { + if (!(await fsExtra.pathExists(params.sourceBuildInputZipFilePath))) { + return Result.failure("Build file doesn't exist"); + } + + const authInfo: AuthInfo | null = await getAuthInfo(configDir); + const authorizationHeader = this.createAuthorizationHeader(authInfo, params.overrideAuthKey); + const client = this.createApiClient(authorizationHeader); + const docsPortalManagementController = new DocsPortalManagementController(client); + + try { + const stream = await this.generatePortalFromSyncEndpoint( + docsPortalManagementController, + params.sourceBuildInputZipFilePath + ); + return Result.success(stream); + } catch (error) { + return Result.failure(await this.handlePortalGenerationErrors(error, params)); + } + } + + async generateSdl(specPath: string, configDir: string): Promise> { + if (!(await fsExtra.pathExists(specPath))) { + return Result.failure("Spec file doesn't exist"); + } + + const authInfo: AuthInfo | null = await getAuthInfo(configDir); + const authorizationHeader = this.createAuthorizationHeader(authInfo, null); + const client = this.createApiClient(authorizationHeader); + const transformationController = new TransformationController(client); + + try { + const file = new FileWrapper(fs.createReadStream(specPath)); + const generation: ApiResponse = await transformationController.transformViaFile( + ContentType.EnumMultipartformdata, + file, + ExportFormats.Apimatic + ); + + if (!generation.result.success) { + return this.createGenericErrorResult(); + } + + const transformationId = generation.result.id; + const { result }: TransformationData = await transformationController.downloadTransformedFile(transformationId); + if ((result as NodeJS.ReadableStream).readable) { + return Result.success((await parseStreamBodyToJson(result as NodeJS.ReadableStream)) as Sdl); + } else { + return this.createGenericErrorResult(); + } + } catch { + return this.createGenericErrorResult(); + } + } + + private createGenericErrorResult() { + return Result.failure("An unexpected error occurred"); + } + + private createAuthorizationHeader = (authInfo: AuthInfo | null, overrideAuthKey: string | null): string => { + const key = overrideAuthKey || authInfo?.authKey; + return `X-Auth-Key ${key ?? ""}`; + }; + + private createApiClient = (authorizationHeader: string): Client => { + return new Client({ + customHeaderAuthenticationCredentials: { + Authorization: authorizationHeader + }, + timeout: this.TIMEOUT + }); + }; + + private generatePortalFromSyncEndpoint = async ( + docsPortalManagementController: DocsPortalManagementController, + zippedBuildFilePath: string + ): Promise => { + const file = new FileWrapper(fs.createReadStream(zippedBuildFilePath)); + const response: ApiResponse = + await docsPortalManagementController.generateOnPremPortalViaBuildInput(this.CONTENT_TYPE, file); + + return response.result as NodeJS.ReadableStream; + }; + + private handlePortalGenerationErrors = async (error: unknown, params: GeneratePortalParams): Promise => { + if (error instanceof UnauthorizedResponseError) { + //401 + const body = await this.parseErrorResponse(error); + return getMessageInRedColor(body.message ?? "Unauthorized access."); + } else if (error instanceof ProblemDetailsError) { + //400 & 403 + const body = await this.parseErrorResponse(error); + const message = body.errors[Object.keys(body.errors)[0]][0]; + return getMessageInRedColor(body.title + "\n- " + message); + } else if (error instanceof ApiError && error.statusCode === 422) { + //422 + return await this.saveAndExtractErrorZipFile(error, params); + } else if (error instanceof InternalServerErrorResponseError) { + //500 + const body = await this.parseErrorResponse(error); + return getMessageInRedColor( + `${body.message} Please try again or reach out to our team at support@apimatic.io for help if your problem persists.` + ); + } else { + return getMessageInRedColor(error instanceof Error ? error.message : String(error)); + } + }; + + private parseErrorResponse = async (error: unknown): Promise => { + if (error instanceof Error && "body" in error) { + const stream = (error as { body: NodeJS.ReadableStream }).body; + return await parseStreamBodyToJson(stream); + } + throw error; + }; + + private saveAndExtractErrorZipFile = async (error: ApiError, params: GeneratePortalParams): Promise => { + const data = error.body as NodeJS.ReadableStream; + const writeStream = fs.createWriteStream(params.generatedPortalArtifactsZipFilePath); + + //TODO: Extract zip to temp folder and only copy the the debug report. + return await new Promise((resolve, reject) => { + data + .pipe(writeStream) + .on("finish", async () => { + await extractZipFile(params.generatedPortalArtifactsZipFilePath, params.generatedPortalArtifactsFolderPath); + await deleteFile(params.generatedPortalArtifactsZipFilePath); + await deleteFile(path.join(params.generatedPortalArtifactsFolderPath, "static")); + resolve( + getMessageInRedColor( + "An error occurred during portal generation due to an issue with the input. An error report has been written at the destination path: " + + path.join(params.generatedPortalArtifactsFolderPath, "apimatic-debug") + ) + ); + }) + .on("error", async () => { + reject( + getMessageInRedColor( + "An error occurred during portal generation due to an issue with the input. The error report could not be generated. Please try again later." + ) + ); + }); + }); + }; +} diff --git a/src/prompts/portal/generate.ts b/src/prompts/portal/generate.ts new file mode 100644 index 00000000..74e67378 --- /dev/null +++ b/src/prompts/portal/generate.ts @@ -0,0 +1,69 @@ +import { cancel, outro, select, spinner } from "@clack/prompts"; +import { isCancel } from "axios"; +import { getMessageInRedColor } from "../../utils/utils"; + +export class PortalGeneratePrompts { + private readonly spin = spinner(); + + async overwriteExistingPortalArtifactsPrompt(): Promise { + const useExistingFolder = await select({ + message: `The destination folder is not empty, do you want to overwrite the existing files?`, + options: [ + { value: "yes", label: "Yes" }, + { value: "no", label: "No" } + ] + }); + + if (isCancel(useExistingFolder)) { + cancel("Operation cancelled."); + return process.exit(1); + } + + if (useExistingFolder === "no") { + outro("Please enter a different destination folder or remove the existing files and try again."); + } + + return useExistingFolder === "yes"; + } + + async existingDestinationPortalZipPrompt(): Promise { + const useExistingZip = await select({ + message: `A zip file already exists at the specified destination path, do you want to overwrite it?`, + options: [ + { value: "yes", label: "Yes" }, + { value: "no", label: "No" } + ] + }); + + if (isCancel(useExistingZip)) { + cancel("Operation cancelled."); + return process.exit(1); + } + + if (useExistingZip === "no") { + outro("Please enter a different destination path or delete the existing zip file and try again."); + } + + return useExistingZip === "yes"; + } + + displayPortalGenerationMessage(): void { + this.spin.start("Generating portal..."); + } + + displayPortalGenerationSuccessMessage(): void { + this.spin.stop("✅ Portal generated successfully."); + } + + displayPortalGenerationErrorMessage(): void { + this.spin.stop(getMessageInRedColor(`Portal Generation failed.`)); + } + + displayOutroMessage(generatedPortalPath: string): void { + outro(`The generated portal can be found at ${generatedPortalPath}`); + } + + logError(error: string): void { + outro(error); + } +} \ No newline at end of file diff --git a/src/prompts/portal/new/toc.ts b/src/prompts/portal/new/toc.ts new file mode 100644 index 00000000..fc40f0eb --- /dev/null +++ b/src/prompts/portal/new/toc.ts @@ -0,0 +1,50 @@ +import { cancel, outro, select, spinner, isCancel, log } from "@clack/prompts"; + +export class PortalNewTocPrompts { + private readonly spin = spinner(); + + async overwriteExistingTocPrompt(): Promise { + const useExistingFile = await select({ + message: `A toc file already exists at the specified destination path, do you want to overwrite it?`, + options: [ + { value: "yes", label: "Yes" }, + { value: "no", label: "No" } + ] + }); + + if (isCancel(useExistingFile)) { + cancel("Operation cancelled."); + return process.exit(1); + } + + if (useExistingFile === "no") { + outro("Please enter a different destination path or delete the existing toc file and try again."); + } + + return useExistingFile === "yes"; + } + + startProgressIndicatorWithMessage(message: string): void { + this.spin.start(message); + } + + stopProgressIndicatorWithMessage(message: string) : void { + this.spin.stop(message); + } + + displayOutroMessage(tocPath: string): void { + outro(`✅ TOC file successfully created at: ${tocPath}`); + } + + logError(error: string): void { + outro(error); + } + + displayWarning(message: string): void { + log.warning(message); + } + + displayInfo(message: string): void { + log.step(message); + } +} \ No newline at end of file diff --git a/src/prompts/portal/quickstart.ts b/src/prompts/portal/quickstart.ts index 116e2218..68bbe06b 100644 --- a/src/prompts/portal/quickstart.ts +++ b/src/prompts/portal/quickstart.ts @@ -17,12 +17,11 @@ export class PortalQuickstartPrompts { private readonly vscodeExtensionUrl = "\u001b[4mhttps://marketplace.visualstudio.com/items?itemName=apimatic-developers.apimatic-for-vscode\u001b[0m"; private readonly serverUrl = "\u001b[4mhttp://localhost:3000\u001b[0m"; - private readonly referenceDocumentation = + private readonly referenceDocumentationUrl = "\u001b[4mhttps://docs.apimatic.io/platform-api/#/http/guides/generating-on-prem-api-portal/overview-generating-api-portal\u001b[0m"; - private readonly customizeTheSdks = + private readonly customizeTheSdksUrl = "\u001b[4mhttps://docs.apimatic.io/generate-sdks/codegen-settings/codegen-settings-overview\u001b[0m"; - private readonly portalDirectory = "apimatic-quickstart-portal"; - private readonly defaultPortalDirectory = path.join(process.cwd(), this.portalDirectory); + private readonly defaultPortalDirectoryPath = process.cwd(); displayWelcomeMessage(): void { intro(`Hello there 👋`); @@ -70,7 +69,7 @@ export class PortalQuickstartPrompts { return process.exit(0); } - return { email: String(email), password: String(pass) }; + return { email: String(email).trim(), password: String(pass).trim() }; } displayLoggingInMessage(): void { @@ -118,7 +117,7 @@ export class PortalQuickstartPrompts { return process.exit(0); } - return String(spec); + return String(spec).trim(); } displaySpecValidationMessage(): void { @@ -162,7 +161,7 @@ export class PortalQuickstartPrompts { "Good luck fixing your API definition! 🛠️ Feel free to run this command again once you're done." ) ); - process.exit(0); + return process.exit(0); } } @@ -201,13 +200,13 @@ export class PortalQuickstartPrompts { placeholder: "Enter absolute path to the directory or leave it empty to use the current directory.", defaultValue: "./", validate: (input) => { - const dirPath = path.resolve(input.trim() || this.portalDirectory); + const dirPath = path.resolve(input.trim()); - if (!fs.existsSync(dirPath) && dirPath != this.defaultPortalDirectory) { + if (!fs.existsSync(dirPath) && dirPath != this.defaultPortalDirectoryPath) { return getMessageInRedColor("Error: The specified directory path does not exist. Please try again."); } - if (dirPath !== this.defaultPortalDirectory) { + if (dirPath !== this.defaultPortalDirectoryPath) { const files = fs.readdirSync(dirPath).filter(item => !item.startsWith('.'));; if (files.length > 0) { return getMessageInRedColor("Error: The target directory is not empty. Please provide a path to an empty directory or clear its contents."); @@ -224,9 +223,9 @@ export class PortalQuickstartPrompts { } if (directory === "./") { - return this.defaultPortalDirectory; + return this.defaultPortalDirectoryPath; } else { - return path.join(String(directory), this.portalDirectory); + return String(directory).trim(); } } @@ -263,21 +262,21 @@ export class PortalQuickstartPrompts { this.spin.stop(getMessageInCyanColor("✅ Portal setup complete!")); } - displayOutroMessage(): void { + displayOutroMessage(directory: string): void { log.step( getMessageInCyanColor(`📢 Your API Portal is live at: ${this.serverUrl}\n`) + getMessageInCyanColor( - `Hot reload enabled! Edit files in ./apimatic-quickstart-portal to see changes instantly reflected in your API Portal.\n` + `Hot reload enabled! Edit files in ${directory} to see changes instantly reflected in your API Portal.\n` ) + getMessageInCyanColor(`Press CTRL+C to stop the server.\n\n`) + getMessageInCyanColor(`What's next?\n`) + getMessageInCyanColor(`- Check out the Interactive Playground in your API Portal.\n`) + - getMessageInCyanColor(`- Read the reference documentation to learn more about how you can customize this API Portal: ${this.referenceDocumentation}`) + + getMessageInCyanColor(`- Read the reference documentation to learn more about how you can customize this API Portal: ${this.referenceDocumentationUrl}`) + getMessageInCyanColor(` \n`) + getMessageInCyanColor( `- Review the SDK Documentation for your favourite programming language and download an SDK from the API Portal.\n` ) + - getMessageInCyanColor(`- Check out how you can customize the SDKs using Code Generation settings: ${this.customizeTheSdks}`) + + getMessageInCyanColor(`- Check out how you can customize the SDKs using Code Generation settings: ${this.customizeTheSdksUrl}`) + getMessageInCyanColor(` \n`) ); } diff --git a/src/sdk/authProvider.ts b/src/sdk/authProvider.ts new file mode 100644 index 00000000..a0de3a41 --- /dev/null +++ b/src/sdk/authProvider.ts @@ -0,0 +1,26 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + compositeAuthenticationProvider, + customHeaderAuthenticationProvider, +} from './authentication'; +import { Configuration } from './configuration'; + +export function createAuthProviderFromConfig(config: Partial) { + const authConfig = { + authorization: + config.customHeaderAuthenticationCredentials && + customHeaderAuthenticationProvider( + config.customHeaderAuthenticationCredentials + ), + }; + + return compositeAuthenticationProvider< + keyof typeof authConfig, + typeof authConfig + >(authConfig); +} diff --git a/src/sdk/authentication.ts b/src/sdk/authentication.ts new file mode 100644 index 00000000..8d775190 --- /dev/null +++ b/src/sdk/authentication.ts @@ -0,0 +1,7 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +export * from '@apimatic/authentication-adapters'; diff --git a/src/sdk/client.ts b/src/sdk/client.ts new file mode 100644 index 00000000..c5ac6583 --- /dev/null +++ b/src/sdk/client.ts @@ -0,0 +1,158 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { createAuthProviderFromConfig } from './authProvider'; +import { + AuthParams, + ClientInterface, + SdkRequestBuilder, + SdkRequestBuilderFactory, + Server, +} from './clientInterface'; +import { Configuration, Environment } from './configuration'; +import { + DEFAULT_CONFIGURATION, + DEFAULT_RETRY_CONFIG, + DEFAULT_LOGGING_OPTIONS, +} from './defaultConfiguration'; +import { ApiLogger, LoggingOptions, mergeLoggingOptions } from './core'; +import { ApiError } from './core'; +import { setHeader } from './core'; +import { updateUserAgent } from './core'; +import { + AbortError, + AuthenticatorInterface, + createRequestBuilderFactory, + HttpClientInterface, + RetryConfiguration, +} from './core'; +import { HttpClient } from './clientAdapter'; + +export class Client implements ClientInterface { + private _config: Readonly; + private _timeout: number; + private _retryConfig: RetryConfiguration; + private _loggingOp: LoggingOptions; + private _requestBuilderFactory: SdkRequestBuilderFactory; + private _userAgent: string; + + constructor(config?: Partial) { + this._config = { + ...DEFAULT_CONFIGURATION, + ...config, + }; + this._retryConfig = { + ...DEFAULT_RETRY_CONFIG, + ...this._config.httpClientOptions?.retryConfig, + }; + this._loggingOp = this._config.logging + ? mergeLoggingOptions(this._config.logging ?? {}) + : mergeLoggingOptions( + this._config.logging ?? {}, + DEFAULT_LOGGING_OPTIONS + ); + this._timeout = + typeof this._config.httpClientOptions?.timeout != 'undefined' + ? this._config.httpClientOptions.timeout + : this._config.timeout; + this._userAgent = updateUserAgent( + 'TypeScript-SDK/3.0.0 [OS: {os-info}, Engine: {engine}/{engine-version}]' + ); + this._requestBuilderFactory = createRequestHandlerFactory( + (server) => getBaseUri(server, this._config), + createAuthProviderFromConfig(this._config), + new HttpClient(AbortError, { + timeout: this._timeout, + clientConfigOverrides: this._config.unstable_httpClientOptions, + httpAgent: this._config.httpClientOptions?.httpAgent, + httpsAgent: this._config.httpClientOptions?.httpsAgent, + }), + [ + withErrorHandlers, + withUserAgent(this._userAgent), + withAuthenticationByDefault, + ], + this._retryConfig, + this._loggingOp + ); + } + + public getRequestBuilderFactory(): SdkRequestBuilderFactory { + return this._requestBuilderFactory; + } + + /** + * Clone this client and override given configuration options + */ + public withConfiguration(config: Partial) { + return new Client({ ...this._config, ...config }); + } +} + +function createHttpClientAdapter(client: HttpClient): HttpClientInterface { + return async (request, requestOptions) => { + return await client.executeRequest(request, requestOptions); + }; +} + +function getBaseUri(server: Server = 'default', config: Configuration): string { + if (config.environment === Environment.Production) { + if (server === 'default') { + return 'https://api.apimatic.io'; + } + } + throw new Error('Could not get Base URL. Invalid environment or server.'); +} + +function createRequestHandlerFactory( + baseUrlProvider: (server?: Server) => string, + authProvider: AuthenticatorInterface, + httpClient: HttpClient, + addons: ((rb: SdkRequestBuilder) => void)[], + retryConfig: RetryConfiguration, + loggingOptions: LoggingOptions +): SdkRequestBuilderFactory { + const requestBuilderFactory = createRequestBuilderFactory( + createHttpClientAdapter(httpClient), + baseUrlProvider, + ApiError, + authProvider, + retryConfig, + undefined, + new ApiLogger(loggingOptions) + ); + + return tap(requestBuilderFactory, ...addons); +} + +function tap( + requestBuilderFactory: SdkRequestBuilderFactory, + ...callback: ((requestBuilder: SdkRequestBuilder) => void)[] +): SdkRequestBuilderFactory { + return (...args) => { + const requestBuilder = requestBuilderFactory(...args); + callback.forEach((c) => c(requestBuilder)); + return requestBuilder; + }; +} + +function withErrorHandlers(rb: SdkRequestBuilder) { + rb.defaultToError(ApiError); +} + +function withUserAgent(userAgent: string) { + return (rb: SdkRequestBuilder) => { + rb.interceptRequest((request) => { + const headers = request.headers ?? {}; + setHeader(headers, 'user-agent', userAgent); + return { ...request, headers }; + }); + }; +} + +function withAuthenticationByDefault(rb: SdkRequestBuilder) { + rb.authenticate([{ authorization: true }]); +} diff --git a/src/sdk/clientAdapter.ts b/src/sdk/clientAdapter.ts new file mode 100644 index 00000000..b9c7096b --- /dev/null +++ b/src/sdk/clientAdapter.ts @@ -0,0 +1,7 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +export * from '@apimatic/axios-client-adapter'; diff --git a/src/sdk/clientInterface.ts b/src/sdk/clientInterface.ts new file mode 100644 index 00000000..df8e394d --- /dev/null +++ b/src/sdk/clientInterface.ts @@ -0,0 +1,27 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { createAuthProviderFromConfig } from './authProvider'; +import { AuthenticatorInterface, RequestBuilderFactory } from './core'; + +export interface ClientInterface { + getRequestBuilderFactory(): SdkRequestBuilderFactory; +} + +export type SdkRequestBuilderFactory = RequestBuilderFactory< + Server, + AuthParams +>; + +export type SdkRequestBuilder = ReturnType; + +export type Server = 'default'; + +export type AuthParams = ReturnType< + typeof createAuthProviderFromConfig +> extends AuthenticatorInterface + ? X + : never; diff --git a/src/sdk/configuration.ts b/src/sdk/configuration.ts new file mode 100644 index 00000000..9fd3ec39 --- /dev/null +++ b/src/sdk/configuration.ts @@ -0,0 +1,25 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { HttpClientOptions } from './clientAdapter'; +import { PartialLoggingOptions } from './core'; + +/** An interface for all configuration parameters required by the SDK. */ +export interface Configuration { + timeout: number; + environment: Environment; + customHeaderAuthenticationCredentials?: { + 'Authorization': string; + }; + httpClientOptions?: Partial; + unstable_httpClientOptions?: any; + logging?: PartialLoggingOptions; +} + +/** Environments available for API */ +export enum Environment { + Production = 'production', +} diff --git a/src/sdk/controllers/aPIValidationExternalApisController.ts b/src/sdk/controllers/aPIValidationExternalApisController.ts new file mode 100644 index 00000000..6f2c21a9 --- /dev/null +++ b/src/sdk/controllers/aPIValidationExternalApisController.ts @@ -0,0 +1,79 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { ApiResponse, FileWrapper, RequestOptions } from '../core'; +import { + ApiValidationSummary, + apiValidationSummarySchema, +} from '../models/apiValidationSummary'; +import { ContentType, contentTypeSchema } from '../models/contentType'; +import { string } from '../schema'; +import { BaseController } from './baseController'; +import { ApiError } from '@apimatic/core'; + +export class ApiValidationExternalApIsController extends BaseController { + /** + * Validate an API by uploading the API specification file. + * + * You can also specify [API Metadata](https://docs.apimatic.io/manage-apis/apimatic-metadata) while + * validating the API using this endpoint. When specifying Metadata, the uploaded file will be a zip + * file containing the API specification file and the `APIMATIC-META` json file. + * + * @param contentType + * @param file The API specification file.
The type of the specification file should be + * any of the [supported formats](https://docs.apimatic.io/api- + * transformer/overview-transformer#supported-input-formats). + * @return Response from the API call + */ + async validateApiViaFile( + contentType: ContentType, + file: FileWrapper, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('POST', '/validation/validate-via-file'); + req.baseUrl('default'); + const mapped = req.prepareArgs({ + contentType: [contentType, contentTypeSchema], + }); + req.header('Content-Type', mapped.contentType); + req.formData({ file: file }); + req.throwOn(400, ApiError, 'Bad Request'); + req.throwOn(401, ApiError, 'Unauthenticated'); + req.throwOn(403, ApiError, 'Forbidden'); + req.throwOn(500, ApiError, 'Internal Server Error'); + req.authenticate([{ authorization: true }]); + return req.callAsJson(apiValidationSummarySchema, requestOptions); + } + + /** + * Validate an API by providing the URL of the API specification file. + * + * You can also specify [API Metadata](https://docs.apimatic.io/manage-apis/apimatic-metadata) while + * validating the API using this endpoint. When specifying Metadata, the URL provided will be that of a + * zip file containing the API specification file and the `APIMATIC-META` json file. + * + * @param descriptionUrl The URL for the API specification file.

**Note:** This URL should be + * publicly accessible. + * @return Response from the API call + */ + async validateApiViaUrl( + descriptionUrl: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET', '/validation/validate-via-url'); + req.baseUrl('default'); + const mapped = req.prepareArgs({ + descriptionUrl: [descriptionUrl, string()], + }); + req.query('descriptionUrl', mapped.descriptionUrl); + req.throwOn(400, ApiError, 'Bad Request'); + req.throwOn(401, ApiError, 'Unauthenticated'); + req.throwOn(403, ApiError, 'Forbidden'); + req.throwOn(500, ApiError, 'Internal Server Error'); + req.authenticate([{ authorization: true }]); + return req.callAsJson(apiValidationSummarySchema, requestOptions); + } +} diff --git a/src/sdk/controllers/aPIValidationImportedApisController.ts b/src/sdk/controllers/aPIValidationImportedApisController.ts new file mode 100644 index 00000000..8c960c58 --- /dev/null +++ b/src/sdk/controllers/aPIValidationImportedApisController.ts @@ -0,0 +1,66 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { ApiResponse, RequestOptions } from '../core'; +import { + ApiValidationSummary, + apiValidationSummarySchema, +} from '../models/apiValidationSummary'; +import { + DocsValidationSummary, + docsValidationSummarySchema, +} from '../models/docsValidationSummary'; +import { string } from '../schema'; +import { BaseController } from './baseController'; +import { ApiError } from '@apimatic/core'; + +export class ApiValidationImportedApIsController extends BaseController { + /** + * Validate an API using the [APIMatic Validator](https://docs.apimatic.io/generate-sdks/overview- + * sdks#step-2-api-validation). + * + * @param apiEntityId The ID of the API Entity to perform validation for. + * @return Response from the API call + */ + async validateApi( + apiEntityId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + req.baseUrl('default'); + const mapped = req.prepareArgs({ apiEntityId: [apiEntityId, string()] }); + req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/api-validation-summary`; + req.throwOn(400, ApiError, 'Bad Request'); + req.throwOn(403, ApiError, 'Forbidden'); + req.throwOn(404, ApiError, 'API not found'); + req.throwOn(500, ApiError, 'Internal Server Error'); + req.authenticate([{ authorization: true }]); + return req.callAsJson(apiValidationSummarySchema, requestOptions); + } + + /** + * Validate an API for documentation generation. This process validates the API for missing examples or + * missing descriptions. + * + * @param apiEntityId The ID of the API Entity to perform validation for. + * @return Response from the API call + */ + async validateApiForDocs( + apiEntityId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + req.baseUrl('default'); + const mapped = req.prepareArgs({ apiEntityId: [apiEntityId, string()] }); + req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/docs-validation-summary`; + req.throwOn(400, ApiError, 'Bad Request'); + req.throwOn(403, ApiError, 'Forbidden'); + req.throwOn(404, ApiError, 'API not found'); + req.throwOn(500, ApiError, 'Internal Server Error'); + req.authenticate([{ authorization: true }]); + return req.callAsJson(docsValidationSummarySchema, requestOptions); + } +} diff --git a/src/sdk/controllers/apisManagementController.ts b/src/sdk/controllers/apisManagementController.ts new file mode 100644 index 00000000..1124471a --- /dev/null +++ b/src/sdk/controllers/apisManagementController.ts @@ -0,0 +1,277 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { ApiResponse, FileWrapper, RequestOptions } from '../core'; +import { Accept, acceptSchema } from '../models/accept'; +import { Accept2, accept2Schema } from '../models/accept2'; +import { ApiEntity, apiEntitySchema } from '../models/apiEntity'; +import { ContentType, contentTypeSchema } from '../models/contentType'; +import { ExportFormats, exportFormatsSchema } from '../models/exportFormats'; +import { + ImportApiVersionViaUrlRequest, + importApiVersionViaUrlRequestSchema, +} from '../models/importApiVersionViaUrlRequest'; +import { + ImportApiViaUrlRequest, + importApiViaUrlRequestSchema, +} from '../models/importApiViaUrlRequest'; +import { + InplaceImportApiViaUrlRequest, + inplaceImportApiViaUrlRequestSchema, +} from '../models/inplaceImportApiViaUrlRequest'; +import { string } from '../schema'; +import { BaseController } from './baseController'; +import { ApiError } from '@apimatic/core'; + +export class ApIsManagementController extends BaseController { + /** + * Import an API into the APIMatic Dashboard by uploading the API specification file. + * + * You can also specify [API Metadata](https://docs.apimatic.io/manage-apis/apimatic-metadata) while + * importing the API using this endpoint. When specifying Metadata, the uploaded file will be a zip + * file containing the API specification file and the `APIMATIC-META` json file. + * + * @param contentType + * @param file The API specification file.
The type of the specification file should be + * any of the [supported formats](https://docs.apimatic.io/api- + * transformer/overview-transformer#supported-input-formats). + * @return Response from the API call + */ + async importApiViaFile( + contentType: ContentType, + file: FileWrapper, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('POST', '/api-entities/import-via-file'); + const mapped = req.prepareArgs({ + contentType: [contentType, contentTypeSchema], + }); + req.header('Content-Type', mapped.contentType); + req.formData({ file: file }); + req.throwOn(400, ApiError, 'Bad Request'); + req.throwOn(412, ApiError, 'Precondition Failed'); + req.throwOn(422, ApiError, 'Unprocessable Entity'); + req.throwOn(500, ApiError, 'Internal Server Error'); + req.authenticate([{ authorization: true }]); + return req.callAsJson(apiEntitySchema, requestOptions); + } + + /** + * Import an API into the APIMatic Dashboard by providing the URL of the API specification file. + * + * You can also specify [API Metadata](https://docs.apimatic.io/manage-apis/apimatic-metadata) while + * importing the API using this endpoint. When specifying Metadata, the URL provided will be that of a + * zip file containing the API specification file and the `APIMATIC-META` json file. + * + * @param body Request Body + * @return Response from the API call + */ + async importApiViaUrl( + body: ImportApiViaUrlRequest, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('POST', '/api-entities/import-via-url'); + const mapped = req.prepareArgs({ + body: [body, importApiViaUrlRequestSchema], + }); + req.header( + 'Content-Type', + 'application/vnd.apimatic.apiEntityUrlImportDto.v1+json' + ); + req.json(mapped.body); + req.throwOn(400, ApiError, 'Bad Request'); + req.throwOn(412, ApiError, 'Precondition Failed'); + req.throwOn(422, ApiError, 'Unprocessable Entity'); + req.throwOn(500, ApiError, 'Internal Server Error'); + req.authenticate([{ authorization: true }]); + return req.callAsJson(apiEntitySchema, requestOptions); + } + + /** + * Import a new version for an API, against an existing API Group, by uploading the API specification + * file. + * + * You can also specify [API Metadata](https://docs.apimatic.io/manage-apis/apimatic-metadata) while + * importing the API version using this endpoint. When specifying Metadata, the uploaded file will be a + * zip file containing the API specification file and the `APIMATIC-META` json file. + * + * @param apiGroupId The ID of the API Group for which to import a new API version. + * @param accept + * @param versionOverride The version number with which the new API version will be imported. This + * version number will override the version specified in the API specification + * file.
APIMatic recommends versioning the API with the [versioning + * scheme](https://docs.apimatic.io/define-apis/basic-settings/#version) + * documented in the docs. + * @param file The API specification file.
The type of the specification file should + * be any of the [supported formats](https://docs.apimatic.io/api- + * transformer/overview-transformer#supported-input-formats). + * @return Response from the API call + */ + async importNewApiVersionViaFile( + apiGroupId: string, + accept: Accept, + versionOverride: string, + file: FileWrapper, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('POST'); + const mapped = req.prepareArgs({ + apiGroupId: [apiGroupId, string()], + accept: [accept, acceptSchema], + versionOverride: [versionOverride, string()], + }); + req.header('Accept', mapped.accept); + req.formData({ version_override: mapped.versionOverride, file: file }); + req.appendTemplatePath`/api-groups/${mapped.apiGroupId}/api-entities/import-via-file`; + req.authenticate([{ authorization: true }]); + return req.callAsJson(apiEntitySchema, requestOptions); + } + + /** + * Import a new version for an API, against an existing API Group, by providing the URL of the API + * specification file. + * + * You can also specify [API Metadata](https://docs.apimatic.io/manage-apis/apimatic-metadata) while + * importing the API version using this endpoint. When specifying Metadata, the URL provided will be + * that of a zip file containing the API specification file and the `APIMATIC-META` json file. + * + * @param apiGroupId The ID of the API Group for which to import a new API + * version. + * @param accept + * @param body Request Body + * @return Response from the API call + */ + async importNewApiVersionViaUrl( + apiGroupId: string, + accept: Accept, + body: ImportApiVersionViaUrlRequest, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('POST'); + const mapped = req.prepareArgs({ + apiGroupId: [apiGroupId, string()], + accept: [accept, acceptSchema], + body: [body, importApiVersionViaUrlRequestSchema], + }); + req.header('Accept', mapped.accept); + req.header( + 'Content-Type', + 'application/vnd.apimatic.apiGroupApiEntityUrlImportDto.v1+json' + ); + req.json(mapped.body); + req.appendTemplatePath`/api-groups/${mapped.apiGroupId}/api-entities/import-via-url`; + req.authenticate([{ authorization: true }]); + return req.callAsJson(apiEntitySchema, requestOptions); + } + + /** + * Replace an API version of an API Group, by uploading the API specification file that will replace + * the current version. + * + * You can also specify [API Metadata](https://docs.apimatic.io/manage-apis/apimatic-metadata) while + * importing the API version using this endpoint. When specifying Metadata, the uploaded file will be a + * zip file containing the API specification file and the `APIMATIC-META` json file. + * + * @param apiEntityId The ID of the API Entity to replace. + * @param accept + * @param file The API specification file.
The type of the specification file should be + * any of the [supported formats](https://docs.apimatic.io/api- + * transformer/overview-transformer#supported-input-formats). + * @return Response from the API call + */ + async inplaceApiImportViaFile( + apiEntityId: string, + accept: Accept2, + file: FileWrapper, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('PUT'); + const mapped = req.prepareArgs({ + apiEntityId: [apiEntityId, string()], + accept: [accept, accept2Schema], + }); + req.header('Accept', mapped.accept); + req.formData({ file: file }); + req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/import-via-file`; + req.authenticate([{ authorization: true }]); + return req.call(requestOptions); + } + + /** + * Replace an API version of an API Group, by providing the URL of the API specification file that will + * replace the current version. + * + * You can also specify [API Metadata](https://docs.apimatic.io/manage-apis/apimatic-metadata) while + * importing the API version using this endpoint. When specifying Metadata, the URL provided will be + * that of a zip file containing the API specification file and the `APIMATIC-META` json file. + * + * @param apiEntityId The ID of the API Entity to replace. + * @param body Request Body + * @return Response from the API call + */ + async inplaceApiImportViaUrl( + apiEntityId: string, + body: InplaceImportApiViaUrlRequest, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('PUT'); + const mapped = req.prepareArgs({ + apiEntityId: [apiEntityId, string()], + body: [body, inplaceImportApiViaUrlRequestSchema], + }); + req.header( + 'Content-Type', + 'application/vnd.apimatic.apiEntityUrlImportDto.v1+json' + ); + req.json(mapped.body); + req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/import-via-url`; + req.authenticate([{ authorization: true }]); + return req.call(requestOptions); + } + + /** + * Fetch an API Entity. + * + * @param apiEntityId The ID of the API Entity to fetch. + * @return Response from the API call + */ + async fetchApiEntity( + apiEntityId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + const mapped = req.prepareArgs({ apiEntityId: [apiEntityId, string()] }); + req.appendTemplatePath`/api-entities/${mapped.apiEntityId}`; + req.authenticate([{ authorization: true }]); + return req.callAsJson(apiEntitySchema, requestOptions); + } + + /** + * Download the API Specification file for a an API Version in any of the API Specification formats + * supported by APIMatic. + * + * @param apiEntityId The ID of the API Entity to download. + * @param format The format in which to download the API.
The format can be any of the + * [supported formats](https://docs.apimatic.io/api-transformer/overview- + * transformer#supported-input-formats). + * @return Response from the API call + */ + async downloadApiSpecification( + apiEntityId: string, + format: ExportFormats, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + const mapped = req.prepareArgs({ + apiEntityId: [apiEntityId, string()], + format: [format, exportFormatsSchema], + }); + req.query('format', mapped.format); + req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/api-description`; + req.authenticate([{ authorization: true }]); + return req.callAsStream(requestOptions); + } +} diff --git a/src/sdk/controllers/baseController.ts b/src/sdk/controllers/baseController.ts new file mode 100644 index 00000000..6dfb201e --- /dev/null +++ b/src/sdk/controllers/baseController.ts @@ -0,0 +1,17 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { ClientInterface, SdkRequestBuilderFactory } from '../clientInterface'; + +/** Base class for all controllers */ +export class BaseController { + /** Create a request builder */ + protected createRequest: SdkRequestBuilderFactory; + + constructor(client: ClientInterface) { + this.createRequest = client.getRequestBuilderFactory(); + } +} diff --git a/src/sdk/controllers/codeGenerationExternalApisController.ts b/src/sdk/controllers/codeGenerationExternalApisController.ts new file mode 100644 index 00000000..f6788265 --- /dev/null +++ b/src/sdk/controllers/codeGenerationExternalApisController.ts @@ -0,0 +1,184 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { ApiResponse, FileWrapper, RequestOptions } from '../core'; +import { + GenerateSdkViaUrlRequest, + generateSdkViaUrlRequestSchema, +} from '../models/generateSdkViaUrlRequest'; +import { Platforms, platformsSchema } from '../models/platforms'; +import { + UserCodeGeneration, + userCodeGenerationSchema, +} from '../models/userCodeGeneration'; +import { array, string } from '../schema'; +import { BaseController } from './baseController'; + +export class CodeGenerationExternalApIsController extends BaseController { + /** + * Generate an SDK for an API by by uploading the API specification file. + * + * This endpoint generates and then uploads the generated SDK to APIMatic's cloud storage. An ID for + * the generation performed is returned as part of the response. + * + * This endpoint does not import an API into APIMatic. + * + * @param file The API specification file.
The type of the specification file should be any of + * the [supported formats](https://docs.apimatic.io/api-transformer/overview- + * transformer#supported-input-formats). + * @param template The structure contains platforms that APIMatic CodeGen can generate SDKs and Docs + * in. + * @return Response from the API call + */ + async generateSdkViaFile( + file: FileWrapper, + template: Platforms, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest( + 'POST', + '/code-generations/generate-via-file' + ); + const mapped = req.prepareArgs({ template: [template, platformsSchema] }); + req.formData({ file: file, template: mapped.template }); + req.authenticate([{ authorization: true }]); + return req.callAsJson(userCodeGenerationSchema, requestOptions); + } + + /** + * Generate an SDK for an API by providing the URL of the API specification file. + * + * This endpoint generates and then uploads the generated SDK to APIMatic's cloud storage. An ID for + * the generation performed is returned as part of the response. + * + * This endpoint does not import an API into APIMatic. + * + * @param body Request Body + * @return Response from the API call + */ + async generateSdkViaUrl( + body: GenerateSdkViaUrlRequest, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest( + 'POST', + '/code-generations/generate-via-url' + ); + const mapped = req.prepareArgs({ + body: [body, generateSdkViaUrlRequestSchema], + }); + req.header( + 'Content-Type', + 'application/vnd.apimatic.userCodeGenerationDto.v1+json' + ); + req.json(mapped.body); + req.authenticate([{ authorization: true }]); + return req.callAsJson(userCodeGenerationSchema, requestOptions); + } + + /** + * Download the SDK generated via the Generate SDK endpoints. + * + * @param codegenId The ID of code generation received in the response of the [Generate SDK Via + * File](https://www.apimatic.io/api-docs- + * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api-endpoints/code-generation- + * external-apis/generate-sdk-via-file) or [Generate SDK Via URL ](https://www.apimatic. + * io/api-docs-preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api-endpoints/code- + * generation-external-apis/generate-sdk-via-url) calls. + * @return Response from the API call + */ + async downloadSdk( + codegenId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + const mapped = req.prepareArgs({ codegenId: [codegenId, string()] }); + req.appendTemplatePath`/code-generations/${mapped.codegenId}/generated-sdk`; + req.authenticate([{ authorization: true }]); + return req.callAsStream(requestOptions); + } + + /** + * Get a list of all SDK generations performed with external APIs via the Generate SDK endpoints. + * + * @return Response from the API call + */ + async listAllCodeGenerations( + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET', '/code-generations'); + req.authenticate([{ authorization: true }]); + return req.callAsJson(array(userCodeGenerationSchema), requestOptions); + } + + /** + * Download the API Specification file used as input for a specific SDK generation performed via the + * Generate SDK endpoints. + * + * @param codegenId The ID of the code generation to download the API specification for. The code + * generation ID is received in the response of the [Generate SDK Via File](https://www. + * apimatic.io/api-docs-preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api- + * endpoints/code-generation-external-apis/generate-sdk-via-file) or [Generate SDK Via + * URL ](https://www.apimatic.io/api-docs- + * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api-endpoints/code-generation- + * external-apis/generate-sdk-via-url) calls + * @return Response from the API call + */ + async downloadInputFile( + codegenId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + const mapped = req.prepareArgs({ codegenId: [codegenId, string()] }); + req.appendTemplatePath`/code-generations/${mapped.codegenId}/input-file`; + req.authenticate([{ authorization: true }]); + return req.callAsStream(requestOptions); + } + + /** + * Get details on an SDK generation performed for an external API via the Generate SDK endpoints. + * + * @param codegenId The ID of the code generation to fetch. The code generation ID is received in the + * response of the [Generate SDK Via File](https://www.apimatic.io/api-docs- + * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api-endpoints/code-generation- + * external-apis/generate-sdk-via-file) or [Generate SDK Via URL ](https://www.apimatic. + * io/api-docs-preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api-endpoints/code- + * generation-external-apis/generate-sdk-via-url) calls. + * @return Response from the API call + */ + async getACodeGeneration( + codegenId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + const mapped = req.prepareArgs({ codegenId: [codegenId, string()] }); + req.appendTemplatePath`/code-generations/${mapped.codegenId}`; + req.authenticate([{ authorization: true }]); + return req.callAsJson(userCodeGenerationSchema, requestOptions); + } + + /** + * Delete an SDK generation performed for an API via the Generate SDK endpoints. + * + * @param codegenId The ID of the code generation to delete. The code generation ID is received in the + * response of the [Generate SDK Via File](https://www.apimatic.io/api-docs- + * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api-endpoints/code-generation- + * external-apis/generate-sdk-via-file) or [Generate SDK Via URL ](https://www.apimatic. + * io/api-docs-preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api-endpoints/code- + * generation-external-apis/generate-sdk-via-url) calls. + * @return Response from the API call + */ + async deleteCodeGeneration1( + codegenId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('DELETE'); + const mapped = req.prepareArgs({ codegenId: [codegenId, string()] }); + req.appendTemplatePath`/code-generations/${mapped.codegenId}`; + req.authenticate([{ authorization: true }]); + return req.call(requestOptions); + } +} diff --git a/src/sdk/controllers/codeGenerationImportedApisController.ts b/src/sdk/controllers/codeGenerationImportedApisController.ts new file mode 100644 index 00000000..c616316f --- /dev/null +++ b/src/sdk/controllers/codeGenerationImportedApisController.ts @@ -0,0 +1,136 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { ApiResponse, RequestOptions } from '../core'; +import { + ApiEntityCodeGeneration, + apiEntityCodeGenerationSchema, +} from '../models/apiEntityCodeGeneration'; +import { Platforms, platformsSchema } from '../models/platforms'; +import { array, string } from '../schema'; +import { BaseController } from './baseController'; + +export class CodeGenerationImportedApIsController extends BaseController { + /** + * Generate an SDK for an API Version. + * + * This endpoint generates and then uploads the generated SDK to APIMatic's cloud storage. An ID for + * the generation performed is returned as part of the response. + * + * @param apiEntityId The ID of the API Entity to generate the SDK for. + * @param template The structure contains platforms that APIMatic CodeGen can generate SDKs and + * Docs in. + * @return Response from the API call + */ + async generateSdk( + apiEntityId: string, + template: Platforms, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('POST'); + const mapped = req.prepareArgs({ + apiEntityId: [apiEntityId, string()], + template: [template, platformsSchema], + }); + req.header('Content-Type', 'application/x-www-form-urlencoded'); + req.form({ template: mapped.template }); + req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/code-generations/generate`; + req.authenticate([{ authorization: true }]); + return req.callAsJson(apiEntityCodeGenerationSchema, requestOptions); + } + + /** + * Download the SDK generated via the Generate SDK endpoint. + * + * @param apiEntityId The ID of the API Entity for which the SDK was generated. + * @param codegenId The ID of code generation received in the response of the [SDK generation + * call](https://www.apimatic.io/api-docs- + * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api-endpoints/code- + * generation-imported-apis/generate-sdk). + * @return Response from the API call + */ + async downloadSdk( + apiEntityId: string, + codegenId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + const mapped = req.prepareArgs({ + apiEntityId: [apiEntityId, string()], + codegenId: [codegenId, string()], + }); + req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/code-generations/${mapped.codegenId}/generated-sdk`; + req.authenticate([{ authorization: true }]); + return req.callAsStream(requestOptions); + } + + /** + * Get a list of all SDK generations done against an API Version via the Generate SDK endpoint. + * + * @param apiEntityId The ID of the API Entity for which to list code generations. + * @return Response from the API call + */ + async listAllCodeGenerations( + apiEntityId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + const mapped = req.prepareArgs({ apiEntityId: [apiEntityId, string()] }); + req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/code-generations`; + req.authenticate([{ authorization: true }]); + return req.callAsJson(array(apiEntityCodeGenerationSchema), requestOptions); + } + + /** + * Get details on an SDK generation performed via the Generate SDK endpoint. + * + * @param apiEntityId The ID of the API Entity to fetch the code generation for. + * @param codegenId The ID of the code generation to fetch. The code generation ID is received in the + * response of the [SDK generation call](https://www.apimatic.io/api-docs- + * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api-endpoints/code- + * generation-imported-apis/generate-sdk). + * @return Response from the API call + */ + async getACodeGeneration( + apiEntityId: string, + codegenId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + const mapped = req.prepareArgs({ + apiEntityId: [apiEntityId, string()], + codegenId: [codegenId, string()], + }); + req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/code-generations/${mapped.codegenId}`; + req.authenticate([{ authorization: true }]); + return req.callAsJson(apiEntityCodeGenerationSchema, requestOptions); + } + + /** + * Delete an SDK generation performed for an API Version via the Generate SDK endpoint. + * + * @param apiEntityId The ID of the API Entity to delete the code generation for. + * @param codegenId The ID of the code generation to delete. The code generation ID is received in the + * response of the [SDK generation call](https://www.apimatic.io/api-docs- + * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api-endpoints/code- + * generation-imported-apis/generate-sdk). + * @return Response from the API call + */ + async deleteCodeGeneration( + apiEntityId: string, + codegenId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('DELETE'); + const mapped = req.prepareArgs({ + apiEntityId: [apiEntityId, string()], + codegenId: [codegenId, string()], + }); + req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/code-generations/${mapped.codegenId}`; + req.authenticate([{ authorization: true }]); + return req.call(requestOptions); + } +} diff --git a/src/sdk/controllers/docsPortalGenerationAsyncController.ts b/src/sdk/controllers/docsPortalGenerationAsyncController.ts new file mode 100644 index 00000000..bb42b08d --- /dev/null +++ b/src/sdk/controllers/docsPortalGenerationAsyncController.ts @@ -0,0 +1,102 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { ApiResponse, FileWrapper, RequestOptions } from '../core'; +import { ContentType, contentTypeSchema } from '../models/contentType'; +import { + PortalGenerationAsyncResponse, + portalGenerationAsyncResponseSchema, +} from '../models/portalGenerationAsyncResponse'; +import { + PortalGenerationStatusResponse, + portalGenerationStatusResponseSchema, +} from '../models/portalGenerationStatusResponse'; +import { optional, string } from '../schema'; +import { BaseController } from './baseController'; +import { ApiError } from '@apimatic/core'; + +export class DocsPortalGenerationAsyncController extends BaseController { + /** + * Create an async On-premise Documentation Portal Generation request by providing a Portal Build + * Input + * + * @param contentType + * @param file The input file to the Portal Generator. Must contain the build file. + * @param xApiMaticCallbackUrl Optional header containing callback url. This url will be called by + * the server once the portal generation completes + * @return Response from the API call + */ + async generateOnPremPortalViaBuildInputAsync( + contentType: ContentType, + file: FileWrapper, + xApiMaticCallbackUrl?: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('POST', '/portal/v2'); + const mapped = req.prepareArgs({ + contentType: [contentType, contentTypeSchema], + xApiMaticCallbackUrl: [xApiMaticCallbackUrl, optional(string())], + }); + req.header('Content-Type', mapped.contentType); + req.header('X-APIMatic-CallbackUrl', mapped.xApiMaticCallbackUrl); + req.formData({ file: file }); + req.throwOn(400, ApiError, 'Bad Request'); + req.throwOn(401, ApiError, 'Unauthorized'); + req.throwOn(402, ApiError, 'Subscription Issue'); + req.authenticate([{ authorization: true }]); + return req.callAsJson(portalGenerationAsyncResponseSchema, requestOptions); + } + + /** + * Get the status of a portal generation request + * + * @param id + * @return Response from the API call + */ + async getPortalGenerationStatus( + id: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + const mapped = req.prepareArgs({ id: [id, string()] }); + req.appendTemplatePath`/portal/v2/${mapped.id}/status`; + req.throwOn(400, ApiError, 'Bad Request'); + req.throwOn(401, ApiError, 'Unauthorized'); + req.throwOn(402, ApiError, 'Subscription Issue'); + req.authenticate([{ authorization: true }]); + return req.callAsJson(portalGenerationStatusResponseSchema, requestOptions); + } + + /** + * Downloads the portal artifacts. The generated artifacts include: + * + * + * 1. SDKs + * + * 2. Docs + * + * 3. API Specification files + * + * + * The endpoint returns a zip file that contains a static Site and can be hosted on any Web Server. + * + * @param id + * @return Response from the API call + */ + async downloadGeneratedPortal( + id: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + const mapped = req.prepareArgs({ id: [id, string()] }); + req.appendTemplatePath`/portal/v2/${mapped.id}/download`; + req.throwOn(400, ApiError, 'Bad Request'); + req.throwOn(401, ApiError, 'Unauthorized'); + req.throwOn(402, ApiError, 'Subscription Issue'); + req.authenticate([{ authorization: true }]); + return req.callAsStream(requestOptions); + } +} diff --git a/src/sdk/controllers/docsPortalManagementController.ts b/src/sdk/controllers/docsPortalManagementController.ts new file mode 100644 index 00000000..0eab4e4d --- /dev/null +++ b/src/sdk/controllers/docsPortalManagementController.ts @@ -0,0 +1,223 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { ApiResponse, FileWrapper, RequestOptions } from '../core'; +import { Accept3, accept3Schema } from '../models/accept3'; +import { ContentType, contentTypeSchema } from '../models/contentType'; +import { array, optional, string, unknown } from '../schema'; +import { BaseController } from './baseController'; +import { ApiError } from '@apimatic/core'; +import { InternalServerErrorResponseError } from '../errors/internalServerErrorResponseError'; +import { ProblemDetailsError } from '../errors/problemDetailsError'; +import { UnauthorizedResponseError } from '../errors/unauthorizedResponseError'; + +export class DocsPortalManagementController extends BaseController { + /** + * Publish artifacts for a Hosted Portal. + * + * This endpoint regenerates all the artifacts for a hosted portal and uploads them to APIMatic's cloud + * storage, from where the Portal fetches them. These artifacts include: + * + * 1. SDKs + * 2. Docs + * 3. API Specification files + * + * Call this endpoint to update your Hosted Portal after you update an API Entity via any of the Import + * API Endpoints. + * + * __**Note: If you have an embedded portal against the same API Entity, artifacts for that portal will + * get updated as well.**__ + * + * @param apiEntityId The ID of the API Entity to update the portal artifacts for. + * @return Response from the API call + */ + async publishHostedPortal( + apiEntityId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('PUT'); + const mapped = req.prepareArgs({ apiEntityId: [apiEntityId, string()] }); + req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/hosted-portal`; + req.authenticate([{ authorization: true }]); + return req.call(requestOptions); + } + + /** + * Publish artifacts for an Embedded Portal and get the Portal Embed script. + * + * This endpoint regenerates all the artifacts for an embedded portal and uploads them to APIMatic's + * cloud storage, from where the Portal fetches them. These artifacts include: + * + * 1. SDKs + * 2. Docs + * 3. API Specification files + * + * Call this endpoint to update your Embedded Portal after you update an API Entity via any of the + * Import API Endpoints. This endpoint returns the Portal Embed script in the response. + * + * __**Note: If you have a hosted portal against the same API Entity, artifacts for that portal will + * get updated as well.**__ + * + * @param apiEntityId The ID of the API Entity to update the portal artifacts for. + * @return Response from the API call + */ + async publishEmbeddedPortal( + apiEntityId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('PUT'); + const mapped = req.prepareArgs({ apiEntityId: [apiEntityId, string()] }); + req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/embedded-portal`; + req.authenticate([{ authorization: true }]); + return req.call(requestOptions); + } + + /** + * Generate an On-premise Documentation Portal for an API Entity. This endpoint generates all artifacts + * for the Portal and packages them together into a zip file along with the required HTML, CSS and JS + * files. The generated artifacts include: + * + * 1. SDKs + * 2. Docs + * 3. API Specification files + * + * The endpoint returns a zip file that contains a static Site and can be hosted on any Web Server. + * + * @param apiEntityId The ID of the API Entity to generate the Portal for. + * @param accept Example: application/zip + * @return Response from the API call + */ + async generateOnPremPortalViaApiEntity( + apiEntityId: string, + accept: Accept3, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + const mapped = req.prepareArgs({ + apiEntityId: [apiEntityId, string()], + accept: [accept, accept3Schema], + }); + req.header('Accept', mapped.accept); + req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/on-prem-portal`; + req.authenticate([{ authorization: true }]); + return req.call(requestOptions); + } + + /** + * Generate an On-premise Documentation Portal by uploading a Portal Build Input. This endpoint + * generates all artifacts for the Portal and packages them together into a zip file along with the + * required HTML, CSS and JS files. The generated artifacts include: + * + * 1. SDKs + * 2. Docs + * 3. API Specification files + * + * The endpoint returns a zip file that contains a static Site and can be hosted on any Web Server. + * + * @param contentType + * @param file The input file to the Portal Generator. Must contain the build file. + * @return Response from the API call + */ + async generateOnPremPortalViaBuildInput( + contentType: ContentType, + file: FileWrapper, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('POST', '/portal'); + const mapped = req.prepareArgs({ + contentType: [contentType, contentTypeSchema], + }); + req.header('Content-Type', mapped.contentType); + req.formData({ file: file }); + req.throwOn(400, ProblemDetailsError, 'Bad Request'); + req.throwOn(401, UnauthorizedResponseError, 'Unauthorized'); + req.throwOn(403, ProblemDetailsError, 'Subscription Issue'); + req.throwOn( + 422, + ApiError, + 'Unprocessable Entity - Contains error.zip for build issues' + ); + req.throwOn(500, InternalServerErrorResponseError, 'Internal Server Error'); + req.authenticate([{ authorization: true }]); + return req.callAsStream(requestOptions); + } + + /** + * Generate Build Input for a Portal created using the UI workflow. The Build Input will correspond to + * the draft version of the Portal i.e. unpublished changes will also be included. + * This can be used to create a backup of your Portal or to migrate from the UI workflow to the docs as + * code workflow. + * + * @param apiGroupId + * @param apiEntities + * @return Response from the API call + */ + async generateBuildInputForUnpublishedPortal( + apiGroupId: string, + apiEntities?: string[], + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + const mapped = req.prepareArgs({ + apiGroupId: [apiGroupId, string()], + apiEntities: [apiEntities, optional(array(string()))], + }); + req.query('apiEntities', mapped.apiEntities); + req.appendTemplatePath`/portal/build/${mapped.apiGroupId}/draft`; + req.authenticate([{ authorization: true }]); + return req.callAsJson(optional(unknown()), requestOptions); + } + + /** + * Generate Build Input for a Portal created using the UI workflow. The Build Input will correspond to + * the published version of the Portal i.e. unpublished changes will not be inlcuded. + * This can be used to create a backup of your Portal or to migrate from the UI workflow to the docs as + * code workflow. + * + * @param apiGroupId + * @param apiEntities + * @return Response from the API call + */ + async generateBuildInputForPublishedPortal( + apiGroupId: string, + apiEntities?: string[], + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + const mapped = req.prepareArgs({ + apiGroupId: [apiGroupId, string()], + apiEntities: [apiEntities, optional(array(string()))], + }); + req.query('apiEntities', mapped.apiEntities); + req.appendTemplatePath`/portal/build/${mapped.apiGroupId}/published`; + req.authenticate([{ authorization: true }]); + return req.callAsJson(optional(unknown()), requestOptions); + } + + /** + * Unpublish a Hosted or Embedded Portal published for an API Entity. Calling this endpoint deletes all + * the published artifacts for a Portal from APIMatic's cloud storage. + * + * In case of a Hosted Portal, to completely remove the Portal, this endpoint needs to be called + * against all API versions that the Portal hosts. + * + * In case of an Embedded Portal, to completely remove the Portal, the user needs to manually remove + * the Portal Embed script from the embedding site. + * + * @param apiEntityId The ID of the API Entity to unpublish the Portal artifacts for. + * @return Response from the API call + */ + async unpublishPortal( + apiEntityId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('DELETE'); + const mapped = req.prepareArgs({ apiEntityId: [apiEntityId, string()] }); + req.appendTemplatePath`/api-entities/${mapped.apiEntityId}/portal`; + req.authenticate([{ authorization: true }]); + return req.call(requestOptions); + } +} diff --git a/src/sdk/controllers/transformationController.ts b/src/sdk/controllers/transformationController.ts new file mode 100644 index 00000000..233fc887 --- /dev/null +++ b/src/sdk/controllers/transformationController.ts @@ -0,0 +1,196 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { ApiResponse, FileWrapper, RequestOptions } from '../core'; +import { ContentType, contentTypeSchema } from '../models/contentType'; +import { ExportFormats, exportFormatsSchema } from '../models/exportFormats'; +import { Transformation, transformationSchema } from '../models/transformation'; +import { + TransformViaUrlRequest, + transformViaUrlRequestSchema, +} from '../models/transformViaUrlRequest'; +import { array, string } from '../schema'; +import { BaseController } from './baseController'; + +export class TransformationController extends BaseController { + /** + * Transform an API into any of the supported API specification formats by uploading the API + * specification file. + * + * This endpoint transforms and then uploads the transformed API specification to APIMatic's cloud + * storage. An ID for the transformation performed is returned as part of the response. + * + * @param contentType + * @param file The API specification file.
The type of the specification file should be + * any of the [supported formats](https://docs.apimatic.io/api- + * transformer/overview-transformer#supported-input-formats). + * @param exportFormat The structure contains API specification formats that Transformer can + * convert to. + * @return Response from the API call + */ + async transformViaFile( + contentType: ContentType, + file: FileWrapper, + exportFormat: ExportFormats, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest( + 'POST', + '/transformations/transform-via-file' + ); + const mapped = req.prepareArgs({ + contentType: [contentType, contentTypeSchema], + exportFormat: [exportFormat, exportFormatsSchema], + }); + req.header('Content-Type', mapped.contentType); + req.formData({ file: file, export_format: mapped.exportFormat }); + req.authenticate([{ authorization: true }]); + return req.callAsJson(transformationSchema, requestOptions); + } + + /** + * Transform an API into any of the supported API specification formats by providing the URL of the API + * specification file. + * + * This endpoint transforms and then uploads the transformed API specification to APIMatic's cloud + * storage. An ID for the transformation performed is returned as part of the response. + * + * @param body Request Body + * @return Response from the API call + */ + async transformViaUrl( + body: TransformViaUrlRequest, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest( + 'POST', + '/transformations/transform-via-url' + ); + const mapped = req.prepareArgs({ + body: [body, transformViaUrlRequestSchema], + }); + req.header( + 'Content-Type', + 'application/vnd.apimatic.urlTransformDto.v1+json' + ); + req.json(mapped.body); + req.authenticate([{ authorization: true }]); + return req.callAsJson(transformationSchema, requestOptions); + } + + /** + * Download the transformed API specification file transformed via the Transformation endpoints. + * + * @param transformationId The ID of transformation received in the response of the [Transform Via File + * ](https://www.apimatic.io/api-docs- + * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api- + * endpoints/transformation/transform-via-file) or [Transform Via URL ](https: + * //www.apimatic.io/api-docs- + * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api- + * endpoints/transformation/transform-via-url) calls. + * @return Response from the API call + */ + async downloadTransformedFile( + transformationId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + const mapped = req.prepareArgs({ + transformationId: [transformationId, string()], + }); + req.appendTemplatePath`/transformations/${mapped.transformationId}/converted-file`; + req.authenticate([{ authorization: true }]); + return req.callAsStream(requestOptions); + } + + /** + * Download the API Specification file used as input for a particular Transformation performed via the + * Transformation endpoints. + * + * @param transformationId The ID of the transformation to download the API specification for. The + * transformation ID is received in the response of the [Transform Via File + * ](https://www.apimatic.io/api-docs- + * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api- + * endpoints/transformation/transform-via-file) or [Transform Via URL](https://www. + * apimatic.io/api-docs-preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api- + * endpoints/transformation/transform-via-url) calls. + * @return Response from the API call + */ + async downloadInputFile( + transformationId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + const mapped = req.prepareArgs({ + transformationId: [transformationId, string()], + }); + req.appendTemplatePath`/transformations/${mapped.transformationId}/input-file`; + req.authenticate([{ authorization: true }]); + return req.callAsStream(requestOptions); + } + + /** + * Get a list of all API transformations performed. + * + * @return Response from the API call + */ + async listAllTransformations( + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET', '/transformations'); + req.authenticate([{ authorization: true }]); + return req.callAsJson(array(transformationSchema), requestOptions); + } + + /** + * Get details on a particular Transformation performed via the Transformation endpoints. + * + * @param transformationId The ID of the transformation to fetch. The transformation ID is received in + * the response of the [Transform Via File ](https://www.apimatic.io/api-docs- + * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api- + * endpoints/transformation/transform-via-file) or [Transform Via URL ](https: + * //www.apimatic.io/api-docs- + * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api- + * endpoints/transformation/transform-via-url) calls. + * @return Response from the API call + */ + async getATransformation( + transformationId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('GET'); + const mapped = req.prepareArgs({ + transformationId: [transformationId, string()], + }); + req.appendTemplatePath`/transformations/${mapped.transformationId}`; + req.authenticate([{ authorization: true }]); + return req.callAsJson(transformationSchema, requestOptions); + } + + /** + * Delete a particular Transformation performed for an API via the Transformation endpoints. + * + * @param transformationId The ID of the transformation to delete. The transformation ID is received in + * the response of the [Transform Via File ](https://www.apimatic.io/api-docs- + * preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api- + * endpoints/transformation/transform-via-file) or [Transform Via URL](https://www. + * apimatic.io/api-docs-preview/dashboard/60eea3b7a73395c3052d961b/v/3_0#/http/api- + * endpoints/transformation/transform-via-url) calls. + * @return Response from the API call + */ + async deleteTransformation( + transformationId: string, + requestOptions?: RequestOptions + ): Promise> { + const req = this.createRequest('DELETE'); + const mapped = req.prepareArgs({ + transformationId: [transformationId, string()], + }); + req.appendTemplatePath`/transformations/${mapped.transformationId}`; + req.authenticate([{ authorization: true }]); + return req.call(requestOptions); + } +} diff --git a/src/sdk/core.ts b/src/sdk/core.ts new file mode 100644 index 00000000..6b9d56b6 --- /dev/null +++ b/src/sdk/core.ts @@ -0,0 +1,7 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +export * from '@apimatic/core'; diff --git a/src/sdk/defaultConfiguration.ts b/src/sdk/defaultConfiguration.ts new file mode 100644 index 00000000..b58264f5 --- /dev/null +++ b/src/sdk/defaultConfiguration.ts @@ -0,0 +1,35 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { Configuration, Environment } from './configuration'; +import { + LoggingOptions, + mergeLoggingOptions, + NullLogger, + RetryConfiguration, +} from './core'; + +/** Default values for the configuration parameters of the client. */ +export const DEFAULT_CONFIGURATION: Configuration = { + timeout: 30000, + environment: Environment.Production, +}; + +/** Default values for retry configuration parameters. */ +export const DEFAULT_RETRY_CONFIG: RetryConfiguration = { + maxNumberOfRetries: 0, + retryOnTimeout: true, + retryInterval: 1, + maximumRetryWaitTime: 0, + backoffFactor: 2, + httpStatusCodesToRetry: [408, 413, 429, 500, 502, 503, 504, 521, 522, 524], + httpMethodsToRetry: ['GET', 'PUT'], +}; + +/** Default values for logging options. */ +export const DEFAULT_LOGGING_OPTIONS: LoggingOptions = mergeLoggingOptions({ + logger: new NullLogger(), +}); diff --git a/src/sdk/errors/internalServerErrorResponseError.ts b/src/sdk/errors/internalServerErrorResponseError.ts new file mode 100644 index 00000000..59da0c46 --- /dev/null +++ b/src/sdk/errors/internalServerErrorResponseError.ts @@ -0,0 +1,19 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { ApiError } from '../core'; + +/** + * Creates an instance of InternalServerErrorResponse + */ +interface InternalServerErrorResponse { + message?: string; + additionalProperties?: Record; +} + +export class InternalServerErrorResponseError extends ApiError< + InternalServerErrorResponse +> {} diff --git a/src/sdk/errors/problemDetailsError.ts b/src/sdk/errors/problemDetailsError.ts new file mode 100644 index 00000000..2167b0f7 --- /dev/null +++ b/src/sdk/errors/problemDetailsError.ts @@ -0,0 +1,22 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { ApiError } from '../core'; + +/** + * Creates an instance of ProblemDetails + */ +interface ProblemDetails { + type?: string; + title?: string; + status?: number; + detail?: string; + instance?: string; + errors?: Record; + additionalProperties?: Record; +} + +export class ProblemDetailsError extends ApiError {} diff --git a/src/sdk/errors/unauthorizedResponseError.ts b/src/sdk/errors/unauthorizedResponseError.ts new file mode 100644 index 00000000..ea0017c5 --- /dev/null +++ b/src/sdk/errors/unauthorizedResponseError.ts @@ -0,0 +1,17 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { ApiError } from '../core'; + +/** + * Creates an instance of UnauthorizedResponse + */ +interface UnauthorizedResponse { + message?: string; + additionalProperties?: Record; +} + +export class UnauthorizedResponseError extends ApiError {} diff --git a/src/sdk/index.ts b/src/sdk/index.ts new file mode 100644 index 00000000..be0e5726 --- /dev/null +++ b/src/sdk/index.ts @@ -0,0 +1,87 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +export * from './client'; +export * from './configuration'; +export type { ApiResponse } from './core'; +export { + AbortError, + ArgumentsValidationError, + cloneFileWrapper, + FileWrapper, + isFileWrapper, + ResponseValidationError, + LoggerInterface, + LogLevel, + ConsoleLogger, +} from './core'; +export * from './defaultConfiguration'; +export * from './controllers/apiValidationExternalApIsController'; +export * from './controllers/apiValidationImportedApIsController'; +export * from './controllers/apIsManagementController'; +export * from './controllers/codeGenerationExternalApIsController'; +export * from './controllers/codeGenerationImportedApIsController'; +export * from './controllers/docsPortalGenerationAsyncController'; +export * from './controllers/docsPortalManagementController'; +export * from './controllers/transformationController'; +export { ApiError } from './core'; +export * from './errors/internalServerErrorResponseError'; +export * from './errors/problemDetailsError'; +export * from './errors/unauthorizedResponseError'; +export { Accept } from './models/accept'; +export { Accept2 } from './models/accept2'; +export { Accept3 } from './models/accept3'; +export type { ApiEntity } from './models/apiEntity'; +export type { ApiEntityCodeGeneration } from './models/apiEntityCodeGeneration'; +export type { ApiEntityDetailed } from './models/apiEntityDetailed'; +export type { ApiValidationSummary } from './models/apiValidationSummary'; +export type { Attributes } from './models/attributes'; +export type { Authentication } from './models/authentication'; +export type { AuthorIdentifiers } from './models/authorIdentifiers'; +export type { AuthScope } from './models/authScope'; +export type { CodeGeneration } from './models/codeGeneration'; +export type { CodeGenSettings } from './models/codeGenSettings'; +export { ContentType } from './models/contentType'; +export type { Csnetstandardlib } from './models/csnetstandardlib'; +export type { CustomType } from './models/customType'; +export type { DocsValidationSummary } from './models/docsValidationSummary'; +export type { Endpoint } from './models/endpoint'; +export type { EndpointsGroup } from './models/endpointsGroup'; +export { ExportFormats } from './models/exportFormats'; +export type { Field } from './models/field'; +export type { GenerateSdkViaUrlRequest } from './models/generateSdkViaUrlRequest'; +export { Id } from './models/id'; +export { ImplementationType } from './models/implementationType'; +export type { ImportApiVersionViaUrlRequest } from './models/importApiVersionViaUrlRequest'; +export type { ImportApiViaUrlRequest } from './models/importApiViaUrlRequest'; +export type { ImportValidationSummary } from './models/importValidationSummary'; +export type { InplaceImportApiViaUrlRequest } from './models/inplaceImportApiViaUrlRequest'; +export type { InputParameter } from './models/inputParameter'; +export { Link } from './models/link'; +export type { Links } from './models/links'; +export type { MEnvironment } from './models/mEnvironment'; +export type { MetaData } from './models/metaData'; +export type { PackageDeploymentInformation } from './models/packageDeploymentInformation'; +export { PackageRepositories } from './models/packageRepositories'; +export type { Parameter } from './models/parameter'; +export { Platforms } from './models/platforms'; +export type { PortalGenerationAsyncResponse } from './models/portalGenerationAsyncResponse'; +export type { PortalGenerationStatusResponse } from './models/portalGenerationStatusResponse'; +export type { PublishedPackage } from './models/publishedPackage'; +export type { PublishPackageInput } from './models/publishPackageInput'; +export type { Response } from './models/response'; +export type { Server } from './models/server'; +export type { ServerConfiguration } from './models/serverConfiguration'; +export { Status } from './models/status'; +export type { TemplatesPackageDeploymentInformation } from './models/templatesPackageDeploymentInformation'; +export type { TestCase } from './models/testCase'; +export type { TestGenSettings } from './models/testGenSettings'; +export type { Transformation } from './models/transformation'; +export type { TransformViaUrlRequest } from './models/transformViaUrlRequest'; +export type { UpdatePackageDeploymentInformation } from './models/updatePackageDeploymentInformation'; +export type { UpdateTemplatesPackageDeploymentInformation } from './models/updateTemplatesPackageDeploymentInformation'; +export type { UserCodeGeneration } from './models/userCodeGeneration'; +export type { ValidationException } from './models/validationException'; diff --git a/src/sdk/models/aPIEntityCodeGeneration.ts b/src/sdk/models/aPIEntityCodeGeneration.ts new file mode 100644 index 00000000..2cfba104 --- /dev/null +++ b/src/sdk/models/aPIEntityCodeGeneration.ts @@ -0,0 +1,54 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + boolean, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; +import { Platforms, platformsSchema } from './platforms'; + +/** The Code Generation structure encapsulates all the the details of an SDK generation performed against an API Entity */ +export interface ApiEntityCodeGeneration { + /** Unique Code Generation Identifier */ + id: string; + /** The structure contains platforms that APIMatic CodeGen can generate SDKs and Docs in. */ + template: Platforms; + /** The generated SDK */ + generatedFile: string; + /** Generation Date and Time */ + generatedOn: string; + /** The md5 hash of the API Description */ + hashCode: string; + /** Generation Source */ + codeGenerationSource: string; + /** Generation Version */ + codeGenVersion: string; + /** Generation Status */ + success: boolean; + /** Unique API Entity Identifier */ + apiEntityId: string; + additionalProperties?: Record; +} + +export const apiEntityCodeGenerationSchema: Schema = typedExpandoObject( + { + id: ['id', string()], + template: ['template', platformsSchema], + generatedFile: ['generatedFile', string()], + generatedOn: ['generatedOn', string()], + hashCode: ['hashCode', string()], + codeGenerationSource: ['codeGenerationSource', string()], + codeGenVersion: ['codeGenVersion', string()], + success: ['success', boolean()], + apiEntityId: ['apiEntityId', string()], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/accept.ts b/src/sdk/models/accept.ts new file mode 100644 index 00000000..d5c32a5d --- /dev/null +++ b/src/sdk/models/accept.ts @@ -0,0 +1,19 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { Schema, stringEnum } from '../schema'; + +/** + * Enum for Accept + */ +export enum Accept { + EnumApplicationjson = 'application/json', +} + +/** + * Schema for Accept + */ +export const acceptSchema: Schema = stringEnum(Accept); diff --git a/src/sdk/models/accept2.ts b/src/sdk/models/accept2.ts new file mode 100644 index 00000000..eadaa464 --- /dev/null +++ b/src/sdk/models/accept2.ts @@ -0,0 +1,19 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { Schema, stringEnum } from '../schema'; + +/** + * Enum for Accept2 + */ +export enum Accept2 { + EnumApplicationvndapimaticapiEntityfullv1Json = 'application/vnd.apimatic.apiEntity.full.v1+json', +} + +/** + * Schema for Accept2 + */ +export const accept2Schema: Schema = stringEnum(Accept2); diff --git a/src/sdk/models/accept3.ts b/src/sdk/models/accept3.ts new file mode 100644 index 00000000..d626261e --- /dev/null +++ b/src/sdk/models/accept3.ts @@ -0,0 +1,19 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { Schema, stringEnum } from '../schema'; + +/** + * Enum for Accept3 + */ +export enum Accept3 { + EnumApplicationzip = 'application/zip', +} + +/** + * Schema for Accept3 + */ +export const accept3Schema: Schema = stringEnum(Accept3); diff --git a/src/sdk/models/apiEntity.ts b/src/sdk/models/apiEntity.ts new file mode 100644 index 00000000..ee157d41 --- /dev/null +++ b/src/sdk/models/apiEntity.ts @@ -0,0 +1,93 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + array, + boolean, + lazy, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; +import { Authentication, authenticationSchema } from './authentication'; +import { CodeGenSettings, codeGenSettingsSchema } from './codeGenSettings'; +import { EndpointsGroup, endpointsGroupSchema } from './endpointsGroup'; +import { MetaData, metaDataSchema } from './metaData'; +import { + ServerConfiguration, + serverConfigurationSchema, +} from './serverConfiguration'; +import { TestGenSettings, testGenSettingsSchema } from './testGenSettings'; + +/** The API Entity Structure encapsulates all the details of an API Entity. An API entity is a unique API Version. */ +export interface ApiEntity { + /** Unique API Entity identifier */ + id: string; + /** Enrcypted API Entity Id */ + encryptedId: string; + /** API Integration Key. Obtain from API Card on Dashboard. */ + apiKey: string; + /** Unique API Group Identifier */ + apiGroupId: string; + /** Cover Image */ + imageUri: string; + /** Entity creation date */ + creationDate: string; + /** API Status (Deprecated) */ + mPublic: boolean; + /** API Entity Name */ + name: string; + /** Description of the API */ + description: string; + /** Entity Version Number */ + version: string; + /** Header Content */ + additionalHeaders: string[]; + /** This Structure encapsulates all details of API authentication. */ + authentication: Authentication; + /** APIMatic’s code generation engine has various code generation configurations to customise the behaviour and outlook across the generated SDKS. This structure encapsulates all settings for CodeGeneration. */ + codeGenSettings: CodeGenSettings; + /** This structure helps specify additional test configurations which affects how test cases are generated. */ + testGenSettings: TestGenSettings; + /** API Errors */ + errors: string[]; + /** Server configurations can be used to create multiple environments, multiple servers that can be used with specific endpoints and server URLs with template paramters. */ + serverConfiguration: ServerConfiguration; + /** API Endpoint Groups */ + endpointsGroup: EndpointsGroup[]; + metaData: MetaData; + additionalProperties?: Record; +} + +export const apiEntitySchema: Schema = typedExpandoObject( + { + id: ['id', string()], + encryptedId: ['encryptedId', string()], + apiKey: ['apiKey', string()], + apiGroupId: ['apiGroupId', string()], + imageUri: ['imageUri', string()], + creationDate: ['creationDate', string()], + mPublic: ['public', boolean()], + name: ['name', string()], + description: ['description', string()], + version: ['version', string()], + additionalHeaders: ['additionalHeaders', array(string())], + authentication: ['authentication', lazy(() => authenticationSchema)], + codeGenSettings: ['codeGenSettings', lazy(() => codeGenSettingsSchema)], + testGenSettings: ['testGenSettings', lazy(() => testGenSettingsSchema)], + errors: ['errors', array(string())], + serverConfiguration: [ + 'serverConfiguration', + lazy(() => serverConfigurationSchema), + ], + endpointsGroup: ['endpointsGroup', array(lazy(() => endpointsGroupSchema))], + metaData: ['metaData', lazy(() => metaDataSchema)], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/apiEntityDetailed.ts b/src/sdk/models/apiEntityDetailed.ts new file mode 100644 index 00000000..291c9225 --- /dev/null +++ b/src/sdk/models/apiEntityDetailed.ts @@ -0,0 +1,101 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + array, + boolean, + lazy, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; +import { Authentication, authenticationSchema } from './authentication'; +import { CodeGenSettings, codeGenSettingsSchema } from './codeGenSettings'; +import { CustomType, customTypeSchema } from './customType'; +import { Endpoint, endpointSchema } from './endpoint'; +import { EndpointsGroup, endpointsGroupSchema } from './endpointsGroup'; +import { MetaData, metaDataSchema } from './metaData'; +import { + ServerConfiguration, + serverConfigurationSchema, +} from './serverConfiguration'; +import { TestGenSettings, testGenSettingsSchema } from './testGenSettings'; + +/** The structure collects API Endpoints and Custom Types to display detailed information on API Entity. */ +export interface ApiEntityDetailed { + /** Unique API Entity identifier */ + id: string; + /** Enrcypted API Entity Id */ + encryptedId: string; + /** API Integration Key. Obtain from API Card on Dashboard. */ + apiKey: string; + /** Unique API Group Identifier */ + apiGroupId: string; + /** Cover Image */ + imageUri: string; + /** Entity creation date */ + creationDate: string; + /** API Status (Deprecated) */ + mPublic: boolean; + /** API Entity Name */ + name: string; + /** Description of the API */ + description: string; + /** Entity Version Number */ + version: string; + /** Header Content */ + additionalHeaders: string[]; + /** This Structure encapsulates all details of API authentication. */ + authentication: Authentication; + /** APIMatic’s code generation engine has various code generation configurations to customise the behaviour and outlook across the generated SDKS. This structure encapsulates all settings for CodeGeneration. */ + codeGenSettings: CodeGenSettings; + /** This structure helps specify additional test configurations which affects how test cases are generated. */ + testGenSettings: TestGenSettings; + /** API Errors */ + errors: string[]; + /** Server configurations can be used to create multiple environments, multiple servers that can be used with specific endpoints and server URLs with template paramters. */ + serverConfiguration: ServerConfiguration; + /** API Endpoint Groups */ + endpointsGroup: EndpointsGroup[]; + metaData: MetaData; + /** API Endpoints */ + endpoints: Endpoint[]; + /** Complex Custom Model Types */ + customTypes: CustomType[]; + additionalProperties?: Record; +} + +export const apiEntityDetailedSchema: Schema = typedExpandoObject( + { + id: ['id', string()], + encryptedId: ['encryptedId', string()], + apiKey: ['apiKey', string()], + apiGroupId: ['apiGroupId', string()], + imageUri: ['imageUri', string()], + creationDate: ['creationDate', string()], + mPublic: ['public', boolean()], + name: ['name', string()], + description: ['description', string()], + version: ['version', string()], + additionalHeaders: ['additionalHeaders', array(string())], + authentication: ['authentication', lazy(() => authenticationSchema)], + codeGenSettings: ['codeGenSettings', lazy(() => codeGenSettingsSchema)], + testGenSettings: ['testGenSettings', lazy(() => testGenSettingsSchema)], + errors: ['errors', array(string())], + serverConfiguration: [ + 'serverConfiguration', + lazy(() => serverConfigurationSchema), + ], + endpointsGroup: ['endpointsGroup', array(lazy(() => endpointsGroupSchema))], + metaData: ['metaData', lazy(() => metaDataSchema)], + endpoints: ['endpoints', array(lazy(() => endpointSchema))], + customTypes: ['customTypes', array(lazy(() => customTypeSchema))], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/apiValidationSummary.ts b/src/sdk/models/apiValidationSummary.ts new file mode 100644 index 00000000..2a0fdd32 --- /dev/null +++ b/src/sdk/models/apiValidationSummary.ts @@ -0,0 +1,34 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + array, + boolean, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; + +export interface ApiValidationSummary { + success: boolean; + errors: string[]; + warnings: string[]; + messages: string[]; + additionalProperties?: Record; +} + +export const apiValidationSummarySchema: Schema = typedExpandoObject( + { + success: ['success', boolean()], + errors: ['errors', array(string())], + warnings: ['warnings', array(string())], + messages: ['messages', array(string())], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/attributes.ts b/src/sdk/models/attributes.ts new file mode 100644 index 00000000..89072633 --- /dev/null +++ b/src/sdk/models/attributes.ts @@ -0,0 +1,26 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; + +/** The structure contain attribute details of a parameter type. */ +export interface Attributes { + /** Unique Attribute Identifier */ + id: string; + additionalProperties?: Record; +} + +export const attributesSchema: Schema = typedExpandoObject( + { id: ['id', string()] }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/authScope.ts b/src/sdk/models/authScope.ts new file mode 100644 index 00000000..11fcd88c --- /dev/null +++ b/src/sdk/models/authScope.ts @@ -0,0 +1,36 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; + +export interface AuthScope { + /** Scope Id */ + id: string; + /** Scope Name */ + name: string; + /** Scope Value */ + value: string; + /** Scope Description */ + description: string; + additionalProperties?: Record; +} + +export const authScopeSchema: Schema = typedExpandoObject( + { + id: ['id', string()], + name: ['name', string()], + value: ['value', string()], + description: ['description', string()], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/authentication.ts b/src/sdk/models/authentication.ts new file mode 100644 index 00000000..26cde7c0 --- /dev/null +++ b/src/sdk/models/authentication.ts @@ -0,0 +1,49 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + array, + lazy, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; +import { AuthScope, authScopeSchema } from './authScope'; + +/** This Structure encapsulates all details of API authentication. */ +export interface Authentication { + /** Auth Id */ + id: string; + /** Auth Type */ + authType: string; + /** Scope */ + scopes: AuthScope[]; + /** Auth Params */ + parameters: string[]; + /** Auth Scopes */ + authScopes: string[]; + /** Auth Grant Types */ + authGrantTypes: string[]; + /** Paramater Formats */ + paramFormats?: unknown; + additionalProperties?: Record; +} + +export const authenticationSchema: Schema = typedExpandoObject( + { + id: ['id', string()], + authType: ['authType', string()], + scopes: ['scopes', array(lazy(() => authScopeSchema))], + parameters: ['parameters', array(string())], + authScopes: ['authScopes', array(string())], + authGrantTypes: ['authGrantTypes', array(string())], + paramFormats: ['paramFormats', optional(unknown())], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/authorIdentifiers.ts b/src/sdk/models/authorIdentifiers.ts new file mode 100644 index 00000000..ce94755d --- /dev/null +++ b/src/sdk/models/authorIdentifiers.ts @@ -0,0 +1,25 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; + +export interface AuthorIdentifiers { + email: string; + userName: string; + additionalProperties?: Record; +} + +export const authorIdentifiersSchema: Schema = typedExpandoObject( + { email: ['Email', string()], userName: ['UserName', string()] }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/cSNETSTANDARDLIB.ts b/src/sdk/models/cSNETSTANDARDLIB.ts new file mode 100644 index 00000000..f9798efe --- /dev/null +++ b/src/sdk/models/cSNETSTANDARDLIB.ts @@ -0,0 +1,47 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; +import { Id, idSchema } from './id'; +import { Link, linkSchema } from './link'; + +/** This structure contains all details that goes into package deployment. */ +export interface Csnetstandardlib { + /** Unique package identifier */ + id?: Id; + /** Package Repository as per platform */ + packageRepository: string; + /** Package Name */ + packageName: string; + version: string; + /** Any additional platform specific deployment detail */ + additionalDeploymentInformation?: unknown; + /** Link of deployed package */ + link?: Link; + additionalProperties?: Record; +} + +export const csnetstandardlibSchema: Schema = typedExpandoObject( + { + id: ['id', optional(idSchema)], + packageRepository: ['packageRepository', string()], + packageName: ['packageName', string()], + version: ['version', string()], + additionalDeploymentInformation: [ + 'additionalDeploymentInformation', + optional(unknown()), + ], + link: ['link', optional(linkSchema)], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/codeGenSettings.ts b/src/sdk/models/codeGenSettings.ts new file mode 100644 index 00000000..82d189e8 --- /dev/null +++ b/src/sdk/models/codeGenSettings.ts @@ -0,0 +1,183 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + array, + boolean, + number, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; + +/** APIMatic’s code generation engine has various code generation configurations to customise the behaviour and outlook across the generated SDKS. This structure encapsulates all settings for CodeGeneration. */ +export interface CodeGenSettings { + /** Generate asynchronous code for API Calls and deserialization */ + isAsync: boolean; + /** Use HTTP Method prefixes for endpoint wrappers */ + useHttpMethodPrefix: boolean; + /** Use "Model" postfixes for generated class names */ + useModelPrefix: boolean; + /** Use "Enum" postfixes for enumerated types */ + useEnumPrefix: boolean; + useConstructorsForConfig: boolean; + /** Use common SDK library to reduce code duplication */ + useCommonSdkLibrary: boolean; + /** Generates interfaces for controller classes in the generated SDKs */ + generateInterfaces: boolean; + /** Generate Appveyor configuration file */ + generateAppveyorConfig: boolean; + /** Generate CircleCI configuration file */ + generateCircleConfig: boolean; + /** Generate Jenkins configuration file */ + generateJenkinsConfig: boolean; + /** Generate Travis CI configuration file */ + generateTravisConfig: boolean; + /** Use "AndroidManifest.xml" for config variables in Android */ + androidUseAppManifest: boolean; + /** Use "App-Info.plist" file for config variables in iOS */ + iosUseAppInfoPlist: boolean; + /** Generate "CoreData" schema and entity classes in iOS? */ + iosGenerateCoreData: boolean; + /** Enable runscope */ + runscopeEnabled: boolean; + /** Collect Parameters as arrays */ + collapseParamsToArray: boolean; + /** Attempts to preserve parameter order for endpoints */ + preserveParameterOrder: boolean; + /** Append JSON/XML accept and content-type headers */ + appendContentHeaders: boolean; + modelSerializationIsJson: boolean; + /** Return a null value on HTTP 404 */ + nullify404: boolean; + /** Validate required parameters to be Not Null */ + validateRequiredParameters: boolean; + /** Allow models to have additional runtime properties */ + enableAdditionalModelProperties: boolean; + javaUsePropertiesConfig: boolean; + /** Use "Controller" postfixes for generated controller classes */ + useControllerPrefix: boolean; + /** Use Exception Prefixes */ + useExceptionPrefix: boolean; + /** Parameter Array format with index or without */ + parameterArrayFormat: string; + /** Configure the HTTP client for Objective C */ + objCHttpClient: string; + /** Configure the HTTP client for C# */ + cSharpHttpClient: string; + /** Configure the HTTP client for Android */ + androidHttpClient: string; + /** Configure the HTTP client for node */ + nodeHttpClient: string; + /** Configure the HTTP client for PHP */ + phpHttpClient: string; + bodySerialization: number; + /** Specify type of array serialisation */ + arraySerialization: string; + /** This option specifies the duration (in seconds) after which requests would timeout */ + timeout: number; + /** Enabling this generates code in the SDKs for logging events in the API cycle using a library. */ + enableLogging: boolean; + /** Enabling caching of responses (not available in all languages) */ + enableHttpCache: boolean; + /** Specify number of retries */ + retries: number; + /** Specify retry interval in case of failures */ + retryInterval: number; + /** Generate advanced read me files */ + generateAdvancedDocs: boolean; + /** Store Timezone information for the generation */ + storeTimezoneInformation: boolean; + /** Use "Controller" postfixes for generated controller classes */ + enablePhpComposerVersionString: boolean; + /** Specify Security Protocols */ + securityProtocols: string[]; + /** Use underscores before and after numbers for underscore case */ + underscoreNumbers: boolean; + /** Allow usage of a Singleton Pattern */ + useSingletonPattern: boolean; + /** Files/dependencies used for linting are not generated if this option is enabled */ + disableLinting: boolean; + /** Create a configuration option in SDKs to optionally skip certificate verification when establishing HTTPS connections. */ + allowSkippingSslCertVerification: boolean; + /** Apply Customisations */ + applyCustomizations: string[]; + /** Enabling this will stop splitting of words when converting identifiers from API specification to language-specific identifiers. */ + doNotSplitWords: string[]; + /** Sorts resources such as endpoints, endpoint groups and models in generated documentation */ + sortResources: boolean; + /** Enable a global user agent */ + enableGlobalUserAgent: boolean; + additionalProperties?: Record; +} + +export const codeGenSettingsSchema: Schema = typedExpandoObject( + { + isAsync: ['isAsync', boolean()], + useHttpMethodPrefix: ['useHttpMethodPrefix', boolean()], + useModelPrefix: ['useModelPrefix', boolean()], + useEnumPrefix: ['useEnumPrefix', boolean()], + useConstructorsForConfig: ['useConstructorsForConfig', boolean()], + useCommonSdkLibrary: ['useCommonSdkLibrary', boolean()], + generateInterfaces: ['generateInterfaces', boolean()], + generateAppveyorConfig: ['generateAppveyorConfig', boolean()], + generateCircleConfig: ['generateCircleConfig', boolean()], + generateJenkinsConfig: ['generateJenkinsConfig', boolean()], + generateTravisConfig: ['generateTravisConfig', boolean()], + androidUseAppManifest: ['androidUseAppManifest', boolean()], + iosUseAppInfoPlist: ['iosUseAppInfoPlist', boolean()], + iosGenerateCoreData: ['iosGenerateCoreData', boolean()], + runscopeEnabled: ['runscopeEnabled', boolean()], + collapseParamsToArray: ['collapseParamsToArray', boolean()], + preserveParameterOrder: ['preserveParameterOrder', boolean()], + appendContentHeaders: ['appendContentHeaders', boolean()], + modelSerializationIsJson: ['modelSerializationIsJSON', boolean()], + nullify404: ['nullify404', boolean()], + validateRequiredParameters: ['validateRequiredParameters', boolean()], + enableAdditionalModelProperties: [ + 'enableAdditionalModelProperties', + boolean(), + ], + javaUsePropertiesConfig: ['javaUsePropertiesConfig', boolean()], + useControllerPrefix: ['useControllerPrefix', boolean()], + useExceptionPrefix: ['useExceptionPrefix', boolean()], + parameterArrayFormat: ['parameterArrayFormat', string()], + objCHttpClient: ['objCHttpClient', string()], + cSharpHttpClient: ['cSharpHttpClient', string()], + androidHttpClient: ['androidHttpClient', string()], + nodeHttpClient: ['nodeHttpClient', string()], + phpHttpClient: ['phpHttpClient', string()], + bodySerialization: ['bodySerialization', number()], + arraySerialization: ['arraySerialization', string()], + timeout: ['timeout', number()], + enableLogging: ['enableLogging', boolean()], + enableHttpCache: ['enableHttpCache', boolean()], + retries: ['retries', number()], + retryInterval: ['retryInterval', number()], + generateAdvancedDocs: ['generateAdvancedDocs', boolean()], + storeTimezoneInformation: ['storeTimezoneInformation', boolean()], + enablePhpComposerVersionString: [ + 'enablePhpComposerVersionString', + boolean(), + ], + securityProtocols: ['securityProtocols', array(string())], + underscoreNumbers: ['underscoreNumbers', boolean()], + useSingletonPattern: ['useSingletonPattern', boolean()], + disableLinting: ['disableLinting', boolean()], + allowSkippingSslCertVerification: [ + 'allowSkippingSSLCertVerification', + boolean(), + ], + applyCustomizations: ['applyCustomizations', array(string())], + doNotSplitWords: ['doNotSplitWords', array(string())], + sortResources: ['sortResources', boolean()], + enableGlobalUserAgent: ['enableGlobalUserAgent', boolean()], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/codeGeneration.ts b/src/sdk/models/codeGeneration.ts new file mode 100644 index 00000000..a221c75b --- /dev/null +++ b/src/sdk/models/codeGeneration.ts @@ -0,0 +1,51 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + boolean, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; +import { Platforms, platformsSchema } from './platforms'; + +/** The Code Generation structure encapsulates all the the details of an SDK generation performed against an API Entity */ +export interface CodeGeneration { + /** Unique Code Generation Identifier */ + id: string; + /** The structure contains platforms that APIMatic CodeGen can generate SDKs and Docs in. */ + template: Platforms; + /** The generated SDK */ + generatedFile: string; + /** Generation Date and Time */ + generatedOn: string; + /** The md5 hash of the API Description */ + hashCode: string; + /** Generation Source */ + codeGenerationSource: string; + /** Generation Version */ + codeGenVersion: string; + /** Generation Status */ + success: boolean; + additionalProperties?: Record; +} + +export const codeGenerationSchema: Schema = typedExpandoObject( + { + id: ['id', string()], + template: ['template', platformsSchema], + generatedFile: ['generatedFile', string()], + generatedOn: ['generatedOn', string()], + hashCode: ['hashCode', string()], + codeGenerationSource: ['codeGenerationSource', string()], + codeGenVersion: ['codeGenVersion', string()], + success: ['success', boolean()], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/contentType.ts b/src/sdk/models/contentType.ts new file mode 100644 index 00000000..9428bc06 --- /dev/null +++ b/src/sdk/models/contentType.ts @@ -0,0 +1,19 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { Schema, stringEnum } from '../schema'; + +/** + * Enum for ContentType + */ +export enum ContentType { + EnumMultipartformdata = 'multipart/form-data', +} + +/** + * Schema for ContentType + */ +export const contentTypeSchema: Schema = stringEnum(ContentType); diff --git a/src/sdk/models/customType.ts b/src/sdk/models/customType.ts new file mode 100644 index 00000000..e52056e7 --- /dev/null +++ b/src/sdk/models/customType.ts @@ -0,0 +1,50 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + array, + lazy, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; +import { Field, fieldSchema } from './field'; +import { + ImplementationType, + implementationTypeSchema, +} from './implementationType'; + +/** This structure helps creates a new complex model type. */ +export interface CustomType { + /** Unique Type Identifier */ + id: string; + /** Unique API Entity identifier */ + apiId: string; + /** Custom Type Name */ + name: string; + /** Data Format */ + baseType: string; + /** The structure helps describes the nature of implementation of a custom model. A model can be of 3 types. */ + implementationType: ImplementationType; + /** Type Fields */ + fields: Field[]; + additionalProperties?: Record; +} + +export const customTypeSchema: Schema = typedExpandoObject( + { + id: ['id', string()], + apiId: ['apiId', string()], + name: ['name', string()], + baseType: ['baseType', string()], + implementationType: ['implementationType', implementationTypeSchema], + fields: ['fields', array(lazy(() => fieldSchema))], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/docsValidationSummary.ts b/src/sdk/models/docsValidationSummary.ts new file mode 100644 index 00000000..8d364fe8 --- /dev/null +++ b/src/sdk/models/docsValidationSummary.ts @@ -0,0 +1,34 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + array, + boolean, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; + +export interface DocsValidationSummary { + success: boolean; + errors: string[]; + warnings: string[]; + messages: string[]; + additionalProperties?: Record; +} + +export const docsValidationSummarySchema: Schema = typedExpandoObject( + { + success: ['success', boolean()], + errors: ['errors', array(string())], + warnings: ['warnings', array(string())], + messages: ['messages', array(string())], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/endpoint.ts b/src/sdk/models/endpoint.ts new file mode 100644 index 00000000..e8ed9c70 --- /dev/null +++ b/src/sdk/models/endpoint.ts @@ -0,0 +1,79 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + array, + boolean, + lazy, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; +import { Parameter, parameterSchema } from './parameter'; +import { Response, responseSchema } from './response'; +import { TestCase, testCaseSchema } from './testCase'; + +/** This structure encapsulates all the attributes of an API Endpoint. */ +export interface Endpoint { + /** Unique Endpoint Identifier */ + id: string; + /** Unique API Identifier */ + apiId: string; + /** Endpoint Name */ + name: string; + /** Endpoint Method */ + httpMethod: string; + /** The Group Endpoint belongs to */ + group: string; + /** If Endpoint warrants authentication or not */ + skipAuthentication: boolean; + /** The Endpoint route */ + route: string; + /** The structure encapsulates all details of a request response */ + response: Response; + /** Enabling this option allows optional query parameters */ + hasOptionalQueryParams: boolean; + /** Enabling this option allows optional field parameters */ + hasOptionalFieldParams: boolean; + /** Enabling this option collects API endpoint parameters as collections */ + collectParameters: boolean; + /** Enabling this option allows wrapping of body in objects */ + wrapBodyInObject: boolean; + /** What scopes apply to an Endpoint */ + requiredScopes: string[]; + /** Endpoint Paramaters */ + parameters: Parameter[]; + /** Errors that Endpoint may output */ + errors: unknown[]; + /** Test Cases associated with Endpoint */ + testCases: TestCase[]; + additionalProperties?: Record; +} + +export const endpointSchema: Schema = typedExpandoObject( + { + id: ['id', string()], + apiId: ['apiId', string()], + name: ['name', string()], + httpMethod: ['httpMethod', string()], + group: ['group', string()], + skipAuthentication: ['skipAuthentication', boolean()], + route: ['route', string()], + response: ['response', lazy(() => responseSchema)], + hasOptionalQueryParams: ['hasOptionalQueryParams', boolean()], + hasOptionalFieldParams: ['hasOptionalFieldParams', boolean()], + collectParameters: ['collectParameters', boolean()], + wrapBodyInObject: ['wrapBodyInObject', boolean()], + requiredScopes: ['requiredScopes', array(string())], + parameters: ['parameters', array(lazy(() => parameterSchema))], + errors: ['errors', array(unknown())], + testCases: ['testCases', array(lazy(() => testCaseSchema))], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/endpointsGroup.ts b/src/sdk/models/endpointsGroup.ts new file mode 100644 index 00000000..8027388e --- /dev/null +++ b/src/sdk/models/endpointsGroup.ts @@ -0,0 +1,26 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; + +/** This structure encapsulates all the attributes of an API Endpoints Group. */ +export interface EndpointsGroup { + name: string; + description: string; + additionalProperties?: Record; +} + +export const endpointsGroupSchema: Schema = typedExpandoObject( + { name: ['name', string()], description: ['description', string()] }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/exportFormats.ts b/src/sdk/models/exportFormats.ts new file mode 100644 index 00000000..3b8ed252 --- /dev/null +++ b/src/sdk/models/exportFormats.ts @@ -0,0 +1,34 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { Schema, stringEnum } from '../schema'; + +/** + * Enum for ExportFormats + */ +export enum ExportFormats { + Apimatic = 'APIMATIC', + Wadl2009 = 'WADL2009', + Wsdl = 'WSDL', + Swagger10 = 'Swagger10', + Swagger20 = 'Swagger20', + Swaggeryaml = 'SwaggerYaml', + Oas3 = 'OpenApi3Json', + Openapi3Yaml = 'OpenApi3Yaml', + Apiblueprint = 'APIBluePrint', + Raml = 'RAML', + Raml10 = 'RAML10', + Postman10 = 'Postman10', + Postman20 = 'Postman20', + Graphqlschema = 'GraphQlSchema', +} + +/** + * Schema for ExportFormats + */ +export const exportFormatsSchema: Schema = stringEnum( + ExportFormats +); diff --git a/src/sdk/models/field.ts b/src/sdk/models/field.ts new file mode 100644 index 00000000..decb214f --- /dev/null +++ b/src/sdk/models/field.ts @@ -0,0 +1,64 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + boolean, + lazy, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; +import { Attributes, attributesSchema } from './attributes'; + +/** This structure encapsulates all details of a parameter. */ +export interface Field { + /** If parameter is optional */ + optional: boolean; + /** Type of Parameter */ + type: string; + /** IF Parameter is constant */ + constant: boolean; + /** If Param is collected as array */ + isArray: boolean; + isStream: boolean; + isAttribute: boolean; + isMap: boolean; + /** The structure contain attribute details of a parameter type. */ + attributes: Attributes; + /** If Parameter is nullable */ + nullable: boolean; + /** Unique Parameter identifier */ + id: string; + /** Parameter Name */ + name: string; + /** Parameter Description */ + description: string; + /** Default Values of a Parameter */ + defaultValue: string; + additionalProperties?: Record; +} + +export const fieldSchema: Schema = typedExpandoObject( + { + optional: ['optional', boolean()], + type: ['type', string()], + constant: ['constant', boolean()], + isArray: ['isArray', boolean()], + isStream: ['isStream', boolean()], + isAttribute: ['isAttribute', boolean()], + isMap: ['isMap', boolean()], + attributes: ['attributes', lazy(() => attributesSchema)], + nullable: ['nullable', boolean()], + id: ['id', string()], + name: ['name', string()], + description: ['description', string()], + defaultValue: ['defaultValue', string()], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/generateSdkViaUrlRequest.ts b/src/sdk/models/generateSdkViaUrlRequest.ts new file mode 100644 index 00000000..2534200b --- /dev/null +++ b/src/sdk/models/generateSdkViaUrlRequest.ts @@ -0,0 +1,28 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; +import { Platforms, platformsSchema } from './platforms'; + +export interface GenerateSdkViaUrlRequest { + /** The URL for the API specification file.

**Note:** This URL should be publicly accessible. */ + url: string; + /** The structure contains platforms that APIMatic CodeGen can generate SDKs and Docs in. */ + template: Platforms; + additionalProperties?: Record; +} + +export const generateSdkViaUrlRequestSchema: Schema = typedExpandoObject( + { url: ['url', string()], template: ['template', platformsSchema] }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/id.ts b/src/sdk/models/id.ts new file mode 100644 index 00000000..79109083 --- /dev/null +++ b/src/sdk/models/id.ts @@ -0,0 +1,19 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { Schema, stringEnum } from '../schema'; + +/** + * Enum for Id + */ +export enum Id { + Enum5Dcd2B5893C3E31A206F30C4 = '5dcd2b5893c3e31a206f30c4', +} + +/** + * Schema for Id + */ +export const idSchema: Schema = stringEnum(Id); diff --git a/src/sdk/models/implementationType.ts b/src/sdk/models/implementationType.ts new file mode 100644 index 00000000..75d89bcd --- /dev/null +++ b/src/sdk/models/implementationType.ts @@ -0,0 +1,23 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { Schema, stringEnum } from '../schema'; + +/** + * Enum for ImplementationType + */ +export enum ImplementationType { + Structure = 'Structure', + Enumeration = 'Enumeration', + Exception = 'Exception', +} + +/** + * Schema for ImplementationType + */ +export const implementationTypeSchema: Schema = stringEnum( + ImplementationType +); diff --git a/src/sdk/models/importApiVersionViaUrlRequest.ts b/src/sdk/models/importApiVersionViaUrlRequest.ts new file mode 100644 index 00000000..5b47808e --- /dev/null +++ b/src/sdk/models/importApiVersionViaUrlRequest.ts @@ -0,0 +1,28 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; + +/** This structure contains details of importing a new API Version */ +export interface ImportApiVersionViaUrlRequest { + /** The version number with which the new API version will be imported. This version number will override the version specified in the API specification file.
APIMatic recommends versioning the API with the [versioning scheme](https://docs.apimatic.io/define-apis/basic-settings/#version) documented in the docs. */ + versionOverride: string; + /** The URL for the API specification file.

**Note:** This URL should be publicly accessible. */ + url: string; + additionalProperties?: Record; +} + +export const importApiVersionViaUrlRequestSchema: Schema = typedExpandoObject( + { versionOverride: ['version_override', string()], url: ['url', string()] }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/importApiViaUrlRequest.ts b/src/sdk/models/importApiViaUrlRequest.ts new file mode 100644 index 00000000..98c1c897 --- /dev/null +++ b/src/sdk/models/importApiViaUrlRequest.ts @@ -0,0 +1,26 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; + +/** Contains a url field to allow Apis to be imported via url */ +export interface ImportApiViaUrlRequest { + /** The URL for the API specification file.

**Note:** This URL should be publicly accessible. */ + url: string; + additionalProperties?: Record; +} + +export const importApiViaUrlRequestSchema: Schema = typedExpandoObject( + { url: ['url', string()] }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/importValidationSummary.ts b/src/sdk/models/importValidationSummary.ts new file mode 100644 index 00000000..2df24359 --- /dev/null +++ b/src/sdk/models/importValidationSummary.ts @@ -0,0 +1,34 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + array, + boolean, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; + +export interface ImportValidationSummary { + success: boolean; + errors: string[]; + warnings: string[]; + messages: string[]; + additionalProperties?: Record; +} + +export const importValidationSummarySchema: Schema = typedExpandoObject( + { + success: ['success', boolean()], + errors: ['errors', array(string())], + warnings: ['warnings', array(string())], + messages: ['messages', array(string())], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/inplaceImportApiViaUrlRequest.ts b/src/sdk/models/inplaceImportApiViaUrlRequest.ts new file mode 100644 index 00000000..6327fd64 --- /dev/null +++ b/src/sdk/models/inplaceImportApiViaUrlRequest.ts @@ -0,0 +1,26 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; + +/** Contains a url field to allow Apis to be imported via url */ +export interface InplaceImportApiViaUrlRequest { + /** The URL for the API specification file.

**Note:** This URL should be publicly accessible. */ + url: string; + additionalProperties?: Record; +} + +export const inplaceImportApiViaUrlRequestSchema: Schema = typedExpandoObject( + { url: ['url', string()] }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/inputParameter.ts b/src/sdk/models/inputParameter.ts new file mode 100644 index 00000000..14c795cb --- /dev/null +++ b/src/sdk/models/inputParameter.ts @@ -0,0 +1,41 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + boolean, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; + +/** This structure helps specify details of an input parameter. */ +export interface InputParameter { + /** If parameter is null */ + isNull: boolean; + /** Unique parameter identifier for each endpoint */ + endpointInputPrameterId: string; + /** Unique parameter identifier */ + id: string; + /** Parameter Name */ + name: string; + /** Parameter Value */ + value: string; + additionalProperties?: Record; +} + +export const inputParameterSchema: Schema = typedExpandoObject( + { + isNull: ['isNull', boolean()], + endpointInputPrameterId: ['endpointInputPrameterId', string()], + id: ['id', string()], + name: ['name', string()], + value: ['value', string()], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/link.ts b/src/sdk/models/link.ts new file mode 100644 index 00000000..6a57b1be --- /dev/null +++ b/src/sdk/models/link.ts @@ -0,0 +1,19 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { Schema, stringEnum } from '../schema'; + +/** + * Enum for Link + */ +export enum Link { + EnumHttpswwwnugetorgpackagesmyPackage111 = 'https://www.nuget.org/packages/myPackage/1.1.1', +} + +/** + * Schema for Link + */ +export const linkSchema: Schema = stringEnum(Link); diff --git a/src/sdk/models/links.ts b/src/sdk/models/links.ts new file mode 100644 index 00000000..ee50d3cc --- /dev/null +++ b/src/sdk/models/links.ts @@ -0,0 +1,25 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; + +export interface Links { + status: string; + download: string; + additionalProperties?: Record; +} + +export const linksSchema: Schema = typedExpandoObject( + { status: ['status', string()], download: ['download', string()] }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/mEnvironment.ts b/src/sdk/models/mEnvironment.ts new file mode 100644 index 00000000..45829dca --- /dev/null +++ b/src/sdk/models/mEnvironment.ts @@ -0,0 +1,37 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + array, + lazy, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; +import { Server, serverSchema } from './server'; + +/** An environment consists of a set of servers with base URL values. The environment can be changed programatically allowing rapid switching between different environments. For example the user can specify a Production and Testing Environment and switch between them in the generated SDK. */ +export interface MEnvironment { + /** Unique Environment Identifier */ + id: string; + /** Environment Name */ + name: string; + /** The user can specify multiple servers within an environment. A server comprises of a name and a url. */ + servers: Server[]; + additionalProperties?: Record; +} + +export const mEnvironmentSchema: Schema = typedExpandoObject( + { + id: ['id', string()], + name: ['name', string()], + servers: ['servers', array(lazy(() => serverSchema))], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/metaData.ts b/src/sdk/models/metaData.ts new file mode 100644 index 00000000..3a2d5c7e --- /dev/null +++ b/src/sdk/models/metaData.ts @@ -0,0 +1,45 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { lazy, optional, Schema, typedExpandoObject, unknown } from '../schema'; +import { + ApiValidationSummary, + apiValidationSummarySchema, +} from './apiValidationSummary'; +import { + DocsValidationSummary, + docsValidationSummarySchema, +} from './docsValidationSummary'; +import { + ImportValidationSummary, + importValidationSummarySchema, +} from './importValidationSummary'; + +export interface MetaData { + importValidationSummary: ImportValidationSummary; + apiValidationSummary: ApiValidationSummary; + docsValidationSummary: DocsValidationSummary; + additionalProperties?: Record; +} + +export const metaDataSchema: Schema = typedExpandoObject( + { + importValidationSummary: [ + 'importValidationSummary', + lazy(() => importValidationSummarySchema), + ], + apiValidationSummary: [ + 'apiValidationSummary', + lazy(() => apiValidationSummarySchema), + ], + docsValidationSummary: [ + 'docsValidationSummary', + lazy(() => docsValidationSummarySchema), + ], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/packageDeploymentInformation.ts b/src/sdk/models/packageDeploymentInformation.ts new file mode 100644 index 00000000..812cb528 --- /dev/null +++ b/src/sdk/models/packageDeploymentInformation.ts @@ -0,0 +1,39 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + lazy, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; +import { + TemplatesPackageDeploymentInformation, + templatesPackageDeploymentInformationSchema, +} from './templatesPackageDeploymentInformation'; + +/** The structure contains Package Deployment Information along with Id. */ +export interface PackageDeploymentInformation { + /** Package Deployment Identifier */ + id: string; + /** This structure encapsulates all package deployment details. */ + templatesPackageDeploymentInformation: TemplatesPackageDeploymentInformation; + additionalProperties?: Record; +} + +export const packageDeploymentInformationSchema: Schema = typedExpandoObject( + { + id: ['id', string()], + templatesPackageDeploymentInformation: [ + 'templatesPackageDeploymentInformation', + lazy(() => templatesPackageDeploymentInformationSchema), + ], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/packageRepositories.ts b/src/sdk/models/packageRepositories.ts new file mode 100644 index 00000000..267b4efa --- /dev/null +++ b/src/sdk/models/packageRepositories.ts @@ -0,0 +1,23 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { Schema, stringEnum } from '../schema'; + +/** + * Enum for PackageRepositories + */ +export enum PackageRepositories { + Npm = 'Npm', + PyPi = 'PyPI', + RubyGems = 'RubyGems', +} + +/** + * Schema for PackageRepositories + */ +export const packageRepositoriesSchema: Schema = stringEnum( + PackageRepositories +); diff --git a/src/sdk/models/parameter.ts b/src/sdk/models/parameter.ts new file mode 100644 index 00000000..fc9466b1 --- /dev/null +++ b/src/sdk/models/parameter.ts @@ -0,0 +1,67 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + boolean, + lazy, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; +import { Attributes, attributesSchema } from './attributes'; + +/** Parameters are options passed with the endpoint */ +export interface Parameter { + /** If parameter is optional */ + optional: boolean; + /** Type of Parameter */ + type: string; + /** IF Parameter is constant */ + constant: boolean; + /** If Param is collected as array */ + isArray: boolean; + isStream: boolean; + isAttribute: boolean; + isMap: boolean; + /** The structure contain attribute details of a parameter type. */ + attributes: Attributes; + /** If Parameter is nullable */ + nullable: boolean; + /** Unique Parameter identifier */ + id: string; + /** Parameter Name */ + name: string; + /** Parameter Description */ + description: string; + /** Default Values of a Parameter */ + defaultValue: string; + /** Specify Parameter Format */ + paramFormat: string; + additionalProperties?: Record; +} + +export const parameterSchema: Schema = typedExpandoObject( + { + optional: ['optional', boolean()], + type: ['type', string()], + constant: ['constant', boolean()], + isArray: ['isArray', boolean()], + isStream: ['isStream', boolean()], + isAttribute: ['isAttribute', boolean()], + isMap: ['isMap', boolean()], + attributes: ['attributes', lazy(() => attributesSchema)], + nullable: ['nullable', boolean()], + id: ['id', string()], + name: ['name', string()], + description: ['description', string()], + defaultValue: ['defaultValue', string()], + paramFormat: ['ParamFormat', string()], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/platforms.ts b/src/sdk/models/platforms.ts new file mode 100644 index 00000000..d51f9fb7 --- /dev/null +++ b/src/sdk/models/platforms.ts @@ -0,0 +1,25 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { Schema, stringEnum } from '../schema'; + +/** + * Enum for Platforms + */ +export enum Platforms { + CsNetStandardLib = 'CS_NET_STANDARD_LIB', + JavaEclipseJreLib = 'JAVA_ECLIPSE_JRE_LIB', + PhpGenericLibV2 = 'PHP_GENERIC_LIB_V2', + PythonGenericLib = 'PYTHON_GENERIC_LIB', + RubyGenericLib = 'RUBY_GENERIC_LIB', + TsGenericLib = 'TS_GENERIC_LIB', + GoGenericLib = 'GO_GENERIC_LIB', +} + +/** + * Schema for Platforms + */ +export const platformsSchema: Schema = stringEnum(Platforms); diff --git a/src/sdk/models/portalGenerationAsyncResponse.ts b/src/sdk/models/portalGenerationAsyncResponse.ts new file mode 100644 index 00000000..b90808c2 --- /dev/null +++ b/src/sdk/models/portalGenerationAsyncResponse.ts @@ -0,0 +1,17 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { lazy, object, Schema, string } from '../schema'; +import { Links, linksSchema } from './links'; + +export interface PortalGenerationAsyncResponse { + id: string; + links: Links; +} + +export const portalGenerationAsyncResponseSchema: Schema = object( + { id: ['id', string()], links: ['links', lazy(() => linksSchema)] } +); diff --git a/src/sdk/models/portalGenerationStatusResponse.ts b/src/sdk/models/portalGenerationStatusResponse.ts new file mode 100644 index 00000000..1b3cc9fb --- /dev/null +++ b/src/sdk/models/portalGenerationStatusResponse.ts @@ -0,0 +1,16 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { object, Schema } from '../schema'; +import { Status, statusSchema } from './status'; + +export interface PortalGenerationStatusResponse { + status: Status; +} + +export const portalGenerationStatusResponseSchema: Schema = object( + { status: ['status', statusSchema] } +); diff --git a/src/sdk/models/publishPackageInput.ts b/src/sdk/models/publishPackageInput.ts new file mode 100644 index 00000000..102ce384 --- /dev/null +++ b/src/sdk/models/publishPackageInput.ts @@ -0,0 +1,43 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; +import { + PackageRepositories, + packageRepositoriesSchema, +} from './packageRepositories'; +import { Platforms, platformsSchema } from './platforms'; + +export interface PublishPackageInput { + packageRepository: PackageRepositories; + /** The structure contains platforms that APIMatic CodeGen can generate SDKs and Docs in. */ + template: Platforms; + packageName: string; + version: string; + additionalDeploymentInformation?: unknown; + additionalProperties?: Record; +} + +export const publishPackageInputSchema: Schema = typedExpandoObject( + { + packageRepository: ['packageRepository', packageRepositoriesSchema], + template: ['template', platformsSchema], + packageName: ['packageName', string()], + version: ['version', string()], + additionalDeploymentInformation: [ + 'additionalDeploymentInformation', + optional(unknown()), + ], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/publishedPackage.ts b/src/sdk/models/publishedPackage.ts new file mode 100644 index 00000000..d22882f0 --- /dev/null +++ b/src/sdk/models/publishedPackage.ts @@ -0,0 +1,55 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + lazy, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; +import { + AuthorIdentifiers, + authorIdentifiersSchema, +} from './authorIdentifiers'; + +export interface PublishedPackage { + id: string; + createdOn: string; + apiEntityId: string; + packageRepository: string; + template: string; + packageName: string; + version: string; + additionalDeploymentInformation?: unknown; + authorIdentifiers: AuthorIdentifiers; + link: string; + additionalProperties?: Record; +} + +export const publishedPackageSchema: Schema = typedExpandoObject( + { + id: ['id', string()], + createdOn: ['createdOn', string()], + apiEntityId: ['apiEntityId', string()], + packageRepository: ['packageRepository', string()], + template: ['template', string()], + packageName: ['packageName', string()], + version: ['version', string()], + additionalDeploymentInformation: [ + 'additionalDeploymentInformation', + optional(unknown()), + ], + authorIdentifiers: [ + 'authorIdentifiers', + lazy(() => authorIdentifiersSchema), + ], + link: ['link', string()], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/response.ts b/src/sdk/models/response.ts new file mode 100644 index 00000000..681d427a --- /dev/null +++ b/src/sdk/models/response.ts @@ -0,0 +1,61 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + boolean, + lazy, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; +import { Attributes, attributesSchema } from './attributes'; + +/** The structure encapsulates all details of a request response */ +export interface Response { + /** Specify if response is optional or not */ + optional: boolean; + /** Specify response type */ + type: string; + /** Specify if response is constant */ + constant: boolean; + /** Specify if response is array */ + isArray: boolean; + /** Specify if response is stream */ + isStream: boolean; + /** Specify if response has attributes */ + isAttribute: boolean; + /** Specify if response is collected as map */ + isMap: boolean; + /** The structure contain attribute details of a parameter type. */ + attributes: Attributes; + /** Specify is response is nullable */ + nullable: boolean; + /** Unique response identifier */ + id: string; + /** Response name */ + name: string; + additionalProperties?: Record; +} + +export const responseSchema: Schema = typedExpandoObject( + { + optional: ['optional', boolean()], + type: ['type', string()], + constant: ['constant', boolean()], + isArray: ['isArray', boolean()], + isStream: ['isStream', boolean()], + isAttribute: ['isAttribute', boolean()], + isMap: ['isMap', boolean()], + attributes: ['attributes', lazy(() => attributesSchema)], + nullable: ['nullable', boolean()], + id: ['id', string()], + name: ['name', string()], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/server.ts b/src/sdk/models/server.ts new file mode 100644 index 00000000..eebb1ab0 --- /dev/null +++ b/src/sdk/models/server.ts @@ -0,0 +1,30 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; + +/** The user can specify multiple servers within an environment. A server comprises of a name and a URL. The names of the hosts remain consistent over different environments but their values may vary. The URL values can contain any number of parameters defined. */ +export interface Server { + /** Unique Server identifier */ + id: string; + /** Server Name */ + name: string; + /** Server URL */ + url: string; + additionalProperties?: Record; +} + +export const serverSchema: Schema = typedExpandoObject( + { id: ['id', string()], name: ['name', string()], url: ['url', string()] }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/serverConfiguration.ts b/src/sdk/models/serverConfiguration.ts new file mode 100644 index 00000000..4c794d5b --- /dev/null +++ b/src/sdk/models/serverConfiguration.ts @@ -0,0 +1,44 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + array, + lazy, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; +import { MEnvironment, mEnvironmentSchema } from './mEnvironment'; +import { Parameter, parameterSchema } from './parameter'; + +/** Server configurations can be used to create multiple environments, multiple servers that can be used with specific endpoints and server URLs with template paramters. */ +export interface ServerConfiguration { + /** Server Config Identifier */ + id: string; + /** Default Environment */ + defaultEnvironment: string; + /** Default Server */ + defaultServer: string; + /** Environment Identifier and Name */ + environments: MEnvironment[]; + /** Parameter Attributes */ + parameters: Parameter[]; + additionalProperties?: Record; +} + +export const serverConfigurationSchema: Schema = typedExpandoObject( + { + id: ['id', string()], + defaultEnvironment: ['defaultEnvironment', string()], + defaultServer: ['defaultServer', string()], + environments: ['environments', array(lazy(() => mEnvironmentSchema))], + parameters: ['parameters', array(lazy(() => parameterSchema))], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/status.ts b/src/sdk/models/status.ts new file mode 100644 index 00000000..19ed2770 --- /dev/null +++ b/src/sdk/models/status.ts @@ -0,0 +1,21 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { Schema, stringEnum } from '../schema'; + +/** + * Enum for Status + */ +export enum Status { + Completed = 'Completed', + InProgress = 'InProgress', + Failed = 'Failed', +} + +/** + * Schema for Status + */ +export const statusSchema: Schema = stringEnum(Status); diff --git a/src/sdk/models/templatesPackageDeploymentInformation.ts b/src/sdk/models/templatesPackageDeploymentInformation.ts new file mode 100644 index 00000000..231987f4 --- /dev/null +++ b/src/sdk/models/templatesPackageDeploymentInformation.ts @@ -0,0 +1,26 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { lazy, optional, Schema, typedExpandoObject, unknown } from '../schema'; +import { Csnetstandardlib, csnetstandardlibSchema } from './csnetstandardlib'; + +/** This structure encapsulates all package deployment details. */ +export interface TemplatesPackageDeploymentInformation { + /** This structure contains all details that goes into package deployment. */ + csNetStandardLib: Csnetstandardlib; + additionalProperties?: Record; +} + +export const templatesPackageDeploymentInformationSchema: Schema = typedExpandoObject( + { + csNetStandardLib: [ + 'CS_NET_STANDARD_LIB', + lazy(() => csnetstandardlibSchema), + ], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/testCase.ts b/src/sdk/models/testCase.ts new file mode 100644 index 00000000..337f1e00 --- /dev/null +++ b/src/sdk/models/testCase.ts @@ -0,0 +1,75 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + array, + boolean, + lazy, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; +import { InputParameter, inputParameterSchema } from './inputParameter'; + +/** APIMatic lets you define test cases for endpoints using the API Editor. The test cases are automatically generated for each language. This structure encapsulates all details of a Test Case. To find out more about defining Test Cases visit: https://docs.apimatic.io/testing/defining-your-first-test-case/ */ +export interface TestCase { + /** Unique Test Case identifier */ + id: string; + /** The Endpoint, test case is associated with */ + endpointId: string; + /** The API Entity, test case is associated with */ + apiId: string; + /** The Test Case name */ + name: string; + /** Enable/Disable a Test Case */ + enabled: boolean; + shouldPass: boolean; + /** Test case parameters */ + inputParameters: InputParameter[]; + /** Expected response status. We expect the status code to be 200 if the operation is successful, hence we input the value 200. */ + expectedStatus: string; + /** Expected Headers */ + expectedHeaders: string[]; + /** If this flag is disabled, it will cause the test case to fail if the response contains other headers than those listed in the expected headers list. */ + expectedHeadersAllowExtra: boolean; + /** Expected response goes in the expected body */ + expectedBody: string; + /** Specifies what to match */ + expectedBodyMatchMode: string; + /** If enabled, this will involve ensuring that the response body contains the array elements in the same order as the expected body. */ + expectedArrayOrderedMatching: boolean; + /** If enabled, this will ensure that the response body contains the same number of elements in the array as does the expected body. */ + expectedArrayCheckCount: boolean; + responseMatchSchema: boolean; + additionalProperties?: Record; +} + +export const testCaseSchema: Schema = typedExpandoObject( + { + id: ['id', string()], + endpointId: ['endpointId', string()], + apiId: ['apiId', string()], + name: ['name', string()], + enabled: ['enabled', boolean()], + shouldPass: ['shouldPass', boolean()], + inputParameters: [ + 'inputParameters', + array(lazy(() => inputParameterSchema)), + ], + expectedStatus: ['expectedStatus', string()], + expectedHeaders: ['expectedHeaders', array(string())], + expectedHeadersAllowExtra: ['expectedHeadersAllowExtra', boolean()], + expectedBody: ['expectedBody', string()], + expectedBodyMatchMode: ['expectedBodyMatchMode', string()], + expectedArrayOrderedMatching: ['expectedArrayOrderedMatching', boolean()], + expectedArrayCheckCount: ['expectedArrayCheckCount', boolean()], + responseMatchSchema: ['responseMatchSchema', boolean()], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/testGenSettings.ts b/src/sdk/models/testGenSettings.ts new file mode 100644 index 00000000..1ef8b05b --- /dev/null +++ b/src/sdk/models/testGenSettings.ts @@ -0,0 +1,34 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + number, + optional, + Schema, + typedExpandoObject, + unknown, +} from '../schema'; + +/** This structure helps specify additional test configurations which affects how test cases are generated. */ +export interface TestGenSettings { + /** Error margin for comparing values in decimal places */ + precisionDelta: number; + /** Number of seconds after which if the endpoint is not returning any response, the test is forced to fail e.g. a timeout of 60 */ + testTimeout: number; + /** The parameters allows to provide values for configuration file for use in the test environment */ + configuration?: unknown; + additionalProperties?: Record; +} + +export const testGenSettingsSchema: Schema = typedExpandoObject( + { + precisionDelta: ['precisionDelta', number()], + testTimeout: ['testTimeout', number()], + configuration: ['configuration', optional(unknown())], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/transformViaUrlRequest.ts b/src/sdk/models/transformViaUrlRequest.ts new file mode 100644 index 00000000..3eefc8d9 --- /dev/null +++ b/src/sdk/models/transformViaUrlRequest.ts @@ -0,0 +1,32 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; +import { ExportFormats, exportFormatsSchema } from './exportFormats'; + +/** This structure puts together the URL of the file to be transformed, along with the desired export format. */ +export interface TransformViaUrlRequest { + /** The URL for the API specification file.

**Note:** This URL should be publicly accessible. */ + url: string; + /** The structure contains API specification formats that Transformer can convert to. */ + exportFormat: ExportFormats; + additionalProperties?: Record; +} + +export const transformViaUrlRequestSchema: Schema = typedExpandoObject( + { + url: ['url', string()], + exportFormat: ['export_format', exportFormatsSchema], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/transformation.ts b/src/sdk/models/transformation.ts new file mode 100644 index 00000000..e9d84b7f --- /dev/null +++ b/src/sdk/models/transformation.ts @@ -0,0 +1,68 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + boolean, + lazy, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; +import { + ApiValidationSummary, + apiValidationSummarySchema, +} from './apiValidationSummary'; + +/** Transformation structure encapsulates all the details of a Transformation. */ +export interface Transformation { + /** Unique Transformation Identifier */ + id: string; + /** Transformation Date and Time */ + transformedOn: string; + /** Unique User Identifier */ + userId: string; + /** API Specification file to be transformed */ + inputtedFile: string; + /** API Specification file transformed to desired format */ + generatedFile: string; + /** Desired Specification format */ + exportFormat: string; + /** Source of Transformation */ + transformationSource: string; + /** Via File or URL */ + transformationInput: string; + /** CodeGen Engine Version */ + codeGenVersion: string; + /** Successful Transformation Flag */ + success: boolean; + importSummary: ApiValidationSummary; + apiValidationSummary: ApiValidationSummary; + additionalProperties?: Record; +} + +export const transformationSchema: Schema = typedExpandoObject( + { + id: ['id', string()], + transformedOn: ['transformedOn', string()], + userId: ['userId', string()], + inputtedFile: ['inputtedFile', string()], + generatedFile: ['generatedFile', string()], + exportFormat: ['exportFormat', string()], + transformationSource: ['transformationSource', string()], + transformationInput: ['transformationInput', string()], + codeGenVersion: ['codeGenVersion', string()], + success: ['success', boolean()], + importSummary: ['importSummary', lazy(() => apiValidationSummarySchema)], + apiValidationSummary: [ + 'apiValidationSummary', + lazy(() => apiValidationSummarySchema), + ], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/updatePackageDeploymentInformation.ts b/src/sdk/models/updatePackageDeploymentInformation.ts new file mode 100644 index 00000000..4d1d3bcb --- /dev/null +++ b/src/sdk/models/updatePackageDeploymentInformation.ts @@ -0,0 +1,29 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { lazy, optional, Schema, typedExpandoObject, unknown } from '../schema'; +import { + UpdateTemplatesPackageDeploymentInformation, + updateTemplatesPackageDeploymentInformationSchema, +} from './updateTemplatesPackageDeploymentInformation'; + +/** This structure is used to update package deployment details. */ +export interface UpdatePackageDeploymentInformation { + /** This structure helps update package deployment details. */ + templatesPackageDeploymentInformation: UpdateTemplatesPackageDeploymentInformation; + additionalProperties?: Record; +} + +export const updatePackageDeploymentInformationSchema: Schema = typedExpandoObject( + { + templatesPackageDeploymentInformation: [ + 'templatesPackageDeploymentInformation', + lazy(() => updateTemplatesPackageDeploymentInformationSchema), + ], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/updateTemplatesPackageDeploymentInformation.ts b/src/sdk/models/updateTemplatesPackageDeploymentInformation.ts new file mode 100644 index 00000000..c9c6cf5c --- /dev/null +++ b/src/sdk/models/updateTemplatesPackageDeploymentInformation.ts @@ -0,0 +1,26 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { lazy, optional, Schema, typedExpandoObject, unknown } from '../schema'; +import { Csnetstandardlib, csnetstandardlibSchema } from './csnetstandardlib'; + +/** This structure helps update package deployment details. */ +export interface UpdateTemplatesPackageDeploymentInformation { + /** This structure contains all details that goes into package deployment. */ + csNetStandardLib: Csnetstandardlib; + additionalProperties?: Record; +} + +export const updateTemplatesPackageDeploymentInformationSchema: Schema = typedExpandoObject( + { + csNetStandardLib: [ + 'CS_NET_STANDARD_LIB', + lazy(() => csnetstandardlibSchema), + ], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/userCodeGeneration.ts b/src/sdk/models/userCodeGeneration.ts new file mode 100644 index 00000000..8d2d7258 --- /dev/null +++ b/src/sdk/models/userCodeGeneration.ts @@ -0,0 +1,57 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + boolean, + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; +import { Platforms, platformsSchema } from './platforms'; + +/** The Code Generation structure encapsulates all the the details of an SDK generation performed by a user. */ +export interface UserCodeGeneration { + /** Unique Code Generation Identifier */ + id: string; + /** The structure contains platforms that APIMatic CodeGen can generate SDKs and Docs in. */ + template: Platforms; + /** The generated SDK */ + generatedFile: string; + /** Generation Date and Time */ + generatedOn: string; + /** The md5 hash of the API Description */ + hashCode: string; + /** Generation Source */ + codeGenerationSource: string; + /** Generation Version */ + codeGenVersion: string; + /** Generation Status */ + success: boolean; + /** Unique User Identifier */ + userId: string; + /** API Specification file in a supported format */ + inputFile: string; + additionalProperties?: Record; +} + +export const userCodeGenerationSchema: Schema = typedExpandoObject( + { + id: ['id', string()], + template: ['template', platformsSchema], + generatedFile: ['generatedFile', string()], + generatedOn: ['generatedOn', string()], + hashCode: ['hashCode', string()], + codeGenerationSource: ['codeGenerationSource', string()], + codeGenVersion: ['codeGenVersion', string()], + success: ['success', boolean()], + userId: ['userId', string()], + inputFile: ['inputFile', string()], + }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/models/validationException.ts b/src/sdk/models/validationException.ts new file mode 100644 index 00000000..222fb4c6 --- /dev/null +++ b/src/sdk/models/validationException.ts @@ -0,0 +1,27 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +import { + optional, + Schema, + string, + typedExpandoObject, + unknown, +} from '../schema'; + +/** Validation exception contains information, warnings, messages and errors. */ +export interface ValidationException { + reason: string; + /** Validation Summary of the API in case validation failed */ + summary?: string; + additionalProperties?: Record; +} + +export const validationExceptionSchema: Schema = typedExpandoObject( + { reason: ['reason', string()], summary: ['summary', optional(string())] }, + 'additionalProperties', + optional(unknown()) +); diff --git a/src/sdk/schema.ts b/src/sdk/schema.ts new file mode 100644 index 00000000..f84e93f6 --- /dev/null +++ b/src/sdk/schema.ts @@ -0,0 +1,7 @@ +/** + * Apimatic APILib + * + * This file was automatically generated by APIMATIC v3.0 ( https://www.apimatic.io ). + */ + +export * from '@apimatic/schema'; diff --git a/src/services/portal/server.ts b/src/services/portal/server.ts index 02d4bd45..0d392ee0 100644 --- a/src/services/portal/server.ts +++ b/src/services/portal/server.ts @@ -5,51 +5,86 @@ import * as open from "open"; import { watchAndRegeneratePortal } from "../../controllers/portal/serve"; import { PortalServerConfig } from "../../types/portal/quickstart"; import { Server } from "http"; -import { getMessageInRedColor } from "../../utils/utils"; +import { getMessageInRedColor, isPortInUse } from "../../utils/utils"; export class PortalServerService { private server!: Server; private liveReloadServer!: livereload.LiveReloadServer; private readonly app: express.Application; private readonly port = 3000; + private readonly liveReloadPort = 35729; constructor() { this.app = express(); } - setupServer(generatedPortalPath: string): void { - this.liveReloadServer = livereload.createServer(); - this.liveReloadServer.watch(generatedPortalPath); + private async findAvailablePort(startPort: number): Promise { + let port = startPort; + const maxPort = startPort + 10; // Limit the port search range + + while (port < maxPort) { + if (!(await isPortInUse(port))) { + return port; + } + port++; + } + + // If no port is found in the range, return the original port + return startPort; + } - this.app.use(connectLivereload()); + private async createLiveReloadServer(generatedPortalPath: string): Promise { + try { + const availablePort = await this.findAvailablePort(this.liveReloadPort); + + this.liveReloadServer = livereload.createServer({ + port: availablePort + }); + + this.liveReloadServer.watch(generatedPortalPath); + } catch (error) { + console.log(getMessageInRedColor(`Unable to serve the portal: ${(error as Error).message}`)); + } + } + + async setupServer(generatedPortalPath: string): Promise { + await this.createLiveReloadServer(generatedPortalPath); + + if (this.liveReloadServer) { + this.app.use(connectLivereload()); + } this.app.use(express.static(generatedPortalPath)); } - startServer(config: PortalServerConfig, noReload = false, displayShutdownMessages = true): Promise { + async startServer(config: PortalServerConfig, noReload = false, displayShutdownMessages = true): Promise { const { generatedPortalPath, targetFolder, configDir, authKey, ignoredPaths, port, openInBrowser } = config; - const serverPort = port ?? this.port; + const requestedPort = port ?? this.port; - return new Promise((resolve) => { - try { - this.server = this.app.listen(serverPort, () => { - if (openInBrowser) { - open(`http://localhost:${serverPort}`); - } + return new Promise((resolve, reject) => { + this.server = this.app.listen(requestedPort, () => { + if (openInBrowser) { + open(`http://localhost:${requestedPort}`); + } - if (!noReload) { - watchAndRegeneratePortal(targetFolder, generatedPortalPath, configDir, authKey, ignoredPaths); - } + if (!noReload) { + watchAndRegeneratePortal(targetFolder, generatedPortalPath, configDir, authKey, ignoredPaths); + } - if (process.platform !== "darwin") { - //For non-macOS users. - if (process.stdin.setRawMode) { - process.stdin.setRawMode(false); - } + if (process.platform !== "darwin") { + //For non-macOS users. + if (process.stdin.setRawMode) { + process.stdin.setRawMode(false); } - }); - } catch (error) { - throw new Error(getMessageInRedColor(`There was an error starting the server: ${error}`)); - } + } + resolve(true); + }).on('error', (err: NodeJS.ErrnoException) => { + if (err.code === 'EADDRINUSE') { + console.error(getMessageInRedColor(`Port ${requestedPort} is not available. Unable to serve your portal.`)); + } else { + console.error(getMessageInRedColor(`Unable to serve the portal: ${err.message}`)); + } + reject(err); + }); const shutdown = async () => { if (displayShutdownMessages) { @@ -59,7 +94,7 @@ export class PortalServerService { if (displayShutdownMessages) { console.log("Server shut down successfully."); } - resolve(); + resolve(true); process.exit(0); }; diff --git a/src/types/common/result.ts b/src/types/common/result.ts new file mode 100644 index 00000000..f93572f2 --- /dev/null +++ b/src/types/common/result.ts @@ -0,0 +1,37 @@ +export class Result { + private constructor( + private readonly Status: ResultStatus, + public readonly value?: T, + public readonly error?: TError + ) {} + + public static success(value: T): Result { + return new Result(ResultStatus.Success, value, undefined); + } + + public static failure(error: TError): Result { + return new Result(ResultStatus.Failed, undefined, error); + } + + public static cancelled(value: T): Result { + return new Result(ResultStatus.Cancelled, value, undefined); + } + + public isFailed(): boolean { + return this.Status == ResultStatus.Failed; + } + + public isCancelled(): boolean { + return this.Status == ResultStatus.Cancelled; + } + + public isSuccess(): boolean { + return this.Status == ResultStatus.Success; + } +} + +export enum ResultStatus { + Success, + Failed, + Cancelled +} diff --git a/src/types/portal/generate.ts b/src/types/portal/generate.ts index 2bfce385..edc38c7d 100644 --- a/src/types/portal/generate.ts +++ b/src/types/portal/generate.ts @@ -1,10 +1,29 @@ -import { DocsPortalManagementController } from "@apimatic/sdk"; - -export type GeneratePortalParams = { - zippedBuildFilePath: string; - portalFolderPath: string; - zippedPortalPath: string; - docsPortalController: DocsPortalManagementController; - overrideAuthKey: string | null; - zip: boolean; +export interface GeneratePortalParams { + readonly sourceBuildInputZipFilePath: string; + readonly generatedPortalArtifactsFolderPath: string; + readonly generatedPortalArtifactsZipFilePath: string; + readonly overrideAuthKey: string | null; + readonly generateZipFile: boolean; }; + +export interface PortalPaths { + readonly sourceFolderPath: string; + readonly destinationFolderPath: string; + readonly generatedPortalArtifactsFolderPath: string; + readonly generatedPortalArtifactsZipFilePath: string; +} + +export interface ErrorResponse { + readonly title: string; + readonly detail?: string; + readonly errors: Record; + readonly message?: string; +} + +export interface GenerateFlags { + readonly folder: string; + readonly destination: string; + readonly force: boolean; + readonly zip: boolean; + readonly "auth-key": string; +} \ No newline at end of file diff --git a/src/types/sdk/generate.ts b/src/types/sdk/generate.ts index 64cad3c8..5419c1c3 100644 --- a/src/types/sdk/generate.ts +++ b/src/types/sdk/generate.ts @@ -18,8 +18,9 @@ export type SDKGenerateUnprocessableError = { export enum SimplePlatforms { CSHARP = "CS_NET_STANDARD_LIB", JAVA = "JAVA_ECLIPSE_JRE_LIB", - PHP = "PHP_GENERIC_LIB", + PHP = "PHP_GENERIC_LIB_V2", PYTHON = "PYTHON_GENERIC_LIB", RUBY = "RUBY_GENERIC_LIB", - TYPESCRIPT = "TS_GENERIC_LIB" + TYPESCRIPT = "TS_GENERIC_LIB", + GO = "GO_GENERIC_LIB" } diff --git a/src/types/sdl/sdl.ts b/src/types/sdl/sdl.ts new file mode 100644 index 00000000..d82b3784 --- /dev/null +++ b/src/types/sdl/sdl.ts @@ -0,0 +1,13 @@ +export interface Sdl { + readonly Endpoints: SdlEndpoint[], + readonly CustomTypes: SdlModel[] +} + +export interface SdlEndpoint { + readonly Name: string, + readonly Group: string +} + +export interface SdlModel { + readonly Name: string +} \ No newline at end of file diff --git a/src/types/toc/toc.ts b/src/types/toc/toc.ts new file mode 100644 index 00000000..de81fc3c --- /dev/null +++ b/src/types/toc/toc.ts @@ -0,0 +1,37 @@ +export interface Toc { + toc: Array +}; + +export interface TocGroup { + readonly group: string, + readonly items: Array +}; + +export interface TocGenerated { + readonly generate: string; + readonly from: string; +}; + +export interface TocEndpointGroupOverview { + readonly generate: null; + readonly from: "endpoint-group-overview"; + readonly endpointGroup: string; +}; + +export interface TocEndpoint { + readonly generate: null; + readonly from: "endpoint"; + readonly endpointName: string; + readonly endpointGroup: string; +}; + +export interface TocModel { + readonly generate: null; + readonly from: "model"; + readonly modelName: string; +}; + +export interface TocCustomPage { + readonly page: string; + readonly file: string; +}; \ No newline at end of file diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 808848ef..c4b49f8c 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -146,13 +146,10 @@ export const deleteFile = async (filePath: string) => { }; export const writeFileUsingReadableStream = (stream: NodeJS.ReadableStream, destinationPath: string) => { - return new Promise((resolve, reject) => { + return new Promise((resolve) => { const writeStream = fs.createWriteStream(destinationPath); stream.pipe(writeStream); - writeStream.on("close", (error: Error) => { - if (error) { - return reject(new Error("Couldn't zip the stream")); - } + writeStream.on("close", () => { resolve("Zipped"); }); }); @@ -191,7 +188,7 @@ export const zipDirectory = async (sourcePath: string, destinationPath: string): // Check if the directory exists for the user or not await fs.ensureDir(sourcePath); - const zipPath = path.join(destinationPath, "target.zip"); + const zipPath = path.join(destinationPath, ".target.zip"); const output = fs.createWriteStream(zipPath); const archive = archiver("zip"); @@ -228,6 +225,14 @@ export const isJSONParsable = (json: string) => { } }; +export const getGeneratedFilesPaths = (sourceDirectoryPath: string, generatedPortalArtifactsDirectoryPath: string): string[] => { + const generatedBuildInputZipPath = path.join(sourceDirectoryPath, ".portal_source.zip"); + const generatedPortalArtifactsZipFilePath = path.join(sourceDirectoryPath, ".generated_portal.zip"); + const generatedPortalArtifactsFolderPath = path.join(path.dirname(generatedPortalArtifactsDirectoryPath), "generated_portal"); + + return [generatedBuildInputZipPath, generatedPortalArtifactsFolderPath, generatedPortalArtifactsZipFilePath]; +}; + export const getFileNameFromPath = (filePath: string) => { return path.basename(filePath).split(".")[0]; }; @@ -309,14 +314,6 @@ export async function validateAndZipPortalSource( zlib: { level: 9 } }); - const items = await fs.readdir(sourceDir); - - if (!items.some((item) => item.startsWith("APIMATIC-BUILD"))) { - throw new Error( - "APIMatic Build file is missing, portal cannot be generated. Please specify a valid APIMatic build file and try again." - ); - } - return new Promise((resolve, reject) => { output.on("close", () => resolve(outputPath)); output.on("error", (err) => { @@ -369,8 +366,8 @@ export async function validateAndZipPortalSource( } export async function cleanUpGeneratedPortalFiles(sourceDir: string) { - const generatedPortalZipFilePath = path.join(sourceDir, "generated_portal.zip"); - const generatedPortalSourceZipFilePath = path.join(sourceDir, "portal_source.zip"); + const generatedPortalZipFilePath = path.join(sourceDir, ".generated_portal.zip"); + const generatedPortalSourceZipFilePath = path.join(sourceDir, ".portal_source.zip"); if (fs.existsSync(generatedPortalZipFilePath)) { await deleteFile(generatedPortalZipFilePath); } @@ -400,6 +397,15 @@ export function isPortInUse(port: number): Promise { }); } +export async function parseStreamBodyToJson(body: NodeJS.ReadableStream): Promise { + const chunks: Buffer[] = []; + for await (const chunk of body) { + chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)); + } + const text = Buffer.concat(chunks).toString("utf-8"); + return JSON.parse(text); +} + export const getNonHiddenItemsFromDirectory = (directoryPath: string): string[] => { return fs.readdirSync(directoryPath).filter((item) => !item.startsWith(".")); }; diff --git a/src/validators/common/directoryValidator.ts b/src/validators/common/directoryValidator.ts index 32b5d0d3..0c974dc7 100644 --- a/src/validators/common/directoryValidator.ts +++ b/src/validators/common/directoryValidator.ts @@ -12,11 +12,11 @@ export class DirectoryValidator { } async validateGeneratedPortalDestinationDirectory(destinationDir: string, portalDir: string) { - if (!fs.pathExistsSync(destinationDir) && destinationDir != "./api-portal") { + if (!fs.pathExistsSync(destinationDir) && destinationDir != "./generated_portal") { this.error(getMessageInRedColor(`The specified destination directory does not exist: ${destinationDir}. Please provide a valid destination directory to continue.`)); } - if (destinationDir == "./api-portal") { + if (destinationDir == "./generated_portal") { await fs.ensureDir(portalDir); } } @@ -58,7 +58,7 @@ export class DirectoryValidator { validateGeneratedPortalDestinationDirectoryIsEmpty(destinationDir: string) { const portalDirItems = getNonHiddenItemsFromDirectory(destinationDir); - if (portalDirItems.length > 0 && destinationDir != "./api-portal") { + if (portalDirItems.length > 0 && destinationDir != "./generated_portal") { this.error( getMessageInRedColor( "The destination directory is not empty. Please specify an empty destination directory or empty the provided directory." diff --git a/test/commands/api/transform.test.ts b/test/commands/api/transform.test.ts deleted file mode 100644 index 8bc8cefd..00000000 --- a/test/commands/api/transform.test.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {expect, test} from '@oclif/test' - -describe('api:transform', () => { - test - .stdout() - .command(['api:transform']) - .it('runs hello', ctx => { - expect(ctx.stdout).to.contain('hello world') - }) - - test - .stdout() - .command(['api:transform', '--name', 'jeff']) - .it('runs hello --name jeff', ctx => { - expect(ctx.stdout).to.contain('hello jeff') - }) -}) diff --git a/test/commands/api/validate.test.ts b/test/commands/api/validate.test.ts deleted file mode 100644 index 221af74c..00000000 --- a/test/commands/api/validate.test.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {expect, test} from '@oclif/test' - -describe('api:validate', () => { - test - .stdout() - .command(['api:validate']) - .it('runs hello', ctx => { - expect(ctx.stdout).to.contain('hello world') - }) - - test - .stdout() - .command(['api:validate', '--name', 'jeff']) - .it('runs hello --name jeff', ctx => { - expect(ctx.stdout).to.contain('hello jeff') - }) -}) diff --git a/test/commands/hello.test.ts b/test/commands/hello.test.ts deleted file mode 100644 index 5d22255c..00000000 --- a/test/commands/hello.test.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {expect, test} from '@oclif/test' - -describe('hello', () => { - test - .stdout() - .command(['hello']) - .it('runs hello', ctx => { - expect(ctx.stdout).to.contain('hello world') - }) - - test - .stdout() - .command(['hello', '--name', 'jeff']) - .it('runs hello --name jeff', ctx => { - expect(ctx.stdout).to.contain('hello jeff') - }) -}) diff --git a/test/commands/portal/generate.test.ts b/test/commands/portal/generate.test.ts index 296bb490..af11b461 100644 --- a/test/commands/portal/generate.test.ts +++ b/test/commands/portal/generate.test.ts @@ -1,17 +1,248 @@ -import {expect, test} from '@oclif/test' - -describe('portal:generate', () => { - test - .stdout() - .command(['portal:generate']) - .it('runs hello', ctx => { - expect(ctx.stdout).to.contain('hello world') - }) - - test - .stdout() - .command(['portal:generate', '--name', 'jeff']) - .it('runs hello --name jeff', ctx => { - expect(ctx.stdout).to.contain('hello jeff') - }) -}) +import * as fs from "fs"; +import * as fsExtra from "fs-extra"; +import * as path from "path"; +import * as nock from "nock"; +import { expect } from "chai"; +import { runCommand } from "@oclif/test"; +import { SimpleGitOptions, simpleGit } from "simple-git"; +import { baseURL, staticPortalRepoUrl } from "../../../src/config/env"; +import { EventEmitter } from "events"; +EventEmitter.defaultMaxListeners = 50; + +const COMMAND = "portal:generate"; +const GENERATION_SUCCESS_MESSAGE = "The generated portal can be found at"; +const GENERATION_FAILURE_MESSAGE = "Something went wrong while generating your portal"; +const AUTHENTICATION_FAILURE_MESSAGE = "Authorization has been denied for this request"; +const VALIDATION_FAILURE_MESSAGE = "One or more validation errors occurred"; +const BUILD_FILE_MISSING_MESSAGE = "Build file not found"; +const SUBSCRIPTION_FAILURE_MESSAGE = "Access denied to resource"; +const SUBSCRIPTION_FAILURE_DETAILS_MESSAGE = "Requested features are not available in subscription"; + +async function setupValidBuildDirectory(targetFolder: string): Promise { + const options: Partial = { + timeout: { + block: 60 * 1000 // 1 minute timeout. + } + }; + const git = simpleGit(options); + try { + await git.clone(staticPortalRepoUrl, targetFolder); + } catch (error) { + throw new Error("Failed to setup valid build directory: " + (error as Error).message); + } + + await fsExtra.remove(path.join(targetFolder, ".git")); + await fsExtra.remove(path.join(targetFolder, ".github")); +} + +describe("apimatic portal:generate", function () { + const portalArtifactsDir = path.join(process.cwd(), "test-portal"); + const sourceBuildInputDir = path.join(process.cwd(), "test-source"); + + const cleanTestDir = () => { + if (fs.existsSync(portalArtifactsDir)) { + fs.rmSync(portalArtifactsDir, { recursive: true, force: true }); + } + if (fs.existsSync(sourceBuildInputDir)) { + fs.rmSync(sourceBuildInputDir, { recursive: true, force: true }); + } + }; + + beforeEach(() => { + cleanTestDir(); + fs.mkdirSync(sourceBuildInputDir); + fs.mkdirSync(portalArtifactsDir); + }); + + afterEach(() => { + cleanTestDir(); + nock.cleanAll(); + nock.restore(); + }); + + // Basic command execution + it("runs portal:generate with default flags and valid build input", async () => { + await setupValidBuildDirectory(sourceBuildInputDir); + const { stdout, stderr } = await runCommand([ + COMMAND, + "--folder", + sourceBuildInputDir, + "--destination", + portalArtifactsDir + ]); + expect(stderr).to.be.empty; + expect(stdout).to.contain(GENERATION_SUCCESS_MESSAGE); + expect(fs.existsSync(path.join(portalArtifactsDir, "generated_portal"))).to.be.true; + }); + + // Flag validation + it("validates source folder path exists", async () => { + const {error } = await runCommand([COMMAND, "--folder", "non-existent-folder"]); + expect(error?.message).to.contain("does not exist"); + }); + + it("validates destination path exists", async () => { + const { error } = await runCommand([COMMAND, "--destination", "non-existent-destination"]); + expect(error?.message).to.contain("does not exist"); + }); + + it("validates APIMatic build file exists", async () => { + await setupValidBuildDirectory(sourceBuildInputDir); + fs.rmSync(path.join(sourceBuildInputDir, "APIMATIC-BUILD.json")); + const { stdout } = await runCommand([ + COMMAND, + "--folder", + sourceBuildInputDir, + "--destination", + portalArtifactsDir + ]); + expect(stdout).to.contain(BUILD_FILE_MISSING_MESSAGE); + }); + + // File system operations + describe("file system operations", () => { + it("creates portal directory with correct structure", async () => { + await setupValidBuildDirectory(sourceBuildInputDir); + await runCommand([COMMAND, "--folder", sourceBuildInputDir, "--destination", portalArtifactsDir]); + expect(fs.existsSync(path.join(portalArtifactsDir, "generated_portal"))).to.be.true; + expect(fs.existsSync(path.join(portalArtifactsDir, "generated_portal", "index.html"))).to.be.true; + }); + + it("creates zip file when --zip flag is used", async () => { + await setupValidBuildDirectory(sourceBuildInputDir); + await runCommand([COMMAND, "--folder", sourceBuildInputDir, "--destination", portalArtifactsDir, "--zip"]); + expect(fs.existsSync(path.join(portalArtifactsDir, ".generated_portal.zip"))).to.be.true; + }); + + it("overwrites existing portal with --force", async () => { + await setupValidBuildDirectory(sourceBuildInputDir); + fs.mkdirSync(path.join(portalArtifactsDir, "generated_portal")); + const { stdout } = await runCommand([ + COMMAND, + "--folder", + sourceBuildInputDir, + "--destination", + portalArtifactsDir, + "--force" + ]); + expect(stdout).to.contain(GENERATION_SUCCESS_MESSAGE); + }); + + it("generates and zips portal while forcefully overwriting existing portal in one command", async () => { + await setupValidBuildDirectory(sourceBuildInputDir); + const { stdout } = await runCommand([ + COMMAND, + "--folder", + sourceBuildInputDir, + "--destination", + portalArtifactsDir, + "--zip", + "--force" + ]); + expect(stdout).to.contain(GENERATION_SUCCESS_MESSAGE); + expect(fs.existsSync(path.join(portalArtifactsDir, ".generated_portal.zip"))).to.be.true; + }); + }); + + // API error responses handling + describe("API error responses", () => { + it("throws 400 error due to invalid APIMatic build file", async () => { + await setupValidBuildDirectory(sourceBuildInputDir); + fs.writeFileSync( + path.join(sourceBuildInputDir, "APIMATIC-BUILD.json"), + JSON.stringify({ + dummy: "dummyValue" + }) + ); + const { stdout, error } = await runCommand([ + COMMAND, + "--folder", + sourceBuildInputDir, + "--destination", + portalArtifactsDir + ]); + expect(stdout).to.contain(GENERATION_FAILURE_MESSAGE); + expect(stdout).to.contain(VALIDATION_FAILURE_MESSAGE); + expect(stdout).to.contain( + "No build tasks provided. Both generatePortal and generateVersionedPortal are null" + ); + }); + + it("throws 401 error due to invalid authentication key", async () => { + await setupValidBuildDirectory(sourceBuildInputDir); + const { stdout, error } = await runCommand([ + COMMAND, + "--folder", + sourceBuildInputDir, + "--destination", + portalArtifactsDir, + "--auth-key", + "invalid-auth-key" + ]); + expect(stdout).to.contain(GENERATION_FAILURE_MESSAGE); + expect(stdout).to.contain(AUTHENTICATION_FAILURE_MESSAGE); + }); + + it("throws 403 error due to subscription error", async () => { + nock.disableNetConnect(); + await setupValidBuildDirectory(sourceBuildInputDir); + + nock(baseURL) + .post("/portal") + .matchHeader("Authorization", "X-Auth-Key valid-but-restricted-auth-key") + .matchHeader("Content-Type", (val) => val?.startsWith("multipart/form-data")) + .reply(403, { + type: "https://datatracker.ietf.org/doc/html/rfc7231#section-6.5.3", + title: "Access denied to resource.", + status: 403, + detail: "Requested features are not available in subscription", + instance: "/api/portal", + errors: { + "": ["Unsupported languages provided in build file 'CS_NET_STANDARD_LIB'"] + } + }); + + const { stdout, error } = await runCommand([ + COMMAND, + "--folder", + sourceBuildInputDir, + "--destination", + portalArtifactsDir, + "--auth-key", + "valid-but-restricted-auth-key" + ]); + expect(stdout).to.contain(GENERATION_FAILURE_MESSAGE); + expect(stdout).to.contain(SUBSCRIPTION_FAILURE_MESSAGE); + expect(stdout).to.contain(SUBSCRIPTION_FAILURE_DETAILS_MESSAGE); + expect(stdout).to.contain("Unsupported languages provided in build file 'CS_NET_STANDARD_LIB'"); + nock.enableNetConnect(); + }); + + it("throw 422 error due to validation issues related to toc", async () => { + const INVALID_TOC_YAML = `toc: + - group: My Guides + items: + - page: Guide Page 1 + file: guide1.md + - page: Guide Page 2 + `; + + await setupValidBuildDirectory(sourceBuildInputDir); + fs.writeFileSync(path.join(sourceBuildInputDir, "content", "guides", "toc.yml"), INVALID_TOC_YAML); + + const { stdout, error } = await runCommand([ + COMMAND, + "--folder", + sourceBuildInputDir, + "--destination", + portalArtifactsDir + ]); + expect(stdout).to.contain(GENERATION_FAILURE_MESSAGE); + expect(stdout).to.contain( + "An error occurred during portal generation due to an issue with the input. An error report has been written at the destination path" + ); + expect(fs.existsSync(path.join(portalArtifactsDir, "generated_portal", "apimatic-debug", "apimatic-report.html"))) + .to.be.true; + }); + }); +}); diff --git a/test/commands/sdk/generate.test.ts b/test/commands/sdk/generate.test.ts deleted file mode 100644 index 39e66020..00000000 --- a/test/commands/sdk/generate.test.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {expect, test} from '@oclif/test' - -describe('sdk:generate', () => { - test - .stdout() - .command(['sdk:generate']) - .it('runs hello', ctx => { - expect(ctx.stdout).to.contain('hello world') - }) - - test - .stdout() - .command(['sdk:generate', '--name', 'jeff']) - .it('runs hello --name jeff', ctx => { - expect(ctx.stdout).to.contain('hello jeff') - }) -}) diff --git a/test/tsconfig.json b/test/tsconfig.json index 95898fce..a257c429 100644 --- a/test/tsconfig.json +++ b/test/tsconfig.json @@ -1,7 +1,8 @@ { "extends": "../tsconfig", "compilerOptions": { - "noEmit": true + "noEmit": true, + "composite": true }, "references": [ {"path": ".."} diff --git a/tsconfig.json b/tsconfig.json index 03784fac..e121dd5e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,7 +9,10 @@ "strict": true, "target": "es2017", "lib": ["es2018", "dom"], - "inlineSourceMap": true + "paths": { + "@apimatic/sdk": ["./src/sdk"] + }, + "inlineSourceMap": true, }, "include": [ "src/**/*"