diff --git a/README.md b/README.md index 9a21d427d..7401d5bde 100644 --- a/README.md +++ b/README.md @@ -164,6 +164,8 @@ There are several installations you need to perform to get STH up and running, a - ts-node - docker - pip +- wget +- jq Our hub is based on node.js, so you need to install node.js and npm, which is the default package manager for node.js. To check if you already have Node.js(v16.xx.x) and npm installed, run the following commands in your console: @@ -175,7 +177,7 @@ npm -v If none of the above commands is found, **you must proceed with the installation.** -It is recommended to use a **Node version manager** like [nvm](https://github.com/nvm-sh/nvm/blob/master/README.md) to install Node.js and npm. Do it by running the install script using either of the commands bellow. +It is recommended to use a **Node version manager** like [nvm](https://github.com/nvm-sh/nvm/blob/master/README.md) to install Node.js and npm. Do it by running the install script using either of the commands bellow. > Note: Make sure you replace v0.39.0 with the latest version of nvm. The actual version of nvm to install is [here](https://github.com/nvm-sh/nvm/blob/master/README.md#install--update-script). ```bash @@ -221,7 +223,7 @@ $ npm -v 8.15.0 ``` -**OK!** It looks like you have successfully installed node.js and npm. +**OK!** It looks like you have successfully installed node.js and npm. There are two more installations you need to perform, run the following commands in your console one after another: @@ -249,10 +251,22 @@ pip --version If they are not present, refer to the official installation guide for [Python](https://wiki.python.org/moin/BeginnersGuide/Download) and [Pip](https://pip.pypa.io/en/stable/installation/). +Additionally you have to have `wget` and `jq` installed: + +```bash +# Debian based distributions: +apt install wget jq + +# Mac +brew install wget jq +``` + > **If you don't want to use Docker, please skip this step!** We also work with Docker, but this is optional. Running STH is possible without Docker in the background. If you want to use Docker, you can install it by running the following commands in your console: +*On Mac u can use [Docker-Desktop](https://www.docker.com/products/docker-desktop/)* + ```bash # Install docker and docker-compose sudo apt install -y docker.io docker-compose @@ -302,7 +316,7 @@ In the meantime let me describe for you what is happening in the command you hav When both the package installation and build are complete, STH should be ready to run. - + --- @@ -499,7 +513,7 @@ We use our own scripts to control our monorepo. Here's a couple of helpful comma ```bash ./scripts/run-script.js [script] # Run an npm script in each package that contains that script. -./scripts/run-script.js --scope @scramjet/ +./scripts/run-script.js --scope @scramjet/ # Run script only in one package ./scripts/run-script.js --workspace packages # Run script in all packages in workspace diff --git a/bdd/features/e2e/E2E-010-cli.feature b/bdd/features/e2e/E2E-010-cli.feature index f3bc0e4f0..71369d94a 100644 --- a/bdd/features/e2e/E2E-010-cli.feature +++ b/bdd/features/e2e/E2E-010-cli.feature @@ -110,14 +110,14 @@ Feature: CLI tests When I execute CLI with "seq deploy ../packages/event-sequence-v2.tar.gz" When I execute CLI with "inst event emit - test-event test message" When I execute CLI with "inst event on - test-event-response" - Then I get event "test-event-response" with event message "{\"eventName\":\"test-event-response\",\"message\":\"message from sequence\"}" from Instance + Then I get event "test-event-response" with event message "\"message from sequence\"" from Instance @ci-api @cli Scenario: E2E-010 TC-013a Test Instance 'event' option without payload When I execute CLI with "seq deploy ../packages/event-sequence-v2.tar.gz" When I execute CLI with "inst event emit - test-event" When I execute CLI with "inst event on - test-event-response" - Then I get event "test-event-response" with event message "{\"eventName\":\"test-event-response\",\"message\":\"message from sequence\"}" from Instance + Then I get event "test-event-response" with event message "\"message from sequence\"" from Instance @ci-api @cli Scenario: E2E-010 TC-014 Test Sequence 'start' with multiple JSON arguments diff --git a/bdd/features/e2e/E2E-012-stream-flooding-test.feature b/bdd/features/e2e/E2E-012-stream-flooding-test.feature index 51ea3b618..627acd584 100644 --- a/bdd/features/e2e/E2E-012-stream-flooding-test.feature +++ b/bdd/features/e2e/E2E-012-stream-flooding-test.feature @@ -11,7 +11,7 @@ Feature: Stream flooding tests. Ensure that even if a large amount of data is se And wait for "3000" ms And send event "test-event" to instance with message "test message" Then get event "test-event-response" from instance - Then instance response body is "{\"eventName\":\"test-event-response\",\"message\":\"message from sequence\"}" + Then instance response body is "\"message from sequence\"" Then host is still running @ci-api @runner-cleanup @@ -23,6 +23,6 @@ Feature: Stream flooding tests. Ensure that even if a large amount of data is se And get runner PID Then get event "test-event-response" from instance When wait for "1000" ms - Then instance response body is "{\"eventName\":\"test-event-response\",\"message\":\"message from sequence\"}" + Then instance response body is "\"message from sequence\"" Then host is still running diff --git a/bdd/features/e2e/E2E-015-unified.feature b/bdd/features/e2e/E2E-015-unified.feature index addee0134..46f9338a1 100644 --- a/bdd/features/e2e/E2E-015-unified.feature +++ b/bdd/features/e2e/E2E-015-unified.feature @@ -75,6 +75,6 @@ Feature: Test our shiny new Python runner And send event "test-event" to instance with message "foo" Then instance emits event "test-response" with body """ - {"eventName":"test-response","message":"reply to foo"} + "reply to foo" """ And host is still running diff --git a/bdd/lib/utils.ts b/bdd/lib/utils.ts index d4addc95d..a9053b5c7 100644 --- a/bdd/lib/utils.ts +++ b/bdd/lib/utils.ts @@ -251,6 +251,23 @@ export async function killProcessByName(processName: string): Promise { }); } +export async function getActiveProfile() { + try { + const res = await getStreamsFromSpawn("/usr/bin/env", [...si, "config", "profile", "ls"]); + + const match = res[1].match(/->\s*([^\n]+)/); + const activeProfile = match ? match[1].trim() : null; + + if (isLogActive) { + logger.log("Active profile:", activeProfile); + } + return activeProfile; + } catch (error: any) { + logger.error(`Error while getting the active profile: ${error.message}`); + return ""; + } +} + export async function createProfile(profileName: string) { const res = await getStreamsFromSpawn("/usr/bin/env", [...si, "config", "profile", "create", profileName]); diff --git a/bdd/step-definitions/e2e/host-steps.ts b/bdd/step-definitions/e2e/host-steps.ts index 11300f4e9..9033b6483 100644 --- a/bdd/step-definitions/e2e/host-steps.ts +++ b/bdd/step-definitions/e2e/host-steps.ts @@ -12,7 +12,8 @@ import { createProfile, setProfile, createDirectory, - deleteDirectory + deleteDirectory, + getActiveProfile } from "../../lib/utils"; import fs, { createReadStream, existsSync, ReadStream } from "fs"; import { HostClient, InstanceOutputStream } from "@scramjet/api-client"; @@ -37,6 +38,7 @@ let actualLogResponse: any; let containerId: string; let processId: number; let streams: { [key: string]: Promise } = {}; +let activeProfile: any; const freeport = promisify(require("freeport")); @@ -116,13 +118,12 @@ const killRunner = async () => { } }; -BeforeAll({ timeout: 10e3 }, async () => { +BeforeAll({ timeout: 20e3 }, async () => { if (process.env.NO_HOST) { return; } - await createProfile(profileName); - await setProfile(profileName); + activeProfile = await getActiveProfile(); let apiUrl = process.env.SCRAMJET_HOST_BASE_URL; @@ -158,6 +159,8 @@ BeforeAll({ timeout: 10e3 }, async () => { }); } await hostUtils.spawnHost([]); + await createProfile(profileName); + await setProfile(profileName); }); AfterAll(async () => { @@ -168,7 +171,7 @@ AfterAll(async () => { throw new Error("Host unexpected closed"); } } - + await setProfile(activeProfile); await removeProfile(profileName); }); @@ -184,6 +187,7 @@ After({ tags: "@runner-cleanup" }, killRunner); Before({ tags: "@test-si-init" }, function() { createDirectory("data/template_seq"); }); + After({ tags: "@test-si-init" }, function() { deleteDirectory("data/template_seq"); }); @@ -226,6 +230,7 @@ const startHost = async () => { }; Given("start host", () => startHost()); + Then("stop host", () => hostUtils.stopHost()); Then("send fake stream as sequence", async function(this: CustomWorld) { @@ -692,7 +697,7 @@ When("confirm that sequence and volumes are removed", async function(this: Custo if (!sequenceId) assert.fail(); - const sequences = (await hostClient.listSequences()) || []; + const sequences = await hostClient.listSequences() || []; const sequenceExist = !!sequences.find((sequenceInfo) => sequenceId === sequenceInfo.id); assert.equal(sequenceExist, false); diff --git a/package-lock.json b/package-lock.json index 609ab6f98..ae533b7f7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@scramjet/transform-hub", - "version": "0.36.1", + "version": "0.37.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@scramjet/transform-hub", - "version": "0.36.1", + "version": "0.37.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { @@ -21,22 +21,18 @@ "@istanbuljs/nyc-config-typescript": "^1.0.2", "@npmcli/run-script": "4.2.1", "@types/node": "15.12.5", - "@typescript-eslint/eslint-plugin": "^5.41.0", - "@typescript-eslint/parser": "^5.41.0", - "build-if-changed": "^1.5.5", + "@typescript-eslint/eslint-plugin": "^6.14.0", + "@typescript-eslint/parser": "^6.14.0", "cloc": "^2.10.0", - "esbuild": "^0.14.54", - "eslint": "^8.26.0", - "eslint-plugin-import": "^2.26.0", + "eslint": "^8.55.0", + "eslint-plugin-import": "^2.29.1", "eslint-to-editorconfig": "^2.0.0", "fs-extra": "^9.1.0", "glob": "^7.2.3", "globrex": "^0.1.2", "husky": "^6.0.0", "nyc": "^15.1.0", - "patch-package": "6.4.7", "semver": "^7.5.2", - "syncpack": "^5.8.15", "tar": "^6.1.11", "toposort": "^2.0.2", "ts-node": "^10.9.1", @@ -62,13 +58,13 @@ }, "bdd": { "name": "scramjet-bdd", - "version": "0.36.1", + "version": "0.37.0", "license": "ISC", "dependencies": { - "@scramjet/api-client": "^0.36.1", - "@scramjet/logger": "^0.36.1", - "@scramjet/obj-logger": "^0.36.1", - "@scramjet/sth-config": "^0.36.1", + "@scramjet/api-client": "^0.37.0", + "@scramjet/logger": "^0.37.0", + "@scramjet/obj-logger": "^0.37.0", + "@scramjet/sth-config": "^0.37.0", "dockerode": "^3.3.4", "find-package-json": "^1.2.0", "freeport": "^1.0.5", @@ -78,7 +74,16 @@ "devDependencies": { "@cucumber/cucumber": "^7.3.2", "@cucumber/pretty-formatter": "^1.0.0", - "@scramjet/types": "^0.36.1" + "@scramjet/types": "^0.37.0" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, "node_modules/@ampproject/remapping": { @@ -1190,12 +1195,6 @@ "integrity": "sha512-OGCXaJ1BQXmQ5b9pw+JYsBGumK2/LPZiLmbj1o1JFVeSNs2PY8WPQFSyXrskhrHz5Nd/6lYg7lvGMtFHOncC4w==", "dev": true }, - "node_modules/@cush/relative": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@cush/relative/-/relative-0.1.0.tgz", - "integrity": "sha512-pnF2c2hhHyC520CmYYKq3hGOS0kipkGBgRnp3z7wx7lDzykaUwQW3wPQmiX9YtbHUcgUu1qQtzstixmeYMwQoA==", - "dev": true - }, "node_modules/@dabh/diagnostics": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", @@ -1222,15 +1221,39 @@ "node": ">=12" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", - "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.4.0", + "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -1245,6 +1268,15 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/js": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", @@ -1252,12 +1284,12 @@ "dev": true }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", + "@humanwhocodes/object-schema": "^2.0.1", "debug": "^4.1.1", "minimatch": "^3.0.5" }, @@ -1279,9 +1311,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", "dev": true }, "node_modules/@istanbuljs/load-nyc-config": { @@ -2560,9 +2592,9 @@ "dev": true }, "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "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 }, "node_modules/@types/json5": { @@ -2603,12 +2635,6 @@ "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", "dev": true }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, "node_modules/@types/request": { "version": "2.48.8", "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.8.tgz", @@ -2636,9 +2662,9 @@ } }, "node_modules/@types/semver": { - "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", + "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", "dev": true }, "node_modules/@types/shell-escape": { @@ -2742,31 +2768,33 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.49.0.tgz", - "integrity": "sha512-IhxabIpcf++TBaBa1h7jtOWyon80SXPRLDq0dVz5SLFC/eW6tofkw/O7Ar3lkx5z5U6wzbKDrl2larprp5kk5Q==", + "version": "6.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.18.1.tgz", + "integrity": "sha512-nISDRYnnIpk7VCFrGcu1rnZfM1Dh9LRHnfgdkjcbi/l7g16VYRri3TjXi9Ir4lOZSw5N/gnV/3H7jIPQ8Q4daA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.49.0", - "@typescript-eslint/type-utils": "5.49.0", - "@typescript-eslint/utils": "5.49.0", + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.18.1", + "@typescript-eslint/type-utils": "6.18.1", + "@typescript-eslint/utils": "6.18.1", + "@typescript-eslint/visitor-keys": "6.18.1", "debug": "^4.3.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -2774,26 +2802,54 @@ } } }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@typescript-eslint/parser": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.49.0.tgz", - "integrity": "sha512-veDlZN9mUhGqU31Qiv2qEp+XrJj5fgZpJ8PW30sHU+j/8/e5ruAhLaVDAeznS7A7i4ucb/s8IozpDtt9NqCkZg==", + "version": "6.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.18.1.tgz", + "integrity": "sha512-zct/MdJnVaRRNy9e84XnVtRv9Vf91/qqe+hZJtKanjojud4wAVy/7lXxJmMyX6X6J+xc6c//YEWvpeif8cAhWA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.49.0", - "@typescript-eslint/types": "5.49.0", - "@typescript-eslint/typescript-estree": "5.49.0", + "@typescript-eslint/scope-manager": "6.18.1", + "@typescript-eslint/types": "6.18.1", + "@typescript-eslint/typescript-estree": "6.18.1", + "@typescript-eslint/visitor-keys": "6.18.1", "debug": "^4.3.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -2802,16 +2858,16 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.49.0.tgz", - "integrity": "sha512-clpROBOiMIzpbWNxCe1xDK14uPZh35u4QaZO1GddilEzoCLAEz4szb51rBpdgurs5k2YzPtJeTEN3qVbG+LRUQ==", + "version": "6.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.18.1.tgz", + "integrity": "sha512-BgdBwXPFmZzaZUuw6wKiHKIovms97a7eTImjkXCZE04TGHysG+0hDQPmygyvgtkoB/aOQwSM/nWv3LzrOIQOBw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.49.0", - "@typescript-eslint/visitor-keys": "5.49.0" + "@typescript-eslint/types": "6.18.1", + "@typescript-eslint/visitor-keys": "6.18.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -2819,25 +2875,25 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.49.0.tgz", - "integrity": "sha512-eUgLTYq0tR0FGU5g1YHm4rt5H/+V2IPVkP0cBmbhRyEmyGe4XvJ2YJ6sYTmONfjmdMqyMLad7SB8GvblbeESZA==", + "version": "6.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.18.1.tgz", + "integrity": "sha512-wyOSKhuzHeU/5pcRDP2G2Ndci+4g653V43gXTpt4nbyoIOAASkGDA9JIAgbQCdCkcr1MvpSYWzxTz0olCn8+/Q==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.49.0", - "@typescript-eslint/utils": "5.49.0", + "@typescript-eslint/typescript-estree": "6.18.1", + "@typescript-eslint/utils": "6.18.1", "debug": "^4.3.4", - "tsutils": "^3.21.0" + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "*" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -2846,12 +2902,12 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.49.0.tgz", - "integrity": "sha512-7If46kusG+sSnEpu0yOz2xFv5nRz158nzEXnJFCGVEHWnuzolXKwrH5Bsf9zsNlOQkyZuk0BZKKoJQI+1JPBBg==", + "version": "6.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.18.1.tgz", + "integrity": "sha512-4TuMAe+tc5oA7wwfqMtB0Y5OrREPF1GeJBAjqwgZh1lEMH5PJQgWgHGfYufVB51LtjD+peZylmeyxUXPfENLCw==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -2859,21 +2915,22 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.49.0.tgz", - "integrity": "sha512-PBdx+V7deZT/3GjNYPVQv1Nc0U46dAHbIuOG8AZ3on3vuEKiPDwFE/lG1snN2eUB9IhF7EyF7K1hmTcLztNIsA==", + "version": "6.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.18.1.tgz", + "integrity": "sha512-fv9B94UAhywPRhUeeV/v+3SBDvcPiLxRZJw/xZeeGgRLQZ6rLMG+8krrJUyIf6s1ecWTzlsbp0rlw7n9sjufHA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.49.0", - "@typescript-eslint/visitor-keys": "5.49.0", + "@typescript-eslint/types": "6.18.1", + "@typescript-eslint/visitor-keys": "6.18.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -2885,53 +2942,130 @@ } } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@typescript-eslint/utils": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.49.0.tgz", - "integrity": "sha512-cPJue/4Si25FViIb74sHCLtM4nTSBXtLx1d3/QT6mirQ/c65bV8arBEebBJJizfq8W2YyMoPI/WWPFWitmNqnQ==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.49.0", - "@typescript-eslint/types": "5.49.0", - "@typescript-eslint/typescript-estree": "5.49.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0", - "semver": "^7.3.7" + "version": "6.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.18.1.tgz", + "integrity": "sha512-zZmTuVZvD1wpoceHvoQpOiewmWu3uP9FuTWo8vqpy2ffsmfCE8mklRPi+vmnIYAIk9t/4kOThri2QCDgor+OpQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.18.1", + "@typescript-eslint/types": "6.18.1", + "@typescript-eslint/typescript-estree": "6.18.1", + "semver": "^7.5.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.49.0.tgz", - "integrity": "sha512-v9jBMjpNWyn8B6k/Mjt6VbUS4J1GvUlR4x3Y+ibnP1z7y7V4n0WRz+50DY6+Myj0UaXVSuUlHohO+eZ8IJEnkg==", + "version": "6.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.18.1.tgz", + "integrity": "sha512-/kvt0C5lRqGoCfsbmm7/CwMqoSkY3zzHLIjdhHZQW3VFrnz7ATecOHR7nb7V+xn4286MBxfnQfQhAmCI0u+bJA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.49.0", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "6.18.1", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, "node_modules/0http": { @@ -2965,9 +3099,9 @@ } }, "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -3048,15 +3182,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ansi-256-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-256-colors/-/ansi-256-colors-1.1.0.tgz", - "integrity": "sha512-roJI/AVBdJIhcohHDNXUoFYsCZG4MZIs5HtKNgVKY5QzqQoQJe+o0ouiqZDaSC+ggKdBVcuSwlSdJckrrlm3/A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ansi-align": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", @@ -3183,6 +3308,19 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", @@ -3193,15 +3331,15 @@ } }, "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", "is-string": "^1.0.7" }, "engines": { @@ -3220,15 +3358,34 @@ "node": ">=8" } }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -3239,14 +3396,14 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -3256,6 +3413,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/arrgv": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/arrgv/-/arrgv-1.0.2.tgz", @@ -3922,22 +4100,6 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "node_modules/build-if-changed": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/build-if-changed/-/build-if-changed-1.5.5.tgz", - "integrity": "sha512-Ev9XU5r+HWulJYf58ZyeIIB0TYywReSiWdfxtW37FyGm7p4xHEAYza+c/Gj3IZxnMSYydrW+Xu1a7brJjs1W3A==", - "dev": true, - "dependencies": { - "ansi-256-colors": "^1.1.0", - "has-flag": "^4.0.0", - "recrawl": "^1.1.1", - "saxon": "^0.1.15" - }, - "bin": { - "bic": "bin/cli.js", - "build-if-changed": "bin/cli.js" - } - }, "node_modules/buildcheck": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.3.tgz", @@ -4091,13 +4253,14 @@ } }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4577,15 +4740,6 @@ "node": ">= 0.8" } }, - "node_modules/commander": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.1.0.tgz", - "integrity": "sha512-mf45ldcuHSYShkplHHGKWb4TrmwQadxOn7v4WuhDJy0ZVoY5JFajaRDKD0PNe5qXzBX0rhovjTnP6Kz9LETcuA==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, "node_modules/commander-completion": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commander-completion/-/commander-completion-1.0.1.tgz", @@ -4688,31 +4842,6 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" }, - "node_modules/cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "dev": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "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/cpu-features": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz", @@ -4929,12 +5058,27 @@ "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", "dev": true }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "dependencies": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, @@ -5203,44 +5347,50 @@ } }, "node_modules/es-abstract": { - "version": "1.21.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", - "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", + "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", "dev": true, "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "call-bind": "^1.0.5", "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.2", "get-symbol-description": "^1.0.0", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has": "^1.0.3", "has-property-descriptors": "^1.0.0", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.4", - "is-array-buffer": "^3.0.1", + "hasown": "^2.0.0", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", + "is-typed-array": "^1.1.12", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", + "object-inspect": "^1.13.1", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" + "which-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -5250,26 +5400,26 @@ } }, "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "node_modules/es-to-primitive": { @@ -5718,49 +5868,48 @@ } }, "node_modules/eslint": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.32.0.tgz", - "integrity": "sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.4.1", - "@humanwhocodes/config-array": "^0.11.8", + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.56.0", + "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", + "graphemer": "^1.4.0", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", + "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" }, "bin": { @@ -5774,14 +5923,14 @@ } }, "node_modules/eslint-import-resolver-node": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", - "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "dependencies": { "debug": "^3.2.7", - "is-core-module": "^2.11.0", - "resolve": "^1.22.1" + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { @@ -5794,9 +5943,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", - "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", "dev": true, "dependencies": { "debug": "^3.2.7" @@ -5820,26 +5969,28 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.27.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", - "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.7.4", - "has": "^1.0.3", - "is-core-module": "^2.11.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.values": "^1.1.6", - "resolve": "^1.22.1", - "semver": "^6.3.0", - "tsconfig-paths": "^3.14.1" + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" @@ -5870,25 +6021,28 @@ } }, "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=8.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-to-editorconfig": { @@ -5907,73 +6061,27 @@ "eslint": ">=2.0.0" } }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "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, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { - "acorn": "^8.8.0", + "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -5996,9 +6104,9 @@ } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -6007,15 +6115,6 @@ "node": ">=0.10" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -6028,7 +6127,7 @@ "node": ">=4.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { + "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", @@ -6037,15 +6136,6 @@ "node": ">=4.0" } }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -6183,12 +6273,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/expect-more": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/expect-more/-/expect-more-1.1.0.tgz", - "integrity": "sha512-/iIJuRtKgUJwCKEHV5XtTbyrR5JEztzqHDEub6X+WLAVGEPfkEdvsTE1Y0r9vNQqhgP6Kbp9A9w6OEYUqJwLwQ==", - "dev": true - }, "node_modules/ext": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", @@ -6425,15 +6509,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "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, - "dependencies": { - "micromatch": "^4.0.2" - } - }, "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -6459,9 +6534,9 @@ "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", + "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==", "funding": [ { "type": "individual", @@ -6605,20 +6680,23 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { "node": ">= 0.4" @@ -6671,14 +6749,15 @@ "dev": true }, "node_modules/get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6760,12 +6839,6 @@ "node": ">=10.13.0" } }, - "node_modules/glob-regex": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/glob-regex/-/glob-regex-0.3.2.tgz", - "integrity": "sha512-m5blUd3/OqDTWwzBBtWBPrGlAzatRywHameHeekAZyZrskYouOGdNB8T/q6JucucvJXtOuyHIn0/Yia7iDasDw==", - "dev": true - }, "node_modules/global-dirs": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", @@ -6782,9 +6855,9 @@ } }, "node_modules/globals": { - "version": "13.19.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", - "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -6877,10 +6950,10 @@ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, "node_modules/handlebars": { @@ -6925,17 +6998,6 @@ "node": ">=6" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -6954,12 +7016,12 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.1" + "get-intrinsic": "^1.2.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7044,6 +7106,17 @@ "node": ">=8" } }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", @@ -7313,13 +7386,13 @@ } }, "node_modules/internal-slot": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", - "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", "side-channel": "^1.0.4" }, "engines": { @@ -7359,13 +7432,13 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", - "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "get-intrinsic": "^1.2.0", "is-typed-array": "^1.1.10" }, "funding": { @@ -7443,11 +7516,11 @@ } }, "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7468,21 +7541,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-error": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/is-error/-/is-error-2.2.2.tgz", @@ -7734,16 +7792,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.11" }, "engines": { "node": ">= 0.4" @@ -7790,18 +7844,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/is-yarn-global": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", @@ -8725,16 +8767,6 @@ "url": "https://github.com/sponsors/panva" } }, - "node_modules/js-sdsl": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", - "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" - } - }, "node_modules/js-string-escape": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", @@ -8897,15 +8929,6 @@ "json-buffer": "3.0.0" } }, - "node_modules/klaw-sync": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", - "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11" - } - }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -9525,12 +9548,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -12717,9 +12734,9 @@ } }, "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -12735,13 +12752,13 @@ } }, "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, @@ -12752,15 +12769,44 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" + } + }, "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { "node": ">= 0.4" @@ -12808,22 +12854,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/openid-client": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.3.2.tgz", @@ -12852,17 +12882,17 @@ } }, "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "type-check": "^0.4.0" }, "engines": { "node": ">= 0.8.0" @@ -12905,15 +12935,6 @@ "node": ">=6" } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", @@ -13126,270 +13147,52 @@ "node": ">=6" } }, - "node_modules/patch-package": { - "version": "6.4.7", - "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.4.7.tgz", - "integrity": "sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ==", + "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, - "dependencies": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^7.0.1", - "is-ci": "^2.0.0", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.0", - "open": "^7.4.2", - "rimraf": "^2.6.3", - "semver": "^5.6.0", - "slash": "^2.0.0", - "tmp": "^0.0.33" - }, - "bin": { - "patch-package": "index.js" - }, "engines": { - "npm": ">5" + "node": ">=8" } }, - "node_modules/patch-package/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/patch-package/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/patch-package/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", "dev": true, "dependencies": { - "color-name": "1.1.3" + "isarray": "0.0.1" } }, - "node_modules/patch-package/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/patch-package/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, "engines": { - "node": ">=4.8" - } - }, - "node_modules/patch-package/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/patch-package/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/patch-package/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/patch-package/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/patch-package/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/patch-package/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/patch-package/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/patch-package/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/patch-package/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/patch-package/node_modules/slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/patch-package/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/patch-package/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/patch-package/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dev": true, - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" + "node": ">=8" } }, "node_modules/peek-readable": { @@ -13918,19 +13721,6 @@ "node": ">=8" } }, - "node_modules/read-yaml-file": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-2.1.0.tgz", - "integrity": "sha512-UkRNRIwnhG+y7hpqnycCL/xbTk7+ia9VuVTC0S+zVbwd65DI9eUpRMfsWIGrCWxTU/mi+JW8cHQCrv+zfCbEPQ==", - "dev": true, - "dependencies": { - "js-yaml": "^4.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": ">=10.13" - } - }, "node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -13982,17 +13772,6 @@ "node": ">= 0.10" } }, - "node_modules/recrawl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/recrawl/-/recrawl-1.2.3.tgz", - "integrity": "sha512-BJjwjefrfI4/OYPrZ+I2SEfSE3+BoIom15KpNYLabNJJ/G0zn/2niS4AILT60aRjqLR4+IucD5YU8D96z32EvQ==", - "dev": true, - "dependencies": { - "@cush/relative": "^0.1.0", - "glob-regex": "^0.3.0", - "tslib": "^1.9.3" - } - }, "node_modules/reflect-metadata": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", @@ -14018,14 +13797,14 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" }, "engines": { "node": ">= 0.4" @@ -14042,18 +13821,6 @@ "node": ">=8" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, "node_modules/registry-auth-token": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", @@ -14176,11 +13943,11 @@ } }, "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -14334,6 +14101,30 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -14354,15 +14145,18 @@ ] }, "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.1.tgz", + "integrity": "sha512-Y5NejJTTliTyY4H7sipGqY+RX5P87i3F7c4Rcepy72nq+mNLhIsD0W4c7kEmduMDQCSqtPsXPlSTsFhh2LQv+g==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", "is-regex": "^1.1.4" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -14380,15 +14174,6 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "node_modules/saxon": { - "version": "0.1.18", - "resolved": "https://registry.npmjs.org/saxon/-/saxon-0.1.18.tgz", - "integrity": "sha512-JMdJjBJCSquNY7Glyl+FNMQyZhbny6wKta8KE5PWrEbU5oB2FfONbtBPHlMOXJrFc9FqUYBJ9QsavygJW1QiBg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11" - } - }, "node_modules/scramjet": { "version": "4.36.9", "resolved": "https://registry.npmjs.org/scramjet/-/scramjet-4.36.9.tgz", @@ -14511,6 +14296,35 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -14966,29 +14780,46 @@ "node": ">=8" } }, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -15120,95 +14951,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/syncpack": { - "version": "5.8.15", - "resolved": "https://registry.npmjs.org/syncpack/-/syncpack-5.8.15.tgz", - "integrity": "sha512-V40rKrJL86eyvPLVhWP1BpG2suXOzWRCOSKGPyLdAjqXpmYPSqKh2O30lIqYSFLjw8TL0Dl5WNiVINqz7+DccQ==", - "dev": true, - "dependencies": { - "chalk": "4.1.2", - "commander": "8.1.0", - "cosmiconfig": "7.0.0", - "expect-more": "1.1.0", - "fs-extra": "10.0.0", - "glob": "7.1.7", - "read-yaml-file": "2.1.0", - "semver": "7.3.5" - }, - "bin": { - "syncpack": "dist/bin.js", - "syncpack-fix-mismatches": "dist/bin-fix-mismatches.js", - "syncpack-format": "dist/bin-format.js", - "syncpack-lint-semver-ranges": "dist/bin-lint-semver-ranges.js", - "syncpack-list": "dist/bin-list.js", - "syncpack-list-mismatches": "dist/bin-list-mismatches.js", - "syncpack-set-semver-ranges": "dist/bin-set-semver-ranges.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/syncpack/node_modules/fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/syncpack/node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/syncpack/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/syncpack/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, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/systeminformation": { "version": "5.21.7", "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.21.7.tgz", @@ -15356,18 +15098,6 @@ "node": ">=4" } }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/tmp-promise": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", @@ -15495,6 +15225,18 @@ "node": ">=6" } }, + "node_modules/ts-api-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "dev": true, + "engines": { + "node": ">=16.13.0" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, "node_modules/ts-dedent": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", @@ -15632,13 +15374,13 @@ "integrity": "sha512-o3KFLCUw5v2Z7URDnGpk9iWlE9vdRv7hi2ZddEQLDdID3ufATKCB9HDJLBAs24JW3YODeVPHE/DJARIry+OZpQ==" }, "node_modules/tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "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, "dependencies": { "@types/json5": "^0.0.29", - "json5": "^1.0.1", + "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } @@ -15669,21 +15411,6 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -15724,19 +15451,70 @@ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, "engines": { - "node": ">=4" + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/typed-array-length": { @@ -16163,17 +15941,16 @@ "dev": true }, "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", "dev": true, "dependencies": { "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "call-bind": "^1.0.4", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -16251,15 +16028,6 @@ "node": ">= 6.4.0" } }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -16562,18 +16330,18 @@ }, "packages/adapters": { "name": "@scramjet/adapters", - "version": "0.36.1", + "version": "0.37.0", "license": "AGPL-3.0", "dependencies": { "@kubernetes/client-node": "^0.17.1", - "@scramjet/model": "^0.36.1", - "@scramjet/obj-logger": "^0.36.1", - "@scramjet/pre-runner": "^0.36.1", - "@scramjet/python-runner": "^0.36.1", - "@scramjet/runner": "^0.36.1", - "@scramjet/sth-config": "^0.36.1", - "@scramjet/symbols": "^0.36.1", - "@scramjet/utility": "^0.36.1", + "@scramjet/model": "^0.37.0", + "@scramjet/obj-logger": "^0.37.0", + "@scramjet/pre-runner": "^0.37.0", + "@scramjet/python-runner": "^0.37.0", + "@scramjet/runner": "^0.37.0", + "@scramjet/sth-config": "^0.37.0", + "@scramjet/symbols": "^0.37.0", + "@scramjet/utility": "^0.37.0", "dockerode": "^3.3.4", "scramjet": "^4.36.9", "shell-escape": "^0.2.0", @@ -16581,7 +16349,7 @@ "ts.data.json": "^2.2.0" }, "devDependencies": { - "@scramjet/types": "^0.36.1", + "@scramjet/types": "^0.37.0", "@types/dockerode": "<=3.3.3", "@types/js-yaml": "4.0.5", "@types/node": "15.12.5", @@ -16597,17 +16365,17 @@ }, "packages/api-client": { "name": "@scramjet/api-client", - "version": "0.36.1", + "version": "0.37.0", "license": "MIT", "dependencies": { - "@scramjet/client-utils": "^0.36.1", - "@scramjet/sth-config": "^0.36.1", - "@scramjet/symbols": "^0.36.1", + "@scramjet/client-utils": "^0.37.0", + "@scramjet/sth-config": "^0.37.0", + "@scramjet/symbols": "^0.37.0", "n-readlines": "^1.0.1", "scramjet": "^4.36.9" }, "devDependencies": { - "@scramjet/types": "^0.36.1", + "@scramjet/types": "^0.37.0", "@types/node": "15.12.5", "ava": "^3.15.0", "ts-node": "^10.9.1", @@ -16618,19 +16386,19 @@ }, "packages/api-server": { "name": "@scramjet/api-server", - "version": "0.36.1", + "version": "0.37.0", "license": "AGPL-3.0", "dependencies": { - "@scramjet/model": "^0.36.1", - "@scramjet/obj-logger": "^0.36.1", - "@scramjet/symbols": "^0.36.1", - "@scramjet/utility": "^0.36.1", + "@scramjet/model": "^0.37.0", + "@scramjet/obj-logger": "^0.37.0", + "@scramjet/symbols": "^0.37.0", + "@scramjet/utility": "^0.37.0", "0http": "^3.4.1", "http-status-codes": "^2.2.0", "scramjet": "^4.36.9" }, "devDependencies": { - "@scramjet/types": "^0.36.1", + "@scramjet/types": "^0.37.0", "@types/node": "15.12.5", "@types/sinon": "^10.0.13", "@types/trouter": "^3.1.1", @@ -16645,15 +16413,15 @@ }, "packages/cli": { "name": "@scramjet/cli", - "version": "0.36.1", + "version": "0.37.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { - "@scramjet/api-client": "^0.36.1", - "@scramjet/client-utils": "^0.36.1", - "@scramjet/middleware-api-client": "^0.36.1", - "@scramjet/obj-logger": "^0.36.1", - "@scramjet/utility": "^0.36.1", + "@scramjet/api-client": "^0.37.0", + "@scramjet/client-utils": "^0.37.0", + "@scramjet/middleware-api-client": "^0.37.0", + "@scramjet/obj-logger": "^0.37.0", + "@scramjet/utility": "^0.37.0", "chalk": "^4.1.2", "commander": "^9.5.0", "commander-completion": "^1.0.1", @@ -16667,7 +16435,7 @@ "si": "src/bin/index.ts" }, "devDependencies": { - "@scramjet/types": "^0.36.1", + "@scramjet/types": "^0.37.0", "@types/find-package-json": "^1.2.3", "@types/minimatch": "^3.0.5", "@types/node": "15.12.5", @@ -16691,14 +16459,14 @@ }, "packages/client-utils": { "name": "@scramjet/client-utils", - "version": "0.36.1", + "version": "0.37.0", "license": "MIT", "dependencies": { - "@scramjet/model": "^0.36.1", - "@scramjet/obj-logger": "^0.36.1", - "@scramjet/sth-config": "^0.36.1", - "@scramjet/symbols": "^0.36.1", - "@scramjet/utility": "^0.36.1", + "@scramjet/model": "^0.37.0", + "@scramjet/obj-logger": "^0.37.0", + "@scramjet/sth-config": "^0.37.0", + "@scramjet/symbols": "^0.37.0", + "@scramjet/utility": "^0.37.0", "@types/node-fetch": "^2.6.4", "abort-controller": "^3.0.0", "n-readlines": "^1.0.1", @@ -16707,7 +16475,7 @@ "scramjet": "^4.36.9" }, "devDependencies": { - "@scramjet/types": "^0.36.1", + "@scramjet/types": "^0.37.0", "@types/node": "15.12.5", "@types/node-fetch": "^2.6.2", "ava": "^3.15.0", @@ -16727,20 +16495,20 @@ }, "packages/host": { "name": "@scramjet/host", - "version": "0.36.1", + "version": "0.37.0", "license": "AGPL-3.0", "dependencies": { - "@scramjet/adapters": "^0.36.1", - "@scramjet/api-server": "^0.36.1", - "@scramjet/load-check": "^0.36.1", - "@scramjet/model": "^0.36.1", - "@scramjet/module-loader": "^0.36.1", - "@scramjet/obj-logger": "^0.36.1", - "@scramjet/sth-config": "^0.36.1", - "@scramjet/symbols": "^0.36.1", - "@scramjet/telemetry": "^0.36.1", - "@scramjet/utility": "^0.36.1", - "@scramjet/verser": "^0.36.1", + "@scramjet/adapters": "^0.37.0", + "@scramjet/api-server": "^0.37.0", + "@scramjet/load-check": "^0.37.0", + "@scramjet/model": "^0.37.0", + "@scramjet/module-loader": "^0.37.0", + "@scramjet/obj-logger": "^0.37.0", + "@scramjet/sth-config": "^0.37.0", + "@scramjet/symbols": "^0.37.0", + "@scramjet/telemetry": "^0.37.0", + "@scramjet/utility": "^0.37.0", + "@scramjet/verser": "^0.37.0", "bpmux": "^8.2.1", "ext-ip": "^0.3.9", "find-package-json": "^1.2.0", @@ -16752,7 +16520,7 @@ "systeminformation": "^5.21.7" }, "devDependencies": { - "@scramjet/types": "^0.36.1", + "@scramjet/types": "^0.37.0", "@types/find-package-json": "^1.2.3", "@types/jest": "^29.4.4", "@types/node": "15.12.5", @@ -16767,17 +16535,17 @@ }, "packages/load-check": { "name": "@scramjet/load-check", - "version": "0.36.1", + "version": "0.37.0", "license": "AGPL-3.0", "dependencies": { - "@scramjet/obj-logger": "^0.36.1", - "@scramjet/utility": "^0.36.1", + "@scramjet/obj-logger": "^0.37.0", + "@scramjet/utility": "^0.37.0", "scramjet": "^4.36.9", "systeminformation": "^5.21.7", "uuid": "^8.3.2" }, "devDependencies": { - "@scramjet/types": "^0.36.1", + "@scramjet/types": "^0.37.0", "@types/node": "15.12.5", "@types/uuid": "^8.3.4", "ava": "^3.15.0", @@ -16789,13 +16557,13 @@ }, "packages/logger": { "name": "@scramjet/logger", - "version": "0.36.1", + "version": "0.37.0", "license": "AGPL-3.0", "dependencies": { "scramjet": "^4.36.9" }, "devDependencies": { - "@scramjet/types": "^0.36.1", + "@scramjet/types": "^0.37.0", "@types/node": "15.12.5", "ava": "^3.15.0", "nyc": "^15.1.0", @@ -16807,14 +16575,14 @@ }, "packages/manager-api-client": { "name": "@scramjet/manager-api-client", - "version": "0.36.1", + "version": "0.37.0", "license": "AGPL-3.0", "dependencies": { - "@scramjet/api-client": "^0.36.1", - "@scramjet/client-utils": "^0.36.1" + "@scramjet/api-client": "^0.37.0", + "@scramjet/client-utils": "^0.37.0" }, "devDependencies": { - "@scramjet/types": "^0.36.1", + "@scramjet/types": "^0.37.0", "@types/node": "15.12.5", "ava": "^3.15.0", "ts-node": "^10.9.1", @@ -16825,16 +16593,16 @@ }, "packages/middleware-api-client": { "name": "@scramjet/middleware-api-client", - "version": "0.36.1", + "version": "0.37.0", "license": "AGPL-3.0", "dependencies": { - "@scramjet/api-client": "^0.36.1", - "@scramjet/client-utils": "^0.36.1", - "@scramjet/manager-api-client": "^0.36.1", - "@scramjet/multi-manager-api-client": "^0.36.1" + "@scramjet/api-client": "^0.37.0", + "@scramjet/client-utils": "^0.37.0", + "@scramjet/manager-api-client": "^0.37.0", + "@scramjet/multi-manager-api-client": "^0.37.0" }, "devDependencies": { - "@scramjet/types": "^0.36.1", + "@scramjet/types": "^0.37.0", "ava": "^3.15.0", "esbuild": "^0.14.54", "ts-node": "^10.9.1", @@ -16845,16 +16613,16 @@ }, "packages/model": { "name": "@scramjet/model", - "version": "0.36.1", + "version": "0.37.0", "license": "AGPL-3.0", "dependencies": { - "@scramjet/obj-logger": "^0.36.1", - "@scramjet/symbols": "^0.36.1", + "@scramjet/obj-logger": "^0.37.0", + "@scramjet/symbols": "^0.37.0", "scramjet": "^4.36.9", "uuid": "^8.3.2" }, "devDependencies": { - "@scramjet/types": "^0.36.1", + "@scramjet/types": "^0.37.0", "@types/node": "15.12.5", "@types/uuid": "^8.3.4", "ava": "^3.15.0", @@ -16865,13 +16633,14 @@ } }, "packages/module-loader": { - "version": "0.36.1", + "name": "@scramjet/module-loader", + "version": "0.37.0", "license": "AGPL-3.0", "dependencies": { - "@scramjet/obj-logger": "^0.36.1" + "@scramjet/obj-logger": "^0.37.0" }, "devDependencies": { - "@scramjet/types": "^0.36.1", + "@scramjet/types": "^0.37.0", "@types/node": "15.12.5", "ava": "^3.15.0", "ts-node": "^10.9.1", @@ -16881,10 +16650,14 @@ } }, "packages/monitoring-server": { - "version": "0.36.1", + "name": "@scramjet/monitoring-server", + "version": "0.37.0", "license": "AGPL-3.0", + "dependencies": { + "@scramjet/utility": "^0.37.0" + }, "devDependencies": { - "@scramjet/types": "^0.36.1", + "@scramjet/types": "^0.37.0", "@types/node": "15.12.5", "ava": "^3.15.0", "nyc": "^15.1.0", @@ -16896,15 +16669,15 @@ }, "packages/multi-manager-api-client": { "name": "@scramjet/multi-manager-api-client", - "version": "0.36.1", + "version": "0.37.0", "license": "AGPL-3.0", "dependencies": { - "@scramjet/api-client": "^0.36.1", - "@scramjet/client-utils": "^0.36.1", - "@scramjet/manager-api-client": "^0.36.1" + "@scramjet/api-client": "^0.37.0", + "@scramjet/client-utils": "^0.37.0", + "@scramjet/manager-api-client": "^0.37.0" }, "devDependencies": { - "@scramjet/types": "^0.36.1", + "@scramjet/types": "^0.37.0", "@types/node": "15.12.5", "ava": "^3.15.0", "ts-node": "^10.9.1", @@ -16915,14 +16688,14 @@ }, "packages/obj-logger": { "name": "@scramjet/obj-logger", - "version": "0.36.1", + "version": "0.37.0", "license": "AGPL-3.0", "dependencies": { - "@scramjet/utility": "^0.36.1", + "@scramjet/utility": "^0.37.0", "scramjet": "^4.36.9" }, "devDependencies": { - "@scramjet/types": "^0.36.1", + "@scramjet/types": "^0.37.0", "@types/node": "15.12.5", "ava": "^3.15.0", "nyc": "^15.1.0", @@ -16934,31 +16707,31 @@ }, "packages/pre-runner": { "name": "@scramjet/pre-runner", - "version": "0.36.1", + "version": "0.37.0", "license": "AGPL-3.0" }, "packages/python-runner": { "name": "@scramjet/python-runner", - "version": "0.36.1", + "version": "0.37.0", "license": "MIT" }, "packages/runner": { "name": "@scramjet/runner", - "version": "0.36.1", + "version": "0.37.0", "license": "MIT", "dependencies": { - "@scramjet/api-client": "^0.36.1", - "@scramjet/client-utils": "^0.36.1", - "@scramjet/manager-api-client": "^0.36.1", - "@scramjet/model": "^0.36.1", - "@scramjet/obj-logger": "^0.36.1", - "@scramjet/symbols": "^0.36.1", - "@scramjet/utility": "^0.36.1", + "@scramjet/api-client": "^0.37.0", + "@scramjet/client-utils": "^0.37.0", + "@scramjet/manager-api-client": "^0.37.0", + "@scramjet/model": "^0.37.0", + "@scramjet/obj-logger": "^0.37.0", + "@scramjet/symbols": "^0.37.0", + "@scramjet/utility": "^0.37.0", "bpmux": "^8.2.1", "scramjet": "^4.36.9" }, "devDependencies": { - "@scramjet/types": "^0.36.1", + "@scramjet/types": "^0.37.0", "@types/node": "15.12.5", "@types/sinon": "^10.0.13", "ava": "^3.15.0", @@ -16973,7 +16746,7 @@ }, "packages/sth": { "name": "@scramjet/sth", - "version": "0.36.1", + "version": "0.37.0", "funding": [ { "type": "github", @@ -16986,10 +16759,10 @@ ], "license": "AGPL-3.0", "dependencies": { - "@scramjet/host": "^0.36.1", - "@scramjet/obj-logger": "^0.36.1", - "@scramjet/sth-config": "^0.36.1", - "@scramjet/utility": "^0.36.1", + "@scramjet/host": "^0.37.0", + "@scramjet/obj-logger": "^0.37.0", + "@scramjet/sth-config": "^0.37.0", + "@scramjet/utility": "^0.37.0", "commander": "^8.3.0" }, "bin": { @@ -16997,8 +16770,8 @@ "sth": "src/bin/hub.ts" }, "devDependencies": { - "@scramjet/model": "^0.36.1", - "@scramjet/types": "^0.36.1", + "@scramjet/model": "^0.37.0", + "@scramjet/types": "^0.37.0", "@types/node": "15.12.5", "ava": "^3.15.0", "ts-node": "^10.9.1", @@ -17009,13 +16782,13 @@ }, "packages/sth-config": { "name": "@scramjet/sth-config", - "version": "0.36.1", + "version": "0.37.0", "license": "ISC", "dependencies": { - "@scramjet/utility": "^0.36.1" + "@scramjet/utility": "^0.37.0" }, "devDependencies": { - "@scramjet/types": "^0.36.1", + "@scramjet/types": "^0.37.0", "ava": "^3.15.0", "typedoc": "0.23.17", "typedoc-plugin-markdown": "3.13.6" @@ -17032,7 +16805,7 @@ }, "packages/symbols": { "name": "@scramjet/symbols", - "version": "0.36.1", + "version": "0.37.0", "license": "AGPL-3.0", "devDependencies": { "@types/node": "15.12.5", @@ -17043,16 +16816,16 @@ }, "packages/telemetry": { "name": "@scramjet/telemetry", - "version": "0.36.1", + "version": "0.37.0", "license": "ISC", "dependencies": { - "@scramjet/obj-logger": "^0.36.1", - "@scramjet/utility": "^0.36.1", + "@scramjet/obj-logger": "^0.37.0", + "@scramjet/utility": "^0.37.0", "winston": "^3.8.2", "winston-loki": "^6.0.6" }, "devDependencies": { - "@scramjet/types": "^0.36.1", + "@scramjet/types": "^0.37.0", "ava": "^3.15.0", "typedoc": "0.23.17", "typedoc-plugin-markdown": "3.13.6" @@ -17060,10 +16833,10 @@ }, "packages/types": { "name": "@scramjet/types", - "version": "0.36.1", + "version": "0.37.0", "license": "AGPL-3.0", "dependencies": { - "@scramjet/symbols": "^0.36.1", + "@scramjet/symbols": "^0.37.0", "http-status-codes": "^2.2.0" }, "devDependencies": { @@ -17076,14 +16849,14 @@ }, "packages/utility": { "name": "@scramjet/utility", - "version": "0.36.1", + "version": "0.37.0", "license": "ISC", "dependencies": { "normalize-url": "4", "yaml": "^2.2.2" }, "devDependencies": { - "@scramjet/types": "^0.36.1", + "@scramjet/types": "^0.37.0", "ava": "^4.3.3", "typed-emitter": "^1.4.0", "typedoc": "0.23.17", @@ -17896,16 +17669,16 @@ }, "packages/verser": { "name": "@scramjet/verser", - "version": "0.36.1", + "version": "0.37.0", "license": "AGPL-3.0", "dependencies": { - "@scramjet/obj-logger": "^0.36.1", - "@scramjet/utility": "^0.36.1", + "@scramjet/obj-logger": "^0.37.0", + "@scramjet/utility": "^0.37.0", "bpmux": "^8.2.1" }, "devDependencies": { - "@scramjet/api-server": "^0.36.1", - "@scramjet/types": "^0.36.1", + "@scramjet/api-server": "^0.37.0", + "@scramjet/types": "^0.37.0", "@types/node": "15.12.5", "ava": "^3.15.0", "ts-node": "^10.9.1", @@ -17916,6 +17689,12 @@ } }, "dependencies": { + "@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true + }, "@ampproject/remapping": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", @@ -18836,12 +18615,6 @@ "integrity": "sha512-OGCXaJ1BQXmQ5b9pw+JYsBGumK2/LPZiLmbj1o1JFVeSNs2PY8WPQFSyXrskhrHz5Nd/6lYg7lvGMtFHOncC4w==", "dev": true }, - "@cush/relative": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@cush/relative/-/relative-0.1.0.tgz", - "integrity": "sha512-pnF2c2hhHyC520CmYYKq3hGOS0kipkGBgRnp3z7wx7lDzykaUwQW3wPQmiX9YtbHUcgUu1qQtzstixmeYMwQoA==", - "dev": true - }, "@dabh/diagnostics": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", @@ -18859,15 +18632,30 @@ "dev": true, "optional": true }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true + }, "@eslint/eslintrc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", - "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.4.0", + "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -18876,6 +18664,12 @@ "strip-json-comments": "^3.1.1" } }, + "@eslint/js": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "dev": true + }, "@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", @@ -18883,12 +18677,12 @@ "dev": true }, "@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", "dev": true, "requires": { - "@humanwhocodes/object-schema": "^1.2.1", + "@humanwhocodes/object-schema": "^2.0.1", "debug": "^4.1.1", "minimatch": "^3.0.5" } @@ -18900,9 +18694,9 @@ "dev": true }, "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", "dev": true }, "@istanbuljs/load-nyc-config": { @@ -19585,15 +19379,15 @@ "version": "file:packages/adapters", "requires": { "@kubernetes/client-node": "^0.17.1", - "@scramjet/model": "^0.36.1", - "@scramjet/obj-logger": "^0.36.1", - "@scramjet/pre-runner": "^0.36.1", - "@scramjet/python-runner": "^0.36.1", - "@scramjet/runner": "^0.36.1", - "@scramjet/sth-config": "^0.36.1", - "@scramjet/symbols": "^0.36.1", - "@scramjet/types": "^0.36.1", - "@scramjet/utility": "^0.36.1", + "@scramjet/model": "^0.37.0", + "@scramjet/obj-logger": "^0.37.0", + "@scramjet/pre-runner": "^0.37.0", + "@scramjet/python-runner": "^0.37.0", + "@scramjet/runner": "^0.37.0", + "@scramjet/sth-config": "^0.37.0", + "@scramjet/symbols": "^0.37.0", + "@scramjet/types": "^0.37.0", + "@scramjet/utility": "^0.37.0", "@types/dockerode": "<=3.3.3", "@types/js-yaml": "4.0.5", "@types/node": "15.12.5", @@ -19615,10 +19409,10 @@ "@scramjet/api-client": { "version": "file:packages/api-client", "requires": { - "@scramjet/client-utils": "^0.36.1", - "@scramjet/sth-config": "^0.36.1", - "@scramjet/symbols": "^0.36.1", - "@scramjet/types": "^0.36.1", + "@scramjet/client-utils": "^0.37.0", + "@scramjet/sth-config": "^0.37.0", + "@scramjet/symbols": "^0.37.0", + "@scramjet/types": "^0.37.0", "@types/node": "15.12.5", "ava": "^3.15.0", "n-readlines": "^1.0.1", @@ -19632,11 +19426,11 @@ "@scramjet/api-server": { "version": "file:packages/api-server", "requires": { - "@scramjet/model": "^0.36.1", - "@scramjet/obj-logger": "^0.36.1", - "@scramjet/symbols": "^0.36.1", - "@scramjet/types": "^0.36.1", - "@scramjet/utility": "^0.36.1", + "@scramjet/model": "^0.37.0", + "@scramjet/obj-logger": "^0.37.0", + "@scramjet/symbols": "^0.37.0", + "@scramjet/types": "^0.37.0", + "@scramjet/utility": "^0.37.0", "@types/node": "15.12.5", "@types/sinon": "^10.0.13", "@types/trouter": "^3.1.1", @@ -19655,12 +19449,12 @@ "@scramjet/cli": { "version": "file:packages/cli", "requires": { - "@scramjet/api-client": "^0.36.1", - "@scramjet/client-utils": "^0.36.1", - "@scramjet/middleware-api-client": "^0.36.1", - "@scramjet/obj-logger": "^0.36.1", - "@scramjet/types": "^0.36.1", - "@scramjet/utility": "^0.36.1", + "@scramjet/api-client": "^0.37.0", + "@scramjet/client-utils": "^0.37.0", + "@scramjet/middleware-api-client": "^0.37.0", + "@scramjet/obj-logger": "^0.37.0", + "@scramjet/types": "^0.37.0", + "@scramjet/utility": "^0.37.0", "@types/find-package-json": "^1.2.3", "@types/minimatch": "^3.0.5", "@types/node": "15.12.5", @@ -19691,12 +19485,12 @@ "@scramjet/client-utils": { "version": "file:packages/client-utils", "requires": { - "@scramjet/model": "^0.36.1", - "@scramjet/obj-logger": "^0.36.1", - "@scramjet/sth-config": "^0.36.1", - "@scramjet/symbols": "^0.36.1", - "@scramjet/types": "^0.36.1", - "@scramjet/utility": "^0.36.1", + "@scramjet/model": "^0.37.0", + "@scramjet/obj-logger": "^0.37.0", + "@scramjet/sth-config": "^0.37.0", + "@scramjet/symbols": "^0.37.0", + "@scramjet/types": "^0.37.0", + "@scramjet/utility": "^0.37.0", "@types/node": "15.12.5", "@types/node-fetch": "^2.6.2", "abort-controller": "^3.0.0", @@ -19721,18 +19515,18 @@ "@scramjet/host": { "version": "file:packages/host", "requires": { - "@scramjet/adapters": "^0.36.1", - "@scramjet/api-server": "^0.36.1", - "@scramjet/load-check": "^0.36.1", - "@scramjet/model": "^0.36.1", - "@scramjet/module-loader": "^0.36.1", - "@scramjet/obj-logger": "^0.36.1", - "@scramjet/sth-config": "^0.36.1", - "@scramjet/symbols": "^0.36.1", - "@scramjet/telemetry": "^0.36.1", - "@scramjet/types": "^0.36.1", - "@scramjet/utility": "^0.36.1", - "@scramjet/verser": "^0.36.1", + "@scramjet/adapters": "^0.37.0", + "@scramjet/api-server": "^0.37.0", + "@scramjet/load-check": "^0.37.0", + "@scramjet/model": "^0.37.0", + "@scramjet/module-loader": "^0.37.0", + "@scramjet/obj-logger": "^0.37.0", + "@scramjet/sth-config": "^0.37.0", + "@scramjet/symbols": "^0.37.0", + "@scramjet/telemetry": "^0.37.0", + "@scramjet/types": "^0.37.0", + "@scramjet/utility": "^0.37.0", + "@scramjet/verser": "^0.37.0", "@types/find-package-json": "^1.2.3", "@types/jest": "^29.4.4", "@types/node": "15.12.5", @@ -19757,9 +19551,9 @@ "@scramjet/load-check": { "version": "file:packages/load-check", "requires": { - "@scramjet/obj-logger": "^0.36.1", - "@scramjet/types": "^0.36.1", - "@scramjet/utility": "^0.36.1", + "@scramjet/obj-logger": "^0.37.0", + "@scramjet/types": "^0.37.0", + "@scramjet/utility": "^0.37.0", "@types/node": "15.12.5", "@types/uuid": "^8.3.4", "ava": "^3.15.0", @@ -19775,7 +19569,7 @@ "@scramjet/logger": { "version": "file:packages/logger", "requires": { - "@scramjet/types": "^0.36.1", + "@scramjet/types": "^0.37.0", "@types/node": "15.12.5", "ava": "^3.15.0", "nyc": "^15.1.0", @@ -19789,9 +19583,9 @@ "@scramjet/manager-api-client": { "version": "file:packages/manager-api-client", "requires": { - "@scramjet/api-client": "^0.36.1", - "@scramjet/client-utils": "^0.36.1", - "@scramjet/types": "^0.36.1", + "@scramjet/api-client": "^0.37.0", + "@scramjet/client-utils": "^0.37.0", + "@scramjet/types": "^0.37.0", "@types/node": "15.12.5", "ava": "^3.15.0", "ts-node": "^10.9.1", @@ -19803,11 +19597,11 @@ "@scramjet/middleware-api-client": { "version": "file:packages/middleware-api-client", "requires": { - "@scramjet/api-client": "^0.36.1", - "@scramjet/client-utils": "^0.36.1", - "@scramjet/manager-api-client": "^0.36.1", - "@scramjet/multi-manager-api-client": "^0.36.1", - "@scramjet/types": "^0.36.1", + "@scramjet/api-client": "^0.37.0", + "@scramjet/client-utils": "^0.37.0", + "@scramjet/manager-api-client": "^0.37.0", + "@scramjet/multi-manager-api-client": "^0.37.0", + "@scramjet/types": "^0.37.0", "ava": "^3.15.0", "esbuild": "^0.14.54", "ts-node": "^10.9.1", @@ -19819,9 +19613,9 @@ "@scramjet/model": { "version": "file:packages/model", "requires": { - "@scramjet/obj-logger": "^0.36.1", - "@scramjet/symbols": "^0.36.1", - "@scramjet/types": "^0.36.1", + "@scramjet/obj-logger": "^0.37.0", + "@scramjet/symbols": "^0.37.0", + "@scramjet/types": "^0.37.0", "@types/node": "15.12.5", "@types/uuid": "^8.3.4", "ava": "^3.15.0", @@ -19836,8 +19630,8 @@ "@scramjet/module-loader": { "version": "file:packages/module-loader", "requires": { - "@scramjet/obj-logger": "^0.36.1", - "@scramjet/types": "^0.36.1", + "@scramjet/obj-logger": "^0.37.0", + "@scramjet/types": "^0.37.0", "@types/node": "15.12.5", "ava": "^3.15.0", "ts-node": "^10.9.1", @@ -19849,7 +19643,8 @@ "@scramjet/monitoring-server": { "version": "file:packages/monitoring-server", "requires": { - "@scramjet/types": "^0.36.1", + "@scramjet/types": "^0.37.0", + "@scramjet/utility": "^0.37.0", "@types/node": "15.12.5", "ava": "^3.15.0", "nyc": "^15.1.0", @@ -19862,10 +19657,10 @@ "@scramjet/multi-manager-api-client": { "version": "file:packages/multi-manager-api-client", "requires": { - "@scramjet/api-client": "^0.36.1", - "@scramjet/client-utils": "^0.36.1", - "@scramjet/manager-api-client": "^0.36.1", - "@scramjet/types": "^0.36.1", + "@scramjet/api-client": "^0.37.0", + "@scramjet/client-utils": "^0.37.0", + "@scramjet/manager-api-client": "^0.37.0", + "@scramjet/types": "^0.37.0", "@types/node": "15.12.5", "ava": "^3.15.0", "ts-node": "^10.9.1", @@ -19877,8 +19672,8 @@ "@scramjet/obj-logger": { "version": "file:packages/obj-logger", "requires": { - "@scramjet/types": "^0.36.1", - "@scramjet/utility": "^0.36.1", + "@scramjet/types": "^0.37.0", + "@scramjet/utility": "^0.37.0", "@types/node": "15.12.5", "ava": "^3.15.0", "nyc": "^15.1.0", @@ -19898,14 +19693,14 @@ "@scramjet/runner": { "version": "file:packages/runner", "requires": { - "@scramjet/api-client": "^0.36.1", - "@scramjet/client-utils": "^0.36.1", - "@scramjet/manager-api-client": "^0.36.1", - "@scramjet/model": "^0.36.1", - "@scramjet/obj-logger": "^0.36.1", - "@scramjet/symbols": "^0.36.1", - "@scramjet/types": "^0.36.1", - "@scramjet/utility": "^0.36.1", + "@scramjet/api-client": "^0.37.0", + "@scramjet/client-utils": "^0.37.0", + "@scramjet/manager-api-client": "^0.37.0", + "@scramjet/model": "^0.37.0", + "@scramjet/obj-logger": "^0.37.0", + "@scramjet/symbols": "^0.37.0", + "@scramjet/types": "^0.37.0", + "@scramjet/utility": "^0.37.0", "@types/node": "15.12.5", "@types/sinon": "^10.0.13", "ava": "^3.15.0", @@ -19923,12 +19718,12 @@ "@scramjet/sth": { "version": "file:packages/sth", "requires": { - "@scramjet/host": "^0.36.1", - "@scramjet/model": "^0.36.1", - "@scramjet/obj-logger": "^0.36.1", - "@scramjet/sth-config": "^0.36.1", - "@scramjet/types": "^0.36.1", - "@scramjet/utility": "^0.36.1", + "@scramjet/host": "^0.37.0", + "@scramjet/model": "^0.37.0", + "@scramjet/obj-logger": "^0.37.0", + "@scramjet/sth-config": "^0.37.0", + "@scramjet/types": "^0.37.0", + "@scramjet/utility": "^0.37.0", "@types/node": "15.12.5", "ava": "^3.15.0", "commander": "^8.3.0", @@ -19948,8 +19743,8 @@ "@scramjet/sth-config": { "version": "file:packages/sth-config", "requires": { - "@scramjet/types": "^0.36.1", - "@scramjet/utility": "^0.36.1", + "@scramjet/types": "^0.37.0", + "@scramjet/utility": "^0.37.0", "ava": "^3.15.0", "typedoc": "0.23.17", "typedoc-plugin-markdown": "3.13.6" @@ -19967,9 +19762,9 @@ "@scramjet/telemetry": { "version": "file:packages/telemetry", "requires": { - "@scramjet/obj-logger": "^0.36.1", - "@scramjet/types": "^0.36.1", - "@scramjet/utility": "^0.36.1", + "@scramjet/obj-logger": "^0.37.0", + "@scramjet/types": "^0.37.0", + "@scramjet/utility": "^0.37.0", "ava": "^3.15.0", "typedoc": "0.23.17", "typedoc-plugin-markdown": "3.13.6", @@ -19980,7 +19775,7 @@ "@scramjet/types": { "version": "file:packages/types", "requires": { - "@scramjet/symbols": "^0.36.1", + "@scramjet/symbols": "^0.37.0", "@types/node": "15.12.5", "http-status-codes": "^2.2.0", "scramjet": "^4.36.9", @@ -19992,7 +19787,7 @@ "@scramjet/utility": { "version": "file:packages/utility", "requires": { - "@scramjet/types": "^0.36.1", + "@scramjet/types": "^0.37.0", "ava": "^4.3.3", "normalize-url": "4", "typed-emitter": "^1.4.0", @@ -20501,10 +20296,10 @@ "@scramjet/verser": { "version": "file:packages/verser", "requires": { - "@scramjet/api-server": "^0.36.1", - "@scramjet/obj-logger": "^0.36.1", - "@scramjet/types": "^0.36.1", - "@scramjet/utility": "^0.36.1", + "@scramjet/api-server": "^0.37.0", + "@scramjet/obj-logger": "^0.37.0", + "@scramjet/types": "^0.37.0", + "@scramjet/utility": "^0.37.0", "@types/node": "15.12.5", "ava": "^3.15.0", "bpmux": "^8.2.1", @@ -20742,9 +20537,9 @@ "dev": true }, "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "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 }, "@types/json5": { @@ -20785,12 +20580,6 @@ "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", "dev": true }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, "@types/request": { "version": "2.48.8", "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.8.tgz", @@ -20817,9 +20606,9 @@ } }, "@types/semver": { - "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", + "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", "dev": true }, "@types/shell-escape": { @@ -20925,107 +20714,188 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.49.0.tgz", - "integrity": "sha512-IhxabIpcf++TBaBa1h7jtOWyon80SXPRLDq0dVz5SLFC/eW6tofkw/O7Ar3lkx5z5U6wzbKDrl2larprp5kk5Q==", + "version": "6.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.18.1.tgz", + "integrity": "sha512-nISDRYnnIpk7VCFrGcu1rnZfM1Dh9LRHnfgdkjcbi/l7g16VYRri3TjXi9Ir4lOZSw5N/gnV/3H7jIPQ8Q4daA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.49.0", - "@typescript-eslint/type-utils": "5.49.0", - "@typescript-eslint/utils": "5.49.0", + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.18.1", + "@typescript-eslint/type-utils": "6.18.1", + "@typescript-eslint/utils": "6.18.1", + "@typescript-eslint/visitor-keys": "6.18.1", "debug": "^4.3.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } } }, "@typescript-eslint/parser": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.49.0.tgz", - "integrity": "sha512-veDlZN9mUhGqU31Qiv2qEp+XrJj5fgZpJ8PW30sHU+j/8/e5ruAhLaVDAeznS7A7i4ucb/s8IozpDtt9NqCkZg==", + "version": "6.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.18.1.tgz", + "integrity": "sha512-zct/MdJnVaRRNy9e84XnVtRv9Vf91/qqe+hZJtKanjojud4wAVy/7lXxJmMyX6X6J+xc6c//YEWvpeif8cAhWA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.49.0", - "@typescript-eslint/types": "5.49.0", - "@typescript-eslint/typescript-estree": "5.49.0", + "@typescript-eslint/scope-manager": "6.18.1", + "@typescript-eslint/types": "6.18.1", + "@typescript-eslint/typescript-estree": "6.18.1", + "@typescript-eslint/visitor-keys": "6.18.1", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.49.0.tgz", - "integrity": "sha512-clpROBOiMIzpbWNxCe1xDK14uPZh35u4QaZO1GddilEzoCLAEz4szb51rBpdgurs5k2YzPtJeTEN3qVbG+LRUQ==", + "version": "6.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.18.1.tgz", + "integrity": "sha512-BgdBwXPFmZzaZUuw6wKiHKIovms97a7eTImjkXCZE04TGHysG+0hDQPmygyvgtkoB/aOQwSM/nWv3LzrOIQOBw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.49.0", - "@typescript-eslint/visitor-keys": "5.49.0" + "@typescript-eslint/types": "6.18.1", + "@typescript-eslint/visitor-keys": "6.18.1" } }, "@typescript-eslint/type-utils": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.49.0.tgz", - "integrity": "sha512-eUgLTYq0tR0FGU5g1YHm4rt5H/+V2IPVkP0cBmbhRyEmyGe4XvJ2YJ6sYTmONfjmdMqyMLad7SB8GvblbeESZA==", + "version": "6.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.18.1.tgz", + "integrity": "sha512-wyOSKhuzHeU/5pcRDP2G2Ndci+4g653V43gXTpt4nbyoIOAASkGDA9JIAgbQCdCkcr1MvpSYWzxTz0olCn8+/Q==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "5.49.0", - "@typescript-eslint/utils": "5.49.0", + "@typescript-eslint/typescript-estree": "6.18.1", + "@typescript-eslint/utils": "6.18.1", "debug": "^4.3.4", - "tsutils": "^3.21.0" + "ts-api-utils": "^1.0.1" } }, "@typescript-eslint/types": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.49.0.tgz", - "integrity": "sha512-7If46kusG+sSnEpu0yOz2xFv5nRz158nzEXnJFCGVEHWnuzolXKwrH5Bsf9zsNlOQkyZuk0BZKKoJQI+1JPBBg==", + "version": "6.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.18.1.tgz", + "integrity": "sha512-4TuMAe+tc5oA7wwfqMtB0Y5OrREPF1GeJBAjqwgZh1lEMH5PJQgWgHGfYufVB51LtjD+peZylmeyxUXPfENLCw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.49.0.tgz", - "integrity": "sha512-PBdx+V7deZT/3GjNYPVQv1Nc0U46dAHbIuOG8AZ3on3vuEKiPDwFE/lG1snN2eUB9IhF7EyF7K1hmTcLztNIsA==", + "version": "6.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.18.1.tgz", + "integrity": "sha512-fv9B94UAhywPRhUeeV/v+3SBDvcPiLxRZJw/xZeeGgRLQZ6rLMG+8krrJUyIf6s1ecWTzlsbp0rlw7n9sjufHA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.49.0", - "@typescript-eslint/visitor-keys": "5.49.0", + "@typescript-eslint/types": "6.18.1", + "@typescript-eslint/visitor-keys": "6.18.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } } }, "@typescript-eslint/utils": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.49.0.tgz", - "integrity": "sha512-cPJue/4Si25FViIb74sHCLtM4nTSBXtLx1d3/QT6mirQ/c65bV8arBEebBJJizfq8W2YyMoPI/WWPFWitmNqnQ==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.49.0", - "@typescript-eslint/types": "5.49.0", - "@typescript-eslint/typescript-estree": "5.49.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0", - "semver": "^7.3.7" + "version": "6.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.18.1.tgz", + "integrity": "sha512-zZmTuVZvD1wpoceHvoQpOiewmWu3uP9FuTWo8vqpy2ffsmfCE8mklRPi+vmnIYAIk9t/4kOThri2QCDgor+OpQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.18.1", + "@typescript-eslint/types": "6.18.1", + "@typescript-eslint/typescript-estree": "6.18.1", + "semver": "^7.5.4" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } } }, "@typescript-eslint/visitor-keys": { - "version": "5.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.49.0.tgz", - "integrity": "sha512-v9jBMjpNWyn8B6k/Mjt6VbUS4J1GvUlR4x3Y+ibnP1z7y7V4n0WRz+50DY6+Myj0UaXVSuUlHohO+eZ8IJEnkg==", + "version": "6.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.18.1.tgz", + "integrity": "sha512-/kvt0C5lRqGoCfsbmm7/CwMqoSkY3zzHLIjdhHZQW3VFrnz7ATecOHR7nb7V+xn4286MBxfnQfQhAmCI0u+bJA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.49.0", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "6.18.1", + "eslint-visitor-keys": "^3.4.1" } }, - "@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, "0http": { @@ -21053,9 +20923,9 @@ } }, "acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true }, "acorn-jsx": { @@ -21112,12 +20982,6 @@ "uri-js": "^4.2.2" } }, - "ansi-256-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-256-colors/-/ansi-256-colors-1.1.0.tgz", - "integrity": "sha512-roJI/AVBdJIhcohHDNXUoFYsCZG4MZIs5HtKNgVKY5QzqQoQJe+o0ouiqZDaSC+ggKdBVcuSwlSdJckrrlm3/A==", - "dev": true - }, "ansi-align": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", @@ -21216,6 +21080,16 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, + "array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + } + }, "array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", @@ -21223,15 +21097,15 @@ "dev": true }, "array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", "is-string": "^1.0.7" } }, @@ -21241,30 +21115,58 @@ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, + "array.prototype.findlastindex": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + } + }, "array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" } }, "array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" } }, + "arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + } + }, "arrgv": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/arrgv/-/arrgv-1.0.2.tgz", @@ -21760,18 +21662,6 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "build-if-changed": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/build-if-changed/-/build-if-changed-1.5.5.tgz", - "integrity": "sha512-Ev9XU5r+HWulJYf58ZyeIIB0TYywReSiWdfxtW37FyGm7p4xHEAYza+c/Gj3IZxnMSYydrW+Xu1a7brJjs1W3A==", - "dev": true, - "requires": { - "ansi-256-colors": "^1.1.0", - "has-flag": "^4.0.0", - "recrawl": "^1.1.1", - "saxon": "^0.1.15" - } - }, "buildcheck": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.3.tgz", @@ -21893,13 +21783,14 @@ } }, "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" } }, "callsites": { @@ -22263,12 +22154,6 @@ "delayed-stream": "~1.0.0" } }, - "commander": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.1.0.tgz", - "integrity": "sha512-mf45ldcuHSYShkplHHGKWb4TrmwQadxOn7v4WuhDJy0ZVoY5JFajaRDKD0PNe5qXzBX0rhovjTnP6Kz9LETcuA==", - "dev": true - }, "commander-completion": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commander-completion/-/commander-completion-1.0.1.tgz", @@ -22356,27 +22241,6 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" }, - "cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "dependencies": { - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - } - } - }, "cpu-features": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.4.tgz", @@ -22534,12 +22398,24 @@ "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", "dev": true }, + "define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + } + }, "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "requires": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } @@ -22751,64 +22627,70 @@ } }, "es-abstract": { - "version": "1.21.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", - "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", + "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", "dev": true, "requires": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "call-bind": "^1.0.5", "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.2", "get-symbol-description": "^1.0.0", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has": "^1.0.3", "has-property-descriptors": "^1.0.0", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.4", - "is-array-buffer": "^3.0.1", + "hasown": "^2.0.0", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", "is-callable": "^1.2.7", "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", + "is-typed-array": "^1.1.12", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", + "object-inspect": "^1.13.1", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" + "which-typed-array": "^1.1.13" } }, "es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", "dev": true, "requires": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" } }, "es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, "requires": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "es-to-primitive": { @@ -23048,79 +22930,60 @@ "dev": true }, "eslint": { - "version": "8.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.32.0.tgz", - "integrity": "sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.4.1", - "@humanwhocodes/config-array": "^0.11.8", + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.56.0", + "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", + "graphemer": "^1.4.0", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", + "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" - }, - "dependencies": { - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } } }, "eslint-import-resolver-node": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", - "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "requires": { "debug": "^3.2.7", - "is-core-module": "^2.11.0", - "resolve": "^1.22.1" + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" }, "dependencies": { "debug": { @@ -23135,9 +22998,9 @@ } }, "eslint-module-utils": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", - "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", "dev": true, "requires": { "debug": "^3.2.7" @@ -23155,26 +23018,28 @@ } }, "eslint-plugin-import": { - "version": "2.27.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", - "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, "requires": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.7.4", - "has": "^1.0.3", - "is-core-module": "^2.11.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.values": "^1.1.6", - "resolve": "^1.22.1", - "semver": "^6.3.0", - "tsconfig-paths": "^3.14.1" + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" }, "dependencies": { "debug": { @@ -23196,21 +23061,21 @@ } }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } }, "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "requires": { "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "estraverse": "^5.2.0" } }, "eslint-to-editorconfig": { @@ -23223,38 +23088,21 @@ "yargs": "^12.0.5" } }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "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 }, "espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "requires": { - "acorn": "^8.8.0", + "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.1" } }, "esprima": { @@ -23264,20 +23112,12 @@ "dev": true }, "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "requires": { "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } } }, "esrecurse": { @@ -23287,20 +23127,12 @@ "dev": true, "requires": { "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } } }, "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, "esutils": { @@ -23406,12 +23238,6 @@ "jest-util": "^29.6.2" } }, - "expect-more": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/expect-more/-/expect-more-1.1.0.tgz", - "integrity": "sha512-/iIJuRtKgUJwCKEHV5XtTbyrR5JEztzqHDEub6X+WLAVGEPfkEdvsTE1Y0r9vNQqhgP6Kbp9A9w6OEYUqJwLwQ==", - "dev": true - }, "ext": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", @@ -23605,15 +23431,6 @@ "path-exists": "^4.0.0" } }, - "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, - "requires": { - "micromatch": "^4.0.2" - } - }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -23636,9 +23453,9 @@ "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" }, "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", + "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==" }, "for-each": { "version": "0.3.3", @@ -23729,20 +23546,20 @@ "optional": true }, "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" } }, "functions-have-names": { @@ -23780,14 +23597,15 @@ "dev": true }, "get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" } }, "get-package-type": { @@ -23845,12 +23663,6 @@ "is-glob": "^4.0.3" } }, - "glob-regex": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/glob-regex/-/glob-regex-0.3.2.tgz", - "integrity": "sha512-m5blUd3/OqDTWwzBBtWBPrGlAzatRywHameHeekAZyZrskYouOGdNB8T/q6JucucvJXtOuyHIn0/Yia7iDasDw==", - "dev": true - }, "global-dirs": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", @@ -23861,9 +23673,9 @@ } }, "globals": { - "version": "13.19.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", - "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -23932,10 +23744,10 @@ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, "handlebars": { @@ -23965,14 +23777,6 @@ "har-schema": "^2.0.0" } }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, "has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -23985,12 +23789,12 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", "dev": true, "requires": { - "get-intrinsic": "^1.1.1" + "get-intrinsic": "^1.2.2" } }, "has-proto": { @@ -24044,6 +23848,14 @@ } } }, + "hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "requires": { + "function-bind": "^1.1.2" + } + }, "hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", @@ -24234,13 +24046,13 @@ "dev": true }, "internal-slot": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", - "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", "dev": true, "requires": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", "side-channel": "^1.0.4" } }, @@ -24268,13 +24080,13 @@ "dev": true }, "is-array-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", - "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", "dev": true, "requires": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "get-intrinsic": "^1.2.0", "is-typed-array": "^1.1.10" } }, @@ -24328,11 +24140,11 @@ } }, "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "requires": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "is-date-object": { @@ -24344,12 +24156,6 @@ "has-tostringtag": "^1.0.0" } }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, "is-error": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/is-error/-/is-error-2.2.2.tgz", @@ -24517,16 +24323,12 @@ } }, "is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dev": true, "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.11" } }, "is-typedarray": { @@ -24555,15 +24357,6 @@ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, "is-yarn-global": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", @@ -25269,12 +25062,6 @@ "integrity": "sha512-njj0VL2TsIxCtgzhO+9RRobBvws4oYyCM8TpvoUQwl/MbIM3NFJRR9+e6x0sS5xXaP1t6OCBkaBME98OV9zU5A==", "optional": true }, - "js-sdsl": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", - "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", - "dev": true - }, "js-string-escape": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", @@ -25410,15 +25197,6 @@ "json-buffer": "3.0.0" } }, - "klaw-sync": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", - "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11" - } - }, "kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -25904,12 +25682,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, "negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -28231,9 +28003,9 @@ "optional": true }, "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "dev": true }, "object-keys": { @@ -28243,26 +28015,49 @@ "dev": true }, "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" } }, + "object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" + } + }, "object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" } }, "oidc-token-hash": { @@ -28295,16 +28090,6 @@ "mimic-fn": "^2.1.0" } }, - "open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dev": true, - "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - } - }, "openid-client": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.3.2.tgz", @@ -28329,17 +28114,17 @@ } }, "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "requires": { + "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "type-check": "^0.4.0" } }, "ora": { @@ -28370,12 +28155,6 @@ "mem": "^4.0.0" } }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true - }, "p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", @@ -28440,259 +28219,90 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, - "requires": { - "p-finally": "^1.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "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, - "requires": { - "graceful-fs": "^4.1.15", - "hasha": "^5.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" - } - }, - "package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dev": true, - "requires": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "pad-right": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/pad-right/-/pad-right-0.2.2.tgz", - "integrity": "sha512-4cy8M95ioIGolCoMmm2cMntGR1lPLEbOMzOKu8bzjuJP6JpzEMQcDHmh7hHLYGgob+nKe1YHFMaG4V59HQa89g==", - "dev": true, - "requires": { - "repeat-string": "^1.5.2" - } - }, - "papaparse": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.3.2.tgz", - "integrity": "sha512-6dNZu0Ki+gyV0eBsFKJhYr+MdQYAzFUGlBMNj3GNrmHxmz1lfRa24CjFObPXtjcetlOv5Ad299MhIK0znp3afw==" - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse-ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", - "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", - "dev": true - }, - "patch-package": { - "version": "6.4.7", - "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.4.7.tgz", - "integrity": "sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ==", - "dev": true, - "requires": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^7.0.1", - "is-ci": "^2.0.0", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.0", - "open": "^7.4.2", - "rimraf": "^2.6.3", - "semver": "^5.6.0", - "slash": "^2.0.0", - "tmp": "^0.0.33" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "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, + "requires": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + } + }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } } } }, + "pad-right": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/pad-right/-/pad-right-0.2.2.tgz", + "integrity": "sha512-4cy8M95ioIGolCoMmm2cMntGR1lPLEbOMzOKu8bzjuJP6JpzEMQcDHmh7hHLYGgob+nKe1YHFMaG4V59HQa89g==", + "dev": true, + "requires": { + "repeat-string": "^1.5.2" + } + }, + "papaparse": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.3.2.tgz", + "integrity": "sha512-6dNZu0Ki+gyV0eBsFKJhYr+MdQYAzFUGlBMNj3GNrmHxmz1lfRa24CjFObPXtjcetlOv5Ad299MhIK0znp3afw==" + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parse-ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", + "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", + "dev": true + }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -29115,16 +28725,6 @@ } } }, - "read-yaml-file": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-2.1.0.tgz", - "integrity": "sha512-UkRNRIwnhG+y7hpqnycCL/xbTk7+ia9VuVTC0S+zVbwd65DI9eUpRMfsWIGrCWxTU/mi+JW8cHQCrv+zfCbEPQ==", - "dev": true, - "requires": { - "js-yaml": "^4.0.0", - "strip-bom": "^4.0.0" - } - }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -29160,17 +28760,6 @@ "resolve": "^1.1.6" } }, - "recrawl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/recrawl/-/recrawl-1.2.3.tgz", - "integrity": "sha512-BJjwjefrfI4/OYPrZ+I2SEfSE3+BoIom15KpNYLabNJJ/G0zn/2niS4AILT60aRjqLR4+IucD5YU8D96z32EvQ==", - "dev": true, - "requires": { - "@cush/relative": "^0.1.0", - "glob-regex": "^0.3.0", - "tslib": "^1.9.3" - } - }, "reflect-metadata": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", @@ -29193,14 +28782,14 @@ "dev": true }, "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" } }, "regexparam": { @@ -29208,12 +28797,6 @@ "resolved": "https://registry.npmjs.org/regexparam/-/regexparam-2.0.1.tgz", "integrity": "sha512-zRgSaYemnNYxUv+/5SeoHI0eJIgTL/A2pUtXUPLHQxUldagouJ9p+K6IbIZ/JiQuCEv2E2B1O11SjVQy3aMCkw==" }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, "registry-auth-token": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", @@ -29309,11 +28892,11 @@ "integrity": "sha512-vGANaSU3Uvl33Lz88otjkoXkiBx01KjrusdsW2K95JbJveWZdjf11CyutMRZyy7nj7NyCTRynauTbaiM7MCgkg==" }, "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "requires": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } @@ -29417,19 +29000,39 @@ "queue-microtask": "^1.2.2" } }, + "safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } + }, "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==" }, "safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.1.tgz", + "integrity": "sha512-Y5NejJTTliTyY4H7sipGqY+RX5P87i3F7c4Rcepy72nq+mNLhIsD0W4c7kEmduMDQCSqtPsXPlSTsFhh2LQv+g==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", "is-regex": "^1.1.4" } }, @@ -29443,15 +29046,6 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "saxon": { - "version": "0.1.18", - "resolved": "https://registry.npmjs.org/saxon/-/saxon-0.1.18.tgz", - "integrity": "sha512-JMdJjBJCSquNY7Glyl+FNMQyZhbny6wKta8KE5PWrEbU5oB2FfONbtBPHlMOXJrFc9FqUYBJ9QsavygJW1QiBg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11" - } - }, "scramjet": { "version": "4.36.9", "resolved": "https://registry.npmjs.org/scramjet/-/scramjet-4.36.9.tgz", @@ -29467,11 +29061,11 @@ "requires": { "@cucumber/cucumber": "^7.3.2", "@cucumber/pretty-formatter": "^1.0.0", - "@scramjet/api-client": "^0.36.1", - "@scramjet/logger": "^0.36.1", - "@scramjet/obj-logger": "^0.36.1", - "@scramjet/sth-config": "^0.36.1", - "@scramjet/types": "^0.36.1", + "@scramjet/api-client": "^0.37.0", + "@scramjet/logger": "^0.37.0", + "@scramjet/obj-logger": "^0.37.0", + "@scramjet/sth-config": "^0.37.0", + "@scramjet/types": "^0.37.0", "dockerode": "^3.3.4", "find-package-json": "^1.2.0", "freeport": "^1.0.5", @@ -29550,6 +29144,29 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, + "set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dev": true, + "requires": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + } + }, + "set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "requires": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + } + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -29923,26 +29540,37 @@ "strip-ansi": "^6.0.1" } }, + "string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, "string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" } }, "string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" } }, "strip-ansi": { @@ -30033,67 +29661,6 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, - "syncpack": { - "version": "5.8.15", - "resolved": "https://registry.npmjs.org/syncpack/-/syncpack-5.8.15.tgz", - "integrity": "sha512-V40rKrJL86eyvPLVhWP1BpG2suXOzWRCOSKGPyLdAjqXpmYPSqKh2O30lIqYSFLjw8TL0Dl5WNiVINqz7+DccQ==", - "dev": true, - "requires": { - "chalk": "4.1.2", - "commander": "8.1.0", - "cosmiconfig": "7.0.0", - "expect-more": "1.1.0", - "fs-extra": "10.0.0", - "glob": "7.1.7", - "read-yaml-file": "2.1.0", - "semver": "7.3.5" - }, - "dependencies": { - "fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, "systeminformation": { "version": "5.21.7", "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.21.7.tgz", @@ -30204,15 +29771,6 @@ "integrity": "sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==", "dev": true }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, "tmp-promise": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", @@ -30313,6 +29871,13 @@ } } }, + "ts-api-utils": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", + "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "dev": true, + "requires": {} + }, "ts-dedent": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", @@ -30388,13 +29953,13 @@ "integrity": "sha512-o3KFLCUw5v2Z7URDnGpk9iWlE9vdRv7hi2ZddEQLDdID3ufATKCB9HDJLBAs24JW3YODeVPHE/DJARIry+OZpQ==" }, "tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "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, "requires": { "@types/json5": "^0.0.29", - "json5": "^1.0.1", + "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" }, @@ -30421,15 +29986,6 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -30470,6 +30026,42 @@ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, + "typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + } + }, "typed-array-length": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", @@ -30803,17 +30395,16 @@ "dev": true }, "which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", "dev": true, "requires": { "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "call-bind": "^1.0.4", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" + "has-tostringtag": "^1.0.0" } }, "wide-align": { @@ -30874,12 +30465,6 @@ "triple-beam": "^1.3.0" } }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", diff --git a/package.json b/package.json index 7cc51f6fa..9b8da5e28 100644 --- a/package.json +++ b/package.json @@ -4,14 +4,6 @@ "private": true, "description": "A development repo for Scramjet Transform Hub, a container supervisor that allows deployment, execution and monitoring of any application based on a simple interface.", "main": "index.js", - "bic": { - "only": [ - "packages" - ], - "skip": [ - "template" - ] - }, "bin": { "scramjet-transform-hub": "dist/sth/bin/hub.js" }, @@ -37,15 +29,16 @@ "clean": "yarn clean:root && scripts/run-script.js clean", "clean:root": "rm -rf ./dist/", "clean:modules": "find -name node_modules -or -name __pypackages__ -prune -exec rm -rf {} ';' 2> /dev/null", - "lint": "TIMING=1 NODE_OPTIONS=\"--max-old-space-size=3072\" eslint . --ext .ts --ext .js --cache --cache-strategy=content --cache-location=.eslintcache_scramjet-csi", - "lint:uncached": "rm .eslintcache_scramjet-csi && yarn lint", + "lint:full": "TIMING=1 NODE_OPTIONS=\"--max-old-space-size=3072\" eslint . --ext .ts --ext .js --cache --cache-strategy=content --cache-location=.eslintcache_scramjet-csi", + "lint": "TIMING=1 NODE_OPTIONS=\"--max-old-space-size=2048\" scripts/run-script.js -w modules -j 4 -e \"! ls .eslintrc* > /dev/null || npx eslint ./ --ext .ts --ext .js --cache --cache-strategy=content\"", + "lint:uncached": "find . -name .eslintcache -delete && yarn lint", "start": "DEVELOPMENT=true node dist/sth/bin/hub.js", "start:dev": "DEVELOPMENT=true ts-node packages/sth/src/bin/hub.ts", "start:dev:cli": "DEVELOPMENT=true ts-node packages/cli/src/bin/index.ts", "install:clean": "yarn clean && yarn clean:modules && yarn install", "postinstall": "scripts/run-script.js -v -w modules install:deps", "prepare": "npx husky install", - "download:refapps": "cd packages/ && wget -q 'https://api.github.com/repos/scramjetorg/reference-apps/releases/latest' -O - | jq -r '.assets[].browser_download_url' | xargs -n 4 -P ${MAX_PARALLEL:-$(nproc)} wget -q -nc", + "download:refapps": "cd packages && wget -q 'https://api.github.com/repos/scramjetorg/reference-apps/releases/latest' -O - | jq -r '.assets[].browser_download_url' | xargs -n 4 -P ${MAX_PARALLEL:-$(sysctl -n hw.ncpu 2>/dev/null || sysctl -n hw.logicalcpu 2>/dev/null || echo 1)} wget -q -nc", "test": "yarn test:packages", "test:packages": "scripts/run-script.js -S test", "test:packages-no-concurrent": "scripts/run-script.js -S -j 1 test", @@ -80,22 +73,18 @@ "@istanbuljs/nyc-config-typescript": "^1.0.2", "@npmcli/run-script": "4.2.1", "@types/node": "15.12.5", - "@typescript-eslint/eslint-plugin": "^5.41.0", - "@typescript-eslint/parser": "^5.41.0", - "build-if-changed": "^1.5.5", + "@typescript-eslint/eslint-plugin": "^6.14.0", + "@typescript-eslint/parser": "^6.14.0", "cloc": "^2.10.0", - "esbuild": "^0.14.54", - "eslint": "^8.26.0", - "eslint-plugin-import": "^2.26.0", + "eslint": "^8.55.0", + "eslint-plugin-import": "^2.29.1", "eslint-to-editorconfig": "^2.0.0", "fs-extra": "^9.1.0", "glob": "^7.2.3", "globrex": "^0.1.2", "husky": "^6.0.0", "nyc": "^15.1.0", - "patch-package": "6.4.7", "semver": "^7.5.2", - "syncpack": "^5.8.15", "tar": "^6.1.11", "toposort": "^2.0.2", "ts-node": "^10.9.1", diff --git a/packages/api-client/src/host-client.ts b/packages/api-client/src/host-client.ts index 61e90e460..1b6b1eb1c 100644 --- a/packages/api-client/src/host-client.ts +++ b/packages/api-client/src/host-client.ts @@ -92,10 +92,9 @@ export class HostClient implements ClientProvider { async sendSequence( sequencePackage: Parameters[1], requestInit?: RequestInit, - update?: boolean ): Promise { const response = await this.client.sendStream("sequence", sequencePackage, requestInit, { - parseResponse: "json", put: update + parseResponse: "json" }); return SequenceClient.from(response.id, this); diff --git a/packages/api-client/src/sequence-client.ts b/packages/api-client/src/sequence-client.ts index 39ed7179c..2da8461a3 100644 --- a/packages/api-client/src/sequence-client.ts +++ b/packages/api-client/src/sequence-client.ts @@ -96,7 +96,7 @@ export class SequenceClient { } async overwrite(stream: Readable) { - const response = await this.clientUtils.sendStream("sequence", stream, { method: "PUT" }, { + const response = await this.clientUtils.sendStream(`sequence/${this.id}`, stream, { method: "put" }, { parseResponse: "json" }); diff --git a/packages/cli/package.json b/packages/cli/package.json index 9879168ec..a9c13165e 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -27,7 +27,6 @@ "@scramjet/utility": "^0.37.0", "chalk": "^4.1.2", "commander": "^9.5.0", - "commander-completion": "^1.0.1", "find-package-json": "^1.2.0", "minimatch": "^3.1.2", "scramjet": "^4.36.9", @@ -49,12 +48,8 @@ }, "assets": [ { - "src": "src/completion", - "dest": "completion" - }, - { - "src": "src/types/commander-completion.d.ts", - "dest": "types/commander-completion.d.ts" + "src": "scripts/completion", + "dest": "scripts/completion" } ], "ava": { diff --git a/packages/cli/scripts/completion/install.sh b/packages/cli/scripts/completion/install.sh new file mode 100755 index 000000000..36e9382ab --- /dev/null +++ b/packages/cli/scripts/completion/install.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +WHICH_SI=$(which si) +if [ $? -ne 0 ]; then + echo "[Error] Couldn't find scramjet bash command si" >&2 + exit 1 +fi + +SI_LINK_PATH=$(readlink -f $WHICH_SI) +SI_LINK_DIR=$(dirname $SI_LINK_PATH) +SI_COMPLETION_PATH=$( cd $SI_LINK_DIR ; cd ../scripts/completion ; pwd ) + +SI_COMPLETION_SCRIPT=$SI_COMPLETION_PATH/si +if ! test -f "$SI_COMPLETION_SCRIPT"; then + echo "[Error] Couldn't find scramjet completion script in ${SI_COMPLETION_SCRIPT}." >&2 + exit 2 +fi + +BASH_COMPLETION=/etc/bash_completion.d/si +sudo ln -sf $SI_COMPLETION_SCRIPT $BASH_COMPLETION +if [ $? -ne 0 ]; then + echo "[Error] Failed to link completion script from ${SI_COMPLETION_SCRIPT} to ${BASH_COMPLETION}" >&2 + exit 3 +fi + +source $BASH_COMPLETION diff --git a/packages/cli/scripts/completion/si b/packages/cli/scripts/completion/si new file mode 100755 index 000000000..3175c90f2 --- /dev/null +++ b/packages/cli/scripts/completion/si @@ -0,0 +1,59 @@ +#!/bin/bash + +if complete &>/dev/null; then + _si_completion() { + COMPREPLY=() + local si="$IFS" + + SI_COMPERLY=$( + COMP_CWORD="$COMP_CWORD" \ + COMP_WORDS=${COMP_WORDS[@]} \ + NODE_ENV=completion si completion \ + 2>/dev/null + ) + + IFS=$'|' + read -ra SI_COMP <<<$SI_COMPERLY + SI_COMPERLY_WORDS=${SI_COMP[0]} + SI_COMPERLY_OPTIONS=${SI_COMP[1]} + + if [[ $SI_COMPERLY_OPTIONS == "filenames" ]]; then + compopt -o default + elif [[ $SI_COMPERLY_OPTIONS == "dirnames" ]]; then + compopt -o dirnames + else + IFS=$' ' + COMPREPLY=($SI_COMPERLY_WORDS) + fi + + IFS="$si" + return 0 + } + complete -F _si_completion si +elif compctl &>/dev/null; then + _si_completion() { + local cword line point words si + read -Ac words + read -cn cword + let cword-=1 + read -l line + read -ln point + si="$IFS" + IFS=$'\n' + + SI_COMPERLY=$( + COMP_CWORD="$COMP_CWORD" \ + COMP_WORDS=${COMP_WORDS[@]} \ + NODE_ENV=completion si completion \ + 2>/dev/null + ) + IFS=$'|' + read -ra SI_COMP <<<$SI_COMPERLY + SI_COMPERLY_WORDS=${SI_COMP[0]} + + reply=($SI_COMPERLY_WORDS) + IFS="$si" + } + compctl -K _si_completion si +fi +###-end-si-completion-### diff --git a/packages/cli/scripts/completion/uninstall.sh b/packages/cli/scripts/completion/uninstall.sh new file mode 100755 index 000000000..744a5e78e --- /dev/null +++ b/packages/cli/scripts/completion/uninstall.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +sudo rm /etc/bash_completion.d/si +complete -W "" si diff --git a/packages/cli/src/bin/index.ts b/packages/cli/src/bin/index.ts index 113584c5d..711361fb5 100755 --- a/packages/cli/src/bin/index.ts +++ b/packages/cli/src/bin/index.ts @@ -1,8 +1,7 @@ #!/usr/bin/env ts-node /* eslint-disable no-console */ -import commander from "commander"; -import completionMixin, { ComplitingCommand } from "commander-completion"; +import { Command } from "commander"; import { errorHandler } from "../lib/errorHandler"; import { commands } from "../lib/commands/index"; @@ -10,8 +9,7 @@ import { initConfig } from "../lib/config"; import { initPaths } from "../lib/paths"; import * as dns from "dns"; -const CommandClass = completionMixin(commander).Command; -const program = new CommandClass() as ComplitingCommand; +const program = new Command(); /** * Start commander using defined config {@link Apple.seeds} diff --git a/packages/cli/src/completion/install.sh b/packages/cli/src/completion/install.sh deleted file mode 100755 index 0c354782a..000000000 --- a/packages/cli/src/completion/install.sh +++ /dev/null @@ -1,5 +0,0 @@ -# dev installation script -sudo mkdir -p /usr/local/etc/bash_completion.d/ -sudo ln -s $PWD/si /etc/bash_completion.d/si -sudo ln -s $PWD/../bin/index.ts /usr/local/bin/si -source /etc/bash_completion.d/si \ No newline at end of file diff --git a/packages/cli/src/completion/si b/packages/cli/src/completion/si deleted file mode 100755 index 4225d92ee..000000000 --- a/packages/cli/src/completion/si +++ /dev/null @@ -1,44 +0,0 @@ -# Forked from https://github.com/isaacs/npm/blob/v1.3.17/lib/utils/completion.sh -###-begin-si-completion-### -# -# si command completion script -# -# Installation: si completion >> ~/.bashrc (or ~/.zshrc) -# Or, maybe: si completion > /usr/local/etc/bash_completion.d/si -# - -COMP_WORDBREAKS=${COMP_WORDBREAKS/=/} -COMP_WORDBREAKS=${COMP_WORDBREAKS/@/} -export COMP_WORDBREAKS - -if complete &>/dev/null; then - _si_completion () { - local si="$IFS" - - IFS=$'\n' COMPREPLY=($(COMP_CWORD="$COMP_CWORD" \ - COMP_LINE="$COMP_LINE" \ - COMP_POINT="$COMP_POINT" \ - si completion -- "${COMP_WORDS[@]}" \ - 2>/dev/null)) || return $? - IFS="$si" - } - complete -F _si_completion si -elif compctl &>/dev/null; then - _si_completion () { - local cword line point words si - read -Ac words - read -cn cword - let cword-=1 - read -l line - read -ln point - si="$IFS" - IFS=$'\n' reply=($(COMP_CWORD="$cword" \ - COMP_LINE="$line" \ - COMP_POINT="$point" \ - si completion -- "${words[@]}" \ - 2>/dev/null)) || return $? - IFS="$si" - } - compctl -K _si_completion si -fi -###-end-si-completion-### diff --git a/packages/cli/src/completion/uninstall.sh b/packages/cli/src/completion/uninstall.sh deleted file mode 100755 index ab96c994e..000000000 --- a/packages/cli/src/completion/uninstall.sh +++ /dev/null @@ -1,3 +0,0 @@ -# dev uninstallation script -sudo rm /etc/bash_completion.d/si -sudo rm /usr/local/bin/si \ No newline at end of file diff --git a/packages/cli/src/errors/bashScriptError.ts b/packages/cli/src/errors/bashScriptError.ts new file mode 100644 index 000000000..4d325f5e9 --- /dev/null +++ b/packages/cli/src/errors/bashScriptError.ts @@ -0,0 +1,11 @@ +export class BashScriptError extends Error { + exitCode: number; + + constructor(message: string, exitCode?: number) { + const errorStart = "[Error] "; + + if (message.startsWith(errorStart)) message = message.substring(errorStart.length); + super(message); + this.exitCode = exitCode || -1; + } +} diff --git a/packages/cli/src/events/completerDetails.ts b/packages/cli/src/events/completerDetails.ts new file mode 100644 index 000000000..0a29f3853 --- /dev/null +++ b/packages/cli/src/events/completerDetails.ts @@ -0,0 +1,6 @@ +export type CompleterParams = string[] | "filenames" | "dirnames"; +export type ArgumentOrOptionName = string; +export type CommandCompleterDetails = Record; + +export const CompleterDetailsEvent = "CompleterDetails"; +export type CompleterDetailsCallback = ({}: CommandCompleterDetails) => void; diff --git a/packages/cli/src/handlers/completion/commanderCompleter.ts b/packages/cli/src/handlers/completion/commanderCompleter.ts new file mode 100644 index 000000000..3ef65a652 --- /dev/null +++ b/packages/cli/src/handlers/completion/commanderCompleter.ts @@ -0,0 +1,167 @@ +import { Argument, Command, Option } from "commander"; +import { CommandIterator } from "../../helpers/commandIterator"; +import { CompWordsIterator } from "./compWordsIterator"; +import EventEmitter from "events"; +import { CommandCompleterDetails, CompleterDetailsEvent, CompleterParams } from "../../events/completerDetails"; + +export class CommanderCompleter { + private rootCommand: Command; + + constructor(cmd: Command) { + this.rootCommand = new CommandIterator(cmd).root().command; + } + + private commandMatch(cmdName: string, cmd: Command) { + return cmd.name() === cmdName || cmd.alias() === cmdName; + } + + private optionMatch(option: Option, name: string) { + return option.long === name || option.short === name; + } + + private findCommandHorizontal = (cmdName: string, cmdIt: CommandIterator) => { + for (; cmdIt.valid(); cmdIt.next()) { + const cmd = cmdIt.command; + + if (this.commandMatch(cmdName, cmd)) return cmd; + } + return null; + }; + + private findLastKnownCommand = (commandIt: CommandIterator, compWordsIt: CompWordsIterator) => { + let lastFound: Command | null = null; + + for (; compWordsIt.valid(); compWordsIt.next()) { + const searchedCmdName = compWordsIt.word(); + + const cmd = this.findCommandHorizontal(searchedCmdName, commandIt); + + if (!cmd) return null; + lastFound = cmd; + + if (!commandIt.hasChildren()) { + compWordsIt.next(); + break; + } + commandIt.firstChild(); + } + return lastFound; + }; + + private getSubcommandsNames(command: Command, subcommandNameStart: string = "") { + const subcommands: string[] = []; + + command.commands.forEach((cmd) => { + const name = cmd.name(); + + if (name.startsWith(subcommandNameStart)) subcommands.push(name); + }); + return subcommands; + } + + private getOptionsNames(command: Command, optionNameStart: string = "") { + const optionFlags: string[] = []; + + // @ts-ignore: + command.options.forEach((option: Option) => { + const optFlag = option.long || option.short || ""; + + if (optFlag && optFlag.startsWith(optionNameStart)) optionFlags.push(optFlag); + }); + return optionFlags; + } + + private getCommandCompleterDetails(command: Command, argOrOptionName: string) { + const emiter = command as unknown as EventEmitter; + const completerDetails: CommandCompleterDetails = {}; + + emiter.emit(CompleterDetailsEvent, completerDetails); + + if (!(argOrOptionName in completerDetails)) return null; + + return completerDetails[argOrOptionName]; + } + + private getFilteredCommandCompleterDetails(command: Command, argOrOptionName: string, valueStart: string = "") { + const detail = this.getCommandCompleterDetails(command, argOrOptionName); + + if (Array.isArray(detail) && valueStart) { + return detail.filter((det) => det.startsWith(valueStart)); + } + return detail; + } + + private findArgument(args: Argument[], compWordsIt: CompWordsIterator) { + for (const arg of args) { + if (compWordsIt.wordsLeft() > 0) compWordsIt.next(); + else if (compWordsIt.wordsLeft() === 0) return arg; + else break; + } + return null; + } + + private hasOptionStart(name: string) { + return name.startsWith("-"); + } + + private findOption(command: Command, optionName: string) { + // @ts-ignore + const cmdOptions: Option[] = command.options; + const found = cmdOptions.find((opt) => this.optionMatch(opt, optionName)); + + return found || null; + } + + private filterMatchingChoices(choices: string[], matchingStart: string) { + return choices.filter((choice) => choice.startsWith(matchingStart)); + } + + // eslint-disable-next-line complexity + public complete(compWords: string[], compCword: number): CompleterParams { + const cmdIt = new CommandIterator(this.rootCommand); + const compWordsIt = new CompWordsIterator(compWords, compCword); + const cursorWord = compWords[compCword]; + + const cmd = this.findLastKnownCommand(cmdIt, compWordsIt); + + // not found = wrong command name in compWords + if (!cmd) return []; + + // have child commands = children are completer params (else left compWords are arguments or options of command) + if (cmd.commands.length) return this.getSubcommandsNames(cmd, cursorWord); + + // @ts-ignore + const cmdArgs: Argument[] = cmd._args; + // we assume that required arguments are always declared first on list. + const arg = this.findArgument(cmdArgs, compWordsIt); + + // compWord is required or optional argument = return argument value details if given + if (arg && (arg.required || !this.hasOptionStart(compWordsIt.word()))) { + // @ts-ignore + const choices: string[] | undefined = arg.argChoices; + + if (choices) return this.filterMatchingChoices(choices, compWordsIt.word()); + return this.getFilteredCommandCompleterDetails(cmd, arg.name(), compWordsIt.word()) || []; + } + + // compWord must be option or option value + const currentWord = compWordsIt.cursor().word(); + + //option value + if (this.hasOptionStart(currentWord)) return this.getOptionsNames(cmd, currentWord); + + //maybe word is value of previous option + const previousWord = compWordsIt.previous().word(); + + if (this.hasOptionStart(previousWord)) { + const option = this.findOption(cmd, previousWord); + + if (!option) return []; + + if (option.argChoices) return this.filterMatchingChoices(option.argChoices, currentWord); + return this.getFilteredCommandCompleterDetails(cmd, option.name(), currentWord) || []; + } + + return []; + } +} diff --git a/packages/cli/src/handlers/completion/compWordsIterator.ts b/packages/cli/src/handlers/completion/compWordsIterator.ts new file mode 100644 index 000000000..b75dfac54 --- /dev/null +++ b/packages/cli/src/handlers/completion/compWordsIterator.ts @@ -0,0 +1,34 @@ +export class CompWordsIterator { + private cword: number; + compWords: string[]; + currentWordIndex: number; + + constructor(compWords: string[], compCword: number) { + this.compWords = compWords; + + if (this.compWords.length === 0 || Number.isNaN(compCword)) this.cword = -1; + else this.cword = compCword; + this.currentWordIndex = 0; + } + word() { + return this.compWords[this.currentWordIndex]; + } + wordsLeft() { + return this.cword - this.currentWordIndex; + } + valid() { + return this.wordsLeft() > 0; + } + next() { + this.currentWordIndex += 1; + return this; + } + previous() { + this.currentWordIndex -= 1; + return this; + } + cursor() { + this.currentWordIndex = this.cword; + return this; + } +} diff --git a/packages/cli/src/handlers/completion/index.ts b/packages/cli/src/handlers/completion/index.ts new file mode 100644 index 000000000..ed3e0da3b --- /dev/null +++ b/packages/cli/src/handlers/completion/index.ts @@ -0,0 +1,40 @@ +import { Command } from "commander"; +import { dirname, resolve } from "path"; +import { displayMessage } from "../../lib/output"; +import { CompleterParams } from "../../events/completerDetails"; +import { CommanderCompleter } from "./commanderCompleter"; +import { runScript } from "../../helpers/runScript"; + +const requireFileNameDir = dirname(require.main!.filename); +// This should be relative to entry point from package.json/bin/si +const completionScriptsDir = resolve(requireFileNameDir, "../scripts/completion"); +const completionInstallScript = resolve(completionScriptsDir, "install.sh"); +const completionUninstallScript = resolve(completionScriptsDir, "uninstall.sh"); + +export class Completion { + private static formatForSiScript(completerParams: CompleterParams) { + if (Array.isArray(completerParams)) return `${completerParams.join(" ")}`; + return `|${completerParams}`; + } + + public static complete(command: Command) { + const compWords = (process.env.COMP_WORDS || "").split(" "); + const compCword = Number(process.env.COMP_CWORD); + const comperly = new CommanderCompleter(command).complete(compWords, compCword); + + const siComperly = this.formatForSiScript(comperly); + + process.stdout.write(siComperly); + } + + public static async install() { + await runScript(completionInstallScript); + + displayMessage("Scramjet CLI completion script installed. Please restart bash"); + } + public static async uninstall() { + await runScript(completionUninstallScript); + + displayMessage("Scramjet CLI completion script uninstalled. Please restart bash"); + } +} diff --git a/packages/cli/src/helpers/commandIterator.ts b/packages/cli/src/helpers/commandIterator.ts new file mode 100644 index 000000000..272a5ed30 --- /dev/null +++ b/packages/cli/src/helpers/commandIterator.ts @@ -0,0 +1,46 @@ +import { Command } from "commander"; + +export class CommandIterator { + command: Command; + private commandParent: Command | null; + private index: number; + + constructor(command: Command) { + this.command = command; + this.commandParent = command.parent; + if (this.commandParent) { + this.index = this.commandParent.commands.indexOf(this.command); + } else this.index = 0; + } + root() { + while (this.command.parent) { + this.command = this.command.parent!; + } + this.commandParent = null; + this.index = 0; + + return this; + } + childrenCount() { + return this.command.commands.length; + } + hasChildren() { + return this.childrenCount() > 0; + } + firstChild() { + this.commandParent = this.command; + this.command = this.command.commands[0]; + this.index = 0; + return this; + } + valid() { + if (this.command === undefined) return false; + if (this.commandParent === null) return this.index === 0; + return this.index < this.commandParent.commands.length; + } + next() { + this.command = this.commandParent!.commands[this.index + 1]; + this.index += 1; + return this; + } +} diff --git a/packages/cli/src/helpers/runScript.ts b/packages/cli/src/helpers/runScript.ts new file mode 100644 index 000000000..ccec2cc5b --- /dev/null +++ b/packages/cli/src/helpers/runScript.ts @@ -0,0 +1,18 @@ +import { existsSync } from "fs"; +import { BashScriptError } from "../errors/bashScriptError"; +import { ExecException, exec } from "child_process"; + +export const runScript = async (scriptPath: string) => { + const scriptExist = existsSync(scriptPath); + + if (!scriptExist) throw Error(`Unable to find script ${scriptPath}`); + + return new Promise((resolve, reject) => { + const execCallback = (error: ExecException | null, _stdout: string, stderr: string) => { + if (error) return reject(new BashScriptError(stderr, error.code)); + return resolve(); + }; + + return exec(scriptPath, { encoding: "utf8" }, execCallback); + }); +}; diff --git a/packages/cli/src/lib/commands/completion.ts b/packages/cli/src/lib/commands/completion.ts index d758c9b1d..159a1c44e 100644 --- a/packages/cli/src/lib/commands/completion.ts +++ b/packages/cli/src/lib/commands/completion.ts @@ -1,51 +1,12 @@ -import { readFileSync } from "fs"; -import { resolve } from "path"; -import { promisify } from "util"; import { CommandDefinition } from "../../types"; -import { displayMessage } from "../output"; -const exec = promisify(require("child_process").exec); +import { Completion } from "../../handlers/completion"; +import { isCompletionScript } from "../../utils/envs"; -const bashCompletionPath = resolve(__dirname, "../../completion/si"); - -/** - * Initializes `completion` command. - * - * @param {Command} program Commander object. - */ export const completion: CommandDefinition = (program) => { - /** - * Set custom value for config and write it to JSON file. - */ - const completionCmd = program - .command("completion") - .addHelpCommand(false) - .description("Completion operations") - .action(function() { - if (!process.env.COMP_LINE || !process.env.COMP_POINT) { - throw new Error("COMP_ variables are nonexistent. Did you mean si completion install?"); - } - program.complete({ - line: process.env.COMP_LINE, - cursor: process.env.COMP_POINT - }); - }); + const completionCmd = program.command("completion").addHelpCommand(false).description("Completion operations"); - /** - * Command: `si completion bash` - * Prints the bash completion script - */ - completionCmd.command("bash") - .description("Print out bash completion script") - .action(() => displayMessage(readFileSync(bashCompletionPath, { encoding: "utf8", flag: "r" }))); + if (isCompletionScript()) completionCmd.action(() => Completion.complete(program)); - /** - * Command: `si completion install` - * Installs bash completion script in .bashrc - */ - completionCmd.command("install") - .description("Installs bash completion script in .bashrc") - .action(async () => { - await exec("bash -c 'si completion bash >>$HOME/.bashrc'"); - displayMessage("Scramjet CLI completion installed in .bashrc. Please run source ~/.bashrc for immediate effect."); - }); + completionCmd.command("install").description("Installs bash completion script").action(Completion.install); + completionCmd.command("uninstall").description("Uninstalls bash completion script").action(Completion.uninstall); }; diff --git a/packages/cli/src/lib/commands/developerTools.ts b/packages/cli/src/lib/commands/developerTools.ts index f3427b34c..9a56c0fef 100644 --- a/packages/cli/src/lib/commands/developerTools.ts +++ b/packages/cli/src/lib/commands/developerTools.ts @@ -4,6 +4,7 @@ import { CommandDefinition, ExtendedHelpConfiguration } from "../../types"; import { profileManager } from "../config"; import { cmdToJson, cmdToList, cmdToMd, rootCommand } from "../helpers/developerTools"; import { displayObject, displayStream } from "../output"; +import { CommandCompleterDetails, CompleterDetailsEvent } from "../../events/completerDetails"; /** * Initializes `developerTools` command. @@ -34,6 +35,9 @@ export const developerTools: CommandDefinition = (program) => { .command("cmdToJson") .description("Lists all commands structure in JSON format") .option("-o, --output ", "Output to file instead of stdout") + .on(CompleterDetailsEvent, (complDetails: CommandCompleterDetails) => { + complDetails.output = "filenames"; + }) .action(async ({ output }) => { const rootCmd = rootCommand(program); const cmdJson = cmdToJson(rootCmd); @@ -48,11 +52,17 @@ export const developerTools: CommandDefinition = (program) => { .command("cmdToList") .description("Lists all commands in CLI as string list") .option("-o, --output ", "Output to file instead of stdout") + .on(CompleterDetailsEvent, (complDetails: CommandCompleterDetails) => { + complDetails.output = "filenames"; + }) .action(async ({ output }) => await cmdToFormat(cmdToList, output)); developerToolsCmd .command("cmdToMd") .option("-o, --output ", "Output to file instead of stdout") .description("Lists all commands in Markdown format") + .on(CompleterDetailsEvent, (complDetails: CommandCompleterDetails) => { + complDetails.output = "filenames"; + }) .action(async ({ output }) => await cmdToFormat(cmdToMd, output)); }; diff --git a/packages/cli/src/lib/commands/index.ts b/packages/cli/src/lib/commands/index.ts index bd4c3098c..74e1706cd 100644 --- a/packages/cli/src/lib/commands/index.ts +++ b/packages/cli/src/lib/commands/index.ts @@ -13,10 +13,11 @@ import { isDevelopment } from "../../utils/envs"; import { store } from "./store"; import { developerTools } from "./developerTools"; import { si } from "./si"; +import { isLinuxOS } from "../helpers/isLinux"; export const commands: CommandDefinition[] = [ si, - completion, + isLinuxOS() ? completion : () => {}, config, scope, space, @@ -27,5 +28,5 @@ export const commands: CommandDefinition[] = [ init, store, util, - isDevelopment() ? developerTools : () => { }, + isDevelopment() ? developerTools : () => {} ]; diff --git a/packages/cli/src/lib/commands/init.ts b/packages/cli/src/lib/commands/init.ts index 9bfa4254b..bc29f9fa9 100644 --- a/packages/cli/src/lib/commands/init.ts +++ b/packages/cli/src/lib/commands/init.ts @@ -1,6 +1,7 @@ import { Argument } from "commander"; import { spawnSync } from "child_process"; import { CommandDefinition, ExtendedHelpConfiguration } from "../../types"; +import { CommandCompleterDetails, CompleterDetailsEvent } from "../../events/completerDetails"; export const init: CommandDefinition = (program) => { const initCmd = program @@ -26,6 +27,9 @@ export const init: CommandDefinition = (program) => { ) .option("-p, --path ", "Path to create sequence") .description("Create all the necessary files and start working on your Sequence") + .on(CompleterDetailsEvent, (complDetails: CommandCompleterDetails) => { + complDetails.path = "dirnames"; + }) .action(async (language: string, type: string, { path }) => { const args = `init scramjetorg/sequence ${language}-${type}`; diff --git a/packages/cli/src/lib/commands/instance.ts b/packages/cli/src/lib/commands/instance.ts index 29064a74f..3f895821b 100644 --- a/packages/cli/src/lib/commands/instance.ts +++ b/packages/cli/src/lib/commands/instance.ts @@ -7,6 +7,7 @@ import { displayEntity, displayObject, displayStream } from "../output"; import { ClientError } from "@scramjet/client-utils"; import { Option } from "commander"; import { initPlatform } from "../platform"; +import { CommandCompleterDetails, CompleterDetailsEvent } from "../../events/completerDetails"; /** * Initializes `instance` command. * @@ -114,6 +115,9 @@ export const instance: CommandDefinition = (program) => { .option("-t, --content-type ", "Content-Type", "text/plain") .option("-e, --end", "Close the input stream of the Instance when this stream ends, \"x-end-stream\" header", false) .description("Send a file to input, if no file given the data will be read directly from the console input (stdin)") + .on(CompleterDetailsEvent, (complDetails: CommandCompleterDetails) => { + complDetails.file = "filenames"; + }) .action(async (id: string, filename: string, { contentType, end }) => { const instanceClient = getInstance(getInstanceId(id)); @@ -127,6 +131,9 @@ export const instance: CommandDefinition = (program) => { .argument("[file]", "File with data") .addOption(new Option("-t,--content-type ", "Content-Type").choices(["text/plain", "application/octet-stream", "application/x-ndjson"])) .option("-e, --end", "Close the input stream of the Instance when this stream ends, \"x-end-stream\" header", false) + .on(CompleterDetailsEvent, (complDetails: CommandCompleterDetails) => { + complDetails.file = "filenames"; + }) .description("See input and output") .action(async (id: string, filename: string, { contentType, end }) => { const instanceClient = getInstance(getInstanceId(id)); @@ -183,16 +190,15 @@ export const instance: CommandDefinition = (program) => { .command("on") .argument("", "The instance id or '-' for the last one started or selected") .argument("", "The event name") - // .argument("[options]") .option("-n, --next", "Wait for the next event occurrence") .option("-s, --stream", "Stream the events (the stream will start with last event)") .description("Get the last event occurrence (will wait for the first one if not yet retrieved)") .action(async (id: string, event: string, { next, stream }) => { if (stream) return displayStream(getInstance(getInstanceId(id)).getEventStream(event)); if (next) return displayEntity(getInstance(getInstanceId(id)).getNextEvent(event), - profileManager.getProfileConfig().format); + "json"); return displayEntity( - getInstance(getInstanceId(id)).getEvent(event), profileManager.getProfileConfig().format + getInstance(getInstanceId(id)).getEvent(event), "json" ); }); @@ -201,6 +207,9 @@ export const instance: CommandDefinition = (program) => { .argument("", "Instance id or '-' for the last one started or selected") .argument("[file]", "The input file (stdin if not given default)") .description("Send a file to stdin, if no file given the data will be read from stdin") + .on(CompleterDetailsEvent, (complDetails: CommandCompleterDetails) => { + complDetails.file = "filenames"; + }) .action(async (id: string, file: string) => { const instanceClient = getInstance(getInstanceId(id)); diff --git a/packages/cli/src/lib/commands/sequence.ts b/packages/cli/src/lib/commands/sequence.ts index fe238e1c6..10e7fd553 100644 --- a/packages/cli/src/lib/commands/sequence.ts +++ b/packages/cli/src/lib/commands/sequence.ts @@ -16,6 +16,7 @@ import { initPlatform } from "../platform"; import { AppConfig, DeepPartial } from "@scramjet/types"; import { FileBuilder, isStartSequenceEndpointPayloadDTO, merge } from "@scramjet/utility"; import { SequenceDeployArgs, SequenceStartCLIArgs } from "../../types/params"; +import { CommandCompleterDetails, CompleterDetailsEvent } from "../../events/completerDetails"; /** * Initializes `sequence` command. @@ -37,7 +38,7 @@ export const sequence: CommandDefinition = (program) => { .alias("ls") .description("List all Sequences available on Hub") .option("-n, --name ", "list id's of sequences with a given name") - .action(async ({ name } :{name:string}) => { + .action(async ({ name }: { name: string }) => { if (name) return await displayEntity(await getHostClient().getSequenceId(name), profileManager.getProfileConfig().format); return await displayEntity(getHostClient().listSequences(), profileManager.getProfileConfig().format); @@ -75,6 +76,10 @@ export const sequence: CommandDefinition = (program) => { .option("-c, --stdout", "Output to stdout (ignores -o)") .option("-o, --output ", "Output path - defaults to dirname") .description("Create archived file (package) with the Sequence for later use") + .on(CompleterDetailsEvent, (complDetails: CommandCompleterDetails) => { + complDetails.path = "filenames"; + complDetails.output = "dirnames"; + }) .action((path, { stdout, output: fileoutput }) => { const outputPath: string = fileoutput ? resolve(fileoutput) : `${resolve(path)}.tar.gz`; const output: Writable = stdout ? process.stdout : createWriteStream(outputPath); @@ -88,11 +93,13 @@ export const sequence: CommandDefinition = (program) => { sequenceCmd .command("send") .argument("", "The file or directory to upload or '-' to use the last packed. If directory, it will be packed and sent.") - .option("--name ", "Allows to name sequence") .description("Send the Sequence package to the Hub") + .on(CompleterDetailsEvent, (complDetails: CommandCompleterDetails) => { + complDetails.package = "filenames"; + }) .action( - async (sequencePackage: string, { name }) => { - const sequenceClient = await sequenceSendPackage(sequencePackage, { name }, false, { progress: sequenceCmd.parent?.getOptionValue("progress") }); + async (sequencePackage: string) => { + const sequenceClient = await sequenceSendPackage(sequencePackage, {}, false, { progress: sequenceCmd.parent?.getOptionValue("progress") }); displayObject(sequenceClient, profileManager.getProfileConfig().format); } @@ -100,12 +107,15 @@ export const sequence: CommandDefinition = (program) => { sequenceCmd .command("update") - .argument("", "Sequence id or name to be overwritten") + .argument("", "Sequence id to be overwritten") .argument("", "The file to upload") .description("Update Sequence with given name") + .on(CompleterDetailsEvent, (complDetails: CommandCompleterDetails) => { + complDetails.package = "filenames"; + }) .action( async (query: string, sequencePackage: string) => { - const sequenceClient = await sequenceSendPackage(sequencePackage, { name: query }, true); + const sequenceClient = await sequenceSendPackage(sequencePackage, { id: query }, true); displayObject(sequenceClient, profileManager.getProfileConfig().format); } @@ -145,6 +155,9 @@ export const sequence: CommandDefinition = (program) => { .option("--startup-config ", "Path to startup config (JSON or YAML)", loadStartupConfig) .option("--limits ", "Instance limits") .description("Start the Sequence with or without given arguments") + .on(CompleterDetailsEvent, (complDetails: CommandCompleterDetails) => { + complDetails.configFile = "filenames"; + }) .action(async (id, { startupConfig, configFile, configString, outputTopic, inputTopic, args: argsStr, limits: limitsStr, instId: instanceId }: SequenceStartCLIArgs) => { const args = argsStr ? sequenceParseArgs(argsStr) : undefined; const appConfig = await sequenceParseConfig(configFile, configString); @@ -190,6 +203,11 @@ export const sequence: CommandDefinition = (program) => { .option("--startup-config ", "Path to startup config (JSON or YAML)", loadStartupConfig) .option("--limits ", "Instance limits") .description("Pack (if needed), send and start the Sequence") + .on(CompleterDetailsEvent, (complDetails: CommandCompleterDetails) => { + complDetails.path = "dirnames"; + complDetails.output = "dirnames"; + complDetails.configFile = "filenames"; + }) .action(async (path: string, { startupConfig, output, configFile, configString, outputTopic, inputTopic, args: argsStr, limits: limitsStr, instId }: SequenceStartCLIArgs) => { const args = argsStr ? sequenceParseArgs(argsStr) : undefined; const appConfig = await sequenceParseConfig(configFile, configString); @@ -265,8 +283,6 @@ export const sequence: CommandDefinition = (program) => { sequenceCmd .command("prune") - // .option("--all") - // .option("--filter") .option("-f,--force", "Removes also active Sequences (with its running Instances)") .description("Remove all Sequences from the Hub (use with caution)") .action(async ({ force }) => { diff --git a/packages/cli/src/lib/commands/space.ts b/packages/cli/src/lib/commands/space.ts index de2583623..9c3649b12 100644 --- a/packages/cli/src/lib/commands/space.ts +++ b/packages/cli/src/lib/commands/space.ts @@ -143,21 +143,24 @@ export const space: CommandDefinition = (program) => { if (all && id || !all && !id) { throw new Error("Please provide one of the options, please use command with --help to get more information"); } + if (!spaceName) { throw new Error("No Space set"); } + if (id) { const revokedAccessKey = await mwClient.revokeAccessKey(spaceName, id); return displayObject(revokedAccessKey, profileManager.getProfileConfig().format); } + const apiKeys = await mwClient.listAccessKeys(spaceName); if (!apiKeys.accessKeys || apiKeys.accessKeys.length === 0) { throw new Error("There are no keys to revoke"); } - const revokedAccessKeys = await mwClient.revokeAllAccessKeys(spaceName, apiKeys); + const revokedAccessKeys = await mwClient.revokeAllAccessKeys(spaceName); return displayObject(revokedAccessKeys, profileManager.getProfileConfig().format); }); diff --git a/packages/cli/src/lib/commands/store.ts b/packages/cli/src/lib/commands/store.ts index c86eea5b3..ea34fa027 100644 --- a/packages/cli/src/lib/commands/store.ts +++ b/packages/cli/src/lib/commands/store.ts @@ -1,3 +1,4 @@ +import { CommandCompleterDetails, CompleterDetailsEvent } from "../../events/completerDetails"; import { CommandDefinition, ExtendedHelpConfiguration, isProductionEnv } from "../../types"; import { getReadStreamFromFile } from "../common"; import { profileManager, sessionConfig } from "../config"; @@ -14,7 +15,7 @@ export const store: CommandDefinition = (program) => { const isProdEnv = isProductionEnv(profileManager.getProfileConfig().env); if (!isProdEnv) { - program.command("store", { hidden:true }) + program.command("store", { hidden: true }) .action(() => displayProdOnlyMsg("store")); return; @@ -44,6 +45,9 @@ export const store: CommandDefinition = (program) => { .argument("", "The file or directory to upload. If directory, it will be packed and sent.") .option("--name ", "Allows to name sequence") .description("Send the Sequence package to the Store") + .on(CompleterDetailsEvent, (complDetails: CommandCompleterDetails) => { + complDetails.package = "filenames"; + }) .action(async (sequencePackage: string, { name }) => { const spaceId = sessionConfig.lastSpaceId; const managerClient = getMiddlewareClient().getManagerClient(spaceId); diff --git a/packages/cli/src/lib/commands/topic.ts b/packages/cli/src/lib/commands/topic.ts index 926615b14..f23e51ec1 100644 --- a/packages/cli/src/lib/commands/topic.ts +++ b/packages/cli/src/lib/commands/topic.ts @@ -5,6 +5,7 @@ import { profileManager } from "../config"; import { displayEntity, displayStream } from "../output"; import { Option, Argument } from "commander"; import { initPlatform } from "../platform"; +import { CommandCompleterDetails, CompleterDetailsEvent } from "../../events/completerDetails"; const validateTopicName = (topicName: string) => { if (topicName.match(/^[\\a-zA-Z0-9_+-]+$/)) { @@ -65,6 +66,9 @@ export const topic: CommandDefinition = (program) => { .argument("[file]") .addOption(contentTypeOption) .description("Send data on topic from file, directory or directly through the console") + .on(CompleterDetailsEvent, (complDetails: CommandCompleterDetails) => { + complDetails.file = "filenames"; + }) .action(async (topicName, filename, { contentType }) => { await getHostClient().sendNamedData( topicName, diff --git a/packages/cli/src/lib/helpers/isLinux.ts b/packages/cli/src/lib/helpers/isLinux.ts new file mode 100644 index 000000000..3c9f5f5b1 --- /dev/null +++ b/packages/cli/src/lib/helpers/isLinux.ts @@ -0,0 +1,3 @@ +export const isLinuxOS = () => { + return process.platform === "linux"; +}; diff --git a/packages/cli/src/lib/helpers/sequence.ts b/packages/cli/src/lib/helpers/sequence.ts index 6ce122b0f..6daa025a3 100644 --- a/packages/cli/src/lib/helpers/sequence.ts +++ b/packages/cli/src/lib/helpers/sequence.ts @@ -19,7 +19,7 @@ import { EOL } from "os"; const { F_OK, R_OK } = constants; type SequenceUploadOptions = { - name?: string; + id?: string; } /** @@ -84,8 +84,6 @@ export const sequenceSendPackage = async ( sequencePackage: string, options: SequenceUploadOptions = {}, update = false, config: { progress?: boolean } = {} ): Promise => { try { - const id = getSequenceId(options.name!); - let sequencePath = getPackagePath(sequencePackage); if ((await lstat(sequencePath)).isDirectory()) { @@ -124,19 +122,14 @@ export const sequenceSendPackage = async ( } if (update) { + const id = getSequenceId(options.id!); + seq = await getHostClient().getSequenceClient(id)?.overwrite( sequenceStream, ); } else { - const headers: HeadersInit = {}; - - if (options.name) { - headers["x-name"] = options.name; - } - seq = await getHostClient().sendSequence( sequenceStream, - { headers } ); } diff --git a/packages/cli/src/types/commander-completion.d.ts b/packages/cli/src/types/commander-completion.d.ts deleted file mode 100644 index f5ddccbd9..000000000 --- a/packages/cli/src/types/commander-completion.d.ts +++ /dev/null @@ -1,41 +0,0 @@ -declare module "commander-completion" { - import commander from "commander"; - - export type LineInfo = { - line: { - value: string, - index: number, - partialLeft: string, - partialRight: string, - }, - words: { - value: string, - index: number, - partialLeft: string, - partialRight: string - }, - word: { - value: string, - index: number, - partialLeft: string, - partialRight: string - } - }; - - export type CompletionCallback = (err: string, results: string[]) => void; - export type CompleteFunction = ( - params: { line: string, cursor: number | string }, - cb?: CompletionCallback - ) => ComplitingCommand; // eslint-disable-line no-use-before-define - export type CompletionFunction = (info: LineInfo, cb?: CompletionCallback) => ComplitingCommand; // eslint-disable-line no-use-before-define - - export class ComplitingCommand extends commander.Command { - complete: CompleteFunction; - completion: CompletionFunction; - } - - type CommanderDefaultExport = typeof commander; - - export default function (c: CommanderDefaultExport) : CommanderDefaultExport & { Command: ComplitingCommand }; -} - diff --git a/packages/cli/src/types/index.ts b/packages/cli/src/types/index.ts index fb9885a13..49b485199 100644 --- a/packages/cli/src/types/index.ts +++ b/packages/cli/src/types/index.ts @@ -1,12 +1,11 @@ -import { HelpConfiguration } from "commander"; -import { ComplitingCommand } from "commander-completion"; +import { Command, HelpConfiguration } from "commander"; /** * CommandDefinition is an object from commander.js * program.opts() - show options * program.args - show arguments passed by user */ -export type CommandDefinition = (program: ComplitingCommand) => void; +export type CommandDefinition = (program: Command) => void; /** * ExtendedHelpConfiguration is used to pass context options throughout commands diff --git a/packages/cli/src/utils/envs.ts b/packages/cli/src/utils/envs.ts index ae9748f30..b1994eafd 100644 --- a/packages/cli/src/utils/envs.ts +++ b/packages/cli/src/utils/envs.ts @@ -5,5 +5,6 @@ export const envs = { }; export const isDevelopment = () => envs.nodeEnv === "development"; +export const isCompletionScript = () => envs.nodeEnv === "completion"; export const isTSNode = !!(process as any)[Symbol.for("ts-node.register.instance")]; diff --git a/packages/cli/tsconfig.json b/packages/cli/tsconfig.json index 4bb84345c..629e4d360 100644 --- a/packages/cli/tsconfig.json +++ b/packages/cli/tsconfig.json @@ -2,9 +2,6 @@ "ts-node": { "files": true }, - "files": [ - "./src/types/commander-completion.d.ts" - ], "compilerOptions": { "outDir": "./dist" }, diff --git a/packages/client-utils/src/client-utils.ts b/packages/client-utils/src/client-utils.ts index 7b3d9fb44..aaca13bd3 100644 --- a/packages/client-utils/src/client-utils.ts +++ b/packages/client-utils/src/client-utils.ts @@ -218,7 +218,7 @@ export abstract class ClientUtilsBase implements HttpClient { url: string, stream: any | string, requestInit: RequestInit = {}, - { type = "application/octet-stream", end, parseResponse = "stream", put = false }: SendStreamOptions = {} + { type = "application/octet-stream", end, parseResponse = "stream" }: SendStreamOptions = {} ): Promise { requestInit.headers ||= {} as Headers; @@ -230,8 +230,11 @@ export abstract class ClientUtilsBase implements HttpClient { if (typeof end !== "undefined") { (requestInit.headers as Headers)["x-end-stream"] = end ? "true" : "false"; } + let method: "post" | "put" = "post"; - return this[put ? "put" : "post"](url, stream, requestInit, { parse: parseResponse }); + if (requestInit.method === "put") method = "put"; + + return this[method](url, stream, requestInit, { parse: parseResponse }); } /** diff --git a/packages/client-utils/src/types/index.ts b/packages/client-utils/src/types/index.ts index 0443025b2..9312ec121 100644 --- a/packages/client-utils/src/types/index.ts +++ b/packages/client-utils/src/types/index.ts @@ -8,7 +8,6 @@ export type SendStreamOptions = Partial<{ type: string; end: boolean; parseResponse?: "json" | "text" | "stream"; - put: boolean }>; /** diff --git a/packages/host/.eslintrc.js b/packages/host/.eslintrc.js index 0c111683c..599fa6f54 100644 --- a/packages/host/.eslintrc.js +++ b/packages/host/.eslintrc.js @@ -1,5 +1,5 @@ module.exports = { - ignorePatterns: [".eslintrc.js"], + ignorePatterns: [".eslintrc.js", "jest.config.js"], parserOptions:{ project: "./tsconfig.json", tsconfigRootDir: __dirname diff --git a/packages/host/src/lib/cpm-connector.ts b/packages/host/src/lib/cpm-connector.ts index 18364916b..acae261fc 100644 --- a/packages/host/src/lib/cpm-connector.ts +++ b/packages/host/src/lib/cpm-connector.ts @@ -13,7 +13,9 @@ import { LoadCheckStatMessage, NetworkInfo, STHIDMessageData, - IObjectLogger + IObjectLogger, + STHTopicEventData, + AddSTHTopicEventData } from "@scramjet/types"; import { StringStream } from "scramjet"; @@ -255,8 +257,6 @@ export class CPMConnector extends TypedEmitter { this.logger.info(`${EOL}${EOL}\t\x1b[33m${this.config.id} connected to ${this.cpmId}\x1b[0m${EOL} `); - await this.setLoadCheckMessageSender(); - StringStream.from(duplex.input as Readable) .JSONParse() .map(async (message: EncodedControlMessage) => { @@ -299,6 +299,8 @@ export class CPMConnector extends TypedEmitter { this.communicationStream = new StringStream().JSONStringify().resume(); this.communicationStream.pipe(duplex.output); + await this.setLoadCheckMessageSender(); + this.communicationStream.on("pause", () => { this.logger.warn("Communication stream paused"); }); @@ -481,8 +483,6 @@ export class CPMConnector extends TypedEmitter { await this.communicationStream?.whenWrote( [CPMMessageCode.LOAD, await this.getLoad()] ); - - this.logger.debug("LoadCheck sent"); } catch (e) { this.logger.error("Error sending loadcheck"); } @@ -585,16 +585,18 @@ export class CPMConnector extends TypedEmitter { * * @param data Topic information. */ - async sendTopicInfo(data: { provides?: string, requires?: string, contentType?: string, topicName: string }) { + async sendTopicInfo(data: STHTopicEventData) { await this.communicationStream?.whenWrote( - [CPMMessageCode.TOPIC, { ...data, status: "add" }] + [CPMMessageCode.TOPIC, { ...data }] ); } - async sendTopicsInfo(topics: { provides?: string, requires?: string, contentType?: string, topicName: string }[]) { + async sendTopicsInfo(topics: Omit[]) { this.logger.debug("Sending topics information", topics); - topics.forEach(async topic => { - await this.sendTopicInfo(topic); + + topics.forEach(async (topic) => { + (topic as AddSTHTopicEventData).status = "add"; + await this.sendTopicInfo(topic as AddSTHTopicEventData); }); this.logger.trace("Topics information sent"); @@ -605,6 +607,7 @@ export class CPMConnector extends TypedEmitter { reqPath: string, headers: Record = {} ): http.ClientRequest { + //@TODO: Disconnecting/error handling this.logger.info("make HTTP Req to CPM", `${this.cpmUrl}/api/v1/cpm/${this.cpmId}/api/v1/${reqPath}`); return http.request( diff --git a/packages/host/src/lib/csi-controller.ts b/packages/host/src/lib/csi-controller.ts index eaab41dd6..88aebb695 100644 --- a/packages/host/src/lib/csi-controller.ts +++ b/packages/host/src/lib/csi-controller.ts @@ -23,6 +23,7 @@ import { OpResponse, StopSequenceMessageData, HostProxy, + EventMessageData, } from "@scramjet/types"; import { AppError, @@ -328,7 +329,7 @@ export class CSIController extends TypedEmitter { this.instancePromise.finally(() => { this.heartBeatResolver?.res(this.id); - }); + }).catch(() => 0); } heartBeatTick(): void { @@ -661,18 +662,29 @@ export class CSIController extends TypedEmitter { if (!event.eventName) return; - localEmitter.lastEvents[event.eventName] = event; + localEmitter.lastEvents[event.eventName] = event.message; localEmitter.emit(event.eventName, event); }); + this.router.upstream("/events/:name", async (req: ParsedMessage, res: ServerResponse) => { const name = req.params?.name; if (!name) { throw new HostError("EVENT_NAME_MISSING"); } - const out = new DataStream(); - const handler = (data: any) => out.write(data); + const handler = (data: EventMessageData) => { + if (typeof data !== "object") { + out.write(data); + + return; + } + + const { message } = data; + + out.write(message ? message : {}); + }; + const clean = () => { this.logger.debug(`Event stream "${name}" disconnected`); @@ -689,14 +701,14 @@ export class CSIController extends TypedEmitter { return out.JSONStringify(); }); - const awaitEvent = async (req: ParsedMessage): Promise => new Promise(res => { + const awaitEvent = async (req: ParsedMessage): Promise => new Promise((res) => { const name = req.params?.name; if (!name) { throw new HostError("EVENT_NAME_MISSING"); } - localEmitter.once(name, res); + localEmitter.once(name, (data) => res(data.message)); }); this.router.get("/event/:name", async (req) => { diff --git a/packages/host/src/lib/host.ts b/packages/host/src/lib/host.ts index 7ea70afce..cbb9d52ae 100644 --- a/packages/host/src/lib/host.ts +++ b/packages/host/src/lib/host.ts @@ -230,7 +230,7 @@ export class Host implements IComponent { this.startMonitoringServer(sthConfig.monitorgingServer).then((res) => { this.logger.info("MonitoringServer started", res); }, (e) => { - throw new Error(e); + throw e; }); } @@ -267,10 +267,13 @@ export class Host implements IComponent { } private async startMonitoringServer(config: MonitoringServerConfig): Promise { - const { MonitoringServer } = await loadModule<{ MonitoringServer: IMonitoringServerConstructor }>({ name: "@scramjet/monitoring-server" }); + const { MonitoringServer } = await loadModule<{ MonitoringServer: IMonitoringServerConstructor}>({ name: "@scramjet/monitoring-server" }); this.logger.info("Starting monitoring server with config", config); + config.host ||= "localhost"; + config.path ||= "healtz"; + const monitoringServer = new MonitoringServer({ ...config, check: async () => !!await this.loadCheck.getLoadCheck() @@ -507,7 +510,7 @@ export class Host implements IComponent { this.api.upstream(`${this.apiBase}/audit`, async (req, res) => this.handleAuditRequest(req, res)); this.api.downstream(`${this.apiBase}/sequence`, async (req) => this.handleNewSequence(req), { end: true }); - this.api.downstream(`${this.apiBase}/sequence/:id_name`, async (req) => this.handleSequenceUpdate(req), { + this.api.downstream(`${this.apiBase}/sequence/:id`, async (req) => this.handleUpdateSequence(req), { end: true, method: "put", }); @@ -516,7 +519,7 @@ export class Host implements IComponent { this.api.op("post", `${this.apiBase}/sequence/:id/start`, async (req: ParsedMessage) => this.handleStartSequence(req)); - this.api.get(`${this.apiBase}/sequence/:id`, (req) => this.getSequence(req.params?.id)); + this.api.get(`${this.apiBase}/sequence/:id`, (req) => this.getSequence(req)); this.api.get(`${this.apiBase}/sequence/:id/instances`, (req) => this.getSequenceInstances(req.params?.id)); this.api.get(`${this.apiBase}/sequences`, () => this.getSequences()); this.api.get(`${this.apiBase}/instances`, () => this.getInstances()); @@ -628,22 +631,26 @@ export class Host implements IComponent { * @returns {Promise} Promise resolving to operation result object. */ async handleDeleteSequence(req: ParsedMessage): Promise> { - const id = req.params?.id; + if (!req.params?.id || typeof req.params.id !== "string") { + return { opStatus: ReasonPhrases.BAD_REQUEST, error: "Missing id parameter" }; + } + + const id = req.params.id; + const sequence: SequenceInfo| undefined = this.sequenceStore.getById(id); + const force = req.headers[HostHeaders.SEQUENCE_FORCE_REMOVE]; this.logger.trace("Deleting Sequence...", id, { force }); - const sequenceInfo = this.sequenceStore.getByNameOrId(id); - - if (!sequenceInfo) { + if (!sequence) { return { opStatus: ReasonPhrases.NOT_FOUND, error: `The sequence ${id} does not exist.` }; } - if (sequenceInfo.instances.length > 0) { - const instances = [...sequenceInfo.instances].every((instanceId) => { + if (sequence.instances.length > 0) { + const instances = [...sequence.instances].every((instanceId) => { // ? // this.instancesStore[instanceId]?.finalizingPromise?.cancel(); return this.instancesStore[instanceId]?.isRunning; @@ -660,7 +667,7 @@ export class Host implements IComponent { if (instances) { this.logger.info(`Killing Instances from Sequence ${id}...`); - await Promise.all([...sequenceInfo.instances].map(async (instanceId) => { + await Promise.all([...sequence.instances].map(async (instanceId) => { await this.instancesStore[instanceId]?.kill({ removeImmediately: true }); return new Promise((res) => this.instancesStore[instanceId]?.once("end", res)); @@ -671,12 +678,12 @@ export class Host implements IComponent { try { const sequenceAdapter = getSequenceAdapter(this.adapterName, this.config); - await sequenceAdapter.remove(sequenceInfo.config); + await sequenceAdapter.remove(sequence.config); this.sequenceStore.delete(id); this.logger.trace("Sequence removed:", id); // eslint-disable-next-line max-len - await this.cpmConnector?.sendSequenceInfo(id, SequenceMessageCode.SEQUENCE_DELETED, sequenceInfo as unknown as GetSequenceResponse); + await this.cpmConnector?.sendSequenceInfo(id, SequenceMessageCode.SEQUENCE_DELETED, sequence as unknown as GetSequenceResponse); this.auditor.auditSequence(id, SequenceMessageCode.SEQUENCE_DELETED); return { @@ -759,14 +766,12 @@ export class Host implements IComponent { } async handleIncomingSequence( - stream: ParsedMessage, + req: ParsedMessage, id: string ): Promise> { - stream.params ||= {}; + req.params ||= {}; - const sequenceName = stream.params.id_name || stream.headers["x-name"]; - - this.logger.info("New Sequence incoming", { name: sequenceName }); + this.logger.info("New Sequence incoming", { id }); try { const sequenceAdapter = getSequenceAdapter(this.adapterName, this.config); @@ -778,32 +783,28 @@ export class Host implements IComponent { await sequenceAdapter.init(); - if (sequenceName) { - const existingSequence = this.sequenceStore.getByName(sequenceName as string); - - if (existingSequence) { - if (stream.method === "post") { - this.logger.debug("Overriding named sequence", sequenceName, existingSequence.id); - - return { - opStatus: ReasonPhrases.METHOD_NOT_ALLOWED, - error: `Sequence with name ${sequenceName} already exist` - }; - } + const existingSequence = this.sequenceStore.getById(id as string); - id = existingSequence.id; + if (existingSequence) { + if (req.method?.toLowerCase() !== "put") { + return { + opStatus: ReasonPhrases.METHOD_NOT_ALLOWED, + error: `Sequence with name ${id} already exist` + }; } + this.logger.debug("Overriding sequence", id, existingSequence.id); + id = existingSequence.id; } - const config = await sequenceAdapter.identify(stream, id); + const config = await sequenceAdapter.identify(req, id); - config.packageSize = stream.socket?.bytesRead; + config.packageSize = req.socket?.bytesRead; if (this.config.host.id) { // eslint-disable-next-line max-len - this.sequenceStore.set({ id, config, instances: [], name: sequenceName, location: this.config.host.id }); + this.sequenceStore.set({ id, config, instances: [], location: this.config.host.id }); } else { - this.sequenceStore.set({ id, config, instances: [], name: sequenceName, location: "STH" }); + this.sequenceStore.set({ id, config, instances: [], location: "STH" }); } this.logger.trace(`Sequence identified: ${config.id}`); @@ -828,23 +829,27 @@ export class Host implements IComponent { } } - async handleSequenceUpdate(stream: ParsedMessage): Promise> { - stream.params ||= {}; + async handleUpdateSequence(req: ParsedMessage): Promise> { + req.params ||= {}; + + if (!req.params.id || typeof req.params.id !== "string") { + return { opStatus: ReasonPhrases.BAD_REQUEST, error: "missing id parameter" }; + } - const seqQuery = stream.params.id_name as string; - const existingSequence = this.sequenceStore.getByNameOrId(seqQuery); + const id = req.params.id; + const existingSequence: SequenceInfo | undefined = this.sequenceStore.getById(id); if (!existingSequence) { - return { opStatus: ReasonPhrases.NOT_FOUND, error: `Sequence with name ${seqQuery} not found` }; + return { opStatus: ReasonPhrases.NOT_FOUND, error: `Sequence with id: ${id} not found` }; } if (existingSequence.instances.length) { return { opStatus: ReasonPhrases.CONFLICT, error: "Can't update sequence with instances" }; } - this.logger.debug("Overriding sequence", existingSequence.name, existingSequence.id); + this.logger.debug("Sequence Update", existingSequence.id); - return this.handleIncomingSequence(stream, existingSequence.id); + return this.handleIncomingSequence(req, id); } /** @@ -858,19 +863,15 @@ export class Host implements IComponent { */ async handleNewSequence(stream: ParsedMessage, id = IDProvider.generate()): Promise> { - const sequenceName = stream.headers["x-name"] as string; + const existingSequence = this.sequenceStore.getById(id); - if (sequenceName) { - const existingSequence = this.sequenceStore.getByNameOrId(sequenceName); + if (existingSequence) { + this.logger.debug("Method not allowed", id, existingSequence.id); - if (existingSequence) { - this.logger.debug("Method not allowed", sequenceName, existingSequence.id); - - return { - opStatus: ReasonPhrases.METHOD_NOT_ALLOWED, - error: `Sequence with name ${sequenceName} already exist` - }; - } + return { + opStatus: ReasonPhrases.METHOD_NOT_ALLOWED, + error: `Sequence with id ${id} already exist` + }; } return this.handleIncomingSequence(stream, id); @@ -1054,7 +1055,10 @@ export class Host implements IComponent { csic.inputRouted = true; await this.serviceDiscovery.update({ - requires: data.requires, contentType: data.contentType!, topicName: data.requires + requires: data.requires, + contentType: data.contentType!, + topicName: data.requires, + status: "add" }); } @@ -1069,7 +1073,10 @@ export class Host implements IComponent { csic.outputRouted = true; await this.serviceDiscovery.update({ - provides: data.provides, contentType: data.contentType!, topicName: data.provides + provides: data.provides, + contentType: data.contentType!, + topicName: data.provides, + status: "add" }); } }); @@ -1138,10 +1145,13 @@ export class Host implements IComponent { /** * Returns Sequence information. * - * @param {string} id Instance ID. + * @param {ParsedMessage} req Request object that should contain id parameter inside. * @returns {STHRestAPI.GetSequenceResponse} Sequence info object. */ - getSequence(id: string): OpResponse { + getSequence(req: ParsedMessage): OpResponse { + if (!req.params?.id) return { opStatus: ReasonPhrases.BAD_REQUEST, error: "Missing id parameter" }; + + const id = req.params.id; const sequence = this.sequenceStore.getById(id); if (!sequence) { diff --git a/packages/host/src/lib/serviceDiscovery/sd-adapter.ts b/packages/host/src/lib/serviceDiscovery/sd-adapter.ts index 48fc7bf8b..51d32568c 100644 --- a/packages/host/src/lib/serviceDiscovery/sd-adapter.ts +++ b/packages/host/src/lib/serviceDiscovery/sd-adapter.ts @@ -7,7 +7,7 @@ import TopicsMap from "./topicsController"; import { Topic } from "./topic"; import { ContentType } from "./contentType"; import { StreamOrigin } from "./streamHandler"; -import { IObjectLogger } from "@scramjet/types"; +import { IObjectLogger, STHTopicEventData } from "@scramjet/types"; export type DataType = { topic: TopicId, @@ -53,7 +53,20 @@ export class ServiceDiscovery { return this.topicsController.get(id); } - deleteTopic(id: TopicId) { return this.topicsController.delete(id); } + deleteTopic(id: TopicId) { + const deleted = this.topicsController.delete(id); + + if (deleted) { + this.cpmConnector?.sendTopicInfo({ + topicName: id.toString(), + status: "remove" + }).catch(() => { + this.logger.error("Error sending topic remove message"); + }); + } + + return deleted; + } /** * Sets the CPM connector. @@ -147,7 +160,8 @@ export class ServiceDiscovery { await this.cpmConnector?.sendTopicInfo({ requires: topicData.topic.toString(), topicName: topicData.topic.toString(), - contentType: topicData.contentType + contentType: topicData.contentType, + status: "add" }); } @@ -158,11 +172,12 @@ export class ServiceDiscovery { await this.cpmConnector?.sendTopicInfo({ provides: topicData.topic.toString(), topicName: topicData.topic.toString(), - contentType: topicData.contentType + contentType: topicData.contentType, + status: "add" }); } - async update(data: { provides?: string, requires?: string, topicName: string, contentType: string }) { + async update(data: STHTopicEventData) { this.logger.trace("Topic update. Send topic info to CPM", data); if (this.cpmConnector?.connected) { diff --git a/packages/host/src/lib/serviceDiscovery/topicRouter.ts b/packages/host/src/lib/serviceDiscovery/topicRouter.ts index 12f649d79..4ece0c4bf 100644 --- a/packages/host/src/lib/serviceDiscovery/topicRouter.ts +++ b/packages/host/src/lib/serviceDiscovery/topicRouter.ts @@ -55,6 +55,7 @@ class TopicRouter { async topicsPost(req: TopicsPostReq): Promise> { if (!req.body?.id) return { opStatus: ReasonPhrases.BAD_REQUEST, error: missingBodyId }; if (!req.body?.["content-type"]) return { opStatus: ReasonPhrases.BAD_REQUEST, error: "Missing body param: content-type" }; + const { "content-type": contentType, id } = req.body; if (!isContentType(contentType)) return { opStatus: ReasonPhrases.BAD_REQUEST, error: invalidContentTypeMsg }; @@ -114,11 +115,15 @@ class TopicRouter { error: `Acceptable Content-Type for ${id} is ${topic.contentType}` }; } + topic.acceptPipe(req); if (!cpm) { await this.serviceDiscovery.update({ - provides: topic.id(), contentType: contentType, topicName: topic.id() + provides: topic.id(), + contentType: contentType, + topicName: topic.id(), + status: "add" }); } else { this.logger.debug(`Incoming Downstream CPM request for topic: '${topic.id()}, ${topic.contentType}'`); @@ -149,11 +154,15 @@ class TopicRouter { if (!cpm) { await this.serviceDiscovery.update({ - requires: id, contentType, topicName: topicId.toString() + requires: id, + contentType, + topicName: topicId.toString(), + status: "add" }); } else { - this.logger.debug(`Incoming Upstream CPM request for topic '${id}'`); + this.logger.debug(`Incoming CPM Upstream request for topic '${id}'`); } + return topic; } catch (e: any) { throw new CeroError("ERR_INVALID_CONTENT_TYPE", undefined, invalidContentTypeMsg); diff --git a/packages/host/test/serviceDiscovery/sd-discovery.spec.ts b/packages/host/test/serviceDiscovery/sd-discovery.spec.ts index aaaf08bc9..b4a4bc731 100644 --- a/packages/host/test/serviceDiscovery/sd-discovery.spec.ts +++ b/packages/host/test/serviceDiscovery/sd-discovery.spec.ts @@ -3,6 +3,7 @@ import { CPMConnector } from "../../src/lib/cpm-connector"; import { PassThrough } from "stream"; import TopicId from "../../src/lib/serviceDiscovery/topicId"; import { ObjLogger } from "@scramjet/obj-logger"; +import { AddSTHTopicEventData } from "@scramjet/types"; let serviceDiscovery: ServiceDiscovery; const testUUID = new TopicId("4fb4230f-5481-487d-a055-a99d20740e96"); @@ -11,15 +12,14 @@ const testConfig: DataType = { contentType: "text/plain" }; -type sendTopicInfoArg = { provides?: string; requires?: string; topicName: string, contentType: string; }; -let topicInfo: sendTopicInfoArg; +let topicInfo: AddSTHTopicEventData; beforeEach(() => { const mockLogger = new ObjLogger(this); serviceDiscovery = new ServiceDiscovery(mockLogger, "MockHost"); serviceDiscovery.cpmConnector = { - sendTopicInfo: (data: sendTopicInfoArg): Promise => { + sendTopicInfo: (data: AddSTHTopicEventData): Promise => { topicInfo = data; return new Promise((resolve) => resolve()); } @@ -106,11 +106,19 @@ test("Route stream to topic", async () => { expect(topicInfo!.contentType).toEqual(testConfig.contentType); }); -test("Update", async () => { +test("Update with provides", async () => { serviceDiscovery.cpmConnector!.connected = true; - await serviceDiscovery.update({ provides: "dummyProvides", requires: "dummyRequires", topicName: "dummyTopicName", contentType: "dummyContentType" }); + await serviceDiscovery.update({ provides: "dummyProvides", topicName: "dummyTopicName", contentType: "dummyContentType", status: "add" }); expect(topicInfo!).not.toBeUndefined(); expect(topicInfo!.provides).toEqual("dummyProvides"); + expect(topicInfo!.topicName).toEqual("dummyTopicName"); + expect(topicInfo!.contentType).toEqual("dummyContentType"); +}); + +test("Update with requires", async () => { + serviceDiscovery.cpmConnector!.connected = true; + await serviceDiscovery.update({ requires: "dummyRequires", topicName: "dummyTopicName", contentType: "dummyContentType", status: "add" }); + expect(topicInfo!).not.toBeUndefined(); expect(topicInfo!.requires).toEqual("dummyRequires"); expect(topicInfo!.topicName).toEqual("dummyTopicName"); expect(topicInfo!.contentType).toEqual("dummyContentType"); diff --git a/packages/manager-api-client/src/manager-client.ts b/packages/manager-api-client/src/manager-client.ts index 3577eaf9a..383b84981 100644 --- a/packages/manager-api-client/src/manager-client.ts +++ b/packages/manager-api-client/src/manager-client.ts @@ -84,8 +84,8 @@ export class ManagerClient implements ClientProvider { sequencePackage: Readable, id: string = "" ) { - return this.client.sendStream(`s3/${id}`, sequencePackage, {}, { - parseResponse: "json", put: true + return this.client.sendStream(`s3/${id}`, sequencePackage, { method: "put" }, { + parseResponse: "json" }); } @@ -93,7 +93,7 @@ export class ManagerClient implements ClientProvider { await this.client.delete(`s3/${id}`); } - async disconnectHubs(opts: any) { + async disconnectHubs(opts: MRestAPI.PostDisconnectPayload) { return this.client.post("disconnect", opts, {}, { json: true, parse: "json" }); } diff --git a/packages/middleware-api-client/src/middleware-client.ts b/packages/middleware-api-client/src/middleware-client.ts index 766ca2b89..ac4128940 100644 --- a/packages/middleware-api-client/src/middleware-client.ts +++ b/packages/middleware-api-client/src/middleware-client.ts @@ -2,7 +2,6 @@ import { ClientProvider, ClientUtils } from "@scramjet/client-utils"; import { ManagerClient } from "@scramjet/manager-api-client"; import { MWRestAPI, MMRestAPI } from "@scramjet/types"; -import { GetAccessKeysResponse } from "@scramjet/types/src/rest-api-multi-manager"; /** * Middleware client. @@ -79,18 +78,13 @@ export class MiddlewareClient implements ClientProvider { } }); } - async revokeAllAccessKeys(spaceId: string, apiKeys: GetAccessKeysResponse) - : Promise<{message:string, keysRevoked: number}> { - for (const key of apiKeys.accessKeys) { - try { - await this.revokeAccessKey(spaceId, key.created.toString()); - } catch (_e) { - throw new Error("Unable to revoke access keys"); + + async revokeAllAccessKeys(spaceId: string) : Promise<{message:string, keysRevoked: number}> { + return this.client.delete(`space/${spaceId}/apikey`, { + headers: { + "content-type": "application/json", + "x-revoke-all": "true" } - } - return { - message: "Keys successfully revoked", - keysRevoked: apiKeys.accessKeys.length - }; + }); } } diff --git a/packages/monitoring-server/package.json b/packages/monitoring-server/package.json index 47a33550f..9f87cb6e6 100644 --- a/packages/monitoring-server/package.json +++ b/packages/monitoring-server/package.json @@ -11,6 +11,9 @@ "test": "npm run test:ava", "test:ava": "# nyc ava" }, + "dependencies": { + "@scramjet/utility": "^0.37.0" + }, "devDependencies": { "@scramjet/types": "^0.37.0", "@types/node": "15.12.5", diff --git a/packages/monitoring-server/src/config/monitoringConfig.ts b/packages/monitoring-server/src/config/monitoringConfig.ts new file mode 100644 index 000000000..87e463871 --- /dev/null +++ b/packages/monitoring-server/src/config/monitoringConfig.ts @@ -0,0 +1,36 @@ +import { MonitoringServerConfig } from "@scramjet/types"; +import { definedValidator, portValidator, ReadOnlyConfig, SchemaValidator } from "@scramjet/utility"; + +const schemaValidator = new SchemaValidator({ + port: [definedValidator("Monitoring port should be defined"), portValidator("Monitoring port is invalid")], + path: [definedValidator("Path should be defined")], + host: [definedValidator("Host should be defined")] +}); + +export class MonitoringServerConf extends ReadOnlyConfig { + get port() { + return this.configuration.port; + } + get host() { + return this.configuration.host; + } + get path() { + return this.configuration.path; + } + get errors() { + return schemaValidator.errors; + } + get config() { + return this.configuration; + } + + validate(config: Record): boolean { + return schemaValidator.validate(config); + } + protected validateEntry(key: string, value: any): boolean | null { + return schemaValidator.validateEntry(key, value); + } + static validateEntry(key: string, value: any): boolean | null { + return schemaValidator.validateEntry(key, value); + } +} diff --git a/packages/monitoring-server/src/index.ts b/packages/monitoring-server/src/index.ts index 10edeafcd..41f82300e 100644 --- a/packages/monitoring-server/src/index.ts +++ b/packages/monitoring-server/src/index.ts @@ -1 +1,2 @@ export * from "./monitoring-server"; +export * from "./config/monitoringConfig"; diff --git a/packages/monitoring-server/src/monitoring-server.ts b/packages/monitoring-server/src/monitoring-server.ts index 9e7c1a8aa..5484e484e 100644 --- a/packages/monitoring-server/src/monitoring-server.ts +++ b/packages/monitoring-server/src/monitoring-server.ts @@ -1,30 +1,45 @@ import { createServer } from "http"; import { IMonitoringServer, MonitoringServerOptions, MonitoringServerValidator as MonitoringServerHealthCheck, MonitoringServerConfig } from "@scramjet/types"; +import { MonitoringServerConf } from "./config/monitoringConfig"; export class MonitoringServer implements IMonitoringServer { - private options: MonitoringServerOptions; private checks: MonitoringServerHealthCheck[] = []; private running = false; + public serverOptions: MonitoringServerOptions; + private monitoringSeverConf: MonitoringServerConf; - constructor(options: MonitoringServerOptions) { - if (!Number.isInteger(options.port) || (options.port < 0 || options.port > 65535)) { - throw Error(`Invalid port number ${options.port}`); + constructor(serverOptions: MonitoringServerOptions) { + const { check, ...config } = serverOptions; + + this.monitoringSeverConf = new MonitoringServerConf(config); + + const errors = this.monitoringSeverConf.errors; + + if (errors.length > 0) { + throw new Error(errors.reduce((p: string[], c) => { + p.push(c.message || ""); + return p; + }, []).join()); } - this.options = options; + this.serverOptions = serverOptions; + + if (!this.monitoringSeverConf.isValid()) { + throw new Error("Invalid config"); + } - this.options.path ||= "healtz"; + this.serverOptions.path ||= "healtz"; - if ((/!^[a-zA-Z0-9\-_~:.@!$&'()*+,;=%]*$/).test(this.options.path)) { - throw Error(`Invalid path: ${this.options.path}`); + if ((/!^[a-zA-Z0-9\-_~:.@!$&'()*+,;=%]*$/).test(this.serverOptions.path)) { + throw Error(`Invalid path: ${this.serverOptions.path}`); } - if (Array.isArray(options.check)) { - this.checks = options.check; + if (Array.isArray(check)) { + this.checks = check; } - if (typeof this.options.check === "function") { - this.checks.push(this.options.check); + if (typeof this.serverOptions.check === "function") { + this.checks.push(this.serverOptions.check); } } @@ -37,7 +52,7 @@ export class MonitoringServer implements IMonitoringServer { if (this.running) reject("MonitoringServer already running"); createServer(async (req, res) => { - if (req.url === `/${this.options.path}` && req.method === "GET") { + if (req.url === `/${this.serverOptions.path}` && req.method === "GET") { const healtz = await this.handleHealtzRequest(); res.setHeader("Content-type", "text/plain"); @@ -52,13 +67,13 @@ export class MonitoringServer implements IMonitoringServer { res.statusCode = 500; res.end(); } - }).listen(this.options.port, this.options.host, () => { + }).listen(this.serverOptions.port, this.serverOptions.host, () => { this.running = true; resolve({ - port: this.options.port, - host: this.options.host, - path: this.options.path + port: this.serverOptions.port, + host: this.serverOptions.host, + path: this.serverOptions.path }); }); }); diff --git a/packages/pre-runner/.eslintrc.js b/packages/pre-runner/.eslintrc.js deleted file mode 100644 index 0c111683c..000000000 --- a/packages/pre-runner/.eslintrc.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - ignorePatterns: [".eslintrc.js"], - parserOptions:{ - project: "./tsconfig.json", - tsconfigRootDir: __dirname - } -}; diff --git a/packages/sth/.eslintrc.js b/packages/sth/.eslintrc.js index f14660bdc..89646873a 100644 --- a/packages/sth/.eslintrc.js +++ b/packages/sth/.eslintrc.js @@ -1,6 +1,6 @@ module.exports = { ignorePatterns: [".eslintrc.js", "postinstall.js"], - parserOptions:{ + parserOptions: { project: "./tsconfig.json", tsconfigRootDir: __dirname, } diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index fccabd9cb..dcfaea2ae 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -56,3 +56,9 @@ export * from "./dto/index"; export * from "./rest-api-error/rest-api-error"; +// system-observable.ts +declare global { + interface SymbolConstructor { + readonly asyncDispose: unique symbol + } +} diff --git a/packages/types/src/messages/index.ts b/packages/types/src/messages/index.ts index 24894dce3..3540a0fd7 100644 --- a/packages/types/src/messages/index.ts +++ b/packages/types/src/messages/index.ts @@ -20,3 +20,4 @@ export { InstanceBulkMessage, InstanceMessage, InstanceMessageData } from "./ins export { SequenceBulkMessage, SequenceMessage, SequenceMessageData } from "./sequence"; export { SequenceStoppedMessageData } from "./sequence-stopped"; export { OpRecord } from "./op-record"; +export * from "./sth-topic"; diff --git a/packages/types/src/messages/sth-topic.ts b/packages/types/src/messages/sth-topic.ts new file mode 100644 index 000000000..e05f1ebec --- /dev/null +++ b/packages/types/src/messages/sth-topic.ts @@ -0,0 +1,21 @@ +type Status = "add" | "remove"; + +type BaseSTHTopicEventData = { + status: Status; + topicName: string; +} + +export type AddSTHTopicEventData = BaseSTHTopicEventData & { + contentType: string; + localProvider?: string; + status: "add"; +} & ( + { requires: string; provides?: never } + | { provides: string; requires?: never } +); + +export type RemoveSTHTopicEventData = BaseSTHTopicEventData & { + status: "remove"; +} + +export type STHTopicEventData = AddSTHTopicEventData | RemoveSTHTopicEventData; diff --git a/packages/types/src/monitoring-server.ts b/packages/types/src/monitoring-server.ts index f62f06190..ae2275be3 100644 --- a/packages/types/src/monitoring-server.ts +++ b/packages/types/src/monitoring-server.ts @@ -8,14 +8,29 @@ export type MonitoringServerConfig = { export type MonitoringServerValidator = () => MaybePromise; -export type MonitoringServerOptions = MonitoringServerConfig & { - check?: MonitoringServerValidator | MonitoringServerValidator[]; -} - export interface IMonitoringServer { start(): Promise; } +export interface IMonitoringServerConf { + port: number; + host: string; + path: string; + config: MonitoringServerConfig; + isValidConfig: boolean; + + validate(config: Record): boolean; + validateEntry(key: string, value: any): boolean | null; +} + +export type MonitoringServerOptions = MonitoringServerConfig & { + check?: MonitoringServerValidator | MonitoringServerValidator[]; +} + export interface IMonitoringServerConstructor { new(opts: MonitoringServerOptions): IMonitoringServer; } + +export interface IMonitoringServerConfConstructor { + new(opts: MonitoringServerConfig): IMonitoringServerConf; +} diff --git a/scripts/run-script.js b/scripts/run-script.js index 1c02ec00b..6ca41351b 100755 --- a/scripts/run-script.js +++ b/scripts/run-script.js @@ -22,8 +22,9 @@ const { exec } = require("child_process"); const opts = minimist(process.argv.slice(2), { alias: { list: "l", - strict: "S", + lax: "L", scope: "s", + threads: "j", verbose: "v", help: ["h", "?"], workspace: "w", @@ -43,7 +44,7 @@ const opts = minimist(process.argv.slice(2), { "flat-packages": env.FLAT_PACKAGES, "make-public": env.MAKE_PUBLIC, }, - boolean: ["list", "strict", "verbose", "help", "exec"] + boolean: ["list", "lax", "verbose", "help", "exec"] }); if (opts.help || !opts._.length && !opts.list) { @@ -53,7 +54,7 @@ if (opts.help || !opts._.length && !opts.list) { console.error("Runs scripts in workspaces"); console.error(`Usage: ${pName} [options]