From eda2a200e156a5dd4953648f8f8b65422fc0e3cf Mon Sep 17 00:00:00 2001 From: Stefan Rinke Date: Sun, 3 Aug 2025 11:44:36 +0200 Subject: [PATCH 01/21] completion and fixes --- README-template.md | 14 ++ README.md | 256 +++++++++++++++++++++------------- package.json | 7 +- pnpm-lock.yaml | 279 ++++++++++++++++++++++++++++++++++++++ scripts/generate-docs.ts | 62 ++++++++- src/cli.ts | 238 +++++++++++++++++++++----------- src/index.ts | 3 +- src/tools/environments.ts | 53 ++++++-- src/tools/test-reports.ts | 8 +- tests/cli.spec.ts | 4 +- 10 files changed, 718 insertions(+), 206 deletions(-) diff --git a/README-template.md b/README-template.md index a48e7ac..99fff1a 100644 --- a/README-template.md +++ b/README-template.md @@ -24,6 +24,20 @@ This is necessary for the cli to work and avoid dependency conflicts, when insta 2. Use the cli through npx e.g. `npx @octomind/octomind -h` +## Autocompletion + +On macOS and linux you can enable autocompletion by running the following command: +```bash +npx @octomind/octomind install-completion +``` +You can disable autocompletion by running the following command: +```bash +npx @octomind/octomind uninstall-completion +``` + +Autocompletion will only work if you have installed the package globally and created a config file with `npx @octomind/octomind init`. +This way even entityIds like environmentIds or testCaseIds will be autocompleted. + ${commands} ## Output Formats diff --git a/README.md b/README.md index 2480eb1..4f3c79b 100644 --- a/README.md +++ b/README.md @@ -24,9 +24,23 @@ This is necessary for the cli to work and avoid dependency conflicts, when insta 2. Use the cli through npx e.g. `npx @octomind/octomind -h` +## Autocompletion + +On macOS and linux you can enable autocompletion by running the following command: +```bash +npx @octomind/octomind install-completion +``` +You can disable autocompletion by running the following command: +```bash +npx @octomind/octomind uninstall-completion +``` + +Autocompletion will only work if you have installed the package globally and created a config file with `npx @octomind/octomind init`. +This way even entityIds like environmentIds or testCaseIds will be autocompleted. + # octomind -Octomind cli tool. Version: 1.1.2. Additional documentation see https://octomind.dev/docs/api-reference/ +Octomind cli tool. Version: 1.1.3. Additional documentation see https://octomind.dev/docs/api-reference/ **Usage:** `octomind [options] [command]` @@ -38,13 +52,13 @@ Octomind cli tool. Version: 1.1.2. Additional documentation see https://octomind # octomind CLI Documentation -Octomind cli tool. Version: 1.1.2. Additional documentation see https://octomind.dev/docs/api-reference/ +Octomind cli tool. Version: 1.1.3. Additional documentation see https://octomind.dev/docs/api-reference/ -## Commands +## Setup ## init -Initialize configuration by setting up API key +Initialize configuration by setting up API key. This will create a config file in ~/.config/octomind.json **Usage:** `init [options]` @@ -58,171 +72,232 @@ Initialize configuration by setting up API key ## switch-test-target -Switch to a different test target +Switch to a different test target. This will list all available test targets and update the config file in ~/.config/octomind.json **Usage:** `switch-test-target [options]` -## debug +## Completion -run test cases against local build +## install-completion -**Usage:** `debug [options]` +Install tab completion + +**Usage:** `install-completion [options]` + +## uninstall-completion + +Uninstall tab completion + +**Usage:** `uninstall-completion [options]` + +## completion + +Tab completion + +**Usage:** `completion [options]` + +## Environments + +## list-environments + +List all environments + +**Usage:** `list-environments [options]` ### Options | Option | Description | Required | Default | |--------|-------------|----------|--------| | `-j, --json` | Output raw JSON response | No | | -| `-u, --url ` | url the tests should run against | Yes | | -| `-i, --id [uuid]` | id of the test case you want to run, if not provided will run all test cases in the test target | No | | -| `-e, --environment-id [uuid]` | id of the environment you want to run against, if not provided will run all test cases against the default environment | No | | -| `-a, --test-target-id [uuid]` | id of the test target of the test case, if not provided will use the test target id from the config | No | | -| `--headless` | if we should run headless without the UI of playwright and the browser | No | | -| `--persist` | if we should write playwright config and files to current directory, you can then run 'npx playwright test' to run them again | No | | -| `--grep [substring]` | filter test cases by substring | No | | +| `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | -## execute +## create-environment -Execute test cases +Create a new environment -**Usage:** `execute [options]` +**Usage:** `create-environment [options]` ### Options | Option | Description | Required | Default | |--------|-------------|----------|--------| | `-j, --json` | Output raw JSON response | No | | -| `-u, --url ` | URL to test | Yes | | +| `-n, --name ` | Environment name | Yes | | +| `-d, --discovery-url ` | Discovery URL | Yes | | | `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | -| `-e, --environment-name [name]` | Environment name | No | default | -| `-d, --description [text]` | Test description | No | | -| `-g, --tags [tags]` | comma separated list of tags | No | | -| `-v, --variables-to-overwrite [variables]` | JSON object of variables to overwrite | No | | +| `--test-account-username [username]` | Test account username | No | | +| `--test-account-password [password]` | Test account password | No | | +| `--test-account-otp-initializer-key [key]` | Test account OTP initializer key | No | | +| `--basic-auth-username [username]` | Basic auth username | No | | +| `--basic-auth-password [password]` | Basic auth password | No | | +| `--private-location-name [name]` | Private location name | No | | -## test-report +## environment -Get test report details +Get an environment -**Usage:** `test-report [options]` +**Usage:** `environment [options]` ### Options | Option | Description | Required | Default | |--------|-------------|----------|--------| | `-j, --json` | Output raw JSON response | No | | -| `-r, --test-report-id ` | Test report ID | Yes | | +| `-e, --environment-id ` | Environment ID | Yes | | | `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | -## register-location +## update-environment -Register a private location +Update an existing environment -**Usage:** `register-location [options]` +**Usage:** `update-environment [options]` ### Options | Option | Description | Required | Default | |--------|-------------|----------|--------| | `-j, --json` | Output raw JSON response | No | | -| `-n, --name ` | Location name | Yes | | -| `-p, --password ` | Proxy password | Yes | | -| `-u, --username ` | Proxy user | Yes | | -| `-a, --address
` | Location address | Yes | | +| `-e, --environment-id ` | Environment ID | Yes | | +| `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | +| `-n, --name [name]` | Environment name | No | | +| `-d, --discovery-url [url]` | Discovery URL | No | | +| `--test-account-username [username]` | Test account username | No | | +| `--test-account-password [password]` | Test account password | No | | +| `--test-account-otp-initializer-key [key]` | Test account OTP initializer key | No | | +| `--basic-auth-username [username]` | Basic auth username | No | | +| `--basic-auth-password [password]` | Basic auth password | No | | +| `--private-location-name [name]` | Private location name | No | | -## unregister-location +## delete-environment -Unregister a private location +Delete an environment -**Usage:** `unregister-location [options]` +**Usage:** `delete-environment [options]` ### Options | Option | Description | Required | Default | |--------|-------------|----------|--------| | `-j, --json` | Output raw JSON response | No | | -| `-n, --name ` | Location name | Yes | | +| `-e, --environment-id ` | Environment ID | Yes | | +| `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | -## list-private-locations +## Execute -List all private locations +## debug -**Usage:** `list-private-locations [options]` +run test cases against local build + +**Usage:** `debug [options]` ### Options | Option | Description | Required | Default | |--------|-------------|----------|--------| | `-j, --json` | Output raw JSON response | No | | +| `-u, --url ` | url the tests should run against | Yes | | +| `-i, --id [uuid]` | id of the test case you want to run, if not provided will run all test cases in the test target | No | | +| `-e, --environment-id [uuid]` | id of the environment you want to run against, if not provided will run all test cases against the default environment | No | | +| `-a, --test-target-id [uuid]` | id of the test target of the test case, if not provided will use the test target id from the config | No | | +| `--headless` | if we should run headless without the UI of playwright and the browser | No | | +| `--persist` | if we should write playwright config and files to current directory, you can then run 'npx playwright test' to run them again | No | | +| `--grep [substring]` | filter test cases by substring | No | | -## list-environments +## execute -List all environments +Execute test cases to create a test report -**Usage:** `list-environments [options]` +**Usage:** `execute [options]` ### Options | Option | Description | Required | Default | |--------|-------------|----------|--------| | `-j, --json` | Output raw JSON response | No | | +| `-u, --url ` | URL to test | Yes | | | `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | +| `-e, --environment-name [name]` | Environment name | No | default | +| `-d, --description [text]` | Test description | No | | +| `-g, --tags [tags]` | comma separated list of tags | No | | +| `-v, --variables-to-overwrite [variables]` | JSON object of variables to overwrite | No | | -## create-environment +## create-discovery -Create a new environment +Create a new test case discovery -**Usage:** `create-environment [options]` +**Usage:** `create-discovery [options]` ### Options | Option | Description | Required | Default | |--------|-------------|----------|--------| | `-j, --json` | Output raw JSON response | No | | -| `-n, --name ` | Environment name | Yes | | -| `-d, --discovery-url ` | Discovery URL | Yes | | +| `-n, --name ` | Discovery name | Yes | | +| `-p, --prompt ` | Discovery prompt | Yes | | | `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | -| `--test-account-username [username]` | Test account username | No | | -| `--test-account-password [password]` | Test account password | No | | -| `--test-account-otp-initializer-key [key]` | Test account OTP initializer key | No | | -| `--basic-auth-username [username]` | Basic auth username | No | | -| `--basic-auth-password [password]` | Basic auth password | No | | -| `--private-location-name [name]` | Private location name | No | | +| `-e, --entry-point-url-path [path]` | Entry point URL path | No | | +| `--prerequisite-id [id]` | Prerequisite test case ID | No | | +| `--external-id [id]` | External identifier | No | | +| `--assigned-tag-ids [ids]` | Comma-separated list of tag IDs | No | | +| `--folder-id [id]` | Folder ID | No | | -## update-environment +## Notifications -Update an existing environment +## notifications -**Usage:** `update-environment [options]` +Get notifications for a test target + +**Usage:** `notifications [options]` ### Options | Option | Description | Required | Default | |--------|-------------|----------|--------| | `-j, --json` | Output raw JSON response | No | | -| `-e, --environment-id ` | Environment ID | Yes | | | `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | -| `-n, --name [name]` | Environment name | No | | -| `-d, --discovery-url [url]` | Discovery URL | No | | -| `--test-account-username [username]` | Test account username | No | | -| `--test-account-password [password]` | Test account password | No | | -| `--test-account-otp-initializer-key [key]` | Test account OTP initializer key | No | | -| `--basic-auth-username [username]` | Basic auth username | No | | -| `--basic-auth-password [password]` | Basic auth password | No | | -| `--private-location-name [name]` | Private location name | No | | -## delete-environment +## Private Locations -Delete an environment +## register-location -**Usage:** `delete-environment [options]` +Register a private location + +**Usage:** `register-location [options]` + +### Options + +| Option | Description | Required | Default | +|--------|-------------|----------|--------| +| `-j, --json` | Output raw JSON response | No | | +| `-n, --name ` | Location name | Yes | | +| `-p, --password ` | Proxy password | Yes | | +| `-u, --username ` | Proxy user | Yes | | +| `-a, --address
` | Location address | Yes | | + +## unregister-location + +Unregister a private location + +**Usage:** `unregister-location [options]` + +### Options + +| Option | Description | Required | Default | +|--------|-------------|----------|--------| +| `-j, --json` | Output raw JSON response | No | | +| `-n, --name ` | Location name | Yes | | + +## list-private-locations + +List all private locations + +**Usage:** `list-private-locations [options]` ### Options | Option | Description | Required | Default | |--------|-------------|----------|--------| | `-j, --json` | Output raw JSON response | No | | -| `-e, --environment-id ` | Environment ID | Yes | | -| `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | ## start-private-location @@ -245,18 +320,7 @@ Stop a private location worker, see https://octomind.dev/docs/proxy/private-loca **Usage:** `stop-private-location [options]` -## notifications - -Get notifications for a test target - -**Usage:** `notifications [options]` - -### Options - -| Option | Description | Required | Default | -|--------|-------------|----------|--------| -| `-j, --json` | Output raw JSON response | No | | -| `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | +## Test Cases ## test-case @@ -272,39 +336,37 @@ Get details of a specific test case | `-c, --test-case-id ` | Test case ID | Yes | | | `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | -## create-discovery +## list-test-cases -Create a new test case discovery +List all test cases -**Usage:** `create-discovery [options]` +**Usage:** `list-test-cases [options]` ### Options | Option | Description | Required | Default | |--------|-------------|----------|--------| | `-j, --json` | Output raw JSON response | No | | -| `-n, --name ` | Discovery name | Yes | | -| `-p, --prompt ` | Discovery prompt | Yes | | | `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | -| `-e, --entry-point-url-path [path]` | Entry point URL path | No | | -| `--prerequisite-id [id]` | Prerequisite test case ID | No | | -| `--external-id [id]` | External identifier | No | | -| `--assigned-tag-ids [ids]` | Comma-separated list of tag IDs | No | | -| `--folder-id [id]` | Folder ID | No | | -## list-test-cases +## Test Reports -List all test cases +## test-report -**Usage:** `list-test-cases [options]` +Get test report details + +**Usage:** `test-report [options]` ### Options | Option | Description | Required | Default | |--------|-------------|----------|--------| | `-j, --json` | Output raw JSON response | No | | +| `-r, --test-report-id ` | Test report ID | Yes | | | `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | +## Test Targets + ## list-test-targets List all test targets diff --git a/package.json b/package.json index a1ff7ab..48322ec 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@octomind/octomind", - "version": "1.1.2", + "version": "1.1.3", "description": "a command line client for octomind apis", "main": "./dist/index.js", "packageManager": "pnpm@10.13.1", @@ -21,6 +21,7 @@ "gendoc": "tsx scripts/generate-docs.ts > README.md", "lint": "pnpm apigen &&npx genversion -des src/version.ts && eslint src/**/*.ts tests/**/*.ts --max-warnings=0", "apigen": "openapi-typescript ./openapi.yaml --output src/api.ts", + "tsc": "tsc --project tsconfig.build.json", "build": "pnpm apigen && npx genversion -des src/version.ts && pnpm gendoc && tsc --project tsconfig.build.json", "octomind": "pnpm apigen && tsx src/index.ts", "test": "pnpm apigen && npx genversion -des src/version.ts && jest", @@ -33,11 +34,13 @@ "@playwright/test": "^1.54.1", "commander": "^14.0.0", "openapi-fetch": "^0.14.0", - "otplib": "^12.0.1" + "otplib": "^12.0.1", + "tabtab": "^3.0.2" }, "devDependencies": { "@types/jest": "^30.0.0", "@types/node": "^24.0.1", + "@types/tabtab": "^3.0.4", "@typescript-eslint/parser": "^8.25.0", "eslint": "8.57.1", "eslint-config-prettier": "^10.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 147e8d8..55cab6b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,9 @@ importers: otplib: specifier: ^12.0.1 version: 12.0.1 + tabtab: + specifier: ^3.0.2 + version: 3.0.2 devDependencies: '@types/jest': specifier: ^30.0.0 @@ -27,6 +30,9 @@ importers: '@types/node': specifier: ^24.0.1 version: 24.1.0 + '@types/tabtab': + specifier: ^3.0.4 + version: 3.0.4 '@typescript-eslint/parser': specifier: ^8.25.0 version: 8.38.0(eslint@8.57.1)(typescript@5.7.3) @@ -732,6 +738,9 @@ packages: '@types/stack-utils@2.0.3': resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + '@types/tabtab@3.0.4': + resolution: {integrity: sha512-gmh8JsmIYPGRqk8Xb4dmulV37TpLwg0Quo3GJ0LgEcl4v0O92F14PGebBd7LHv9GBEw2KbmBSrvU0/NzIy5AoA==} + '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} @@ -1077,10 +1086,22 @@ packages: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} + ansi-escapes@3.2.0: + resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} + engines: {node: '>=4'} + ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} + ansi-regex@3.0.1: + resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} + engines: {node: '>=4'} + + ansi-regex@4.1.1: + resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} + engines: {node: '>=6'} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -1089,6 +1110,10 @@ packages: resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} engines: {node: '>=12'} + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -1252,6 +1277,10 @@ packages: caniuse-lite@1.0.30001727: resolution: {integrity: sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==} + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -1263,6 +1292,9 @@ packages: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + ci-info@4.2.0: resolution: {integrity: sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==} engines: {node: '>=8'} @@ -1274,6 +1306,13 @@ packages: cjs-module-lexer@2.1.0: resolution: {integrity: sha512-UX0OwmYRYQQetfrLEZeewIFFI+wSTofC+pMBLNuH3RUuu/xzG1oz84UCEDOSoQlN3fZ4+AzmV50ZYvGqkMh9yA==} + cli-cursor@2.1.0: + resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==} + engines: {node: '>=4'} + + cli-width@2.2.1: + resolution: {integrity: sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==} + cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -1285,10 +1324,16 @@ packages: collect-v8-coverage@1.0.2: resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} @@ -1451,6 +1496,9 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} + es6-promisify@6.1.1: + resolution: {integrity: sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg==} + esbuild@0.25.5: resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==} engines: {node: '>=18'} @@ -1665,6 +1713,10 @@ packages: resolution: {integrity: sha512-P0te2pt+hHI5qLJkIR+iMvS+lYUZml8rKKsohVHAGY+uClp9XVbdyYNJOIjSRpHVp8s8YqxJCiHUkSYZGr8rtQ==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -1695,6 +1747,10 @@ packages: picomatch: optional: true + figures@2.0.0: + resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} + engines: {node: '>=4'} + file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -1829,6 +1885,10 @@ packages: resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} engines: {node: '>= 0.4'} + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} @@ -1863,6 +1923,10 @@ packages: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -1891,6 +1955,10 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + inquirer@6.5.2: + resolution: {integrity: sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==} + engines: {node: '>=6.0.0'} + internal-slot@1.1.0: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} @@ -1941,6 +2009,10 @@ packages: resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} engines: {node: '>= 0.4'} + is-fullwidth-code-point@2.0.0: + resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} + engines: {node: '>=4'} + is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -2298,6 +2370,9 @@ packages: lodash.upperfirst@4.3.1: resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -2329,6 +2404,10 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} + mimic-fn@1.2.0: + resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==} + engines: {node: '>=4'} + mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -2351,9 +2430,16 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + mute-stream@0.0.7: + resolution: {integrity: sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==} + napi-postinstall@0.2.4: resolution: {integrity: sha512-ZEzHJwBhZ8qQSbknHqYcdtQVr8zUgGyM/q6h6qAyhtyVMNrSgDhrC4disf03dYW0e+czXyLnZINnCTEkWy0eJg==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} @@ -2408,6 +2494,10 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + onetime@2.0.1: + resolution: {integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==} + engines: {node: '>=4'} + onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} @@ -2428,6 +2518,10 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + otplib@12.0.1: resolution: {integrity: sha512-xDGvUOQjop7RDgxTQ+o4pOol0/3xSZzawTiPKRrHnQWAy0WjhNs/5HdIDJCrqC4MBynmjXgULc6YfioaxZeFgg==} @@ -2600,6 +2694,10 @@ packages: engines: {node: '>= 0.4'} hasBin: true + restore-cursor@2.0.0: + resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==} + engines: {node: '>=4'} + reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -2609,9 +2707,17 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true + run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + rxjs@6.6.7: + resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} + engines: {npm: '>=2.0.0'} + safe-array-concat@1.1.3: resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} engines: {node: '>=0.4'} @@ -2624,6 +2730,9 @@ packages: resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} engines: {node: '>= 0.4'} + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -2706,6 +2815,10 @@ packages: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} + string-width@2.1.1: + resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} + engines: {node: '>=4'} + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -2730,6 +2843,14 @@ packages: resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} engines: {node: '>= 0.4'} + strip-ansi@4.0.0: + resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} + engines: {node: '>=4'} + + strip-ansi@5.2.0: + resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} + engines: {node: '>=6'} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -2758,6 +2879,10 @@ packages: resolution: {integrity: sha512-HRVVSbCCMbj7/kdWF9Q+bbckjBHLtHMEoJWlkmYzzdwhYMkjkOwubLM6t7NbWKjgKamGDrWL1++KrjUO1t9oAQ==} engines: {node: '>=18'} + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -2777,6 +2902,9 @@ packages: resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} engines: {node: ^14.18.0 || >=16.0.0} + tabtab@3.0.2: + resolution: {integrity: sha512-jANKmUe0sIQc/zTALTBy186PoM/k6aPrh3A7p6AaAfF6WPSbTx1JYeGIGH162btpH+mmVEXln+UxwViZHO2Jhg==} + test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -2788,10 +2916,17 @@ packages: resolution: {integrity: sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==} engines: {node: '>=0.2.6'} + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + tinyglobby@0.2.14: resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} @@ -2855,6 +2990,9 @@ packages: tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -2924,6 +3062,10 @@ packages: unrs-resolver@1.9.2: resolution: {integrity: sha512-VUyWiTNQD7itdiMuJy+EuLEErLj3uwX/EpHQF8EOf33Dq3Ju6VW1GXm+swk6+1h7a49uv9fKZ+dft9jU7esdLA==} + untildify@3.0.3: + resolution: {integrity: sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA==} + engines: {node: '>=4'} + update-browserslist-db@1.1.2: resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} hasBin: true @@ -3790,6 +3932,10 @@ snapshots: '@types/stack-utils@2.0.3': {} + '@types/tabtab@3.0.4': + dependencies: + '@types/node': 24.1.0 + '@types/yargs-parser@21.0.3': {} '@types/yargs@17.0.33': @@ -4136,14 +4282,24 @@ snapshots: ansi-colors@4.1.3: {} + ansi-escapes@3.2.0: {} + ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 + ansi-regex@3.0.1: {} + + ansi-regex@4.1.1: {} + ansi-regex@5.0.1: {} ansi-regex@6.1.0: {} + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 @@ -4351,6 +4507,12 @@ snapshots: caniuse-lite@1.0.30001727: {} + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -4360,12 +4522,20 @@ snapshots: char-regex@1.0.2: {} + chardet@0.7.0: {} + ci-info@4.2.0: {} ci-info@4.3.0: {} cjs-module-lexer@2.1.0: {} + cli-cursor@2.1.0: + dependencies: + restore-cursor: 2.0.0 + + cli-width@2.2.1: {} + cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -4376,10 +4546,16 @@ snapshots: collect-v8-coverage@1.0.2: {} + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + color-convert@2.0.1: dependencies: color-name: 1.1.4 + color-name@1.1.3: {} + color-name@1.1.4: {} colorette@1.4.0: {} @@ -4570,6 +4746,8 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 + es6-promisify@6.1.1: {} + esbuild@0.25.5: optionalDependencies: '@esbuild/aix-ppc64': 0.25.5 @@ -4888,6 +5066,12 @@ snapshots: jest-mock: 30.0.5 jest-util: 30.0.5 + external-editor@3.1.0: + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + fast-deep-equal@3.1.3: {} fast-diff@1.3.0: {} @@ -4916,6 +5100,10 @@ snapshots: optionalDependencies: picomatch: 4.0.2 + figures@2.0.0: + dependencies: + escape-string-regexp: 1.0.5 + file-entry-cache@6.0.1: dependencies: flat-cache: 3.2.0 @@ -5059,6 +5247,8 @@ snapshots: has-bigints@1.1.0: {} + has-flag@3.0.0: {} + has-flag@4.0.0: {} has-property-descriptors@1.0.2: @@ -5090,6 +5280,10 @@ snapshots: human-signals@2.1.0: {} + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + ignore@5.3.2: {} import-fresh@3.3.1: @@ -5113,6 +5307,22 @@ snapshots: inherits@2.0.4: {} + inquirer@6.5.2: + dependencies: + ansi-escapes: 3.2.0 + chalk: 2.4.2 + cli-cursor: 2.1.0 + cli-width: 2.2.1 + external-editor: 3.1.0 + figures: 2.0.0 + lodash: 4.17.21 + mute-stream: 0.0.7 + run-async: 2.4.1 + rxjs: 6.6.7 + string-width: 2.1.1 + strip-ansi: 5.2.0 + through: 2.3.8 + internal-slot@1.1.0: dependencies: es-errors: 1.3.0 @@ -5171,6 +5381,8 @@ snapshots: dependencies: call-bound: 1.0.4 + is-fullwidth-code-point@2.0.0: {} + is-fullwidth-code-point@3.0.0: {} is-generator-fn@2.1.0: {} @@ -5720,6 +5932,8 @@ snapshots: lodash.upperfirst@4.3.1: {} + lodash@4.17.21: {} + lru-cache@10.4.3: {} lru-cache@5.1.1: @@ -5747,6 +5961,8 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 + mimic-fn@1.2.0: {} + mimic-fn@2.1.0: {} minimatch@3.1.2: @@ -5765,8 +5981,14 @@ snapshots: minipass@7.1.2: {} + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + ms@2.1.3: {} + mute-stream@0.0.7: {} + napi-postinstall@0.2.4: {} napi-postinstall@0.3.2: {} @@ -5820,6 +6042,10 @@ snapshots: dependencies: wrappy: 1.0.2 + onetime@2.0.1: + dependencies: + mimic-fn: 1.2.0 + onetime@5.1.2: dependencies: mimic-fn: 2.1.0 @@ -5849,6 +6075,8 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 + os-tmpdir@1.0.2: {} + otplib@12.0.1: dependencies: '@otplib/core': 12.0.1 @@ -6005,16 +6233,27 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + restore-cursor@2.0.0: + dependencies: + onetime: 2.0.1 + signal-exit: 3.0.7 + reusify@1.0.4: {} rimraf@3.0.2: dependencies: glob: 7.2.3 + run-async@2.4.1: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 + rxjs@6.6.7: + dependencies: + tslib: 1.14.1 + safe-array-concat@1.1.3: dependencies: call-bind: 1.0.8 @@ -6034,6 +6273,8 @@ snapshots: es-errors: 1.3.0 is-regex: 1.2.1 + safer-buffer@2.1.2: {} + semver@6.3.1: {} semver@7.7.2: {} @@ -6125,6 +6366,11 @@ snapshots: char-regex: 1.0.2 strip-ansi: 6.0.1 + string-width@2.1.1: + dependencies: + is-fullwidth-code-point: 2.0.0 + strip-ansi: 4.0.0 + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -6166,6 +6412,14 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.1 + strip-ansi@4.0.0: + dependencies: + ansi-regex: 3.0.1 + + strip-ansi@5.2.0: + dependencies: + ansi-regex: 4.1.1 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -6184,6 +6438,10 @@ snapshots: supports-color@10.0.0: {} + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -6200,6 +6458,17 @@ snapshots: dependencies: '@pkgr/core': 0.2.9 + tabtab@3.0.2: + dependencies: + debug: 4.4.1(supports-color@10.0.0) + es6-promisify: 6.1.1 + inquirer: 6.5.2 + minimist: 1.2.8 + mkdirp: 0.5.6 + untildify: 3.0.3 + transitivePeerDependencies: + - supports-color + test-exclude@6.0.0: dependencies: '@istanbuljs/schema': 0.1.3 @@ -6210,11 +6479,17 @@ snapshots: thirty-two@1.0.2: {} + through@2.3.8: {} + tinyglobby@0.2.14: dependencies: fdir: 6.4.6(picomatch@4.0.2) picomatch: 4.0.2 + tmp@0.0.33: + dependencies: + os-tmpdir: 1.0.2 + tmpl@1.0.5: {} to-regex-range@5.0.1: @@ -6274,6 +6549,8 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 + tslib@1.14.1: {} + tslib@2.8.1: optional: true @@ -6398,6 +6675,8 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.9.2 '@unrs/resolver-binding-win32-x64-msvc': 1.9.2 + untildify@3.0.3: {} + update-browserslist-db@1.1.2(browserslist@4.24.4): dependencies: browserslist: 4.24.4 diff --git a/scripts/generate-docs.ts b/scripts/generate-docs.ts index 1591554..156a8db 100755 --- a/scripts/generate-docs.ts +++ b/scripts/generate-docs.ts @@ -48,16 +48,64 @@ function generateCommandDocs(command: Command, level = 1): string { // Process subcommands const subcommands = command.commands; if (subcommands && subcommands.length > 0) { - // If this is the root command, add a title + // If this is the root command, group commands by help group if (level === 1) { docs += `# ${command.name()} CLI Documentation\n\n`; docs += `${command.description()}\n\n`; - docs += '## Commands\n\n'; + + // Group commands by help group + const commandsByGroup = new Map(); + const ungroupedCommands: Command[] = []; + + subcommands.forEach(subcommand => { + const helpGroup = subcommand.helpGroup(); + if (helpGroup) { + if (!commandsByGroup.has(helpGroup)) { + commandsByGroup.set(helpGroup, []); + } + const groupCommands = commandsByGroup.get(helpGroup); + if (groupCommands) { + groupCommands.push(subcommand); + } + } else { + ungroupedCommands.push(subcommand); + } + }); + + // Generate documentation for each group, with setup first + const allGroups = Array.from(commandsByGroup.keys()); + const setupGroup = allGroups.find(group => group === 'setup'); + const otherGroups = allGroups.filter(group => group !== 'setup').sort(); + const sortedGroups = setupGroup ? [setupGroup, ...otherGroups] : otherGroups; + + sortedGroups.forEach(groupName => { + const groupCommands = commandsByGroup.get(groupName); + if (groupCommands) { + const capitalizedGroupName = groupName.split('-').map(word => + word.charAt(0).toUpperCase() + word.slice(1) + ).join(' '); + + docs += `## ${capitalizedGroupName}\n\n`; + + groupCommands.forEach(subcommand => { + docs += generateCommandDocs(subcommand, level + 1); + }); + } + }); + + // Add ungrouped commands at the end + if (ungroupedCommands.length > 0) { + docs += '## Other Commands\n\n'; + ungroupedCommands.forEach(subcommand => { + docs += generateCommandDocs(subcommand, level + 1); + }); + } + } else { + // For non-root commands, process subcommands normally + subcommands.forEach(subcommand => { + docs += generateCommandDocs(subcommand, level + 1); + }); } - - subcommands.forEach(subcommand => { - docs += generateCommandDocs(subcommand, level + 1); - }); } return docs; @@ -69,7 +117,7 @@ function generateCommandDocs(command: Command, level = 1): string { async function main() { try { // Get the program object from buildCmd - const program = buildCmd(); + const program = await buildCmd(); // Generate markdown documentation const markdown = generateCommandDocs(program); diff --git a/src/cli.ts b/src/cli.ts index 63dd2e0..2f7da7f 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -14,14 +14,97 @@ import { unregisterLocation, updateEnvironment, listTestCases, + getTestCases, + getEnvironments, + getEnvironment, + ExecuteTestsBody, + CreateDiscoveryBody, + GetTestReportParams, + GetEnvironmentOptions, + GetTestCaseParams, } from "./tools"; import { Config, loadConfig, saveConfig } from "./config"; import { promptUser, resolveTestTargetId } from "./helpers"; import { runDebugtopus } from "./debugtopus"; +import tabtab, { TabtabEnv } from "tabtab"; import { startPrivateLocationWorker, stopPLW } from "./plw"; import { getTestTargets, listTestTargets } from "./tools/test-targets"; +const BINARY_NAME = "octomind"; + +const logOptions = async (command: Command, line: string) => { + const argv = line.split(" "); + const usedOptions = command.options.filter((option) => argv.includes(option.long!) || argv.includes(option.short!)).map((option) => option.flags); + tabtab.log(command.options.filter((option) => option.long) + .filter((option) => !usedOptions.includes(option.flags)) + .map((option) => option.long!)); + tabtab.log(command.options.filter((option) => option.short) + .filter((option) => !usedOptions.includes(option.flags)) + .map((option) => option.short!)); +} + +const completion = async (env: TabtabEnv, program: Command) => { + if (!env.complete) return; + + const argv = env.line.split(" "); + + const command = program.commands.find((command) => command.name() === argv[1]); + if (command) { + if( env.prev === "-t" || env.prev === "--test-target-id") { + const testTargets = await getTestTargets(); + tabtab.log(testTargets.map((testTarget) => testTarget.id)); + return; + } + if( command.name() === "test-case" && (env.prev === "-c" || env.prev === "--test-case-id") ) { + const config = await loadConfig(); + if( config.testTargetId ) { + const testCases = await getTestCases({ testTargetId: config.testTargetId, status: "ENABLED" }); + tabtab.log(testCases.map((testCase) => testCase.id)); + return; + } + } + if( (command.name() === "update-environment" || command.name() === "delete-environment"|| command.name() === "environment") + && (env.prev === "-e" || env.prev === "--environment-id") ) { + const config = await loadConfig(); + if( config.testTargetId ) { + const environments = await getEnvironments({ testTargetId: config.testTargetId }); + tabtab.log(environments.map((environment) => environment.id)); + return; + } + } + await logOptions(command, env.line); + return; + } + + tabtab.log(["--help"]); + tabtab.log(program.options.filter((option) => option.long).map((option) => option.long!)); + tabtab.log(program.options.filter((option) => option.short).map((option) => option.short!)); + tabtab.log(program.commands.map((command) => command.name())); +}; + +const installCompletion = async () => { + await tabtab + .install({ + name: BINARY_NAME, + completer: BINARY_NAME + }) + .catch(err => console.error('INSTALL ERROR', err)); +} + +const uninstallCompletion = async () => { + await tabtab + .uninstall({ + name: BINARY_NAME, + }) + .catch(err => console.error('UNINSTALL ERROR', err)); +} + +const tabCompletion = async (program: Command) => { + const env = tabtab.parseEnv(process.env); + await completion(env, program); +} + const createCommandWithCommonOptions = (command: string): Command => { return program .command(command) @@ -31,6 +114,13 @@ const createCommandWithCommonOptions = (command: string): Command => { const splitter = (value: string): string[] => value.split(/,| |\|/); const toJSON = (value: string): object => JSON.parse(value); +type TestTargetWrapperOptions = GetEnvironmentOptions & GetTestCaseParams & GetTestReportParams & CreateDiscoveryBody & ExecuteTestsBody; + +const addTestTargetWrapper = (fn: (options: TestTargetWrapperOptions) => Promise) => async (options: TestTargetWrapperOptions) => { + const resolvedTestTargetId = await resolveTestTargetId(options.testTargetId); + void fn({ ...options, testTargetId: resolvedTestTargetId }); +}; + const selectTestTarget = async (): Promise => { const testTargets = await getTestTargets(); await listTestTargets({}); @@ -43,7 +133,13 @@ const selectTestTarget = async (): Promise => { const testTargetIndex = await promptUser( "Enter number of the test target you want to use (optional, press Enter to skip): " ); - const testTargetId = testTargets[Number.parseInt(testTargetIndex) - 1].id; + const testTargetIndexAsInt = Number.parseInt(testTargetIndex); + + if (Number.isNaN(testTargetIndexAsInt) || testTargetIndexAsInt < 1 || testTargetIndexAsInt > testTargets.length) { + console.log("❌ could not find a test target with the index you provided"); + process.exit(1); + } + const testTargetId = testTargets[testTargetIndexAsInt - 1].id; if (!testTargetId) { console.log("❌ could not find a test target with the index you provided"); process.exit(1); @@ -54,9 +150,9 @@ const selectTestTarget = async (): Promise => { const testTargetIdOption = new Option("-t, --test-target-id [id]", "Test target ID, if not provided will use the test target id from the config"); -export const buildCmd = (): Command => { +export const buildCmd = async (): Promise => { program - .name("octomind") + .name(BINARY_NAME) .description( `Octomind cli tool. Version: ${version}. Additional documentation see https://octomind.dev/docs/api-reference/`, ) @@ -64,7 +160,8 @@ export const buildCmd = (): Command => { program .command("init") - .description("Initialize configuration by setting up API key") + .description("Initialize configuration by setting up API key. This will create a config file in ~/.config/octomind.json") + .helpGroup("setup") .option("-t, --test-target-id ", "Test target ID") .option("-k, --api-key ", "the api key for authentication") .option("-f, --force", "Force overwrite existing configuration") @@ -94,7 +191,7 @@ export const buildCmd = (): Command => { } } - let apiKey; + let apiKey: string = ""; if (!options.apiKey) { apiKey = await promptUser( "Enter your API key. Go to https://octomind.dev/docs/run-tests/execution-curl#create-an-api-key to learn how to generate one: " @@ -107,7 +204,7 @@ export const buildCmd = (): Command => { // saving here to be able to use the api key for the test targets const newApiKeyConfig = { ...existingConfig, - apiKey: options.apiKey ?? apiKey, + apiKey: options.apiKey, } await saveConfig(newApiKeyConfig); @@ -115,7 +212,7 @@ export const buildCmd = (): Command => { const newConfig: Config = { ...existingConfig, - apiKey: options.apiKey ?? apiKey, + apiKey: options.apiKey, testTargetId: options.testTargetId ?? testTargetId, }; @@ -134,7 +231,8 @@ export const buildCmd = (): Command => { program .command("switch-test-target") - .description("Switch to a different test target") + .description("Switch to a different test target. This will list all available test targets and update the config file in ~/.config/octomind.json") + .helpGroup("setup") .action(async () => { const testTargetId = await selectTestTarget(); const existingConfig = await loadConfig(); @@ -148,6 +246,7 @@ export const buildCmd = (): Command => { createCommandWithCommonOptions("debug") .description("run test cases against local build") + .helpGroup("execute") .requiredOption("-u, --url ", "url the tests should run against") .option( "-i, --id [uuid]", @@ -170,16 +269,11 @@ export const buildCmd = (): Command => { "if we should write playwright config and files to current directory, you can then run 'npx playwright test' to run them again" ) .option("--grep [substring]", "filter test cases by substring") - .action(async (options, command) => { - const resolvedTestTargetId = await resolveTestTargetId( - options.testTargetId - ); - command.setOptionValue("testTargetId", resolvedTestTargetId); - void runDebugtopus(options); - }); + .action(addTestTargetWrapper(runDebugtopus)); createCommandWithCommonOptions("execute") - .description("Execute test cases") + .description("Execute test cases to create a test report") + .helpGroup("execute") .requiredOption("-u, --url ", "URL to test") .addOption(testTargetIdOption) .option("-e, --environment-name [name]", "Environment name", "default") @@ -190,28 +284,18 @@ export const buildCmd = (): Command => { "JSON object of variables to overwrite", toJSON ) - .action(async (options) => { - const testTargetId = await resolveTestTargetId(options.testTargetId); - await executeTests({ - ...options, - testTargetId, - }); - }); + .action(addTestTargetWrapper(executeTests)); createCommandWithCommonOptions("test-report") .description("Get test report details") + .helpGroup("test-reports") .requiredOption("-r, --test-report-id ", "Test report ID") .addOption(testTargetIdOption) - .action(async (options) => { - const testTargetId = await resolveTestTargetId(options.testTargetId); - await listTestReport({ - ...options, - testTargetId, - }); - }); + .action(addTestTargetWrapper(listTestReport)); createCommandWithCommonOptions("register-location") .description("Register a private location") + .helpGroup("private-locations") .requiredOption("-n, --name ", "Location name") .requiredOption("-p, --password ", "Proxy password") .requiredOption("-u, --username ", "Proxy user") @@ -220,26 +304,24 @@ export const buildCmd = (): Command => { createCommandWithCommonOptions("unregister-location") .description("Unregister a private location") + .helpGroup("private-locations") .requiredOption("-n, --name ", "Location name") .action(unregisterLocation); createCommandWithCommonOptions("list-private-locations") .description("List all private locations") + .helpGroup("private-locations") .action(listPrivateLocations); createCommandWithCommonOptions("list-environments") .description("List all environments") + .helpGroup("environments") .addOption(testTargetIdOption) - .action(async (options, command) => { - const resolvedTestTargetId = await resolveTestTargetId( - options.testTargetId - ); - command.setOptionValue("testTargetId", resolvedTestTargetId); - void listEnvironments(options); - }); + .action(addTestTargetWrapper(listEnvironments)); createCommandWithCommonOptions("create-environment") .description("Create a new environment") + .helpGroup("environments") .requiredOption("-n, --name ", "Environment name") .requiredOption("-d, --discovery-url ", "Discovery URL") .addOption(testTargetIdOption) @@ -252,15 +334,18 @@ export const buildCmd = (): Command => { .option("--basic-auth-username [username]", "Basic auth username") .option("--basic-auth-password [password]", "Basic auth password") .option("--private-location-name [name]", "Private location name") - .action(async (_, options) => - createEnvironment({ - ...options, - testTargetId: await resolveTestTargetId(options.testTargetId), - }) - ); + .action(addTestTargetWrapper(createEnvironment)); + + createCommandWithCommonOptions("environment") + .description("Get an environment") + .helpGroup("environments") + .requiredOption("-e, --environment-id ", "Environment ID") + .addOption(testTargetIdOption) + .action(addTestTargetWrapper(getEnvironment)); createCommandWithCommonOptions("update-environment") .description("Update an existing environment") + .helpGroup("environments") .requiredOption("-e, --environment-id ", "Environment ID") .addOption(testTargetIdOption) .option("-n, --name [name]", "Environment name") @@ -274,22 +359,19 @@ export const buildCmd = (): Command => { .option("--basic-auth-username [username]", "Basic auth username") .option("--basic-auth-password [password]", "Basic auth password") .option("--private-location-name [name]", "Private location name") - .action(async (_, options) => - updateEnvironment({ - ...options, - testTargetId: await resolveTestTargetId(options.testTargetId), - }) - ); + .action(addTestTargetWrapper(updateEnvironment)); createCommandWithCommonOptions("delete-environment") .description("Delete an environment") + .helpGroup("environments") .requiredOption("-e, --environment-id ", "Environment ID") .addOption(testTargetIdOption) - .action(deleteEnvironment); + .action(addTestTargetWrapper(deleteEnvironment)); program .command("start-private-location") .description("Start a private location worker, see https://octomind.dev/docs/proxy/private-location") + .helpGroup("private-locations") .option("-n, --name [name]", "Location name") .option("-u, --username [username]", "Proxy user") .option("-p, --password [password]", "Proxy password") @@ -303,33 +385,25 @@ export const buildCmd = (): Command => { program .command("stop-private-location") .description("Stop a private location worker, see https://octomind.dev/docs/proxy/private-location") + .helpGroup("private-locations") .action(stopPLW); createCommandWithCommonOptions("notifications") .description("Get notifications for a test target") + .helpGroup("notifications") .addOption(testTargetIdOption) - .action(async (options, command) => { - const resolvedTestTargetId = await resolveTestTargetId( - options.testTargetId - ); - command.setOptionValue("testTargetId", resolvedTestTargetId); - void listNotifications(options); - }); + .action(addTestTargetWrapper(listNotifications)); createCommandWithCommonOptions("test-case") .description("Get details of a specific test case") + .helpGroup("test-cases") .requiredOption("-c, --test-case-id ", "Test case ID") .addOption(testTargetIdOption) - .action(async (options, command) => { - const resolvedTestTargetId = await resolveTestTargetId( - options.testTargetId - ); - command.setOptionValue("testTargetId", resolvedTestTargetId); - void listTestCase(options); - }); + .action(addTestTargetWrapper(listTestCase)); createCommandWithCommonOptions("create-discovery") .description("Create a new test case discovery") + .helpGroup("execute") .requiredOption("-n, --name ", "Discovery name") .requiredOption("-p, --prompt ", "Discovery prompt") .addOption(testTargetIdOption) @@ -340,28 +414,36 @@ export const buildCmd = (): Command => { "--assigned-tag-ids [ids]", "Comma-separated list of tag IDs", splitter, ) .option("--folder-id [id]", "Folder ID") - .action(async (options, command) => { - const resolvedTestTargetId = await resolveTestTargetId( - options.testTargetId - ); - command.setOptionValue("testTargetId", resolvedTestTargetId); - void createDiscovery(options); - }); + .action(addTestTargetWrapper(createDiscovery)); createCommandWithCommonOptions("list-test-cases") .description("List all test cases") + .helpGroup("test-cases") .addOption(testTargetIdOption) - .action(async (options, command) => { - const resolvedTestTargetId = await resolveTestTargetId( - options.testTargetId - ); - command.setOptionValue("testTargetId", resolvedTestTargetId); - void listTestCases({ ...options, status: "ENABLED" }); - }); + .action(addTestTargetWrapper(listTestCases)); createCommandWithCommonOptions("list-test-targets") .description("List all test targets") + .helpGroup("test-targets") .action(listTestTargets); + + program + .command("install-completion") + .description("Install tab completion") + .helpGroup("completion") + .action(installCompletion); + program + .command("uninstall-completion") + .description("Uninstall tab completion") + .helpGroup("completion") + .action(uninstallCompletion); + + program + .command("completion") + .description("Tab completion") + .helpGroup("completion") + .allowExcessArguments(true) + .action(() => tabCompletion(program)); return program; }; diff --git a/src/index.ts b/src/index.ts index 9d0edf9..21d8f7b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,3 @@ #!/usr/bin/env node import { buildCmd } from "./cli"; -const cmd = buildCmd(); -cmd.parse(); +buildCmd().then((cmd) => cmd.parse()); diff --git a/src/tools/environments.ts b/src/tools/environments.ts index 5732e8c..2da81c3 100644 --- a/src/tools/environments.ts +++ b/src/tools/environments.ts @@ -11,6 +11,11 @@ export type UpdateEnvironmentOptions = paths["/apiKey/v2/test-targets/{testTargetId}/environments/{environmentId}"]["patch"]["requestBody"]["content"]["application/json"]; export type EnvironmentResponse = components["schemas"]["EnvironmentResponse"]; +export type GetEnvironmentOptions = { + testTargetId: string; + environmentId: string; +}; + export const listEnvironments = async ( options: GetEnvironmentsOptions & ListOptions, ): Promise => { @@ -102,16 +107,15 @@ export const createEnvironment = async ( }; export const updateEnvironment = async ( - options: UpdateEnvironmentOptions & { - testTargetId: string; - environmentId: string; - testAccountUsername?: string; - testAccountPassword?: string; - basicAuthUsername?: string; - basicAuthPassword?: string; - privateLocationName?: string; - testAccountOtpInitializerKey?: string; - } & ListOptions, + options: UpdateEnvironmentOptions & + GetEnvironmentOptions & { + testAccountUsername?: string; + testAccountPassword?: string; + basicAuthUsername?: string; + basicAuthPassword?: string; + privateLocationName?: string; + testAccountOtpInitializerKey?: string; + } & ListOptions, ): Promise => { const { data, error } = await client.PATCH( "/apiKey/v2/test-targets/{testTargetId}/environments/{environmentId}", @@ -155,11 +159,32 @@ export const updateEnvironment = async ( console.log(` Updated At: ${response.updatedAt}`); }; +export const getEnvironment = async ( + options: GetEnvironmentOptions & ListOptions, +): Promise => { + const environments = await getEnvironments({ + testTargetId: options.testTargetId, + }); + + const environment = environments.find((e) => e.id === options.environmentId); + if (!environment) { + throw new Error("environment not found"); + } + + if (options.json) { + logJson({ success: true }); + return; + } + + console.log("Environment:"); + console.log(`- Name: ${environment.name}`); + console.log(` ID: ${environment.id}`); + console.log(` Discovery URL: ${environment.discoveryUrl}`); + console.log(` Updated At: ${environment.updatedAt}`); +}; + export const deleteEnvironment = async ( - options: { - testTargetId: string; - environmentId: string; - } & ListOptions, + options: GetEnvironmentOptions & ListOptions, ): Promise => { const { error } = await client.DELETE( "/apiKey/v2/test-targets/{testTargetId}/environments/{environmentId}", diff --git a/src/tools/test-reports.ts b/src/tools/test-reports.ts index 374e746..7a07dcb 100644 --- a/src/tools/test-reports.ts +++ b/src/tools/test-reports.ts @@ -40,8 +40,8 @@ export const executeTests = async ( console.log("Test execution started successfully!"); console.log("Test Report URL:", data.testReportUrl); console.log("Report Status:", data.testReport?.status); - - if (data.testReport?.testResults?.length ?? 0 > 0) { + const numberOfTestResults = data.testReport?.testResults?.length ?? 0; + if (numberOfTestResults > 0) { console.log("\nTest Results:"); data.testReport?.testResults?.forEach((result) => { console.log(`- Test ${result.testCaseId}: ${result.status}`); @@ -82,8 +82,8 @@ export const listTestReport = async ( console.log("Test Report Details:"); console.log("Status:", response.status); console.log("Execution URL:", response.executionUrl); - - if ((response.testResults ?? []).length > 0) { + const numberOfTestResults = response.testResults?.length ?? 0; + if (numberOfTestResults > 0) { console.log("\nTest Results:"); for (const result of response.testResults ?? []) { console.log(`- Test ${result.testCaseId}: ${result.status}`); diff --git a/tests/cli.spec.ts b/tests/cli.spec.ts index 9d7ba32..14865b5 100644 --- a/tests/cli.spec.ts +++ b/tests/cli.spec.ts @@ -14,8 +14,8 @@ jest.mock("../src/config", () => ({ const originalConsoleLog = console.log; const originalConsoleError = console.error; -beforeAll(() => { - buildCmd(); +beforeAll(async () => { + await buildCmd(); program.exitOverride((err) => { throw err; }); From 9b90da2a41d55485ef0e5ad14ccff1165ae882fe Mon Sep 17 00:00:00 2001 From: Stefan Rinke Date: Sun, 3 Aug 2025 12:06:19 +0200 Subject: [PATCH 02/21] completion in seperate file --- src/cli.ts | 131 +++++++++++++--------------------------------- src/completion.ts | 79 ++++++++++++++++++++++++++++ 2 files changed, 116 insertions(+), 94 deletions(-) create mode 100644 src/completion.ts diff --git a/src/cli.ts b/src/cli.ts index 2f7da7f..b32c764 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -26,90 +26,23 @@ import { import { Config, loadConfig, saveConfig } from "./config"; import { promptUser, resolveTestTargetId } from "./helpers"; import { runDebugtopus } from "./debugtopus"; -import tabtab, { TabtabEnv } from "tabtab"; + import { startPrivateLocationWorker, stopPLW } from "./plw"; import { getTestTargets, listTestTargets } from "./tools/test-targets"; - -const BINARY_NAME = "octomind"; - -const logOptions = async (command: Command, line: string) => { - const argv = line.split(" "); - const usedOptions = command.options.filter((option) => argv.includes(option.long!) || argv.includes(option.short!)).map((option) => option.flags); - tabtab.log(command.options.filter((option) => option.long) - .filter((option) => !usedOptions.includes(option.flags)) - .map((option) => option.long!)); - tabtab.log(command.options.filter((option) => option.short) - .filter((option) => !usedOptions.includes(option.flags)) - .map((option) => option.short!)); -} - -const completion = async (env: TabtabEnv, program: Command) => { - if (!env.complete) return; - - const argv = env.line.split(" "); - - const command = program.commands.find((command) => command.name() === argv[1]); - if (command) { - if( env.prev === "-t" || env.prev === "--test-target-id") { - const testTargets = await getTestTargets(); - tabtab.log(testTargets.map((testTarget) => testTarget.id)); - return; +import { installCompletion, tabCompletion, uninstallCompletion } from "./completion"; + +function Completable {}>(Base: T) { + return class extends Base { + timestamp = Date.now(); + + completer() { + return this; } - if( command.name() === "test-case" && (env.prev === "-c" || env.prev === "--test-case-id") ) { - const config = await loadConfig(); - if( config.testTargetId ) { - const testCases = await getTestCases({ testTargetId: config.testTargetId, status: "ENABLED" }); - tabtab.log(testCases.map((testCase) => testCase.id)); - return; - } - } - if( (command.name() === "update-environment" || command.name() === "delete-environment"|| command.name() === "environment") - && (env.prev === "-e" || env.prev === "--environment-id") ) { - const config = await loadConfig(); - if( config.testTargetId ) { - const environments = await getEnvironments({ testTargetId: config.testTargetId }); - tabtab.log(environments.map((environment) => environment.id)); - return; - } - } - await logOptions(command, env.line); - return; - } - - tabtab.log(["--help"]); - tabtab.log(program.options.filter((option) => option.long).map((option) => option.long!)); - tabtab.log(program.options.filter((option) => option.short).map((option) => option.short!)); - tabtab.log(program.commands.map((command) => command.name())); -}; - -const installCompletion = async () => { - await tabtab - .install({ - name: BINARY_NAME, - completer: BINARY_NAME - }) - .catch(err => console.error('INSTALL ERROR', err)); -} - -const uninstallCompletion = async () => { - await tabtab - .uninstall({ - name: BINARY_NAME, - }) - .catch(err => console.error('UNINSTALL ERROR', err)); -} - -const tabCompletion = async (program: Command) => { - const env = tabtab.parseEnv(process.env); - await completion(env, program); + }; } -const createCommandWithCommonOptions = (command: string): Command => { - return program - .command(command) - .option("-j, --json", "Output raw JSON response"); -}; +export const BINARY_NAME = "octomind"; const splitter = (value: string): string[] => value.split(/,| |\|/); const toJSON = (value: string): object => JSON.parse(value); @@ -150,9 +83,19 @@ const selectTestTarget = async (): Promise => { const testTargetIdOption = new Option("-t, --test-target-id [id]", "Test target ID, if not provided will use the test target id from the config"); +const createCommandWithCommonOptions = (program: Command, command: string): Command => { + return program + .command(command) + .option("-j, --json", "Output raw JSON response"); +}; + export const buildCmd = async (): Promise => { + const completableProgram = Completable(Command); + const program = new completableProgram(); + program .name(BINARY_NAME) + .completer() .description( `Octomind cli tool. Version: ${version}. Additional documentation see https://octomind.dev/docs/api-reference/`, ) @@ -244,7 +187,7 @@ export const buildCmd = async (): Promise => { console.log(`✨ Switched to test target: ${testTargetId}`); }); - createCommandWithCommonOptions("debug") + createCommandWithCommonOptions(program, "debug") .description("run test cases against local build") .helpGroup("execute") .requiredOption("-u, --url ", "url the tests should run against") @@ -271,7 +214,7 @@ export const buildCmd = async (): Promise => { .option("--grep [substring]", "filter test cases by substring") .action(addTestTargetWrapper(runDebugtopus)); - createCommandWithCommonOptions("execute") + createCommandWithCommonOptions(program, "execute") .description("Execute test cases to create a test report") .helpGroup("execute") .requiredOption("-u, --url ", "URL to test") @@ -286,14 +229,14 @@ export const buildCmd = async (): Promise => { ) .action(addTestTargetWrapper(executeTests)); - createCommandWithCommonOptions("test-report") + createCommandWithCommonOptions(program, "test-report") .description("Get test report details") .helpGroup("test-reports") .requiredOption("-r, --test-report-id ", "Test report ID") .addOption(testTargetIdOption) .action(addTestTargetWrapper(listTestReport)); - createCommandWithCommonOptions("register-location") + createCommandWithCommonOptions(program, "register-location") .description("Register a private location") .helpGroup("private-locations") .requiredOption("-n, --name ", "Location name") @@ -302,24 +245,24 @@ export const buildCmd = async (): Promise => { .requiredOption("-a, --address
", "Location address") .action(registerLocation); - createCommandWithCommonOptions("unregister-location") + createCommandWithCommonOptions(program, "unregister-location") .description("Unregister a private location") .helpGroup("private-locations") .requiredOption("-n, --name ", "Location name") .action(unregisterLocation); - createCommandWithCommonOptions("list-private-locations") + createCommandWithCommonOptions(program, "list-private-locations") .description("List all private locations") .helpGroup("private-locations") .action(listPrivateLocations); - createCommandWithCommonOptions("list-environments") + createCommandWithCommonOptions(program, "list-environments") .description("List all environments") .helpGroup("environments") .addOption(testTargetIdOption) .action(addTestTargetWrapper(listEnvironments)); - createCommandWithCommonOptions("create-environment") + createCommandWithCommonOptions(program, "create-environment") .description("Create a new environment") .helpGroup("environments") .requiredOption("-n, --name ", "Environment name") @@ -336,14 +279,14 @@ export const buildCmd = async (): Promise => { .option("--private-location-name [name]", "Private location name") .action(addTestTargetWrapper(createEnvironment)); - createCommandWithCommonOptions("environment") + createCommandWithCommonOptions(program, "environment") .description("Get an environment") .helpGroup("environments") .requiredOption("-e, --environment-id ", "Environment ID") .addOption(testTargetIdOption) .action(addTestTargetWrapper(getEnvironment)); - createCommandWithCommonOptions("update-environment") + createCommandWithCommonOptions(program, "update-environment") .description("Update an existing environment") .helpGroup("environments") .requiredOption("-e, --environment-id ", "Environment ID") @@ -361,7 +304,7 @@ export const buildCmd = async (): Promise => { .option("--private-location-name [name]", "Private location name") .action(addTestTargetWrapper(updateEnvironment)); - createCommandWithCommonOptions("delete-environment") + createCommandWithCommonOptions(program, "delete-environment") .description("Delete an environment") .helpGroup("environments") .requiredOption("-e, --environment-id ", "Environment ID") @@ -388,20 +331,20 @@ export const buildCmd = async (): Promise => { .helpGroup("private-locations") .action(stopPLW); - createCommandWithCommonOptions("notifications") + createCommandWithCommonOptions(program, "notifications") .description("Get notifications for a test target") .helpGroup("notifications") .addOption(testTargetIdOption) .action(addTestTargetWrapper(listNotifications)); - createCommandWithCommonOptions("test-case") + createCommandWithCommonOptions(program, "test-case") .description("Get details of a specific test case") .helpGroup("test-cases") .requiredOption("-c, --test-case-id ", "Test case ID") .addOption(testTargetIdOption) .action(addTestTargetWrapper(listTestCase)); - createCommandWithCommonOptions("create-discovery") + createCommandWithCommonOptions(program, "create-discovery") .description("Create a new test case discovery") .helpGroup("execute") .requiredOption("-n, --name ", "Discovery name") @@ -416,13 +359,13 @@ export const buildCmd = async (): Promise => { .option("--folder-id [id]", "Folder ID") .action(addTestTargetWrapper(createDiscovery)); - createCommandWithCommonOptions("list-test-cases") + createCommandWithCommonOptions(program, "list-test-cases") .description("List all test cases") .helpGroup("test-cases") .addOption(testTargetIdOption) .action(addTestTargetWrapper(listTestCases)); - createCommandWithCommonOptions("list-test-targets") + createCommandWithCommonOptions(program, "list-test-targets") .description("List all test targets") .helpGroup("test-targets") .action(listTestTargets); diff --git a/src/completion.ts b/src/completion.ts new file mode 100644 index 0000000..8a02db0 --- /dev/null +++ b/src/completion.ts @@ -0,0 +1,79 @@ +import tabtab, { TabtabEnv } from "tabtab"; +import { Command } from "commander"; +import { getTestCases } from "./tools/test-cases"; +import { getTestTargets } from "./tools/test-targets"; +import { loadConfig } from "./config"; +import { getEnvironments } from "./tools/environments"; +import { BINARY_NAME } from "./cli"; + +const logOptions = async (command: Command, line: string) => { + const argv = line.split(" "); + const usedOptions = command.options.filter((option) => argv.includes(option.long!) || argv.includes(option.short!)).map((option) => option.flags); + tabtab.log(command.options.filter((option) => option.long) + .filter((option) => !usedOptions.includes(option.flags)) + .map((option) => option.long!)); + tabtab.log(command.options.filter((option) => option.short) + .filter((option) => !usedOptions.includes(option.flags)) + .map((option) => option.short!)); +} + +const completion = async (env: TabtabEnv, program: Command) => { + if (!env.complete) return; + + const argv = env.line.split(" "); + + const command = program.commands.find((command) => command.name() === argv[1]); + if (command) { + if( env.prev === "-t" || env.prev === "--test-target-id") { + const testTargets = await getTestTargets(); + tabtab.log(testTargets.map((testTarget) => testTarget.id)); + return; + } + if( command.name() === "test-case" && (env.prev === "-c" || env.prev === "--test-case-id") ) { + const config = await loadConfig(); + if( config.testTargetId ) { + const testCases = await getTestCases({ testTargetId: config.testTargetId, status: "ENABLED" }); + tabtab.log(testCases.map((testCase) => testCase.id)); + return; + } + } + if( (command.name() === "update-environment" || command.name() === "delete-environment"|| command.name() === "environment") + && (env.prev === "-e" || env.prev === "--environment-id") ) { + const config = await loadConfig(); + if( config.testTargetId ) { + const environments = await getEnvironments({ testTargetId: config.testTargetId }); + tabtab.log(environments.map((environment) => environment.id)); + return; + } + } + await logOptions(command, env.line); + return; + } + + tabtab.log(["--help"]); + tabtab.log(program.options.filter((option) => option.long).map((option) => option.long!)); + tabtab.log(program.options.filter((option) => option.short).map((option) => option.short!)); + tabtab.log(program.commands.map((command) => command.name())); +}; + +export const installCompletion = async () => { + await tabtab + .install({ + name: BINARY_NAME, + completer: BINARY_NAME + }) + .catch(err => console.error('INSTALL ERROR', err)); +} + +export const uninstallCompletion = async () => { + await tabtab + .uninstall({ + name: BINARY_NAME, + }) + .catch(err => console.error('UNINSTALL ERROR', err)); +} + +export const tabCompletion = async (program: Command) => { + const env = tabtab.parseEnv(process.env); + await completion(env, program); +} \ No newline at end of file From 7b3b23a1f1a6b1e91ef61ce024a3641301ecc316 Mon Sep 17 00:00:00 2001 From: Stefan Rinke Date: Sun, 3 Aug 2025 14:37:23 +0200 Subject: [PATCH 03/21] fix tests --- tests/cli.spec.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/cli.spec.ts b/tests/cli.spec.ts index 14865b5..107d985 100644 --- a/tests/cli.spec.ts +++ b/tests/cli.spec.ts @@ -1,4 +1,4 @@ -import { program } from "commander"; +import { Command } from "commander"; import { buildCmd } from "../src/cli"; import { executeTests } from "../src/tools"; import { runDebugtopus } from "../src/debugtopus"; @@ -13,9 +13,10 @@ jest.mock("../src/config", () => ({ const originalConsoleLog = console.log; const originalConsoleError = console.error; +let program: Command; beforeAll(async () => { - await buildCmd(); + program = await buildCmd(); program.exitOverride((err) => { throw err; }); From 2679ab969bfd81991f2ecaddcfefc3b9eef60239 Mon Sep 17 00:00:00 2001 From: Stefan Rinke Date: Sun, 3 Aug 2025 16:11:41 +0200 Subject: [PATCH 04/21] refactored completion --- package.json | 2 + pnpm-lock.yaml | 17 +++++ src/cli.ts | 79 ++++++++++++++--------- src/completion.ts | 129 +++++++++++++++++++++++++++++--------- src/tools/environments.ts | 2 +- src/tools/test-reports.ts | 19 ++++++ 6 files changed, 187 insertions(+), 61 deletions(-) diff --git a/package.json b/package.json index 48322ec..79ca39c 100644 --- a/package.json +++ b/package.json @@ -32,9 +32,11 @@ "license": "MIT", "dependencies": { "@playwright/test": "^1.54.1", + "@types/shell-quote": "^1.7.5", "commander": "^14.0.0", "openapi-fetch": "^0.14.0", "otplib": "^12.0.1", + "shell-quote": "^1.8.3", "tabtab": "^3.0.2" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 55cab6b..bde4bc1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,9 @@ importers: '@playwright/test': specifier: ^1.54.1 version: 1.54.1 + '@types/shell-quote': + specifier: ^1.7.5 + version: 1.7.5 commander: specifier: ^14.0.0 version: 14.0.0 @@ -20,6 +23,9 @@ importers: otplib: specifier: ^12.0.1 version: 12.0.1 + shell-quote: + specifier: ^1.8.3 + version: 1.8.3 tabtab: specifier: ^3.0.2 version: 3.0.2 @@ -735,6 +741,9 @@ packages: '@types/node@24.1.0': resolution: {integrity: sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==} + '@types/shell-quote@1.7.5': + resolution: {integrity: sha512-+UE8GAGRPbJVQDdxi16dgadcBfQ+KG2vgZhV1+3A1XmHbmwcdwhCUwIdy+d3pAGrbvgRoVSjeI9vOWyq376Yzw==} + '@types/stack-utils@2.0.3': resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} @@ -2762,6 +2771,10 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + shell-quote@1.8.3: + resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} + engines: {node: '>= 0.4'} + side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} engines: {node: '>= 0.4'} @@ -3930,6 +3943,8 @@ snapshots: dependencies: undici-types: 7.8.0 + '@types/shell-quote@1.7.5': {} + '@types/stack-utils@2.0.3': {} '@types/tabtab@3.0.4': @@ -6307,6 +6322,8 @@ snapshots: shebang-regex@3.0.0: {} + shell-quote@1.8.3: {} + side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 diff --git a/src/cli.ts b/src/cli.ts index b32c764..f2d3c45 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -1,4 +1,4 @@ -import { program, Command, Option } from "commander"; +import { Command, Option } from "commander"; import { version } from "./version"; import { createDiscovery, @@ -14,14 +14,12 @@ import { unregisterLocation, updateEnvironment, listTestCases, - getTestCases, - getEnvironments, - getEnvironment, ExecuteTestsBody, CreateDiscoveryBody, GetTestReportParams, GetEnvironmentOptions, GetTestCaseParams, + getEnvironment, } from "./tools"; import { Config, loadConfig, saveConfig } from "./config"; import { promptUser, resolveTestTargetId } from "./helpers"; @@ -30,17 +28,7 @@ import { runDebugtopus } from "./debugtopus"; import { startPrivateLocationWorker, stopPLW } from "./plw"; import { getTestTargets, listTestTargets } from "./tools/test-targets"; -import { installCompletion, tabCompletion, uninstallCompletion } from "./completion"; - -function Completable {}>(Base: T) { - return class extends Base { - timestamp = Date.now(); - - completer() { - return this; - } - }; -} +import { CompletableCommand, environmentIdCompleter, installCompletion, optionsCompleter, tabCompletion, testCaseIdCompleter, testReportIdCompleter, testTargetIdCompleter, uninstallCompletion } from "./completion"; export const BINARY_NAME = "octomind"; @@ -83,26 +71,26 @@ const selectTestTarget = async (): Promise => { const testTargetIdOption = new Option("-t, --test-target-id [id]", "Test target ID, if not provided will use the test target id from the config"); -const createCommandWithCommonOptions = (program: Command, command: string): Command => { +const createCommandWithCommonOptions = (program: CompletableCommand, command: string): CompletableCommand => { return program - .command(command) - .option("-j, --json", "Output raw JSON response"); + .completableCommand(command) + .option("-j, --json", "Output raw JSON response") as CompletableCommand; }; export const buildCmd = async (): Promise => { - const completableProgram = Completable(Command); - const program = new completableProgram(); + const program = new CompletableCommand(); program .name(BINARY_NAME) - .completer() .description( `Octomind cli tool. Version: ${version}. Additional documentation see https://octomind.dev/docs/api-reference/`, ) .version(version); program - .command("init") + .completer(testTargetIdCompleter) + .completer(optionsCompleter) + .completableCommand("init") .description("Initialize configuration by setting up API key. This will create a config file in ~/.config/octomind.json") .helpGroup("setup") .option("-t, --test-target-id ", "Test target ID") @@ -173,7 +161,7 @@ export const buildCmd = async (): Promise => { ); program - .command("switch-test-target") + .completableCommand("switch-test-target") .description("Switch to a different test target. This will list all available test targets and update the config file in ~/.config/octomind.json") .helpGroup("setup") .action(async () => { @@ -188,11 +176,15 @@ export const buildCmd = async (): Promise => { }); createCommandWithCommonOptions(program, "debug") + .completer(environmentIdCompleter) + .completer(testTargetIdCompleter) + .completer(testCaseIdCompleter) + .completer(optionsCompleter) .description("run test cases against local build") .helpGroup("execute") .requiredOption("-u, --url ", "url the tests should run against") .option( - "-i, --id [uuid]", + "-c, --test-case-id [uuid]", "id of the test case you want to run, if not provided will run all test cases in the test target", ) .option( @@ -200,7 +192,7 @@ export const buildCmd = async (): Promise => { "id of the environment you want to run against, if not provided will run all test cases against the default environment", ) .option( - "-a, --test-target-id [uuid]", + "-t, --test-target-id [uuid]", "id of the test target of the test case, if not provided will use the test target id from the config", ) .option( @@ -215,6 +207,8 @@ export const buildCmd = async (): Promise => { .action(addTestTargetWrapper(runDebugtopus)); createCommandWithCommonOptions(program, "execute") + .completer(testTargetIdCompleter) + .completer(optionsCompleter) .description("Execute test cases to create a test report") .helpGroup("execute") .requiredOption("-u, --url ", "URL to test") @@ -230,6 +224,9 @@ export const buildCmd = async (): Promise => { .action(addTestTargetWrapper(executeTests)); createCommandWithCommonOptions(program, "test-report") + .completer(testReportIdCompleter) + .completer(testTargetIdCompleter) + .completer(optionsCompleter) .description("Get test report details") .helpGroup("test-reports") .requiredOption("-r, --test-report-id ", "Test report ID") @@ -237,6 +234,7 @@ export const buildCmd = async (): Promise => { .action(addTestTargetWrapper(listTestReport)); createCommandWithCommonOptions(program, "register-location") + .completer(optionsCompleter) .description("Register a private location") .helpGroup("private-locations") .requiredOption("-n, --name ", "Location name") @@ -246,23 +244,28 @@ export const buildCmd = async (): Promise => { .action(registerLocation); createCommandWithCommonOptions(program, "unregister-location") + .completer(optionsCompleter) .description("Unregister a private location") .helpGroup("private-locations") .requiredOption("-n, --name ", "Location name") .action(unregisterLocation); createCommandWithCommonOptions(program, "list-private-locations") + .completer(optionsCompleter) .description("List all private locations") .helpGroup("private-locations") .action(listPrivateLocations); createCommandWithCommonOptions(program, "list-environments") + .completer(testTargetIdCompleter) .description("List all environments") .helpGroup("environments") .addOption(testTargetIdOption) .action(addTestTargetWrapper(listEnvironments)); createCommandWithCommonOptions(program, "create-environment") + .completer(testTargetIdCompleter) + .completer(optionsCompleter) .description("Create a new environment") .helpGroup("environments") .requiredOption("-n, --name ", "Environment name") @@ -280,6 +283,9 @@ export const buildCmd = async (): Promise => { .action(addTestTargetWrapper(createEnvironment)); createCommandWithCommonOptions(program, "environment") + .completer(environmentIdCompleter) + .completer(testTargetIdCompleter) + .completer(optionsCompleter) .description("Get an environment") .helpGroup("environments") .requiredOption("-e, --environment-id ", "Environment ID") @@ -287,6 +293,9 @@ export const buildCmd = async (): Promise => { .action(addTestTargetWrapper(getEnvironment)); createCommandWithCommonOptions(program, "update-environment") + .completer(environmentIdCompleter) + .completer(testTargetIdCompleter) + .completer(optionsCompleter) .description("Update an existing environment") .helpGroup("environments") .requiredOption("-e, --environment-id ", "Environment ID") @@ -305,6 +314,8 @@ export const buildCmd = async (): Promise => { .action(addTestTargetWrapper(updateEnvironment)); createCommandWithCommonOptions(program, "delete-environment") + .completer(environmentIdCompleter) + .completer(testTargetIdCompleter) .description("Delete an environment") .helpGroup("environments") .requiredOption("-e, --environment-id ", "Environment ID") @@ -312,7 +323,8 @@ export const buildCmd = async (): Promise => { .action(addTestTargetWrapper(deleteEnvironment)); program - .command("start-private-location") + .completer(optionsCompleter) + .completableCommand("start-private-location") .description("Start a private location worker, see https://octomind.dev/docs/proxy/private-location") .helpGroup("private-locations") .option("-n, --name [name]", "Location name") @@ -326,18 +338,22 @@ export const buildCmd = async (): Promise => { .action(startPrivateLocationWorker); program - .command("stop-private-location") + .completableCommand("stop-private-location") + .completer(optionsCompleter) .description("Stop a private location worker, see https://octomind.dev/docs/proxy/private-location") .helpGroup("private-locations") .action(stopPLW); createCommandWithCommonOptions(program, "notifications") + .completer(testTargetIdCompleter) .description("Get notifications for a test target") .helpGroup("notifications") .addOption(testTargetIdOption) .action(addTestTargetWrapper(listNotifications)); createCommandWithCommonOptions(program, "test-case") + .completer(testCaseIdCompleter) + .completer(testTargetIdCompleter) .description("Get details of a specific test case") .helpGroup("test-cases") .requiredOption("-c, --test-case-id ", "Test case ID") @@ -345,6 +361,8 @@ export const buildCmd = async (): Promise => { .action(addTestTargetWrapper(listTestCase)); createCommandWithCommonOptions(program, "create-discovery") + .completer(testTargetIdCompleter) + .completer(optionsCompleter) .description("Create a new test case discovery") .helpGroup("execute") .requiredOption("-n, --name ", "Discovery name") @@ -360,6 +378,7 @@ export const buildCmd = async (): Promise => { .action(addTestTargetWrapper(createDiscovery)); createCommandWithCommonOptions(program, "list-test-cases") + .completer(testTargetIdCompleter) .description("List all test cases") .helpGroup("test-cases") .addOption(testTargetIdOption) @@ -371,18 +390,18 @@ export const buildCmd = async (): Promise => { .action(listTestTargets); program - .command("install-completion") + .completableCommand("install-completion") .description("Install tab completion") .helpGroup("completion") .action(installCompletion); program - .command("uninstall-completion") + .completableCommand("uninstall-completion") .description("Uninstall tab completion") .helpGroup("completion") .action(uninstallCompletion); program - .command("completion") + .completableCommand("completion") .description("Tab completion") .helpGroup("completion") .allowExcessArguments(true) diff --git a/src/completion.ts b/src/completion.ts index 8a02db0..13210bb 100644 --- a/src/completion.ts +++ b/src/completion.ts @@ -1,13 +1,47 @@ import tabtab, { TabtabEnv } from "tabtab"; +import { parse } from 'shell-quote'; import { Command } from "commander"; import { getTestCases } from "./tools/test-cases"; import { getTestTargets } from "./tools/test-targets"; import { loadConfig } from "./config"; import { getEnvironments } from "./tools/environments"; import { BINARY_NAME } from "./cli"; +import { getTestReports } from "./tools"; -const logOptions = async (command: Command, line: string) => { - const argv = line.split(" "); +// returns whether the completer has handled the completion +type CompleterFn = (command: CompletableCommand, env: TabtabEnv) => Promise; + +export class CompletableCommand extends Command { + private _completerFn: CompleterFn[] = []; + + completer(completerFn?: CompleterFn): CompletableCommand { + if (completerFn) { + this._completerFn.push(completerFn); + } + return this; + } + + getCompleter(): CompleterFn[] { + return this._completerFn; + } + + override createCommand(name?: string): CompletableCommand { + return new CompletableCommand(name); + } + + // Helper method to create completable commands + completableCommand(nameAndArgs: string, description?: string): CompletableCommand { + const cmd = description + ? this.command(nameAndArgs, description) + : this.command(nameAndArgs); + // Ensure it has the right prototype + Object.setPrototypeOf(cmd, CompletableCommand.prototype); + return cmd as CompletableCommand; + } +} + +const logOptions = async (command: CompletableCommand, line: string) => { + const argv = parse(line).map((arg) => arg.toString()); const usedOptions = command.options.filter((option) => argv.includes(option.long!) || argv.includes(option.short!)).map((option) => option.flags); tabtab.log(command.options.filter((option) => option.long) .filter((option) => !usedOptions.includes(option.flags)) @@ -17,36 +51,75 @@ const logOptions = async (command: Command, line: string) => { .map((option) => option.short!)); } -const completion = async (env: TabtabEnv, program: Command) => { - if (!env.complete) return; - - const argv = env.line.split(" "); +export const optionsCompleter = async (command: CompletableCommand, env: TabtabEnv): Promise => { + await logOptions(command, env.line); + return true; +} - const command = program.commands.find((command) => command.name() === argv[1]); - if (command) { - if( env.prev === "-t" || env.prev === "--test-target-id") { - const testTargets = await getTestTargets(); - tabtab.log(testTargets.map((testTarget) => testTarget.id)); - return; +export const testTargetIdCompleter = async (_command: CompletableCommand, env: TabtabEnv): Promise => { + if( env.prev === "-t" || env.prev === "--test-target-id") { + const testTargets = await getTestTargets(); + tabtab.log(testTargets.map((testTarget) => testTarget.id)); + return true; + } + return false; +} + +export const environmentIdCompleter = async (_command: CompletableCommand, env: TabtabEnv): Promise => { + if( env.prev === "-e" || env.prev === "--environment-id") { + const config = await loadConfig(); + if( config.testTargetId ) { + const environments = await getEnvironments({ testTargetId: config.testTargetId }); + tabtab.log(environments.map((environment) => environment.id)); + return true; + } + } + return false; +} + +export const testCaseIdCompleter = async (_command: CompletableCommand, env: TabtabEnv): Promise => { + if( env.prev === "-c" || env.prev === "--test-case-id") { + const config = await loadConfig(); + if( config.testTargetId ) { + const testCases = await getTestCases({ testTargetId: config.testTargetId, status: "ENABLED" }); + tabtab.log(testCases.map((testCase) => testCase.id)); + return true; } - if( command.name() === "test-case" && (env.prev === "-c" || env.prev === "--test-case-id") ) { - const config = await loadConfig(); - if( config.testTargetId ) { - const testCases = await getTestCases({ testTargetId: config.testTargetId, status: "ENABLED" }); - tabtab.log(testCases.map((testCase) => testCase.id)); - return; + } + return false; +} + +export const testReportIdCompleter = async (_command: CompletableCommand, env: TabtabEnv): Promise => { + if( env.prev === "-r" || env.prev === "--test-report-id") { + const config = await loadConfig(); + if( config.testTargetId ) { + const testReports = await getTestReports({ testTargetId: config.testTargetId }); + if(testReports) { + tabtab.log(testReports.map((testReport) => testReport?.id ?? "")); } } - if( (command.name() === "update-environment" || command.name() === "delete-environment"|| command.name() === "environment") - && (env.prev === "-e" || env.prev === "--environment-id") ) { - const config = await loadConfig(); - if( config.testTargetId ) { - const environments = await getEnvironments({ testTargetId: config.testTargetId }); - tabtab.log(environments.map((environment) => environment.id)); - return; + return true; + } + return false; +} + +export const tabCompletion = async (program: CompletableCommand) => { + const env = tabtab.parseEnv(process.env); + if (!env.complete) return; + + const argv = parse(env.line).map((arg) => arg.toString()); + + const command = program.commands.find((command) => command.name() === argv[1]) as CompletableCommand; + if (command) { + const completers = command.getCompleter(); + if(completers.length > 0) { + for (const completer of completers) { + const handled = await completer(command, env); + if(handled) { + return; + } } } - await logOptions(command, env.line); return; } @@ -73,7 +146,3 @@ export const uninstallCompletion = async () => { .catch(err => console.error('UNINSTALL ERROR', err)); } -export const tabCompletion = async (program: Command) => { - const env = tabtab.parseEnv(process.env); - await completion(env, program); -} \ No newline at end of file diff --git a/src/tools/environments.ts b/src/tools/environments.ts index 2da81c3..a702657 100644 --- a/src/tools/environments.ts +++ b/src/tools/environments.ts @@ -172,7 +172,7 @@ export const getEnvironment = async ( } if (options.json) { - logJson({ success: true }); + logJson({ environment }); return; } diff --git a/src/tools/test-reports.ts b/src/tools/test-reports.ts index 7a07dcb..2364175 100644 --- a/src/tools/test-reports.ts +++ b/src/tools/test-reports.ts @@ -56,6 +56,25 @@ export const executeTests = async ( } }; +export const getTestReports = async (options: { + testTargetId: string; +}): Promise => { + const { data, error } = await client.GET( + "/apiKey/v2/test-targets/{testTargetId}/test-reports", + { + params: { + path: { + testTargetId: options.testTargetId, + }, + }, + }, + ); + + handleError(error); + + return data?.data; +}; + export const listTestReport = async ( options: GetTestReportParams & ListOptions, ): Promise => { From 5be482eafc3389263e513f92facfc3ed298923a8 Mon Sep 17 00:00:00 2001 From: Stefan Rinke Date: Sun, 3 Aug 2025 18:15:01 +0200 Subject: [PATCH 05/21] test --- src/tools/index.ts | 1 + tests/completion.spec.ts | 181 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 182 insertions(+) create mode 100644 tests/completion.spec.ts diff --git a/src/tools/index.ts b/src/tools/index.ts index 47be71d..c66a3a4 100644 --- a/src/tools/index.ts +++ b/src/tools/index.ts @@ -5,3 +5,4 @@ export * from "./test-cases"; export * from "./notifications"; export * from "./discoveries"; export * from "./playwright"; +export * from "./test-targets"; \ No newline at end of file diff --git a/tests/completion.spec.ts b/tests/completion.spec.ts new file mode 100644 index 0000000..e2eefa5 --- /dev/null +++ b/tests/completion.spec.ts @@ -0,0 +1,181 @@ +import { environmentIdCompleter, optionsCompleter, testCaseIdCompleter, testReportIdCompleter, testTargetIdCompleter } from "../src/completion"; +import tabtab, { TabtabEnv } from "tabtab"; +import { CompletableCommand } from "../src/completion"; +import { getTestTargets } from "../src/tools/test-targets"; +import { getEnvironments } from "../src/tools/environments"; +import { loadConfig } from "../src/config"; +import { getTestCases } from "../src/tools/test-cases"; +import { getTestReports } from "../src/tools/test-reports"; + +jest.mock("../src/tools/test-targets"); +jest.mock("tabtab"); +jest.mock("../src/config"); +jest.mock("../src/tools/environments"); +jest.mock("../src/tools/test-cases"); +jest.mock("../src/tools/test-reports"); + +describe("completion", () => { + + const env: TabtabEnv = { + line: "debug --test-target-id", + prev: "--test-target-id", + complete: false , + words: 3, + point: 0, + partial: "", + last: "", + lastPartial: "", + }; + + const mockCommand: CompletableCommand = { + name: jest.fn(), + getCompleter: jest.fn(), + options: [ + { + flags: "--test-target-id, -t", + name: "test-target-id", + type: "string", + short: "-t", + long: "--test-target-id", + }, + { + flags: "--environment-id, -e", + name: "environment-id", + type: "string", + short: "-e", + long: "--environment-id", + }, + { + flags: "--test-case-id, -c", + name: "test-case-id", + type: "string", + short: "-c", + long: "--test-case-id", + }, + { + flags: "--test-report-id, -r", + name: "test-report-id", + type: "string", + short: "-r", + long: "--test-report-id", + }, + ], + } as unknown as CompletableCommand; + + beforeEach(() => { + jest.clearAllMocks(); + tabtab.log = jest.fn(); + }); + + it("should complete test target id", async () => { + + (getTestTargets as jest.Mock).mockResolvedValue([ + { + id: "test-target-1", + app: "test-app-1", + }, + { + id: "test-target-2", + app: "test-app-2", + }, + ]); + const result = await testTargetIdCompleter(mockCommand, env); + expect(result).toEqual(true); + expect(tabtab.log).toHaveBeenCalledWith(["test-target-1", "test-target-2"]); + }); + + it("should not complete test target id when prev is not --test-target-id", async () => { + env.prev = "-c"; + const result = await testTargetIdCompleter(mockCommand, env); + expect(result).toEqual(false); + expect(tabtab.log).not.toHaveBeenCalled(); + }); + + it("should complete environment id", async () => { + (loadConfig as jest.Mock).mockResolvedValue({ + testTargetId: "test-target-1", + }); + (getEnvironments as jest.Mock).mockResolvedValue([ + { + id: "environment-1", + name: "environment-1", + }, + { + id: "environment-2", + name: "environment-2", + }, + ]); + env.prev = "-e"; + const result = await environmentIdCompleter(mockCommand, env); + expect(result).toEqual(true); + expect(tabtab.log).toHaveBeenCalledWith(["environment-1", "environment-2"]); + }); + + it("should not complete environment id when prev is not --environment-id", async () => { + env.prev = "-c"; + const result = await environmentIdCompleter(mockCommand, env); + expect(result).toEqual(false); + expect(tabtab.log).not.toHaveBeenCalled(); + }); + + it("should complete test case id", async () => { + (loadConfig as jest.Mock).mockResolvedValue({ + testTargetId: "test-target-1", + }); + (getTestCases as jest.Mock).mockResolvedValue([ + { + id: "test-case-1", + name: "test-case-1", + }, + { + id: "test-case-2", + name: "test-case-2", + }, + ]); + env.prev = "-c"; + const result = await testCaseIdCompleter(mockCommand, env); + expect(result).toEqual(true); + expect(tabtab.log).toHaveBeenCalledWith(["test-case-1", "test-case-2"]); + }); + + it("should not complete test case id when prev is not --test-case-id", async () => { + env.prev = "-r"; + const result = await testCaseIdCompleter(mockCommand, env); + expect(result).toEqual(false); + expect(tabtab.log).not.toHaveBeenCalled(); + }); + + it("should complete test report id", async () => { + (loadConfig as jest.Mock).mockResolvedValue({ + testTargetId: "test-target-1", + }); + (getTestReports as jest.Mock).mockResolvedValue([ + { + id: "test-report-1", + name: "test-report-1", + }, + { + id: "test-report-2", + name: "test-report-2", + }, + ]); + env.prev = "-r"; + const result = await testReportIdCompleter(mockCommand, env); + expect(result).toEqual(true); + expect(tabtab.log).toHaveBeenCalledWith(["test-report-1", "test-report-2"]); + }); + + it("should not complete test report id when prev is not --test-report-id", async () => { + env.prev = "-c"; + const result = await testReportIdCompleter(mockCommand, env); + expect(result).toEqual(false); + expect(tabtab.log).not.toHaveBeenCalled(); + }); + + it("should complete options of command", async () => { + const result = await optionsCompleter(mockCommand, env); + expect(result).toEqual(true); + expect(tabtab.log).toHaveBeenNthCalledWith(1, ["--environment-id", "--test-case-id", "--test-report-id"]); + expect(tabtab.log).toHaveBeenNthCalledWith(2, ["-e", "-c", "-r"]); + }); +}); \ No newline at end of file From 934e9fb61a84c8f9ab53829c9a4574db0db14698 Mon Sep 17 00:00:00 2001 From: Stefan Rinke Date: Sun, 3 Aug 2025 18:16:13 +0200 Subject: [PATCH 06/21] unified option names --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4f3c79b..23939a5 100644 --- a/README.md +++ b/README.md @@ -196,9 +196,9 @@ run test cases against local build |--------|-------------|----------|--------| | `-j, --json` | Output raw JSON response | No | | | `-u, --url ` | url the tests should run against | Yes | | -| `-i, --id [uuid]` | id of the test case you want to run, if not provided will run all test cases in the test target | No | | +| `-c, --test-case-id [uuid]` | id of the test case you want to run, if not provided will run all test cases in the test target | No | | | `-e, --environment-id [uuid]` | id of the environment you want to run against, if not provided will run all test cases against the default environment | No | | -| `-a, --test-target-id [uuid]` | id of the test target of the test case, if not provided will use the test target id from the config | No | | +| `-t, --test-target-id [uuid]` | id of the test target of the test case, if not provided will use the test target id from the config | No | | | `--headless` | if we should run headless without the UI of playwright and the browser | No | | | `--persist` | if we should write playwright config and files to current directory, you can then run 'npx playwright test' to run them again | No | | | `--grep [substring]` | filter test cases by substring | No | | From d456689939b4a53192ef38eedd43e108d3d38baf Mon Sep 17 00:00:00 2001 From: Stefan Rinke Date: Sun, 3 Aug 2025 18:18:37 +0200 Subject: [PATCH 07/21] lint --- src/tools/index.ts | 2 +- tests/completion.spec.ts | 22 +++++++++++++++------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/tools/index.ts b/src/tools/index.ts index c66a3a4..e881588 100644 --- a/src/tools/index.ts +++ b/src/tools/index.ts @@ -5,4 +5,4 @@ export * from "./test-cases"; export * from "./notifications"; export * from "./discoveries"; export * from "./playwright"; -export * from "./test-targets"; \ No newline at end of file +export * from "./test-targets"; diff --git a/tests/completion.spec.ts b/tests/completion.spec.ts index e2eefa5..dc67baf 100644 --- a/tests/completion.spec.ts +++ b/tests/completion.spec.ts @@ -1,6 +1,12 @@ -import { environmentIdCompleter, optionsCompleter, testCaseIdCompleter, testReportIdCompleter, testTargetIdCompleter } from "../src/completion"; +import { + environmentIdCompleter, + optionsCompleter, + testCaseIdCompleter, + testReportIdCompleter, + testTargetIdCompleter, + CompletableCommand, +} from "../src/completion"; import tabtab, { TabtabEnv } from "tabtab"; -import { CompletableCommand } from "../src/completion"; import { getTestTargets } from "../src/tools/test-targets"; import { getEnvironments } from "../src/tools/environments"; import { loadConfig } from "../src/config"; @@ -15,11 +21,10 @@ jest.mock("../src/tools/test-cases"); jest.mock("../src/tools/test-reports"); describe("completion", () => { - const env: TabtabEnv = { line: "debug --test-target-id", prev: "--test-target-id", - complete: false , + complete: false, words: 3, point: 0, partial: "", @@ -68,7 +73,6 @@ describe("completion", () => { }); it("should complete test target id", async () => { - (getTestTargets as jest.Mock).mockResolvedValue([ { id: "test-target-1", @@ -175,7 +179,11 @@ describe("completion", () => { it("should complete options of command", async () => { const result = await optionsCompleter(mockCommand, env); expect(result).toEqual(true); - expect(tabtab.log).toHaveBeenNthCalledWith(1, ["--environment-id", "--test-case-id", "--test-report-id"]); + expect(tabtab.log).toHaveBeenNthCalledWith(1, [ + "--environment-id", + "--test-case-id", + "--test-report-id", + ]); expect(tabtab.log).toHaveBeenNthCalledWith(2, ["-e", "-c", "-r"]); }); -}); \ No newline at end of file +}); From 9b5be20ca4fa223dde42409acac0337d7685c913 Mon Sep 17 00:00:00 2001 From: Stefan Rinke Date: Sun, 3 Aug 2025 18:31:23 +0200 Subject: [PATCH 08/21] lint --- .eslintrc.json | 1 + tests/completion.spec.ts | 2 ++ 2 files changed, 3 insertions(+) diff --git a/.eslintrc.json b/.eslintrc.json index b266243..12cdd58 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -22,6 +22,7 @@ "no-unused-vars": "off", "github/array-foreach": "off", "i18n-text/no-en": "off", + "eslint-comments/no-use": "off", "@typescript-eslint/no-unused-vars": [ "warn", { diff --git a/tests/completion.spec.ts b/tests/completion.spec.ts index dc67baf..980d98f 100644 --- a/tests/completion.spec.ts +++ b/tests/completion.spec.ts @@ -1,3 +1,4 @@ +/* eslint-disable import/no-named-as-default-member */ import { environmentIdCompleter, optionsCompleter, @@ -6,6 +7,7 @@ import { testTargetIdCompleter, CompletableCommand, } from "../src/completion"; + import tabtab, { TabtabEnv } from "tabtab"; import { getTestTargets } from "../src/tools/test-targets"; import { getEnvironments } from "../src/tools/environments"; From 78b734ae68c36dace9ded380dd565843e2a54ad9 Mon Sep 17 00:00:00 2001 From: Stefan Rinke Date: Mon, 4 Aug 2025 08:14:49 +0200 Subject: [PATCH 09/21] PR comments --- .eslintrc.json | 1 - README-template.md | 2 +- scripts/generate-docs.ts | 2 +- src/cli.ts | 2 +- src/index.ts | 2 +- tests/cli.spec.ts | 4 ++-- 6 files changed, 6 insertions(+), 7 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 12cdd58..b266243 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -22,7 +22,6 @@ "no-unused-vars": "off", "github/array-foreach": "off", "i18n-text/no-en": "off", - "eslint-comments/no-use": "off", "@typescript-eslint/no-unused-vars": [ "warn", { diff --git a/README-template.md b/README-template.md index 99fff1a..97378be 100644 --- a/README-template.md +++ b/README-template.md @@ -26,7 +26,7 @@ This is necessary for the cli to work and avoid dependency conflicts, when insta ## Autocompletion -On macOS and linux you can enable autocompletion by running the following command: +On macOS and linux you can enable autocompletion by running the following command (works for bash, zsh & fish): ```bash npx @octomind/octomind install-completion ``` diff --git a/scripts/generate-docs.ts b/scripts/generate-docs.ts index 156a8db..a473c50 100755 --- a/scripts/generate-docs.ts +++ b/scripts/generate-docs.ts @@ -117,7 +117,7 @@ function generateCommandDocs(command: Command, level = 1): string { async function main() { try { // Get the program object from buildCmd - const program = await buildCmd(); + const program = buildCmd(); // Generate markdown documentation const markdown = generateCommandDocs(program); diff --git a/src/cli.ts b/src/cli.ts index f2d3c45..2e640fe 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -77,7 +77,7 @@ const createCommandWithCommonOptions = (program: CompletableCommand, command: st .option("-j, --json", "Output raw JSON response") as CompletableCommand; }; -export const buildCmd = async (): Promise => { +export const buildCmd = (): CompletableCommand => { const program = new CompletableCommand(); program diff --git a/src/index.ts b/src/index.ts index 21d8f7b..ffd152c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,3 +1,3 @@ #!/usr/bin/env node import { buildCmd } from "./cli"; -buildCmd().then((cmd) => cmd.parse()); +buildCmd().parse(); diff --git a/tests/cli.spec.ts b/tests/cli.spec.ts index 107d985..b15075a 100644 --- a/tests/cli.spec.ts +++ b/tests/cli.spec.ts @@ -15,8 +15,8 @@ const originalConsoleLog = console.log; const originalConsoleError = console.error; let program: Command; -beforeAll(async () => { - program = await buildCmd(); +beforeAll(() => { + program = buildCmd(); program.exitOverride((err) => { throw err; }); From 167e83081ff7a020db89dbe9c4fedc7c63f06b58 Mon Sep 17 00:00:00 2001 From: Stefan Rinke Date: Mon, 4 Aug 2025 08:15:04 +0200 Subject: [PATCH 10/21] PR --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 23939a5..ad0d269 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ This is necessary for the cli to work and avoid dependency conflicts, when insta ## Autocompletion -On macOS and linux you can enable autocompletion by running the following command: +On macOS and linux you can enable autocompletion by running the following command (works for bash, zsh & fish): ```bash npx @octomind/octomind install-completion ``` From 1143d8ddfc07c65ec8cb5dbc46c5f7503e1549d2 Mon Sep 17 00:00:00 2001 From: Stefan Rinke Date: Mon, 4 Aug 2025 08:22:55 +0200 Subject: [PATCH 11/21] PR comments --- src/completion.ts | 40 +++++++++++++++++++--------------------- tests/completion.spec.ts | 24 +++++++++++------------- 2 files changed, 30 insertions(+), 34 deletions(-) diff --git a/src/completion.ts b/src/completion.ts index 13210bb..f3d167b 100644 --- a/src/completion.ts +++ b/src/completion.ts @@ -1,4 +1,4 @@ -import tabtab, { TabtabEnv } from "tabtab"; +import { TabtabEnv, log, parseEnv, install, uninstall } from "tabtab"; import { parse } from 'shell-quote'; import { Command } from "commander"; import { getTestCases } from "./tools/test-cases"; @@ -43,10 +43,10 @@ export class CompletableCommand extends Command { const logOptions = async (command: CompletableCommand, line: string) => { const argv = parse(line).map((arg) => arg.toString()); const usedOptions = command.options.filter((option) => argv.includes(option.long!) || argv.includes(option.short!)).map((option) => option.flags); - tabtab.log(command.options.filter((option) => option.long) + log(command.options.filter((option) => option.long) .filter((option) => !usedOptions.includes(option.flags)) .map((option) => option.long!)); - tabtab.log(command.options.filter((option) => option.short) + log(command.options.filter((option) => option.short) .filter((option) => !usedOptions.includes(option.flags)) .map((option) => option.short!)); } @@ -59,7 +59,7 @@ export const optionsCompleter = async (command: CompletableCommand, env: TabtabE export const testTargetIdCompleter = async (_command: CompletableCommand, env: TabtabEnv): Promise => { if( env.prev === "-t" || env.prev === "--test-target-id") { const testTargets = await getTestTargets(); - tabtab.log(testTargets.map((testTarget) => testTarget.id)); + log(testTargets.map((testTarget) => testTarget.id)); return true; } return false; @@ -70,7 +70,7 @@ export const environmentIdCompleter = async (_command: CompletableCommand, env: const config = await loadConfig(); if( config.testTargetId ) { const environments = await getEnvironments({ testTargetId: config.testTargetId }); - tabtab.log(environments.map((environment) => environment.id)); + log(environments.map((environment) => environment.id)); return true; } } @@ -82,7 +82,7 @@ export const testCaseIdCompleter = async (_command: CompletableCommand, env: Tab const config = await loadConfig(); if( config.testTargetId ) { const testCases = await getTestCases({ testTargetId: config.testTargetId, status: "ENABLED" }); - tabtab.log(testCases.map((testCase) => testCase.id)); + log(testCases.map((testCase) => testCase.id)); return true; } } @@ -95,7 +95,7 @@ export const testReportIdCompleter = async (_command: CompletableCommand, env: T if( config.testTargetId ) { const testReports = await getTestReports({ testTargetId: config.testTargetId }); if(testReports) { - tabtab.log(testReports.map((testReport) => testReport?.id ?? "")); + log(testReports.map((testReport) => testReport?.id ?? "")); } } return true; @@ -104,7 +104,7 @@ export const testReportIdCompleter = async (_command: CompletableCommand, env: T } export const tabCompletion = async (program: CompletableCommand) => { - const env = tabtab.parseEnv(process.env); + const env = parseEnv(process.env); if (!env.complete) return; const argv = parse(env.line).map((arg) => arg.toString()); @@ -123,26 +123,24 @@ export const tabCompletion = async (program: CompletableCommand) => { return; } - tabtab.log(["--help"]); - tabtab.log(program.options.filter((option) => option.long).map((option) => option.long!)); - tabtab.log(program.options.filter((option) => option.short).map((option) => option.short!)); - tabtab.log(program.commands.map((command) => command.name())); + log(["--help"]); + log(program.options.filter((option) => option.long).map((option) => option.long!)); + log(program.options.filter((option) => option.short).map((option) => option.short!)); + log(program.commands.map((command) => command.name())); }; export const installCompletion = async () => { - await tabtab - .install({ - name: BINARY_NAME, - completer: BINARY_NAME - }) + await install({ + name: BINARY_NAME, + completer: BINARY_NAME + }) .catch(err => console.error('INSTALL ERROR', err)); } export const uninstallCompletion = async () => { - await tabtab - .uninstall({ - name: BINARY_NAME, - }) + await uninstall({ + name: BINARY_NAME, + }) .catch(err => console.error('UNINSTALL ERROR', err)); } diff --git a/tests/completion.spec.ts b/tests/completion.spec.ts index 980d98f..8dd2081 100644 --- a/tests/completion.spec.ts +++ b/tests/completion.spec.ts @@ -1,4 +1,3 @@ -/* eslint-disable import/no-named-as-default-member */ import { environmentIdCompleter, optionsCompleter, @@ -8,7 +7,7 @@ import { CompletableCommand, } from "../src/completion"; -import tabtab, { TabtabEnv } from "tabtab"; +import { TabtabEnv, log } from "tabtab"; import { getTestTargets } from "../src/tools/test-targets"; import { getEnvironments } from "../src/tools/environments"; import { loadConfig } from "../src/config"; @@ -71,7 +70,6 @@ describe("completion", () => { beforeEach(() => { jest.clearAllMocks(); - tabtab.log = jest.fn(); }); it("should complete test target id", async () => { @@ -87,14 +85,14 @@ describe("completion", () => { ]); const result = await testTargetIdCompleter(mockCommand, env); expect(result).toEqual(true); - expect(tabtab.log).toHaveBeenCalledWith(["test-target-1", "test-target-2"]); + expect(log).toHaveBeenCalledWith(["test-target-1", "test-target-2"]); }); it("should not complete test target id when prev is not --test-target-id", async () => { env.prev = "-c"; const result = await testTargetIdCompleter(mockCommand, env); expect(result).toEqual(false); - expect(tabtab.log).not.toHaveBeenCalled(); + expect(log).not.toHaveBeenCalled(); }); it("should complete environment id", async () => { @@ -114,14 +112,14 @@ describe("completion", () => { env.prev = "-e"; const result = await environmentIdCompleter(mockCommand, env); expect(result).toEqual(true); - expect(tabtab.log).toHaveBeenCalledWith(["environment-1", "environment-2"]); + expect(log).toHaveBeenCalledWith(["environment-1", "environment-2"]); }); it("should not complete environment id when prev is not --environment-id", async () => { env.prev = "-c"; const result = await environmentIdCompleter(mockCommand, env); expect(result).toEqual(false); - expect(tabtab.log).not.toHaveBeenCalled(); + expect(log).not.toHaveBeenCalled(); }); it("should complete test case id", async () => { @@ -141,14 +139,14 @@ describe("completion", () => { env.prev = "-c"; const result = await testCaseIdCompleter(mockCommand, env); expect(result).toEqual(true); - expect(tabtab.log).toHaveBeenCalledWith(["test-case-1", "test-case-2"]); + expect(log).toHaveBeenCalledWith(["test-case-1", "test-case-2"]); }); it("should not complete test case id when prev is not --test-case-id", async () => { env.prev = "-r"; const result = await testCaseIdCompleter(mockCommand, env); expect(result).toEqual(false); - expect(tabtab.log).not.toHaveBeenCalled(); + expect(log).not.toHaveBeenCalled(); }); it("should complete test report id", async () => { @@ -168,24 +166,24 @@ describe("completion", () => { env.prev = "-r"; const result = await testReportIdCompleter(mockCommand, env); expect(result).toEqual(true); - expect(tabtab.log).toHaveBeenCalledWith(["test-report-1", "test-report-2"]); + expect(log).toHaveBeenCalledWith(["test-report-1", "test-report-2"]); }); it("should not complete test report id when prev is not --test-report-id", async () => { env.prev = "-c"; const result = await testReportIdCompleter(mockCommand, env); expect(result).toEqual(false); - expect(tabtab.log).not.toHaveBeenCalled(); + expect(log).not.toHaveBeenCalled(); }); it("should complete options of command", async () => { const result = await optionsCompleter(mockCommand, env); expect(result).toEqual(true); - expect(tabtab.log).toHaveBeenNthCalledWith(1, [ + expect(log).toHaveBeenNthCalledWith(1, [ "--environment-id", "--test-case-id", "--test-report-id", ]); - expect(tabtab.log).toHaveBeenNthCalledWith(2, ["-e", "-c", "-r"]); + expect(log).toHaveBeenNthCalledWith(2, ["-e", "-c", "-r"]); }); }); From 7968fb3f190f682bb2ae89e699764a23319d41ef Mon Sep 17 00:00:00 2001 From: Stefan Rinke Date: Mon, 4 Aug 2025 08:59:29 +0200 Subject: [PATCH 12/21] merge remainders --- README.md | 396 --------------------------------------------------- package.json | 2 +- src/cli.ts | 15 +- 3 files changed, 8 insertions(+), 405 deletions(-) diff --git a/README.md b/README.md index 0eb0e65..e69de29 100644 --- a/README.md +++ b/README.md @@ -1,396 +0,0 @@ -# Octomind CLI - -![Continuous Integration](https://github.com/octomind-dev/cli/actions/workflows/ts.yml/badge.svg) - -A command-line interface for interacting with the Octomind API. -This CLI allows you to execute tests, retrieve test reports, and manage private locations as well as environments. -See [API documentation](https://octomind.dev/docs/api-reference/) - -## Usage / Installation - -1. To install the package globally do **NOT** just a `npm i -g @octomind/octomind` but instead -```bash -mkdir -p ~/.local/packages -cd ~/.local/packages -npm install @octomind/octomind@latest -# either create an alias -alias octomind="node ~/.local/packages/node_modules/@octomind/octomind/dist/index.js" -# or create a symlink -sudo ln -s ~/.local/packages/node_modules/@octomind/octomind/dist/index.js /usr/local/bin/octomind -``` - -this will install the package to `~/.local/packages` and create symlinks in `/usr/local/bin` or creates an alias. -This is necessary for the cli to work and avoid dependency conflicts, when installing the package globally. - -2. Use the cli through npx e.g. `npx @octomind/octomind -h` - -## Autocompletion - -On macOS and linux you can enable autocompletion by running the following command (works for bash, zsh & fish): -```bash -npx @octomind/octomind install-completion -``` -You can disable autocompletion by running the following command: -```bash -npx @octomind/octomind uninstall-completion -``` - -Autocompletion will only work if you have installed the package globally and created a config file with `npx @octomind/octomind init`. -This way even entityIds like environmentIds or testCaseIds will be autocompleted. - -# octomind - -Octomind cli tool. Version: 1.1.3. Additional documentation see https://octomind.dev/docs/api-reference/ - -**Usage:** `octomind [options] [command]` - -### Options - -| Option | Description | Required | Default | -|--------|-------------|----------|--------| -| `-V, --version` | output the version number | No | | - -# octomind CLI Documentation - -Octomind cli tool. Version: 1.1.3. Additional documentation see https://octomind.dev/docs/api-reference/ - -## Setup - -## init - -Initialize configuration by setting up API key. This will create a config file in ~/.config/octomind.json - -**Usage:** `init [options]` - -### Options - -| Option | Description | Required | Default | -|--------|-------------|----------|--------| -| `-t, --test-target-id ` | Test target ID | Yes | | -| `-k, --api-key ` | the api key for authentication | Yes | | -| `-f, --force` | Force overwrite existing configuration | No | | - -## switch-test-target - -Switch to a different test target. This will list all available test targets and update the config file in ~/.config/octomind.json - -**Usage:** `switch-test-target [options]` - -## Completion - -## install-completion - -Install tab completion - -**Usage:** `install-completion [options]` - -## uninstall-completion - -Uninstall tab completion - -**Usage:** `uninstall-completion [options]` - -## completion - -Tab completion - -**Usage:** `completion [options]` - -## Environments - -## list-environments - -List all environments - -**Usage:** `list-environments [options]` - -### Options - -| Option | Description | Required | Default | -|--------|-------------|----------|--------| -| `-j, --json` | Output raw JSON response | No | | -| `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | - -## create-environment - -Create a new environment - -**Usage:** `create-environment [options]` - -### Options - -| Option | Description | Required | Default | -|--------|-------------|----------|--------| -| `-j, --json` | Output raw JSON response | No | | -| `-n, --name ` | Environment name | Yes | | -| `-d, --discovery-url ` | Discovery URL | Yes | | -| `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | -| `--test-account-username [username]` | Test account username | No | | -| `--test-account-password [password]` | Test account password | No | | -| `--test-account-otp-initializer-key [key]` | Test account OTP initializer key | No | | -| `--basic-auth-username [username]` | Basic auth username | No | | -| `--basic-auth-password [password]` | Basic auth password | No | | -| `--private-location-name [name]` | Private location name | No | | - -## environment - -Get an environment - -**Usage:** `environment [options]` - -### Options - -| Option | Description | Required | Default | -|--------|-------------|----------|--------| -| `-j, --json` | Output raw JSON response | No | | -| `-e, --environment-id ` | Environment ID | Yes | | -| `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | - -## update-environment - -Update an existing environment - -**Usage:** `update-environment [options]` - -### Options - -| Option | Description | Required | Default | -|--------|-------------|----------|--------| -| `-j, --json` | Output raw JSON response | No | | -| `-e, --environment-id ` | Environment ID | Yes | | -| `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | -| `-n, --name [name]` | Environment name | No | | -| `-d, --discovery-url [url]` | Discovery URL | No | | -| `--test-account-username [username]` | Test account username | No | | -| `--test-account-password [password]` | Test account password | No | | -| `--test-account-otp-initializer-key [key]` | Test account OTP initializer key | No | | -| `--basic-auth-username [username]` | Basic auth username | No | | -| `--basic-auth-password [password]` | Basic auth password | No | | -| `--private-location-name [name]` | Private location name | No | | - -## delete-environment - -Delete an environment - -**Usage:** `delete-environment [options]` - -### Options - -| Option | Description | Required | Default | -|--------|-------------|----------|--------| -| `-j, --json` | Output raw JSON response | No | | -| `-e, --environment-id ` | Environment ID | Yes | | -| `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | - -## Execute - -## debug - -run test cases against local build - -**Usage:** `debug [options]` - -### Options - -| Option | Description | Required | Default | -|--------|-------------|----------|--------| -| `-j, --json` | Output raw JSON response | No | | -| `-u, --url ` | url the tests should run against | Yes | | -| `-c, --test-case-id [uuid]` | id of the test case you want to run, if not provided will run all test cases in the test target | No | | -| `-e, --environment-id [uuid]` | id of the environment you want to run against, if not provided will run all test cases against the default environment | No | | -| `-t, --test-target-id [uuid]` | id of the test target of the test case, if not provided will use the test target id from the config | No | | -| `--headless` | if we should run headless without the UI of playwright and the browser | No | | -| `--persist` | if we should write playwright config and files to current directory, you can then run 'npx playwright test' to run them again | No | | -| `--grep [substring]` | filter test cases by substring | No | | - -## execute - -Execute test cases to create a test report - -**Usage:** `execute [options]` - -### Options - -| Option | Description | Required | Default | -|--------|-------------|----------|--------| -| `-j, --json` | Output raw JSON response | No | | -| `-u, --url ` | URL to test | Yes | | -| `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | -| `-e, --environment-name [name]` | Environment name | No | default | -| `-d, --description [text]` | Test description | No | | -| `-g, --tags [tags]` | comma separated list of tags | No | | -| `-v, --variables-to-overwrite [variables]` | JSON object of variables to overwrite | No | | - -## create-discovery - -Create a new test case discovery - -**Usage:** `create-discovery [options]` - -### Options - -| Option | Description | Required | Default | -|--------|-------------|----------|--------| -| `-j, --json` | Output raw JSON response | No | | -| `-n, --name ` | Discovery name | Yes | | -| `-p, --prompt ` | Discovery prompt | Yes | | -| `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | -| `-e, --entry-point-url-path [path]` | Entry point URL path | No | | -| `--prerequisite-id [id]` | Prerequisite test case ID | No | | -| `--external-id [id]` | External identifier | No | | -| `--assigned-tag-ids [ids]` | Comma-separated list of tag IDs | No | | -| `--folder-id [id]` | Folder ID | No | | - -## Notifications - -## notifications - -Get notifications for a test target - -**Usage:** `notifications [options]` - -### Options - -| Option | Description | Required | Default | -|--------|-------------|----------|--------| -| `-j, --json` | Output raw JSON response | No | | -| `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | - -## Private Locations - -## register-location - -Register a private location - -**Usage:** `register-location [options]` - -### Options - -| Option | Description | Required | Default | -|--------|-------------|----------|--------| -| `-j, --json` | Output raw JSON response | No | | -| `-n, --name ` | Location name | Yes | | -| `-p, --password ` | Proxy password | Yes | | -| `-u, --username ` | Proxy user | Yes | | -| `-a, --address
` | Location address | Yes | | - -## unregister-location - -Unregister a private location - -**Usage:** `unregister-location [options]` - -### Options - -| Option | Description | Required | Default | -|--------|-------------|----------|--------| -| `-j, --json` | Output raw JSON response | No | | -| `-n, --name ` | Location name | Yes | | - -## list-private-locations - -List all private locations - -**Usage:** `list-private-locations [options]` - -### Options - -| Option | Description | Required | Default | -|--------|-------------|----------|--------| -| `-j, --json` | Output raw JSON response | No | | - -## start-private-location - -Start a private location worker, see https://octomind.dev/docs/proxy/private-location - -**Usage:** `start-private-location [options]` - -### Options - -| Option | Description | Required | Default | -|--------|-------------|----------|--------| -| `-n, --name [name]` | Location name | No | | -| `-u, --username [username]` | Proxy user | No | | -| `-p, --password [password]` | Proxy password | No | | -| `-l, --host-network` | Use host network (default: false). If set you can use localhost directly | No | false | - -## stop-private-location - -Stop a private location worker, see https://octomind.dev/docs/proxy/private-location - -**Usage:** `stop-private-location [options]` - -## Test Cases - -## list-test-cases - -List all test cases - -**Usage:** `list-test-cases [options]` - -### Options - -| Option | Description | Required | Default | -|--------|-------------|----------|--------| -| `-j, --json` | Output raw JSON response | No | | -| `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | - -## delete-test-case - -Delete a test case - -**Usage:** `delete-test-case [options]` - -### Options - -| Option | Description | Required | Default | -|--------|-------------|----------|--------| -| `-j, --json` | Output raw JSON response | No | | -| `-c, --test-case-id ` | Test case ID | Yes | | -| `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | - -## test-case - -Get details of a specific test case - -**Usage:** `test-case [options]` - -### Options - -| Option | Description | Required | Default | -|--------|-------------|----------|--------| -| `-j, --json` | Output raw JSON response | No | | -| `-c, --test-case-id ` | Test case ID | Yes | | -| `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | - -## list-test-cases - -List all test cases - -**Usage:** `list-test-cases [options]` - -### Options - -| Option | Description | Required | Default | -|--------|-------------|----------|--------| -| `-j, --json` | Output raw JSON response | No | | -| `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | - -## Test Reports - -## test-report - -Get test report details - -**Usage:** `test-report [options]` - -### Options - -| Option | Description | Required | Default | -|--------|-------------|----------|--------| -| `-j, --json` | Output raw JSON response | No | | -| `-r, --test-report-id ` | Test report ID | Yes | | -| `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | - -## Test Targets - diff --git a/package.json b/package.json index 260b0e7..41619e7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@octomind/octomind", - "version": "1.2.0", + "version": "1.3.0", "description": "a command line client for octomind apis", "main": "./dist/index.js", "packageManager": "pnpm@10.13.1", diff --git a/src/cli.ts b/src/cli.ts index ff521e4..69c6994 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -352,14 +352,13 @@ export const buildCmd = (): CompletableCommand => { .addOption(testTargetIdOption) .action(addTestTargetWrapper(listNotifications)); - createCommandWithCommonOptions("delete-test-case") - .completer(testCaseIdCompleter) - .description("Delete a test case") - .requiredOption("-c, --test-case-id ", "Test case ID") - .addOption(testTargetIdOption) - .helpGroup("test-cases") - .action(addTestTargetWrapper(deleteTestCase)); - + createCommandWithCommonOptions(program,"delete-test-case") + .completer(testCaseIdCompleter) + .description("Delete a test case") + .requiredOption("-c, --test-case-id ", "Test case ID") + .addOption(testTargetIdOption) + .helpGroup("test-cases") + .action(addTestTargetWrapper(deleteTestCase)); createCommandWithCommonOptions(program, "test-case") .completer(testCaseIdCompleter) From 5d0487c157b4540eb285815d63ff7a0c8abb8718 Mon Sep 17 00:00:00 2001 From: Stefan Rinke Date: Mon, 4 Aug 2025 09:15:53 +0200 Subject: [PATCH 13/21] test for docgen --- README.md | 444 ++++++++++++++++++++++++++++ scripts/generate-docs.ts | 21 +- tests/scripts/generate-docs.spec.ts | 47 +++ 3 files changed, 495 insertions(+), 17 deletions(-) create mode 100644 tests/scripts/generate-docs.spec.ts diff --git a/README.md b/README.md index e69de29..4441198 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,444 @@ +# Octomind CLI + +![Continuous Integration](https://github.com/octomind-dev/cli/actions/workflows/ts.yml/badge.svg) + +A command-line interface for interacting with the Octomind API. +This CLI allows you to execute tests, retrieve test reports, and manage private locations as well as environments. +See [API documentation](https://octomind.dev/docs/api-reference/) + +## Usage / Installation + +1. To install the package globally do **NOT** just a `npm i -g @octomind/octomind` but instead +```bash +mkdir -p ~/.local/packages +cd ~/.local/packages +npm install @octomind/octomind@latest +# either create an alias +alias octomind="node ~/.local/packages/node_modules/@octomind/octomind/dist/index.js" +# or create a symlink +sudo ln -s ~/.local/packages/node_modules/@octomind/octomind/dist/index.js /usr/local/bin/octomind +``` + +this will install the package to `~/.local/packages` and create symlinks in `/usr/local/bin` or creates an alias. +This is necessary for the cli to work and avoid dependency conflicts, when installing the package globally. + +2. Use the cli through npx e.g. `npx @octomind/octomind -h` + +## Autocompletion + +On macOS and linux you can enable autocompletion by running the following command (works for bash, zsh & fish): +```bash +npx @octomind/octomind install-completion +``` +You can disable autocompletion by running the following command: +```bash +npx @octomind/octomind uninstall-completion +``` + +Autocompletion will only work if you have installed the package globally and created a config file with `npx @octomind/octomind init`. +This way even entityIds like environmentIds or testCaseIds will be autocompleted. + +# octomind + +Octomind cli tool. Version: 1.3.0. Additional documentation see https://octomind.dev/docs/api-reference/ + +**Usage:** `octomind [options] [command]` + +### Options + +| Option | Description | Required | Default | +|--------|-------------|----------|--------| +| `-V, --version` | output the version number | No | | + +# octomind CLI Documentation + +Octomind cli tool. Version: 1.3.0. Additional documentation see https://octomind.dev/docs/api-reference/ + +## Setup + +## init + +Initialize configuration by setting up API key. This will create a config file in ~/.config/octomind.json + +**Usage:** `init [options]` + +### Options + +| Option | Description | Required | Default | +|--------|-------------|----------|--------| +| `-t, --test-target-id ` | Test target ID | Yes | | +| `-k, --api-key ` | the api key for authentication | Yes | | +| `-f, --force` | Force overwrite existing configuration | No | | + +## switch-test-target + +Switch to a different test target. This will list all available test targets and update the config file in ~/.config/octomind.json + +**Usage:** `switch-test-target [options]` + +## Completion + +## install-completion + +Install tab completion + +**Usage:** `install-completion [options]` + +## uninstall-completion + +Uninstall tab completion + +**Usage:** `uninstall-completion [options]` + +## completion + +Tab completion + +**Usage:** `completion [options]` + +## Environments + +## list-environments + +List all environments + +**Usage:** `list-environments [options]` + +### Options + +| Option | Description | Required | Default | +|--------|-------------|----------|--------| +| `-j, --json` | Output raw JSON response | No | | +| `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | + +## create-environment + +Create a new environment + +**Usage:** `create-environment [options]` + +### Options + +| Option | Description | Required | Default | +|--------|-------------|----------|--------| +| `-j, --json` | Output raw JSON response | No | | +| `-n, --name ` | Environment name | Yes | | +| `-d, --discovery-url ` | Discovery URL | Yes | | +| `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | +| `--test-account-username [username]` | Test account username | No | | +| `--test-account-password [password]` | Test account password | No | | +| `--test-account-otp-initializer-key [key]` | Test account OTP initializer key | No | | +| `--basic-auth-username [username]` | Basic auth username | No | | +| `--basic-auth-password [password]` | Basic auth password | No | | +| `--private-location-name [name]` | Private location name | No | | + +## environment + +Get an environment + +**Usage:** `environment [options]` + +### Options + +| Option | Description | Required | Default | +|--------|-------------|----------|--------| +| `-j, --json` | Output raw JSON response | No | | +| `-e, --environment-id ` | Environment ID | Yes | | +| `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | + +## update-environment + +Update an existing environment + +**Usage:** `update-environment [options]` + +### Options + +| Option | Description | Required | Default | +|--------|-------------|----------|--------| +| `-j, --json` | Output raw JSON response | No | | +| `-e, --environment-id ` | Environment ID | Yes | | +| `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | +| `-n, --name [name]` | Environment name | No | | +| `-d, --discovery-url [url]` | Discovery URL | No | | +| `--test-account-username [username]` | Test account username | No | | +| `--test-account-password [password]` | Test account password | No | | +| `--test-account-otp-initializer-key [key]` | Test account OTP initializer key | No | | +| `--basic-auth-username [username]` | Basic auth username | No | | +| `--basic-auth-password [password]` | Basic auth password | No | | +| `--private-location-name [name]` | Private location name | No | | + +## delete-environment + +Delete an environment + +**Usage:** `delete-environment [options]` + +### Options + +| Option | Description | Required | Default | +|--------|-------------|----------|--------| +| `-j, --json` | Output raw JSON response | No | | +| `-e, --environment-id ` | Environment ID | Yes | | +| `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | + +## Execute + +## debug + +run test cases against local build + +**Usage:** `debug [options]` + +### Options + +| Option | Description | Required | Default | +|--------|-------------|----------|--------| +| `-j, --json` | Output raw JSON response | No | | +| `-u, --url ` | url the tests should run against | Yes | | +| `-c, --test-case-id [uuid]` | id of the test case you want to run, if not provided will run all test cases in the test target | No | | +| `-e, --environment-id [uuid]` | id of the environment you want to run against, if not provided will run all test cases against the default environment | No | | +| `-t, --test-target-id [uuid]` | id of the test target of the test case, if not provided will use the test target id from the config | No | | +| `--headless` | if we should run headless without the UI of playwright and the browser | No | | +| `--persist` | if we should write playwright config and files to current directory, you can then run 'npx playwright test' to run them again | No | | +| `--grep [substring]` | filter test cases by substring | No | | + +## execute + +Execute test cases to create a test report + +**Usage:** `execute [options]` + +### Options + +| Option | Description | Required | Default | +|--------|-------------|----------|--------| +| `-j, --json` | Output raw JSON response | No | | +| `-u, --url ` | URL to test | Yes | | +| `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | +| `-e, --environment-name [name]` | Environment name | No | default | +| `-d, --description [text]` | Test description | No | | +| `-g, --tags [tags]` | comma separated list of tags | No | | +| `-v, --variables-to-overwrite [variables]` | JSON object of variables to overwrite | No | | + +## create-discovery + +Create a new test case discovery + +**Usage:** `create-discovery [options]` + +### Options + +| Option | Description | Required | Default | +|--------|-------------|----------|--------| +| `-j, --json` | Output raw JSON response | No | | +| `-n, --name ` | Discovery name | Yes | | +| `-p, --prompt ` | Discovery prompt | Yes | | +| `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | +| `-e, --entry-point-url-path [path]` | Entry point URL path | No | | +| `--prerequisite-id [id]` | Prerequisite test case ID | No | | +| `--external-id [id]` | External identifier | No | | +| `--assigned-tag-ids [ids]` | Comma-separated list of tag IDs | No | | +| `--folder-id [id]` | Folder ID | No | | + +## Notifications + +## notifications + +Get notifications for a test target + +**Usage:** `notifications [options]` + +### Options + +| Option | Description | Required | Default | +|--------|-------------|----------|--------| +| `-j, --json` | Output raw JSON response | No | | +| `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | + +## Private Locations + +## register-location + +Register a private location + +**Usage:** `register-location [options]` + +### Options + +| Option | Description | Required | Default | +|--------|-------------|----------|--------| +| `-j, --json` | Output raw JSON response | No | | +| `-n, --name ` | Location name | Yes | | +| `-p, --password ` | Proxy password | Yes | | +| `-u, --username ` | Proxy user | Yes | | +| `-a, --address
` | Location address | Yes | | + +## unregister-location + +Unregister a private location + +**Usage:** `unregister-location [options]` + +### Options + +| Option | Description | Required | Default | +|--------|-------------|----------|--------| +| `-j, --json` | Output raw JSON response | No | | +| `-n, --name ` | Location name | Yes | | + +## list-private-locations + +List all private locations + +**Usage:** `list-private-locations [options]` + +### Options + +| Option | Description | Required | Default | +|--------|-------------|----------|--------| +| `-j, --json` | Output raw JSON response | No | | + +## start-private-location + +Start a private location worker, see https://octomind.dev/docs/proxy/private-location + +**Usage:** `start-private-location [options]` + +### Options + +| Option | Description | Required | Default | +|--------|-------------|----------|--------| +| `-n, --name [name]` | Location name | No | | +| `-u, --username [username]` | Proxy user | No | | +| `-p, --password [password]` | Proxy password | No | | +| `-l, --host-network` | Use host network (default: false). If set you can use localhost directly | No | false | + +## stop-private-location + +Stop a private location worker, see https://octomind.dev/docs/proxy/private-location + +**Usage:** `stop-private-location [options]` + +## Test Cases + +## delete-test-case + +Delete a test case + +**Usage:** `delete-test-case [options]` + +### Options + +| Option | Description | Required | Default | +|--------|-------------|----------|--------| +| `-j, --json` | Output raw JSON response | No | | +| `-c, --test-case-id ` | Test case ID | Yes | | +| `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | + +## test-case + +Get details of a specific test case + +**Usage:** `test-case [options]` + +### Options + +| Option | Description | Required | Default | +|--------|-------------|----------|--------| +| `-j, --json` | Output raw JSON response | No | | +| `-c, --test-case-id ` | Test case ID | Yes | | +| `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | + +## list-test-cases + +List all test cases + +**Usage:** `list-test-cases [options]` + +### Options + +| Option | Description | Required | Default | +|--------|-------------|----------|--------| +| `-j, --json` | Output raw JSON response | No | | +| `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | + +## Test Reports + +## test-report + +Get test report details + +**Usage:** `test-report [options]` + +### Options + +| Option | Description | Required | Default | +|--------|-------------|----------|--------| +| `-j, --json` | Output raw JSON response | No | | +| `-r, --test-report-id ` | Test report ID | Yes | | +| `-t, --test-target-id [id]` | Test target ID, if not provided will use the test target id from the config | No | | + +## Test Targets + +## list-test-targets + +List all test targets + +**Usage:** `list-test-targets [options]` + +### Options + +| Option | Description | Required | Default | +|--------|-------------|----------|--------| +| `-j, --json` | Output raw JSON response | No | | + + + +## Output Formats + +By default, the CLI provides formatted text output for better readability. Add the `--json` flag to any command to get the raw JSON response instead. This is useful for scripting or when you need to process the output programmatically. + +Example of JSON output: +```json +{ + "id": "826c15af-644b-4b28-89b4-f50ff34e46b7", + "testTargetId": "3435918b-3d29-4ebd-8c68-9a540532f45a", + "status": "PASSED", + "executionUrl": "https://example.com", + "testResults": [ + { + "id": "abc-123-456", + "testTargetId": "3435918b-3d29-4ebd-8c68-9a540532f45a", + "testCaseId": "test-1", + "status": "PASSED", + "traceUrl": "https://storage.googleapis.com/automagically-traces/abc-123-trace.zip" + }, + { + "id": "def-456-789", + "testTargetId": "3435918b-3d29-4ebd-8c68-9a540532f45a", + "testCaseId": "test-2", + "status": "PASSED", + "traceUrl": "https://storage.googleapis.com/automagically-traces/def-456-trace.zip" + } + ] +} +``` + +## Development + +1. Clone the repository +2. Install dependencies: +```bash +pnpm install +``` + +The CLI is written in TypeScript and uses the following dependencies: +- [commander](https://github.com/tj/commander.js): For command-line argument parsing +- [openapi-fetch](https://openapi-ts.dev/openapi-fetch/): For making openapi API calls +- [openapi-typescript](https://openapi-ts.dev/introduction): For generating types from openapi spec + +To build from source: +```bash +pnpm run build +``` diff --git a/scripts/generate-docs.ts b/scripts/generate-docs.ts index a473c50..ff66fb6 100755 --- a/scripts/generate-docs.ts +++ b/scripts/generate-docs.ts @@ -7,7 +7,7 @@ import * as path from 'path'; /** * Generate markdown documentation for all commands in the CLI */ -function generateCommandDocs(command: Command, level = 1): string { +export function generateCommandDocs(command: Command, level = 1): string { let docs = ''; // Skip the root command if it's the first level @@ -19,13 +19,11 @@ function generateCommandDocs(command: Command, level = 1): string { docs += `${command.description()}\n\n`; } - // Add usage information const usage = command.usage(); if (usage) { docs += `**Usage:** \`${command.name()} ${usage}\`\n\n`; } - // Add options const options = command.options; if (options && options.length > 0) { docs += '### Options\n\n'; @@ -45,15 +43,12 @@ function generateCommandDocs(command: Command, level = 1): string { } } - // Process subcommands const subcommands = command.commands; if (subcommands && subcommands.length > 0) { - // If this is the root command, group commands by help group if (level === 1) { docs += `# ${command.name()} CLI Documentation\n\n`; docs += `${command.description()}\n\n`; - // Group commands by help group const commandsByGroup = new Map(); const ungroupedCommands: Command[] = []; @@ -72,7 +67,6 @@ function generateCommandDocs(command: Command, level = 1): string { } }); - // Generate documentation for each group, with setup first const allGroups = Array.from(commandsByGroup.keys()); const setupGroup = allGroups.find(group => group === 'setup'); const otherGroups = allGroups.filter(group => group !== 'setup').sort(); @@ -93,7 +87,6 @@ function generateCommandDocs(command: Command, level = 1): string { } }); - // Add ungrouped commands at the end if (ungroupedCommands.length > 0) { docs += '## Other Commands\n\n'; ungroupedCommands.forEach(subcommand => { @@ -101,7 +94,6 @@ function generateCommandDocs(command: Command, level = 1): string { }); } } else { - // For non-root commands, process subcommands normally subcommands.forEach(subcommand => { docs += generateCommandDocs(subcommand, level + 1); }); @@ -116,23 +108,17 @@ function generateCommandDocs(command: Command, level = 1): string { */ async function main() { try { - // Get the program object from buildCmd const program = buildCmd(); - // Generate markdown documentation const markdown = generateCommandDocs(program); - // Check if README template exists const templatePath = path.join(__dirname, '..', 'README-template.md'); if (fs.existsSync(templatePath)) { - // Load template and replace ${commands} with generated docs const template = fs.readFileSync(templatePath, 'utf8'); const result = template.replace('${commands}', markdown); - // Output the result to console (can be redirected to a file) console.log(result); } else { - // If template doesn't exist, just output the docs console.log(markdown); } } catch (error) { @@ -141,5 +127,6 @@ async function main() { } } -// Run the main function -main().catch(console.error); +if (require.main === module) { + main().catch(console.error); +} diff --git a/tests/scripts/generate-docs.spec.ts b/tests/scripts/generate-docs.spec.ts new file mode 100644 index 0000000..31ce221 --- /dev/null +++ b/tests/scripts/generate-docs.spec.ts @@ -0,0 +1,47 @@ +import { generateCommandDocs } from "../../scripts/generate-docs"; +import { Command } from "commander"; + +describe("generateCommandDocs", () => { + const mockCommand = new Command(); + mockCommand.command("test").description("test"); + mockCommand.command("test2").description("test2").helpGroup("test"); + mockCommand.command("test3").description("test3").helpGroup("setup"); + it("should generate documentation", () => { + const docs = generateCommandDocs(mockCommand); + expect(docs).toMatchInlineSnapshot(` +"# + +**Usage:** \` [options] [command]\` + +# CLI Documentation + + + +## Setup + +## test3 + +test3 + +**Usage:** \`test3 [options]\` + +## Test + +## test2 + +test2 + +**Usage:** \`test2 [options]\` + +## Other Commands + +## test + +test + +**Usage:** \`test [options]\` + +" +`); + }); +}); From 3f81113e7392d76c95092408ef720e1e43f8e558 Mon Sep 17 00:00:00 2001 From: Stefan Rinke Date: Mon, 4 Aug 2025 09:18:34 +0200 Subject: [PATCH 14/21] also have options in test --- tests/scripts/generate-docs.spec.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tests/scripts/generate-docs.spec.ts b/tests/scripts/generate-docs.spec.ts index 31ce221..7025302 100644 --- a/tests/scripts/generate-docs.spec.ts +++ b/tests/scripts/generate-docs.spec.ts @@ -3,7 +3,7 @@ import { Command } from "commander"; describe("generateCommandDocs", () => { const mockCommand = new Command(); - mockCommand.command("test").description("test"); + mockCommand.command("test").description("test").option("-t, --test", "test"); mockCommand.command("test2").description("test2").helpGroup("test"); mockCommand.command("test3").description("test3").helpGroup("setup"); it("should generate documentation", () => { @@ -41,6 +41,12 @@ test **Usage:** \`test [options]\` +### Options + +| Option | Description | Required | Default | +|--------|-------------|----------|--------| +| \`-t, --test\` | test | No | | + " `); }); From f61be9ec678c1b66d6ceb8965e4400aea0844b84 Mon Sep 17 00:00:00 2001 From: Stefan Rinke Date: Mon, 4 Aug 2025 19:04:24 +0200 Subject: [PATCH 15/21] merge --- pnpm-lock.yaml | 2510 ++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 2310 insertions(+), 200 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1892b20..a49e520 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,19 +9,19 @@ importers: .: dependencies: '@playwright/test': - specifier: 1.54.1 + specifier: ^1.54.1 version: 1.54.1 '@types/shell-quote': specifier: ^1.7.5 version: 1.7.5 commander: - specifier: 14.0.0 + specifier: ^14.0.0 version: 14.0.0 openapi-fetch: - specifier: 0.14.0 + specifier: ^0.14.0 version: 0.14.0 otplib: - specifier: 12.0.1 + specifier: ^12.0.1 version: 12.0.1 shell-quote: specifier: ^1.8.3 @@ -30,14 +30,11 @@ importers: specifier: ^3.0.2 version: 3.0.2 devDependencies: - '@biomejs/biome': - specifier: 2.1.3 - version: 2.1.3 '@types/jest': - specifier: 30.0.0 + specifier: ^30.0.0 version: 30.0.0 '@types/node': - specifier: 24.1.0 + specifier: ^24.0.1 version: 24.1.0 '@types/tabtab': specifier: ^3.0.4 @@ -67,22 +64,25 @@ importers: specifier: ^5.0.0 version: 5.5.3(eslint-config-prettier@10.1.8(eslint@8.57.1))(eslint@8.57.1)(prettier@3.6.2) jest: - specifier: 30.0.5 + specifier: ^30.0.0 version: 30.0.5(@types/node@24.1.0)(ts-node@10.9.2(@types/node@24.1.0)(typescript@5.7.3)) openapi-typescript: - specifier: 7.8.0 + specifier: ^7.8.0 version: 7.8.0(typescript@5.7.3) + prettier: + specifier: ^3.0.1 + version: 3.6.2 ts-jest: - specifier: 29.4.0 - version: 29.4.0(@babel/core@7.28.0)(@jest/transform@30.0.5)(@jest/types@30.0.5)(babel-jest@30.0.5(@babel/core@7.28.0))(jest-util@30.0.5)(jest@30.0.5(@types/node@24.1.0)(ts-node@10.9.2(@types/node@24.1.0)(typescript@5.7.3)))(typescript@5.7.3) + specifier: ^29.2.6 + version: 29.4.1(@babel/core@7.28.0)(@jest/transform@30.0.5)(@jest/types@30.0.5)(babel-jest@30.0.5(@babel/core@7.28.0))(jest-util@30.0.5)(jest@30.0.5(@types/node@24.1.0)(ts-node@10.9.2(@types/node@24.1.0)(typescript@5.7.3)))(typescript@5.7.3) ts-node: - specifier: 10.9.2 + specifier: ^10.9.1 version: 10.9.2(@types/node@24.1.0)(typescript@5.7.3) tsx: - specifier: 4.20.3 + specifier: ^4.19.3 version: 4.20.3 typescript: - specifier: 5.7.3 + specifier: ^5.0.4 version: 5.7.3 packages: @@ -256,69 +256,25 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - '@biomejs/biome@2.1.3': - resolution: {integrity: sha512-KE/tegvJIxTkl7gJbGWSgun7G6X/n2M6C35COT6ctYrAy7SiPyNvi6JtoQERVK/VRbttZfgGq96j2bFmhmnH4w==} - engines: {node: '>=14.21.3'} - hasBin: true - - '@biomejs/cli-darwin-arm64@2.1.3': - resolution: {integrity: sha512-LFLkSWRoSGS1wVUD/BE6Nlt2dSn0ulH3XImzg2O/36BoToJHKXjSxzPEMAqT9QvwVtk7/9AQhZpTneERU9qaXA==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [darwin] - - '@biomejs/cli-darwin-x64@2.1.3': - resolution: {integrity: sha512-Q/4OTw8P9No9QeowyxswcWdm0n2MsdCwWcc5NcKQQvzwPjwuPdf8dpPPf4r+x0RWKBtl1FLiAUtJvBlri6DnYw==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [darwin] - - '@biomejs/cli-linux-arm64-musl@2.1.3': - resolution: {integrity: sha512-KXouFSBnoxAWZYDQrnNRzZBbt5s9UJkIm40hdvSL9mBxSSoxRFQJbtg1hP3aa8A2SnXyQHxQfpiVeJlczZt76w==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [linux] - - '@biomejs/cli-linux-arm64@2.1.3': - resolution: {integrity: sha512-2hS6LgylRqMFmAZCOFwYrf77QMdUwJp49oe8PX/O8+P2yKZMSpyQTf3Eo5ewnsMFUEmYbPOskafdV1ds1MZMJA==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [linux] - - '@biomejs/cli-linux-x64-musl@2.1.3': - resolution: {integrity: sha512-KaLAxnROouzIWtl6a0Y88r/4hW5oDUJTIqQorOTVQITaKQsKjZX4XCUmHIhdEk8zMnaiLZzRTAwk1yIAl+mIew==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [linux] - - '@biomejs/cli-linux-x64@2.1.3': - resolution: {integrity: sha512-NxlSCBhLvQtWGagEztfAZ4WcE1AkMTntZV65ZvR+J9jp06+EtOYEBPQndA70ZGhHbEDG57bR6uNvqkd1WrEYVA==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [linux] - - '@biomejs/cli-win32-arm64@2.1.3': - resolution: {integrity: sha512-V9CUZCtWH4u0YwyCYbQ3W5F4ZGPWp2C2TYcsiWFNNyRfmOW1j/TY/jAurl33SaRjgZPO5UUhGyr9m6BN9t84NQ==} - engines: {node: '>=14.21.3'} - cpu: [arm64] - os: [win32] - - '@biomejs/cli-win32-x64@2.1.3': - resolution: {integrity: sha512-dxy599q6lgp8ANPpR8sDMscwdp9oOumEsVXuVCVT9N2vAho8uYXlCz53JhxX6LtJOXaE73qzgkGQ7QqvFlMC0g==} - engines: {node: '>=14.21.3'} - cpu: [x64] - os: [win32] - '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} + '@emnapi/core@1.4.3': + resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==} + '@emnapi/core@1.4.5': resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==} + '@emnapi/runtime@1.4.3': + resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} + '@emnapi/runtime@1.4.5': resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==} + '@emnapi/wasi-threads@1.0.2': + resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==} + '@emnapi/wasi-threads@1.0.4': resolution: {integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==} @@ -472,6 +428,63 @@ packages: cpu: [x64] os: [win32] + '@eslint-community/eslint-utils@4.4.1': + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/eslint-utils@4.7.0': + resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/compat@1.2.7': + resolution: {integrity: sha512-xvv7hJE32yhegJ8xNAnb62ggiAwTYHBpUCWhRxEj/ksvgDJuSXfoDkBcRYaYNFiJ+jH0IE3K16hd+xXzhBgNbg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^9.10.0 + peerDependenciesMeta: + eslint: + optional: true + + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/eslintrc@3.3.0': + resolution: {integrity: sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@8.57.1': + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@9.21.0': + resolution: {integrity: sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@github/browserslist-config@1.0.0': + resolution: {integrity: sha512-gIhjdJp/c2beaIWWIlsXdqXVRUz3r2BxBCpfz/F3JXHvSAQ1paMYjLH+maEATtENg+k5eLV7gA+9yPp762ieuw==} + + '@humanwhocodes/config-array@0.13.0': + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -497,6 +510,10 @@ packages: node-notifier: optional: true + '@jest/diff-sequences@30.0.0': + resolution: {integrity: sha512-xMbtoCeKJDto86GW6AiwVv7M4QAuI56R7dVBr1RNGYbOT44M2TIzOiske2RxopBqkumDY+A1H55pGvuribRY9A==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/diff-sequences@30.0.1': resolution: {integrity: sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -505,6 +522,10 @@ packages: resolution: {integrity: sha512-aRX7WoaWx1oaOkDQvCWImVQ8XNtdv5sEWgk4gxR6NXb7WBUnL5sRak4WRzIQRZ1VTWPvV4VI4mgGjNL9TeKMYA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/expect-utils@30.0.0': + resolution: {integrity: sha512-UiWfsqNi/+d7xepfOv8KDcbbzcYtkWBe3a3kVDtg6M1kuN6CJ7b4HzIp5e1YHrSaQaVS8sdCoyCMCZClTLNKFQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/expect-utils@30.0.5': resolution: {integrity: sha512-F3lmTT7CXWYywoVUGTCmom0vXq3HTTkaZyTAzIy+bXSBizB7o5qzlC9VCtq0arOa8GqmNsbg/cE9C6HLn7Szew==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -517,6 +538,10 @@ packages: resolution: {integrity: sha512-ZO5DHfNV+kgEAeP3gK3XlpJLL4U3Sz6ebl/n68Uwt64qFFs5bv4bfEEjyRGK5uM0C90ewooNgFuKMdkbEoMEXw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/get-type@30.0.0': + resolution: {integrity: sha512-VZWMjrBzqfDKngQ7sUctKeLxanAbsBFoZnPxNIG6CmxK7Gv6K44yqd0nzveNIBfuhGZMmk1n5PGbvdSTOu0yTg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/get-type@30.0.1': resolution: {integrity: sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -525,6 +550,10 @@ packages: resolution: {integrity: sha512-7oEJT19WW4oe6HR7oLRvHxwlJk2gev0U9px3ufs8sX9PoD1Eza68KF0/tlN7X0dq/WVsBScXQGgCldA1V9Y/jA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/pattern@30.0.0': + resolution: {integrity: sha512-k+TpEThzLVXMkbdxf8KHjZ83Wl+G54ytVJoDIGWwS96Ql4xyASRjc6SU1hs5jHVql+hpyK9G8N7WuFhLpGHRpQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/pattern@30.0.1': resolution: {integrity: sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -538,6 +567,10 @@ packages: node-notifier: optional: true + '@jest/schemas@30.0.0': + resolution: {integrity: sha512-NID2VRyaEkevCRz6badhfqYwri/RvMbiHY81rk3AkK/LaiB0LSxi1RdVZ7MpZdTjNugtZeGfpL0mLs9Kp3MrQw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/schemas@30.0.5': resolution: {integrity: sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -562,6 +595,10 @@ packages: resolution: {integrity: sha512-Vk8amLQCmuZyy6GbBht1Jfo9RSdBtg7Lks+B0PecnjI8J+PCLQPGh7uI8Q/2wwpW2gLdiAfiHNsmekKlywULqg==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/types@30.0.0': + resolution: {integrity: sha512-1Nox8mAL52PKPfEnUQWBvKU/bp8FTT6AiDu76bFDEJj/qsRFSAVSldfCH3XYMqialti2zHXKvD5gN0AaHc0yKA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jest/types@30.0.5': resolution: {integrity: sha512-aREYa3aku9SSnea4aX6bhKn4bgv3AXkgijoQgbYV3yvbiGt6z+MQ85+6mIhx9DsKW2BuB/cLR/A+tcMThx+KLQ==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -573,6 +610,9 @@ packages: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/sourcemap-codec@1.5.4': resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} @@ -582,9 +622,24 @@ packages: '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@napi-rs/wasm-runtime@0.2.11': + resolution: {integrity: sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==} + '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + '@otplib/core@12.0.1': resolution: {integrity: sha512-4sGntwbA/AC+SbPhbsziRiD+jNDdIzsZ3JUyfZwjtKyc/wufl1pnSIaG4Uqx8ymPagujub0o92kgBnB89cuAMA==} @@ -623,6 +678,12 @@ packages: resolution: {integrity: sha512-3arRdUp1fNx55itnjKiUhO6t4Mf91TsrTIYINDNLAZPS0TPd5YpiXRctwjel0qqWoOOhjA34cZ3m4dksLDFUYg==} engines: {node: '>=18.17.0', npm: '>=9.5.0'} + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + + '@sinclair/typebox@0.34.35': + resolution: {integrity: sha512-C6ypdODf2VZkgRT6sFM8E1F8vR+HcffniX0Kp8MsU8PIfrlXbNCBz0jzj17GjdmjTx1OtZzdH8+iALL21UjF5A==} + '@sinclair/typebox@0.34.38': resolution: {integrity: sha512-HpkxMmc2XmZKhvaKIZZThlHmx1L0I/V1hWK1NubtlFnr6ZqdiOpV72TKudZUNQjZNsyDBay72qFEhEvb+bcwcA==} @@ -647,6 +708,9 @@ packages: '@tybys/wasm-util@0.10.0': resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==} + '@tybys/wasm-util@0.9.0': + resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} + '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -671,6 +735,9 @@ packages: '@types/jest@30.0.0': resolution: {integrity: sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==} + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + '@types/node@24.1.0': resolution: {integrity: sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==} @@ -689,6 +756,127 @@ packages: '@types/yargs@17.0.33': resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} + '@typescript-eslint/eslint-plugin@8.24.1': + resolution: {integrity: sha512-ll1StnKtBigWIGqvYDVuDmXJHVH4zLVot1yQ4fJtLpL7qacwkxJc1T0bptqw+miBQ/QfUbhl1TcQ4accW5KUyA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/parser@8.24.1': + resolution: {integrity: sha512-Tqoa05bu+t5s8CTZFaGpCH2ub3QeT9YDkXbPd3uQ4SfsLoh1/vv2GEYAioPoxCWJJNsenXlC88tRjwoHNts1oQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/parser@8.38.0': + resolution: {integrity: sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/project-service@8.34.1': + resolution: {integrity: sha512-nuHlOmFZfuRwLJKDGQOVc0xnQrAmuq1Mj/ISou5044y1ajGNp2BNliIqp7F2LPQ5sForz8lempMFCovfeS1XoA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/project-service@8.38.0': + resolution: {integrity: sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/scope-manager@8.24.1': + resolution: {integrity: sha512-OdQr6BNBzwRjNEXMQyaGyZzgg7wzjYKfX2ZBV3E04hUCBDv3GQCHiz9RpqdUIiVrMgJGkXm3tcEh4vFSHreS2Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/scope-manager@8.34.1': + resolution: {integrity: sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/scope-manager@8.38.0': + resolution: {integrity: sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.34.1': + resolution: {integrity: sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/tsconfig-utils@8.38.0': + resolution: {integrity: sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/type-utils@8.24.1': + resolution: {integrity: sha512-/Do9fmNgCsQ+K4rCz0STI7lYB4phTtEXqqCAs3gZW0pnK7lWNkvWd5iW545GSmApm4AzmQXmSqXPO565B4WVrw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/types@8.24.1': + resolution: {integrity: sha512-9kqJ+2DkUXiuhoiYIUvIYjGcwle8pcPpdlfkemGvTObzgmYfJ5d0Qm6jwb4NBXP9W1I5tss0VIAnWFumz3mC5A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/types@8.34.1': + resolution: {integrity: sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/types@8.38.0': + resolution: {integrity: sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.24.1': + resolution: {integrity: sha512-UPyy4MJ/0RE648DSKQe9g0VDSehPINiejjA6ElqnFaFIhI6ZEiZAkUI0D5MCk0bQcTf/LVqZStvQ6K4lPn/BRg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/typescript-estree@8.34.1': + resolution: {integrity: sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/typescript-estree@8.38.0': + resolution: {integrity: sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/utils@8.24.1': + resolution: {integrity: sha512-OOcg3PMMQx9EXspId5iktsI3eMaXVwlhC8BvNnX6B5w9a4dVgpkQZuU8Hy67TolKcl+iFWq0XX+jbDGN4xWxjQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/utils@8.34.1': + resolution: {integrity: sha512-mqOwUdZ3KjtGk7xJJnLbHxTuWVn3GO2WZZuM+Slhkun4+qthLdXx32C8xIXbO1kfCECb3jIs3eoxK3eryk7aoQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/visitor-keys@8.24.1': + resolution: {integrity: sha512-EwVHlp5l+2vp8CoqJm9KikPZgi3gbdZAtabKT9KPShGeOcJhsv4Zdo3oc8T8I0uKEmYoU4ItyxbptjF08enaxg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/visitor-keys@8.34.1': + resolution: {integrity: sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/visitor-keys@8.38.0': + resolution: {integrity: sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} @@ -697,96 +885,196 @@ packages: cpu: [arm] os: [android] + '@unrs/resolver-binding-android-arm-eabi@1.9.2': + resolution: {integrity: sha512-tS+lqTU3N0kkthU+rYp0spAYq15DU8ld9kXkaKg9sbQqJNF+WPMuNHZQGCgdxrUOEO0j22RKMwRVhF1HTl+X8A==} + cpu: [arm] + os: [android] + '@unrs/resolver-binding-android-arm64@1.11.1': resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==} cpu: [arm64] os: [android] + '@unrs/resolver-binding-android-arm64@1.9.2': + resolution: {integrity: sha512-MffGiZULa/KmkNjHeuuflLVqfhqLv1vZLm8lWIyeADvlElJ/GLSOkoUX+5jf4/EGtfwrNFcEaB8BRas03KT0/Q==} + cpu: [arm64] + os: [android] + '@unrs/resolver-binding-darwin-arm64@1.11.1': resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==} cpu: [arm64] os: [darwin] + '@unrs/resolver-binding-darwin-arm64@1.9.2': + resolution: {integrity: sha512-dzJYK5rohS1sYl1DHdJ3mwfwClJj5BClQnQSyAgEfggbUwA9RlROQSSbKBLqrGfsiC/VyrDPtbO8hh56fnkbsQ==} + cpu: [arm64] + os: [darwin] + '@unrs/resolver-binding-darwin-x64@1.11.1': resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==} cpu: [x64] os: [darwin] + '@unrs/resolver-binding-darwin-x64@1.9.2': + resolution: {integrity: sha512-gaIMWK+CWtXcg9gUyznkdV54LzQ90S3X3dn8zlh+QR5Xy7Y+Efqw4Rs4im61K1juy4YNb67vmJsCDAGOnIeffQ==} + cpu: [x64] + os: [darwin] + '@unrs/resolver-binding-freebsd-x64@1.11.1': resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==} cpu: [x64] os: [freebsd] + '@unrs/resolver-binding-freebsd-x64@1.9.2': + resolution: {integrity: sha512-S7QpkMbVoVJb0xwHFwujnwCAEDe/596xqY603rpi/ioTn9VDgBHnCCxh+UFrr5yxuMH+dliHfjwCZJXOPJGPnw==} + cpu: [x64] + os: [freebsd] + '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==} cpu: [arm] os: [linux] + '@unrs/resolver-binding-linux-arm-gnueabihf@1.9.2': + resolution: {integrity: sha512-+XPUMCuCCI80I46nCDFbGum0ZODP5NWGiwS3Pj8fOgsG5/ctz+/zzuBlq/WmGa+EjWZdue6CF0aWWNv84sE1uw==} + cpu: [arm] + os: [linux] + '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==} cpu: [arm] os: [linux] + '@unrs/resolver-binding-linux-arm-musleabihf@1.9.2': + resolution: {integrity: sha512-sqvUyAd1JUpwbz33Ce2tuTLJKM+ucSsYpPGl2vuFwZnEIg0CmdxiZ01MHQ3j6ExuRqEDUCy8yvkDKvjYFPb8Zg==} + cpu: [arm] + os: [linux] + '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} cpu: [arm64] os: [linux] + '@unrs/resolver-binding-linux-arm64-gnu@1.9.2': + resolution: {integrity: sha512-UYA0MA8ajkEDCFRQdng/FVx3F6szBvk3EPnkTTQuuO9lV1kPGuTB+V9TmbDxy5ikaEgyWKxa4CI3ySjklZ9lFA==} + cpu: [arm64] + os: [linux] + '@unrs/resolver-binding-linux-arm64-musl@1.11.1': resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} cpu: [arm64] os: [linux] + '@unrs/resolver-binding-linux-arm64-musl@1.9.2': + resolution: {integrity: sha512-P/CO3ODU9YJIHFqAkHbquKtFst0COxdphc8TKGL5yCX75GOiVpGqd1d15ahpqu8xXVsqP4MGFP2C3LRZnnL5MA==} + cpu: [arm64] + os: [linux] + '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} cpu: [ppc64] os: [linux] + '@unrs/resolver-binding-linux-ppc64-gnu@1.9.2': + resolution: {integrity: sha512-uKStFlOELBxBum2s1hODPtgJhY4NxYJE9pAeyBgNEzHgTqTiVBPjfTlPFJkfxyTjQEuxZbbJlJnMCrRgD7ubzw==} + cpu: [ppc64] + os: [linux] + '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} cpu: [riscv64] os: [linux] + '@unrs/resolver-binding-linux-riscv64-gnu@1.9.2': + resolution: {integrity: sha512-LkbNnZlhINfY9gK30AHs26IIVEZ9PEl9qOScYdmY2o81imJYI4IMnJiW0vJVtXaDHvBvxeAgEy5CflwJFIl3tQ==} + cpu: [riscv64] + os: [linux] + '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} cpu: [riscv64] os: [linux] + '@unrs/resolver-binding-linux-riscv64-musl@1.9.2': + resolution: {integrity: sha512-vI+e6FzLyZHSLFNomPi+nT+qUWN4YSj8pFtQZSFTtmgFoxqB6NyjxSjAxEC1m93qn6hUXhIsh8WMp+fGgxCoRg==} + cpu: [riscv64] + os: [linux] + '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} cpu: [s390x] os: [linux] + '@unrs/resolver-binding-linux-s390x-gnu@1.9.2': + resolution: {integrity: sha512-sSO4AlAYhSM2RAzBsRpahcJB1msc6uYLAtP6pesPbZtptF8OU/CbCPhSRW6cnYOGuVmEmWVW5xVboAqCnWTeHQ==} + cpu: [s390x] + os: [linux] + '@unrs/resolver-binding-linux-x64-gnu@1.11.1': resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} cpu: [x64] os: [linux] + '@unrs/resolver-binding-linux-x64-gnu@1.9.2': + resolution: {integrity: sha512-jkSkwch0uPFva20Mdu8orbQjv2A3G88NExTN2oPTI1AJ+7mZfYW3cDCTyoH6OnctBKbBVeJCEqh0U02lTkqD5w==} + cpu: [x64] + os: [linux] + '@unrs/resolver-binding-linux-x64-musl@1.11.1': resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} cpu: [x64] os: [linux] + '@unrs/resolver-binding-linux-x64-musl@1.9.2': + resolution: {integrity: sha512-Uk64NoiTpQbkpl+bXsbeyOPRpUoMdcUqa+hDC1KhMW7aN1lfW8PBlBH4mJ3n3Y47dYE8qi0XTxy1mBACruYBaw==} + cpu: [x64] + os: [linux] + '@unrs/resolver-binding-wasm32-wasi@1.11.1': resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==} engines: {node: '>=14.0.0'} cpu: [wasm32] + '@unrs/resolver-binding-wasm32-wasi@1.9.2': + resolution: {integrity: sha512-EpBGwkcjDicjR/ybC0g8wO5adPNdVuMrNalVgYcWi+gYtC1XYNuxe3rufcO7dA76OHGeVabcO6cSkPJKVcbCXQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==} cpu: [arm64] os: [win32] + '@unrs/resolver-binding-win32-arm64-msvc@1.9.2': + resolution: {integrity: sha512-EdFbGn7o1SxGmN6aZw9wAkehZJetFPao0VGZ9OMBwKx6TkvDuj6cNeLimF/Psi6ts9lMOe+Dt6z19fZQ9Ye2fw==} + cpu: [arm64] + os: [win32] + '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==} cpu: [ia32] os: [win32] + '@unrs/resolver-binding-win32-ia32-msvc@1.9.2': + resolution: {integrity: sha512-JY9hi1p7AG+5c/dMU8o2kWemM8I6VZxfGwn1GCtf3c5i+IKcMo2NQ8OjZ4Z3/itvY/Si3K10jOBQn7qsD/whUA==} + cpu: [ia32] + os: [win32] + '@unrs/resolver-binding-win32-x64-msvc@1.11.1': resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==} cpu: [x64] os: [win32] + '@unrs/resolver-binding-win32-x64-msvc@1.9.2': + resolution: {integrity: sha512-ryoo+EB19lMxAd80ln9BVf8pdOAxLb97amrQ3SFN9OCRn/5M5wvwDgAe4i8ZjhpbiHoDeP8yavcTEnpKBo7lZg==} + cpu: [x64] + os: [win32] + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-walk@8.3.4: resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} @@ -800,6 +1088,9 @@ packages: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} @@ -857,8 +1148,52 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - async@3.2.6: - resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + + array-includes@3.1.9: + resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlastindex@1.2.6: + resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.3: + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.3: + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + + ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axe-core@4.10.2: + resolution: {integrity: sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==} + engines: {node: '>=4'} + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} babel-jest@30.0.5: resolution: {integrity: sha512-mRijnKimhGDMsizTvBTWotwNpzrkHr+VvZUQBof2AufXKB8NXrL1W69TG20EvOz7aevx6FTJIaBuBkYxS8zolg==} @@ -898,6 +1233,11 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + browserslist@4.25.1: resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -913,6 +1253,18 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -925,6 +1277,9 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} + caniuse-lite@1.0.30001700: + resolution: {integrity: sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==} + caniuse-lite@1.0.30001727: resolution: {integrity: sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==} @@ -950,7 +1305,6 @@ packages: resolution: {integrity: sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==} engines: {node: '>=8'} - ci-info@4.3.0: resolution: {integrity: sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==} engines: {node: '>=8'} @@ -1009,6 +1363,38 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} + damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + debug@4.4.1: resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} engines: {node: '>=6.0'} @@ -1026,11 +1412,22 @@ packages: babel-plugin-macros: optional: true + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} - detect-newline@3.1.0: + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} @@ -1038,13 +1435,23 @@ packages: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - ejs@3.1.10: - resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} - engines: {node: '>=0.10.0'} - hasBin: true + electron-to-chromium@1.5.103: + resolution: {integrity: sha512-P6+XzIkfndgsrjROJWfSvVEgNHtPgbhVyTkwLjUM2HU/h7pZRORgaTlHqfAikqxKmdJMLW8fftrdGWbd/Ds0FA==} electron-to-chromium@1.5.190: resolution: {integrity: sha512-k4McmnB2091YIsdCgkS0fMVMPOJgxl93ltFzaryXqwip1AaxeDqKCGLxkXODDA5Ab/D+tV5EL5+aTx76RvLRxw==} @@ -1102,27 +1509,69 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + escape-string-regexp@2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-config-prettier@10.1.8: + resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} hasBin: true + peerDependencies: + eslint: '>=7.0.0' - execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} + eslint-import-context@0.1.9: + resolution: {integrity: sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + peerDependencies: + unrs-resolver: ^1.0.0 + peerDependenciesMeta: + unrs-resolver: + optional: true - exit-x@0.2.2: - resolution: {integrity: sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==} - engines: {node: '>= 0.8.0'} + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - expect@30.0.5: - resolution: {integrity: sha512-P0te2pt+hHI5qLJkIR+iMvS+lYUZml8rKKsohVHAGY+uClp9XVbdyYNJOIjSRpHVp8s8YqxJCiHUkSYZGr8rtQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + eslint-import-resolver-typescript@4.4.4: + resolution: {integrity: sha512-1iM2zeBvrYmUNTj2vSC/90JTHDth+dfOfiNKkxApWRsTJYNrc8rOdxxIf5vazX+BiAXTeOT0UvWpGI/7qIWQOw==} + engines: {node: ^16.17.0 || >=18.6.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + eslint-plugin-import-x: '*' + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true + eslint-module-utils@2.12.1: + resolution: {integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true eslint-plugin-escompat@3.11.4: resolution: {integrity: sha512-j0ywwNnIufshOzgAu+PfIig1c7VRClKSNKzpniMT2vXQ4leL5q+e/SpMFQU0nrdL2WFFM44XmhSuwmxb3G0CJg==} @@ -1279,10 +1728,15 @@ packages: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} - fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.19.0: + resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} + fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} @@ -1302,7 +1756,6 @@ packages: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} - fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -1311,6 +1764,21 @@ packages: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + foreground-child@3.3.1: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} @@ -1328,6 +1796,16 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -1336,17 +1814,37 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + get-tsconfig@4.10.1: resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + glob@10.4.5: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true @@ -1355,6 +1853,26 @@ packages: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@15.15.0: + resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} + engines: {node: '>=18'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -1374,11 +1892,29 @@ packages: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} - has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -1390,7 +1926,6 @@ packages: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} - iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -1481,7 +2016,6 @@ packages: resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} engines: {node: '>=4'} - is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -1490,14 +2024,77 @@ packages: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} + is-generator-function@1.1.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -1524,11 +2121,6 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - jake@10.9.4: - resolution: {integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==} - engines: {node: '>=10'} - hasBin: true - jest-changed-files@30.0.5: resolution: {integrity: sha512-bGl2Ntdx0eAwXuGpdLdVYVr5YQHnSZlQ0y9HVDu565lCUAe9sj6JOtBbMmBBikGIegne9piDDIOeiLVoqTkz4A==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -1562,6 +2154,10 @@ packages: ts-node: optional: true + jest-diff@30.0.0: + resolution: {integrity: sha512-TgT1+KipV8JTLXXeFX0qSvIJR/UXiNNojjxb/awh3vYlBZyChU/NEmyKmq+wijKjWEztyrGJFL790nqMqNjTHA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-diff@30.0.5: resolution: {integrity: sha512-1UIqE9PoEKaHcIKvq2vbibrCog4Y8G0zmOxgQUVEiTqwR5hJVMCoDsN1vFvI5JvwD37hjueZ1C4l2FyGnfpE0A==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -1586,14 +2182,26 @@ packages: resolution: {integrity: sha512-3Uxr5uP8jmHMcsOtYMRB/zf1gXN3yUIc+iPorhNETG54gErFIiUhLvyY/OggYpSMOEYqsmRxmuU4ZOoX5jpRFg==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-matcher-utils@30.0.0: + resolution: {integrity: sha512-m5mrunqopkrqwG1mMdJxe1J4uGmS9AHHKYUmoxeQOxBcLjEvirIrIDwuKmUYrecPHVB/PUBpXs2gPoeA2FSSLQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-matcher-utils@30.0.5: resolution: {integrity: sha512-uQgGWt7GOrRLP1P7IwNWwK1WAQbq+m//ZY0yXygyfWp0rJlksMSLQAA4wYQC3b6wl3zfnchyTx+k3HZ5aPtCbQ==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-message-util@30.0.0: + resolution: {integrity: sha512-pV3qcrb4utEsa/U7UI2VayNzSDQcmCllBZLSoIucrESRu0geKThFZOjjh0kACDJFJRAQwsK7GVsmS6SpEceD8w==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-message-util@30.0.5: resolution: {integrity: sha512-NAiDOhsK3V7RU0Aa/HnrQo+E4JlbarbmI3q6Pi4KcxicdtjV82gcIUrejOtczChtVQR4kddu1E1EJlW6EN9IyA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-mock@30.0.0: + resolution: {integrity: sha512-W2sRA4ALXILrEetEOh2ooZG6fZ01iwVs0OWMKSSWRcUlaLr4ESHuiKXDNTg+ZVgOq8Ei5445i/Yxrv59VT+XkA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-mock@30.0.5: resolution: {integrity: sha512-Od7TyasAAQX/6S+QCbN6vZoWOMwlTtzzGuxJku1GhGanAjz9y+QsQkpScDmETvdc9aSXyJ/Op4rhpMYBWW91wQ==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -1607,6 +2215,10 @@ packages: jest-resolve: optional: true + jest-regex-util@30.0.0: + resolution: {integrity: sha512-rT84010qRu/5OOU7a9TeidC2Tp3Qgt9Sty4pOZ/VSDuEmRupIjKZAb53gU3jr4ooMlhwScrgC9UixJxWzVu9oQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-regex-util@30.0.1: resolution: {integrity: sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -1631,6 +2243,10 @@ packages: resolution: {integrity: sha512-T00dWU/Ek3LqTp4+DcW6PraVxjk28WY5Ua/s+3zUKSERZSNyxTqhDXCWKG5p2HAJ+crVQ3WJ2P9YVHpj1tkW+g==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-util@30.0.0: + resolution: {integrity: sha512-fhNBBM9uSUbd4Lzsf8l/kcAdaHD/4SgoI48en3HXcBEMwKwoleKFMZ6cYEYs21SB779PRuRCyNLmymApAm8tZw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + jest-util@30.0.5: resolution: {integrity: sha512-pvyPWssDZR0FlfMxCBoc0tvM8iUEskaRFALUtGQYzVEAqisAztmy+R8LnU14KT4XA0H/a5HMVTXat1jLne010g==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -1677,21 +2293,52 @@ packages: engines: {node: '>=6'} hasBin: true + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true + jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + language-subtag-registry@0.3.23: + resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} + + language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} + leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -1699,6 +2346,16 @@ packages: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash.kebabcase@4.1.1: + resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} + lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} @@ -1714,7 +2371,6 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -1731,9 +2387,17 @@ packages: makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} @@ -1757,6 +2421,9 @@ packages: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + minipass@7.1.2: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} @@ -1768,7 +2435,6 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - mute-stream@0.0.7: resolution: {integrity: sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==} @@ -1777,7 +2443,6 @@ packages: engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} hasBin: true - napi-postinstall@0.3.2: resolution: {integrity: sha512-tWVJxJHmBWLy69PvO96TZMZDrzmw5KeiZBz3RHmiM2XZ9grBJ2WgMAFVVg25nqp3ZjTFUs2Ftw1JhscL3Teliw==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} @@ -1786,6 +2451,9 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} @@ -1800,6 +2468,30 @@ packages: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + + object.values@1.2.1: + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} + engines: {node: '>= 0.4'} + once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -1834,6 +2526,10 @@ packages: otplib@12.0.1: resolution: {integrity: sha512-xDGvUOQjop7RDgxTQ+o4pOol0/3xSZzawTiPKRrHnQWAy0WjhNs/5HdIDJCrqC4MBynmjXgULc6YfioaxZeFgg==} + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -1846,6 +2542,10 @@ packages: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -1853,6 +2553,10 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -1873,6 +2577,9 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + path-scurry@1.11.1: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} @@ -1884,6 +2591,10 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + picomatch@4.0.3: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} @@ -1910,16 +2621,52 @@ packages: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + + prettier@3.6.2: + resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} + engines: {node: '>=14'} + hasBin: true + + pretty-format@30.0.0: + resolution: {integrity: sha512-18NAOUr4ZOQiIR+BgI5NhQE7uREdx4ZyV0dyay5izh4yfQ+1T7BSvggxvRGoXocrRyevqW5OhScUjbi9GB8R8Q==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + pretty-format@30.0.5: resolution: {integrity: sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + pure-rand@7.0.1: resolution: {integrity: sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==} + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -1932,6 +2679,10 @@ packages: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} @@ -1939,7 +2690,6 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.10: resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} engines: {node: '>= 0.4'} @@ -1984,7 +2734,6 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -1994,6 +2743,18 @@ packages: engines: {node: '>=10'} hasBin: true + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -2043,10 +2804,18 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + stable-hash-x@0.2.0: + resolution: {integrity: sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==} + engines: {node: '>=12.0.0'} + stack-utils@2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} + stop-iteration-iterator@1.1.0: + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} + string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} @@ -2063,7 +2832,6 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} - string.prototype.includes@2.0.1: resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} engines: {node: '>= 0.4'} @@ -2088,7 +2856,6 @@ packages: resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} engines: {node: '>=6'} - strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -2097,6 +2864,10 @@ packages: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + strip-bom@4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} @@ -2125,6 +2896,13 @@ packages: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + svg-element-attributes@1.3.1: + resolution: {integrity: sha512-Bh05dSOnJBf3miNMqpsormfNtfidA/GxQVakhtn0T4DECWKeXQRQUceYjJ+OxYiiLdGe4Jo9iFV8wICFapFeIA==} + synckit@0.11.11: resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} engines: {node: ^14.18.0 || >=16.0.0} @@ -2136,11 +2914,13 @@ packages: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + thirty-two@1.0.2: resolution: {integrity: sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==} engines: {node: '>=0.2.6'} - through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} @@ -2152,7 +2932,6 @@ packages: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} - tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} @@ -2160,8 +2939,20 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - ts-jest@29.4.0: - resolution: {integrity: sha512-d423TJMnJGu80/eSgfQ5w/R+0zFJvdtTxwtF9KzFFunOpSeD+79lHJQIiAhluJoyGRbvj9NZJsl9WjCUo0ND7Q==} + ts-api-utils@2.0.1: + resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + ts-jest@29.4.1: + resolution: {integrity: sha512-SaeUtjfpg9Uqu8IbeDKtdaS0g8lS6FT6OzM3ezrDfErPJPHNDo/Ey+VFGP1bQIDfagYDLyRpd7O15XpG1Es2Uw==} engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -2201,7 +2992,6 @@ packages: '@swc/wasm': optional: true - tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} @@ -2216,10 +3006,18 @@ packages: engines: {node: '>=18.0.0'} hasBin: true + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} @@ -2228,18 +3026,49 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + + typescript-eslint@8.24.1: + resolution: {integrity: sha512-cw3rEdzDqBs70TIcb0Gdzbt6h11BSs2pS0yaq7hDWDBtCCSei1pPSUXE9qUdQ/Wm9NgFg8mKtMt1b8fTHIl1jA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + typescript@5.7.3: resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} engines: {node: '>=14.17'} hasBin: true - undici-types@7.8.0: - resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} + uglify-js@3.19.3: + resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} + engines: {node: '>=0.8.0'} + hasBin: true + + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + + undici-types@7.8.0: + resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} unrs-resolver@1.11.1: resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} - unrs-resolver@1.9.2: resolution: {integrity: sha512-VUyWiTNQD7itdiMuJy+EuLEErLj3uwX/EpHQF8EOf33Dq3Ju6VW1GXm+swk6+1h7a49uv9fKZ+dft9jU7esdLA==} @@ -2253,7 +3082,6 @@ packages: peerDependencies: browserslist: '>= 4.21.0' - update-browserslist-db@1.1.3: resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} hasBin: true @@ -2263,6 +3091,9 @@ packages: uri-js-replace@1.0.1: resolution: {integrity: sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==} + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} @@ -2273,11 +3104,34 @@ packages: walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.19: + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} + engines: {node: '>= 0.4'} + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -2515,56 +3369,37 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} - '@biomejs/biome@2.1.3': - optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.1.3 - '@biomejs/cli-darwin-x64': 2.1.3 - '@biomejs/cli-linux-arm64': 2.1.3 - '@biomejs/cli-linux-arm64-musl': 2.1.3 - '@biomejs/cli-linux-x64': 2.1.3 - '@biomejs/cli-linux-x64-musl': 2.1.3 - '@biomejs/cli-win32-arm64': 2.1.3 - '@biomejs/cli-win32-x64': 2.1.3 - - '@biomejs/cli-darwin-arm64@2.1.3': - optional: true - - '@biomejs/cli-darwin-x64@2.1.3': - optional: true - - '@biomejs/cli-linux-arm64-musl@2.1.3': - optional: true - - '@biomejs/cli-linux-arm64@2.1.3': - optional: true - - '@biomejs/cli-linux-x64-musl@2.1.3': - optional: true - - '@biomejs/cli-linux-x64@2.1.3': - optional: true - - '@biomejs/cli-win32-arm64@2.1.3': - optional: true - - '@biomejs/cli-win32-x64@2.1.3': - optional: true - '@cspotcode/source-map-support@0.8.1': dependencies: '@jridgewell/trace-mapping': 0.3.9 + '@emnapi/core@1.4.3': + dependencies: + '@emnapi/wasi-threads': 1.0.2 + tslib: 2.8.1 + optional: true + '@emnapi/core@1.4.5': dependencies: '@emnapi/wasi-threads': 1.0.4 tslib: 2.8.1 optional: true + '@emnapi/runtime@1.4.3': + dependencies: + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.4.5': dependencies: tslib: 2.8.1 optional: true + '@emnapi/wasi-threads@1.0.2': + dependencies: + tslib: 2.8.1 + optional: true + '@emnapi/wasi-threads@1.0.4': dependencies: tslib: 2.8.1 @@ -2645,6 +3480,68 @@ snapshots: '@esbuild/win32-x64@0.25.5': optional: true + '@eslint-community/eslint-utils@4.4.1(eslint@8.57.1)': + dependencies: + eslint: 8.57.1 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/eslint-utils@4.7.0(eslint@8.57.1)': + dependencies: + eslint: 8.57.1 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/compat@1.2.7(eslint@8.57.1)': + optionalDependencies: + eslint: 8.57.1 + + '@eslint/eslintrc@2.1.4': + dependencies: + ajv: 6.12.6 + debug: 4.4.0 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/eslintrc@3.3.0': + dependencies: + ajv: 6.12.6 + debug: 4.4.1(supports-color@10.0.0) + espree: 10.3.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@8.57.1': {} + + '@eslint/js@9.21.0': {} + + '@github/browserslist-config@1.0.0': {} + + '@humanwhocodes/config-array@0.13.0': + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.4.0 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/object-schema@2.0.3': {} + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -2709,6 +3606,8 @@ snapshots: - supports-color - ts-node + '@jest/diff-sequences@30.0.0': {} + '@jest/diff-sequences@30.0.1': {} '@jest/environment@30.0.5': @@ -2718,6 +3617,10 @@ snapshots: '@types/node': 24.1.0 jest-mock: 30.0.5 + '@jest/expect-utils@30.0.0': + dependencies: + '@jest/get-type': 30.0.0 + '@jest/expect-utils@30.0.5': dependencies: '@jest/get-type': 30.0.1 @@ -2738,6 +3641,8 @@ snapshots: jest-mock: 30.0.5 jest-util: 30.0.5 + '@jest/get-type@30.0.0': {} + '@jest/get-type@30.0.1': {} '@jest/globals@30.0.5': @@ -2749,6 +3654,11 @@ snapshots: transitivePeerDependencies: - supports-color + '@jest/pattern@30.0.0': + dependencies: + '@types/node': 24.1.0 + jest-regex-util: 30.0.0 + '@jest/pattern@30.0.1': dependencies: '@types/node': 24.1.0 @@ -2782,6 +3692,10 @@ snapshots: transitivePeerDependencies: - supports-color + '@jest/schemas@30.0.0': + dependencies: + '@sinclair/typebox': 0.34.35 + '@jest/schemas@30.0.5': dependencies: '@sinclair/typebox': 0.34.38 @@ -2833,6 +3747,16 @@ snapshots: transitivePeerDependencies: - supports-color + '@jest/types@30.0.0': + dependencies: + '@jest/pattern': 30.0.0 + '@jest/schemas': 30.0.0 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 24.1.0 + '@types/yargs': 17.0.33 + chalk: 4.1.2 + '@jest/types@30.0.5': dependencies: '@jest/pattern': 30.0.1 @@ -2850,6 +3774,8 @@ snapshots: '@jridgewell/resolve-uri@3.1.2': {} + '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/sourcemap-codec@1.5.4': {} '@jridgewell/trace-mapping@0.3.29': @@ -2860,7 +3786,14 @@ snapshots: '@jridgewell/trace-mapping@0.3.9': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@napi-rs/wasm-runtime@0.2.11': + dependencies: + '@emnapi/core': 1.4.3 + '@emnapi/runtime': 1.4.3 + '@tybys/wasm-util': 0.9.0 + optional: true '@napi-rs/wasm-runtime@0.2.12': dependencies: @@ -2869,6 +3802,18 @@ snapshots: '@tybys/wasm-util': 0.10.0 optional: true + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.0 + '@otplib/core@12.0.1': {} '@otplib/plugin-crypto@12.0.1': @@ -2924,6 +3869,10 @@ snapshots: transitivePeerDependencies: - supports-color + '@rtsao/scc@1.1.0': {} + + '@sinclair/typebox@0.34.35': {} + '@sinclair/typebox@0.34.38': {} '@sinonjs/commons@3.0.1': @@ -2947,6 +3896,11 @@ snapshots: tslib: 2.8.1 optional: true + '@tybys/wasm-util@0.9.0': + dependencies: + tslib: 2.8.1 + optional: true + '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.28.0 @@ -2980,8 +3934,10 @@ snapshots: '@types/jest@30.0.0': dependencies: - expect: 30.0.5 - pretty-format: 30.0.5 + expect: 30.0.0 + pretty-format: 30.0.0 + + '@types/json5@0.0.29': {} '@types/node@24.1.0': dependencies: @@ -3001,67 +3957,329 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 + '@typescript-eslint/eslint-plugin@8.24.1(@typescript-eslint/parser@8.24.1(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.24.1(eslint@8.57.1)(typescript@5.7.3) + '@typescript-eslint/scope-manager': 8.24.1 + '@typescript-eslint/type-utils': 8.24.1(eslint@8.57.1)(typescript@5.7.3) + '@typescript-eslint/utils': 8.24.1(eslint@8.57.1)(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.24.1 + eslint: 8.57.1 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 2.0.1(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/eslint-plugin@8.24.1(@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.38.0(eslint@8.57.1)(typescript@5.7.3) + '@typescript-eslint/scope-manager': 8.24.1 + '@typescript-eslint/type-utils': 8.24.1(eslint@8.57.1)(typescript@5.7.3) + '@typescript-eslint/utils': 8.24.1(eslint@8.57.1)(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.24.1 + eslint: 8.57.1 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 2.0.1(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.24.1(eslint@8.57.1)(typescript@5.7.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.24.1 + '@typescript-eslint/types': 8.24.1 + '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.24.1 + debug: 4.4.1(supports-color@10.0.0) + eslint: 8.57.1 + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.7.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.38.0 + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.38.0 + debug: 4.4.1(supports-color@10.0.0) + eslint: 8.57.1 + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.34.1(typescript@5.7.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.7.3) + '@typescript-eslint/types': 8.34.1 + debug: 4.4.1(supports-color@10.0.0) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.38.0(typescript@5.7.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.7.3) + '@typescript-eslint/types': 8.38.0 + debug: 4.4.1(supports-color@10.0.0) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.24.1': + dependencies: + '@typescript-eslint/types': 8.24.1 + '@typescript-eslint/visitor-keys': 8.24.1 + + '@typescript-eslint/scope-manager@8.34.1': + dependencies: + '@typescript-eslint/types': 8.34.1 + '@typescript-eslint/visitor-keys': 8.34.1 + + '@typescript-eslint/scope-manager@8.38.0': + dependencies: + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/visitor-keys': 8.38.0 + + '@typescript-eslint/tsconfig-utils@8.34.1(typescript@5.7.3)': + dependencies: + typescript: 5.7.3 + + '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.7.3)': + dependencies: + typescript: 5.7.3 + + '@typescript-eslint/type-utils@8.24.1(eslint@8.57.1)(typescript@5.7.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3) + '@typescript-eslint/utils': 8.24.1(eslint@8.57.1)(typescript@5.7.3) + debug: 4.4.1(supports-color@10.0.0) + eslint: 8.57.1 + ts-api-utils: 2.0.1(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.24.1': {} + + '@typescript-eslint/types@8.34.1': {} + + '@typescript-eslint/types@8.38.0': {} + + '@typescript-eslint/typescript-estree@8.24.1(typescript@5.7.3)': + dependencies: + '@typescript-eslint/types': 8.24.1 + '@typescript-eslint/visitor-keys': 8.24.1 + debug: 4.4.1(supports-color@10.0.0) + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.2 + ts-api-utils: 2.1.0(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/typescript-estree@8.34.1(typescript@5.7.3)': + dependencies: + '@typescript-eslint/project-service': 8.34.1(typescript@5.7.3) + '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.7.3) + '@typescript-eslint/types': 8.34.1 + '@typescript-eslint/visitor-keys': 8.34.1 + debug: 4.4.1(supports-color@10.0.0) + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.2 + ts-api-utils: 2.1.0(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/typescript-estree@8.38.0(typescript@5.7.3)': + dependencies: + '@typescript-eslint/project-service': 8.38.0(typescript@5.7.3) + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.7.3) + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/visitor-keys': 8.38.0 + debug: 4.4.1(supports-color@10.0.0) + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.2 + ts-api-utils: 2.1.0(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.24.1(eslint@8.57.1)(typescript@5.7.3)': + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) + '@typescript-eslint/scope-manager': 8.24.1 + '@typescript-eslint/types': 8.24.1 + '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3) + eslint: 8.57.1 + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.34.1(eslint@8.57.1)(typescript@5.7.3)': + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) + '@typescript-eslint/scope-manager': 8.34.1 + '@typescript-eslint/types': 8.34.1 + '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.7.3) + eslint: 8.57.1 + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.24.1': + dependencies: + '@typescript-eslint/types': 8.24.1 + eslint-visitor-keys: 4.2.1 + + '@typescript-eslint/visitor-keys@8.34.1': + dependencies: + '@typescript-eslint/types': 8.34.1 + eslint-visitor-keys: 4.2.1 + + '@typescript-eslint/visitor-keys@8.38.0': + dependencies: + '@typescript-eslint/types': 8.38.0 + eslint-visitor-keys: 4.2.1 + '@ungap/structured-clone@1.3.0': {} '@unrs/resolver-binding-android-arm-eabi@1.11.1': optional: true + '@unrs/resolver-binding-android-arm-eabi@1.9.2': + optional: true + '@unrs/resolver-binding-android-arm64@1.11.1': optional: true + '@unrs/resolver-binding-android-arm64@1.9.2': + optional: true + '@unrs/resolver-binding-darwin-arm64@1.11.1': optional: true + '@unrs/resolver-binding-darwin-arm64@1.9.2': + optional: true + '@unrs/resolver-binding-darwin-x64@1.11.1': optional: true + '@unrs/resolver-binding-darwin-x64@1.9.2': + optional: true + '@unrs/resolver-binding-freebsd-x64@1.11.1': optional: true + '@unrs/resolver-binding-freebsd-x64@1.9.2': + optional: true + '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': optional: true + '@unrs/resolver-binding-linux-arm-gnueabihf@1.9.2': + optional: true + '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': optional: true + '@unrs/resolver-binding-linux-arm-musleabihf@1.9.2': + optional: true + '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': optional: true + '@unrs/resolver-binding-linux-arm64-gnu@1.9.2': + optional: true + '@unrs/resolver-binding-linux-arm64-musl@1.11.1': optional: true + '@unrs/resolver-binding-linux-arm64-musl@1.9.2': + optional: true + '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': optional: true + '@unrs/resolver-binding-linux-ppc64-gnu@1.9.2': + optional: true + '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': optional: true + '@unrs/resolver-binding-linux-riscv64-gnu@1.9.2': + optional: true + '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': optional: true + '@unrs/resolver-binding-linux-riscv64-musl@1.9.2': + optional: true + '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': optional: true + '@unrs/resolver-binding-linux-s390x-gnu@1.9.2': + optional: true + '@unrs/resolver-binding-linux-x64-gnu@1.11.1': optional: true + '@unrs/resolver-binding-linux-x64-gnu@1.9.2': + optional: true + '@unrs/resolver-binding-linux-x64-musl@1.11.1': optional: true + '@unrs/resolver-binding-linux-x64-musl@1.9.2': + optional: true + '@unrs/resolver-binding-wasm32-wasi@1.11.1': dependencies: '@napi-rs/wasm-runtime': 0.2.12 optional: true + '@unrs/resolver-binding-wasm32-wasi@1.9.2': + dependencies: + '@napi-rs/wasm-runtime': 0.2.11 + optional: true + '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': optional: true + '@unrs/resolver-binding-win32-arm64-msvc@1.9.2': + optional: true + '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': optional: true + '@unrs/resolver-binding-win32-ia32-msvc@1.9.2': + optional: true + '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true + '@unrs/resolver-binding-win32-x64-msvc@1.9.2': + optional: true + + acorn-jsx@5.3.2(acorn@8.14.0): + dependencies: + acorn: 8.14.0 + acorn-walk@8.3.4: dependencies: acorn: 8.14.0 @@ -3070,9 +4288,16 @@ snapshots: agent-base@7.1.4: {} - ansi-colors@4.1.3: {} - - ansi-escapes@3.2.0: {} + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-colors@4.1.3: {} + + ansi-escapes@3.2.0: {} ansi-escapes@4.3.2: dependencies: @@ -3111,7 +4336,69 @@ snapshots: argparse@2.0.1: {} - async@3.2.6: {} + aria-query@5.3.2: {} + + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + is-array-buffer: 3.0.5 + + array-includes@3.1.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + is-string: 1.1.1 + math-intrinsics: 1.1.0 + + array.prototype.findlastindex@1.2.6: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-shim-unscopables: 1.1.0 + + array.prototype.flat@1.3.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-shim-unscopables: 1.1.0 + + array.prototype.flatmap@1.3.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-shim-unscopables: 1.1.0 + + arraybuffer.prototype.slice@1.0.4: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 + + ast-types-flow@0.0.8: {} + + async-function@1.0.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + + axe-core@4.10.2: {} + + axobject-query@4.1.0: {} babel-jest@30.0.5(@babel/core@7.28.0): dependencies: @@ -3182,6 +4469,13 @@ snapshots: dependencies: fill-range: 7.1.1 + browserslist@4.24.4: + dependencies: + caniuse-lite: 1.0.30001700 + electron-to-chromium: 1.5.103 + node-releases: 2.0.19 + update-browserslist-db: 1.1.2(browserslist@4.24.4) + browserslist@4.25.1: dependencies: caniuse-lite: 1.0.30001727 @@ -3199,12 +4493,31 @@ snapshots: buffer-from@1.1.2: {} + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + callsites@3.1.0: {} camelcase@5.3.1: {} camelcase@6.3.0: {} + caniuse-lite@1.0.30001700: {} + caniuse-lite@1.0.30001727: {} chalk@2.4.2: @@ -3226,7 +4539,6 @@ snapshots: ci-info@4.2.0: {} - ci-info@4.3.0: {} cjs-module-lexer@2.1.0: {} @@ -3275,6 +4587,34 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + damerau-levenshtein@1.0.8: {} + + data-view-buffer@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-offset@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + debug@3.2.7: + dependencies: + ms: 2.1.3 + + debug@4.4.0: + dependencies: + ms: 2.1.3 + debug@4.4.1(supports-color@10.0.0): dependencies: ms: 2.1.3 @@ -3283,17 +4623,43 @@ snapshots: dedent@1.6.0: {} + deep-is@0.1.4: {} + deepmerge@4.3.1: {} + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + detect-newline@3.1.0: {} diff@4.0.2: {} - eastasianwidth@0.2.0: {} + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 - ejs@3.1.10: + doctrine@3.0.0: dependencies: - jake: 10.9.4 + esutils: 2.0.3 + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + eastasianwidth@0.2.0: {} + + electron-to-chromium@1.5.103: {} electron-to-chromium@1.5.190: {} @@ -3307,7 +4673,6 @@ snapshots: dependencies: is-arrayish: 0.2.1 - es-abstract@1.24.0: dependencies: array-buffer-byte-length: 1.0.2 @@ -3392,7 +4757,6 @@ snapshots: es6-promisify@6.1.1: {} - esbuild@0.25.5: optionalDependencies: '@esbuild/aix-ppc64': 0.25.5 @@ -3423,10 +4787,262 @@ snapshots: escalade@3.2.0: {} + escape-string-regexp@1.0.5: {} + escape-string-regexp@2.0.0: {} + escape-string-regexp@4.0.0: {} + + eslint-config-prettier@10.1.8(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + + eslint-import-context@0.1.9(unrs-resolver@1.9.2): + dependencies: + get-tsconfig: 4.10.1 + stable-hash-x: 0.2.0 + optionalDependencies: + unrs-resolver: 1.9.2 + + eslint-import-resolver-node@0.3.9: + dependencies: + debug: 3.2.7 + is-core-module: 2.16.1 + resolve: 1.22.10 + transitivePeerDependencies: + - supports-color + + eslint-import-resolver-typescript@4.4.4(eslint-plugin-import@2.32.0)(eslint@8.57.1): + dependencies: + debug: 4.4.1(supports-color@10.0.0) + eslint: 8.57.1 + eslint-import-context: 0.1.9(unrs-resolver@1.9.2) + get-tsconfig: 4.10.1 + is-bun-module: 2.0.0 + stable-hash-x: 0.2.0 + tinyglobby: 0.2.14 + unrs-resolver: 1.9.2 + optionalDependencies: + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-typescript@4.4.4)(eslint@8.57.1) + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@8.57.1): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 8.38.0(eslint@8.57.1)(typescript@5.7.3) + eslint: 8.57.1 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import@2.32.0)(eslint@8.57.1) + transitivePeerDependencies: + - supports-color + + eslint-plugin-escompat@3.11.4(eslint@8.57.1): + dependencies: + browserslist: 4.24.4 + eslint: 8.57.1 + + eslint-plugin-eslint-comments@3.2.0(eslint@8.57.1): + dependencies: + escape-string-regexp: 1.0.5 + eslint: 8.57.1 + ignore: 5.3.2 + + eslint-plugin-filenames@1.3.2(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + lodash.camelcase: 4.3.0 + lodash.kebabcase: 4.1.1 + lodash.snakecase: 4.1.1 + lodash.upperfirst: 4.3.1 + + eslint-plugin-github@5.1.8(eslint-import-resolver-typescript@4.4.4)(eslint@8.57.1)(typescript@5.7.3): + dependencies: + '@eslint/compat': 1.2.7(eslint@8.57.1) + '@eslint/eslintrc': 3.3.0 + '@eslint/js': 9.21.0 + '@github/browserslist-config': 1.0.0 + '@typescript-eslint/eslint-plugin': 8.24.1(@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3) + '@typescript-eslint/parser': 8.38.0(eslint@8.57.1)(typescript@5.7.3) + aria-query: 5.3.2 + eslint: 8.57.1 + eslint-config-prettier: 10.1.8(eslint@8.57.1) + eslint-plugin-escompat: 3.11.4(eslint@8.57.1) + eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.1) + eslint-plugin-filenames: 1.3.2(eslint@8.57.1) + eslint-plugin-i18n-text: 1.0.1(eslint@8.57.1) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-typescript@4.4.4)(eslint@8.57.1) + eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1) + eslint-plugin-no-only-tests: 3.3.0 + eslint-plugin-prettier: 5.5.3(eslint-config-prettier@10.1.8(eslint@8.57.1))(eslint@8.57.1)(prettier@3.6.2) + eslint-rule-documentation: 1.0.23 + globals: 15.15.0 + jsx-ast-utils: 3.3.5 + prettier: 3.6.2 + svg-element-attributes: 1.3.1 + typescript-eslint: 8.24.1(eslint@8.57.1)(typescript@5.7.3) + transitivePeerDependencies: + - '@types/eslint' + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + - typescript + + eslint-plugin-i18n-text@1.0.1(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-typescript@4.4.4)(eslint@8.57.1): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.9 + array.prototype.findlastindex: 1.2.6 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.57.1 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@8.57.1) + hasown: 2.0.2 + is-core-module: 2.16.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.9 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.38.0(eslint@8.57.1)(typescript@5.7.3) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-jest@29.0.1(@typescript-eslint/eslint-plugin@8.24.1(@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(jest@30.0.5(@types/node@24.1.0)(ts-node@10.9.2(@types/node@24.1.0)(typescript@5.7.3)))(typescript@5.7.3): + dependencies: + '@typescript-eslint/utils': 8.34.1(eslint@8.57.1)(typescript@5.7.3) + eslint: 8.57.1 + optionalDependencies: + '@typescript-eslint/eslint-plugin': 8.24.1(@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3) + jest: 30.0.5(@types/node@24.1.0)(ts-node@10.9.2(@types/node@24.1.0)(typescript@5.7.3)) + transitivePeerDependencies: + - supports-color + - typescript + + eslint-plugin-jsx-a11y@6.10.2(eslint@8.57.1): + dependencies: + aria-query: 5.3.2 + array-includes: 3.1.9 + array.prototype.flatmap: 1.3.3 + ast-types-flow: 0.0.8 + axe-core: 4.10.2 + axobject-query: 4.1.0 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 8.57.1 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + safe-regex-test: 1.1.0 + string.prototype.includes: 2.0.1 + + eslint-plugin-no-only-tests@3.3.0: {} + + eslint-plugin-prettier@5.5.3(eslint-config-prettier@10.1.8(eslint@8.57.1))(eslint@8.57.1)(prettier@3.6.2): + dependencies: + eslint: 8.57.1 + prettier: 3.6.2 + prettier-linter-helpers: 1.0.0 + synckit: 0.11.11 + optionalDependencies: + eslint-config-prettier: 10.1.8(eslint@8.57.1) + + eslint-rule-documentation@1.0.23: {} + + eslint-scope@7.2.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.1: {} + + eslint@8.57.1: + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) + '@eslint-community/regexpp': 4.12.1 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.1 + '@humanwhocodes/config-array': 0.13.0 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.3.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.0 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + espree@10.3.0: + dependencies: + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 4.2.1 + + espree@9.6.1: + dependencies: + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 3.4.3 + esprima@4.0.1: {} + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + execa@5.1.1: dependencies: cross-spawn: 7.0.6 @@ -3441,6 +5057,15 @@ snapshots: exit-x@0.2.2: {} + expect@30.0.0: + dependencies: + '@jest/expect-utils': 30.0.0 + '@jest/get-type': 30.0.0 + jest-matcher-utils: 30.0.0 + jest-message-util: 30.0.0 + jest-mock: 30.0.0 + jest-util: 30.0.0 + expect@30.0.5: dependencies: '@jest/expect-utils': 30.0.5 @@ -3458,13 +5083,28 @@ snapshots: fast-deep-equal@3.1.3: {} + fast-diff@1.3.0: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + fast-json-stable-stringify@2.1.0: {} + fast-levenshtein@2.0.6: {} + + fastq@1.19.0: + dependencies: + reusify: 1.0.4 + fb-watchman@2.0.2: dependencies: bser: 2.1.1 - fdir@6.4.6(picomatch@4.0.2): optionalDependencies: picomatch: 4.0.2 @@ -3474,9 +5114,8 @@ snapshots: escape-string-regexp: 1.0.5 file-entry-cache@6.0.1: - dependencies: - minimatch: 5.1.6 + flat-cache: 3.2.0 fill-range@7.1.1: dependencies: @@ -3487,6 +5126,23 @@ snapshots: locate-path: 5.0.0 path-exists: 4.0.0 + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@3.2.0: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + rimraf: 3.0.2 + + flatted@3.3.3: {} + + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 @@ -3500,18 +5156,63 @@ snapshots: fsevents@2.3.3: optional: true + function-bind@1.1.2: {} + + function.prototype.name@1.1.8: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + functions-have-names: 1.2.3 + hasown: 2.0.2 + is-callable: 1.2.7 + + functions-have-names@1.2.3: {} + gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + get-package-type@0.1.0: {} + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + get-stream@6.0.1: {} + get-symbol-description@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + get-tsconfig@4.10.1: dependencies: resolve-pkg-maps: 1.0.0 + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + glob@10.4.5: dependencies: foreground-child: 3.3.1 @@ -3530,8 +5231,22 @@ snapshots: once: 1.4.0 path-is-absolute: 1.0.1 - graceful-fs@4.2.11: {} + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + globals@14.0.0: {} + + globals@15.15.0: {} + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} graphemer@1.4.0: {} @@ -3550,6 +5265,24 @@ snapshots: has-flag@4.0.0: {} + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + html-escaper@2.0.2: {} https-proxy-agent@7.0.6(supports-color@10.0.0): @@ -3561,7 +5294,6 @@ snapshots: human-signals@2.1.0: {} - iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 @@ -3573,7 +5305,6 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 - import-local@3.2.0: dependencies: pkg-dir: 4.2.0 @@ -3590,7 +5321,6 @@ snapshots: inherits@2.0.4: {} - inquirer@6.5.2: dependencies: ansi-escapes: 3.2.0 @@ -3654,27 +5384,89 @@ snapshots: get-intrinsic: 1.3.0 is-typed-array: 1.1.15 - is-date-object@1.1.0: + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-extglob@2.1.1: {} + + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-fullwidth-code-point@2.0.0: {} + + is-fullwidth-code-point@3.0.0: {} + + is-generator-fn@2.1.0: {} + + is-generator-function@1.1.0: + dependencies: + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-map@2.0.3: {} + + is-negative-zero@2.0.3: {} + + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-number@7.0.0: {} + + is-path-inside@3.0.3: {} + + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.4: dependencies: call-bound: 1.0.4 - has-tostringtag: 1.0.2 - is-extglob@2.1.1: {} + is-stream@2.0.1: {} - is-finalizationregistry@1.1.1: + is-string@1.1.1: dependencies: call-bound: 1.0.4 + has-tostringtag: 1.0.2 - is-fullwidth-code-point@2.0.0: {} + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.19 - is-fullwidth-code-point@3.0.0: {} + is-weakmap@2.0.2: {} - is-generator-fn@2.1.0: {} + is-weakref@1.1.1: + dependencies: + call-bound: 1.0.4 - is-number@7.0.0: {} + is-weakset@2.0.4: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 - is-stream@2.0.1: {} + isarray@2.0.5: {} isexe@2.0.0: {} @@ -3715,12 +5507,6 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jake@10.9.4: - dependencies: - async: 3.2.6 - filelist: 1.0.4 - picocolors: 1.1.1 - jest-changed-files@30.0.5: dependencies: execa: 5.1.1 @@ -3805,6 +5591,13 @@ snapshots: - babel-plugin-macros - supports-color + jest-diff@30.0.0: + dependencies: + '@jest/diff-sequences': 30.0.0 + '@jest/get-type': 30.0.0 + chalk: 4.1.2 + pretty-format: 30.0.0 + jest-diff@30.0.5: dependencies: '@jest/diff-sequences': 30.0.1 @@ -3854,6 +5647,13 @@ snapshots: '@jest/get-type': 30.0.1 pretty-format: 30.0.5 + jest-matcher-utils@30.0.0: + dependencies: + '@jest/get-type': 30.0.0 + chalk: 4.1.2 + jest-diff: 30.0.0 + pretty-format: 30.0.0 + jest-matcher-utils@30.0.5: dependencies: '@jest/get-type': 30.0.1 @@ -3861,6 +5661,18 @@ snapshots: jest-diff: 30.0.5 pretty-format: 30.0.5 + jest-message-util@30.0.0: + dependencies: + '@babel/code-frame': 7.27.1 + '@jest/types': 30.0.0 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 30.0.0 + slash: 3.0.0 + stack-utils: 2.0.6 + jest-message-util@30.0.5: dependencies: '@babel/code-frame': 7.27.1 @@ -3873,6 +5685,12 @@ snapshots: slash: 3.0.0 stack-utils: 2.0.6 + jest-mock@30.0.0: + dependencies: + '@jest/types': 30.0.0 + '@types/node': 24.1.0 + jest-util: 30.0.0 + jest-mock@30.0.5: dependencies: '@jest/types': 30.0.5 @@ -3883,6 +5701,8 @@ snapshots: optionalDependencies: jest-resolve: 30.0.5 + jest-regex-util@30.0.0: {} + jest-regex-util@30.0.1: {} jest-resolve-dependencies@30.0.5: @@ -3983,6 +5803,15 @@ snapshots: transitivePeerDependencies: - supports-color + jest-util@30.0.0: + dependencies: + '@jest/types': 30.0.0 + '@types/node': 24.1.0 + chalk: 4.1.2 + ci-info: 4.2.0 + graceful-fs: 4.2.11 + picomatch: 4.0.2 + jest-util@30.0.5: dependencies: '@jest/types': 30.0.5 @@ -4048,20 +5877,60 @@ snapshots: jsesc@3.1.0: {} + json-buffer@3.0.1: {} + json-parse-even-better-errors@2.3.1: {} + json-schema-traverse@0.4.1: {} + json-schema-traverse@1.0.0: {} + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + json5@2.2.3: {} + jsx-ast-utils@3.3.5: + dependencies: + array-includes: 3.1.9 + array.prototype.flat: 1.3.3 + object.assign: 4.1.7 + object.values: 1.2.1 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + language-subtag-registry@0.3.23: {} + + language-tags@1.0.9: + dependencies: + language-subtag-registry: 0.3.23 + leven@3.1.0: {} + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + lines-and-columns@1.2.4: {} locate-path@5.0.0: dependencies: p-locate: 4.1.0 + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.camelcase@4.3.0: {} + + lodash.kebabcase@4.1.1: {} + lodash.memoize@4.1.2: {} lodash.merge@4.6.2: {} @@ -4088,8 +5957,12 @@ snapshots: dependencies: tmpl: 1.0.5 + math-intrinsics@1.1.0: {} + merge-stream@2.0.0: {} + merge2@1.4.1: {} + micromatch@4.0.8: dependencies: braces: 3.0.3 @@ -4111,6 +5984,8 @@ snapshots: dependencies: brace-expansion: 2.0.2 + minimist@1.2.8: {} + minipass@7.1.2: {} mkdirp@0.5.6: @@ -4123,11 +5998,12 @@ snapshots: napi-postinstall@0.2.4: {} - napi-postinstall@0.3.2: {} natural-compare@1.4.0: {} + neo-async@2.6.2: {} + node-int64@0.4.0: {} node-releases@2.0.19: {} @@ -4138,6 +6014,39 @@ snapshots: dependencies: path-key: 3.1.1 + object-inspect@1.13.4: {} + + object-keys@1.1.1: {} + + object.assign@4.1.7: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + has-symbols: 1.1.0 + object-keys: 1.1.1 + + object.fromentries@2.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 + + object.groupby@1.0.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + + object.values@1.2.1: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + once@1.4.0: dependencies: wrappy: 1.0.2 @@ -4166,7 +6075,6 @@ snapshots: typescript: 5.7.3 yargs-parser: 21.1.1 - optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -4178,13 +6086,18 @@ snapshots: os-tmpdir@1.0.2: {} - otplib@12.0.1: dependencies: '@otplib/core': 12.0.1 '@otplib/preset-default': 12.0.1 '@otplib/preset-v11': 12.0.1 + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + p-limit@2.3.0: dependencies: p-try: 2.2.0 @@ -4197,10 +6110,18 @@ snapshots: dependencies: p-limit: 2.3.0 + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + p-try@2.2.0: {} package-json-from-dist@1.0.1: {} + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + parse-json@5.2.0: dependencies: '@babel/code-frame': 7.27.1 @@ -4220,6 +6141,8 @@ snapshots: path-key@3.1.1: {} + path-parse@1.0.7: {} + path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 @@ -4229,6 +6152,8 @@ snapshots: picomatch@2.3.1: {} + picomatch@4.0.2: {} + picomatch@4.0.3: {} pirates@4.0.7: {} @@ -4247,16 +6172,56 @@ snapshots: pluralize@8.0.0: {} + possible-typed-array-names@1.1.0: {} + + prelude-ls@1.2.1: {} + + prettier-linter-helpers@1.0.0: + dependencies: + fast-diff: 1.3.0 + + prettier@3.6.2: {} + + pretty-format@30.0.0: + dependencies: + '@jest/schemas': 30.0.0 + ansi-styles: 5.2.0 + react-is: 18.3.1 + pretty-format@30.0.5: dependencies: '@jest/schemas': 30.0.5 ansi-styles: 5.2.0 react-is: 18.3.1 + punycode@2.3.1: {} + pure-rand@7.0.1: {} + queue-microtask@1.2.3: {} + react-is@18.3.1: {} + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -4265,11 +6230,12 @@ snapshots: dependencies: resolve-from: 5.0.0 + resolve-from@4.0.0: {} + resolve-from@5.0.0: {} resolve-pkg-maps@1.0.0: {} - resolve@1.22.10: dependencies: is-core-module: 2.16.1 @@ -4322,13 +6288,34 @@ snapshots: semver@7.7.2: {} + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 shebang-regex@3.0.0: {} - shell-quote@1.8.3: {} side-channel-list@1.0.0: @@ -4359,7 +6346,6 @@ snapshots: side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 - signal-exit@3.0.7: {} signal-exit@4.1.0: {} @@ -4375,10 +6361,17 @@ snapshots: sprintf-js@1.0.3: {} + stable-hash-x@0.2.0: {} + stack-utils@2.0.6: dependencies: escape-string-regexp: 2.0.0 + stop-iteration-iterator@1.1.0: + dependencies: + es-errors: 1.3.0 + internal-slot: 1.1.0 + string-length@4.0.2: dependencies: char-regex: 1.0.2 @@ -4401,7 +6394,6 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 - string.prototype.includes@2.0.1: dependencies: call-bind: 1.0.8 @@ -4439,7 +6431,6 @@ snapshots: dependencies: ansi-regex: 4.1.1 - strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -4448,6 +6439,8 @@ snapshots: dependencies: ansi-regex: 6.1.0 + strip-bom@3.0.0: {} + strip-bom@4.0.0: {} strip-final-newline@2.0.0: {} @@ -4468,6 +6461,10 @@ snapshots: dependencies: has-flag: 4.0.0 + supports-preserve-symlinks-flag@1.0.0: {} + + svg-element-attributes@1.3.1: {} + synckit@0.11.11: dependencies: '@pkgr/core': 0.2.9 @@ -4489,8 +6486,9 @@ snapshots: glob: 7.2.3 minimatch: 3.1.2 - thirty-two@1.0.2: {} + text-table@0.2.0: {} + thirty-two@1.0.2: {} through@2.3.8: {} @@ -4503,18 +6501,25 @@ snapshots: dependencies: os-tmpdir: 1.0.2 - tmpl@1.0.5: {} to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - ts-jest@29.4.0(@babel/core@7.28.0)(@jest/transform@30.0.5)(@jest/types@30.0.5)(babel-jest@30.0.5(@babel/core@7.28.0))(jest-util@30.0.5)(jest@30.0.5(@types/node@24.1.0)(ts-node@10.9.2(@types/node@24.1.0)(typescript@5.7.3)))(typescript@5.7.3): + ts-api-utils@2.0.1(typescript@5.7.3): + dependencies: + typescript: 5.7.3 + + ts-api-utils@2.1.0(typescript@5.7.3): + dependencies: + typescript: 5.7.3 + + ts-jest@29.4.1(@babel/core@7.28.0)(@jest/transform@30.0.5)(@jest/types@30.0.5)(babel-jest@30.0.5(@babel/core@7.28.0))(jest-util@30.0.5)(jest@30.0.5(@types/node@24.1.0)(ts-node@10.9.2(@types/node@24.1.0)(typescript@5.7.3)))(typescript@5.7.3): dependencies: bs-logger: 0.2.6 - ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 + handlebars: 4.7.8 jest: 30.0.5(@types/node@24.1.0)(ts-node@10.9.2(@types/node@24.1.0)(typescript@5.7.3)) json5: 2.2.3 lodash.memoize: 4.1.2 @@ -4548,7 +6553,6 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - tsconfig-paths@3.15.0: dependencies: '@types/json5': 0.0.29 @@ -4558,7 +6562,6 @@ snapshots: tslib@1.14.1: {} - tslib@2.8.1: optional: true @@ -4569,14 +6572,73 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + type-detect@4.0.8: {} + type-fest@0.20.2: {} + type-fest@0.21.3: {} type-fest@4.41.0: {} + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typed-array-byte-length@1.0.3: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + + typed-array-byte-offset@1.0.4: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + + typed-array-length@1.0.7: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 + + typescript-eslint@8.24.1(eslint@8.57.1)(typescript@5.7.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.24.1(@typescript-eslint/parser@8.24.1(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3) + '@typescript-eslint/parser': 8.24.1(eslint@8.57.1)(typescript@5.7.3) + '@typescript-eslint/utils': 8.24.1(eslint@8.57.1)(typescript@5.7.3) + eslint: 8.57.1 + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + typescript@5.7.3: {} + uglify-js@3.19.3: + optional: true + + unbox-primitive@1.1.0: + dependencies: + call-bound: 1.0.4 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 + undici-types@7.8.0: {} unrs-resolver@1.11.1: @@ -4603,7 +6665,6 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 - unrs-resolver@1.9.2: dependencies: napi-postinstall: 0.2.4 @@ -4644,6 +6705,10 @@ snapshots: uri-js-replace@1.0.1: {} + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + v8-compile-cache-lib@3.0.1: {} v8-to-istanbul@9.3.0: @@ -4656,10 +6721,55 @@ snapshots: dependencies: makeerror: 1.0.12 + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.4 + function.prototype.name: 1.1.8 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.0 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.19 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 + + which-typed-array@1.1.19: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + which@2.0.2: dependencies: isexe: 2.0.0 + word-wrap@1.2.5: {} + + wordwrap@1.0.0: {} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 From 2683c3f07f3afca4cccde7e1ce3ba1cefa55b3f5 Mon Sep 17 00:00:00 2001 From: Stefan Rinke Date: Mon, 4 Aug 2025 19:12:02 +0200 Subject: [PATCH 16/21] linter --- src/cli.ts | 117 +++++++++++++++++---------------- src/completion.ts | 158 +++++++++++++++++++++++++++++---------------- src/index.ts | 1 - src/tools/index.ts | 3 +- 4 files changed, 163 insertions(+), 116 deletions(-) diff --git a/src/cli.ts b/src/cli.ts index db57c0e..b08e8c4 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -1,20 +1,32 @@ +import { Option } from "commander"; - -import { version } from "./version"; - -import { Command, Option, program } from "commander"; - +import { + CompletableCommand, + environmentIdCompleter, + installCompletion, + optionsCompleter, + tabCompletion, + testCaseIdCompleter, + testReportIdCompleter, + testTargetIdCompleter, + uninstallCompletion, +} from "./completion"; import { Config, loadConfig, saveConfig } from "./config"; import { runDebugtopus } from "./debugtopus"; import { promptUser, resolveTestTargetId } from "./helpers"; import { startPrivateLocationWorker, stopPLW } from "./plw"; - import { + CreateDiscoveryBody, createDiscovery, createEnvironment, deleteEnvironment, deleteTestCase, + ExecuteTestsBody, executeTests, + GetEnvironmentOptions, + GetTestCaseParams, + GetTestReportParams, + getEnvironment, listEnvironments, listNotifications, listPrivateLocations, @@ -24,36 +36,29 @@ import { registerLocation, unregisterLocation, updateEnvironment, - - listTestCases, - ExecuteTestsBody, - CreateDiscoveryBody, - GetTestReportParams, - GetEnvironmentOptions, - GetTestCaseParams, - getEnvironment, - deleteTestCase, } from "./tools"; -import { Config, loadConfig, saveConfig } from "./config"; -import { promptUser, resolveTestTargetId } from "./helpers"; -import { runDebugtopus } from "./debugtopus"; - -import { startPrivateLocationWorker, stopPLW } from "./plw"; import { getTestTargets, listTestTargets } from "./tools/test-targets"; -import { CompletableCommand, environmentIdCompleter, installCompletion, optionsCompleter, tabCompletion, testCaseIdCompleter, testReportIdCompleter, testTargetIdCompleter, uninstallCompletion } from "./completion"; - +import { version } from "./version"; export const BINARY_NAME = "octomind"; const splitter = (value: string): string[] => value.split(/,| |\|/); const toJSON = (value: string): object => JSON.parse(value); -type TestTargetWrapperOptions = GetEnvironmentOptions & GetTestCaseParams & GetTestReportParams & CreateDiscoveryBody & ExecuteTestsBody; - -const addTestTargetWrapper = (fn: (options: TestTargetWrapperOptions) => Promise) => async (options: TestTargetWrapperOptions) => { - const resolvedTestTargetId = await resolveTestTargetId(options.testTargetId); +type TestTargetWrapperOptions = GetEnvironmentOptions & + GetTestCaseParams & + GetTestReportParams & + CreateDiscoveryBody & + ExecuteTestsBody; + +const addTestTargetWrapper = + (fn: (options: TestTargetWrapperOptions) => Promise) => + async (options: TestTargetWrapperOptions) => { + const resolvedTestTargetId = await resolveTestTargetId( + options.testTargetId, + ); void fn({ ...options, testTargetId: resolvedTestTargetId }); -}; + }; const selectTestTarget = async (): Promise => { const testTargets = await getTestTargets(); @@ -71,7 +76,11 @@ const selectTestTarget = async (): Promise => { ); const testTargetIndexAsInt = Number.parseInt(testTargetIndex); - if (Number.isNaN(testTargetIndexAsInt) || testTargetIndexAsInt < 1 || testTargetIndexAsInt > testTargets.length) { + if ( + Number.isNaN(testTargetIndexAsInt) || + testTargetIndexAsInt < 1 || + testTargetIndexAsInt > testTargets.length + ) { console.log("❌ could not find a test target with the index you provided"); process.exit(1); } @@ -88,7 +97,10 @@ const testTargetIdOption = new Option( "Test target ID, if not provided will use the test target id from the config", ); -const createCommandWithCommonOptions = (program: CompletableCommand, command: string): CompletableCommand => { +const createCommandWithCommonOptions = ( + program: CompletableCommand, + command: string, +): CompletableCommand => { return program .completableCommand(command) .option("-j, --json", "Output raw JSON response") as CompletableCommand; @@ -105,10 +117,12 @@ export const buildCmd = (): CompletableCommand => { .version(version); program - .completer(testTargetIdCompleter) - .completer(optionsCompleter) - .completableCommand("init") - .description("Initialize configuration by setting up API key. This will create a config file in ~/.config/octomind.json") + .completer(testTargetIdCompleter) + .completer(optionsCompleter) + .completableCommand("init") + .description( + "Initialize configuration by setting up API key. This will create a config file in ~/.config/octomind.json", + ) .helpGroup("setup") .option("-t, --test-target-id ", "Test target ID") .option("-k, --api-key ", "the api key for authentication") @@ -154,7 +168,7 @@ export const buildCmd = (): CompletableCommand => { ...existingConfig, apiKey: options.apiKey, - } + }; await saveConfig(newApiKeyConfig); @@ -181,7 +195,9 @@ export const buildCmd = (): CompletableCommand => { program .completableCommand("switch-test-target") - .description("Switch to a different test target. This will list all available test targets and update the config file in ~/.config/octomind.json") + .description( + "Switch to a different test target. This will list all available test targets and update the config file in ~/.config/octomind.json", + ) .helpGroup("setup") .action(async () => { const testTargetId = await selectTestTarget(); @@ -225,7 +241,6 @@ export const buildCmd = (): CompletableCommand => { .option("--grep [substring]", "filter test cases by substring") .action(addTestTargetWrapper(runDebugtopus)); - createCommandWithCommonOptions(program, "execute") .completer(testTargetIdCompleter) .completer(optionsCompleter) @@ -284,7 +299,6 @@ export const buildCmd = (): CompletableCommand => { .action(addTestTargetWrapper(listEnvironments)); - createCommandWithCommonOptions(program, "create-environment") .completer(testTargetIdCompleter) .completer(optionsCompleter) @@ -315,7 +329,6 @@ export const buildCmd = (): CompletableCommand => { .addOption(testTargetIdOption) .action(addTestTargetWrapper(getEnvironment)); - createCommandWithCommonOptions(program, "update-environment") .completer(environmentIdCompleter) .completer(testTargetIdCompleter) @@ -338,7 +351,6 @@ export const buildCmd = (): CompletableCommand => { .action(addTestTargetWrapper(updateEnvironment)); - createCommandWithCommonOptions(program, "delete-environment") .completer(environmentIdCompleter) .completer(testTargetIdCompleter) @@ -352,7 +364,9 @@ export const buildCmd = (): CompletableCommand => { .completer(optionsCompleter) .completableCommand("start-private-location") - .description("Start a private location worker, see https://octomind.dev/docs/proxy/private-location") + .description( + "Start a private location worker, see https://octomind.dev/docs/proxy/private-location", + ) .helpGroup("private-locations") .option("-n, --name [name]", "Location name") @@ -369,7 +383,9 @@ export const buildCmd = (): CompletableCommand => { .completableCommand("stop-private-location") .completer(optionsCompleter) - .description("Stop a private location worker, see https://octomind.dev/docs/proxy/private-location") + .description( + "Stop a private location worker, see https://octomind.dev/docs/proxy/private-location", + ) .helpGroup("private-locations") .action(stopPLW); @@ -382,7 +398,7 @@ export const buildCmd = (): CompletableCommand => { .action(addTestTargetWrapper(listNotifications)); - createCommandWithCommonOptions(program,"delete-test-case") + createCommandWithCommonOptions(program, "delete-test-case") .completer(testCaseIdCompleter) .description("Delete a test case") .requiredOption("-c, --test-case-id ", "Test case ID") @@ -390,18 +406,6 @@ export const buildCmd = (): CompletableCommand => { .helpGroup("test-cases") .action(addTestTargetWrapper(deleteTestCase)); - createCommandWithCommonOptions("list-test-cases") - .description("List all test cases") - .addOption(testTargetIdOption) - .action(async (options, command) => { - const resolvedTestTargetId = await resolveTestTargetId( - options.testTargetId, - ); - command.setOptionValue("testTargetId", resolvedTestTargetId); - void listTestCases({ ...options, status: "ENABLED" }); - }); - - createCommandWithCommonOptions(program, "test-case") .completer(testCaseIdCompleter) .completer(testTargetIdCompleter) @@ -411,7 +415,6 @@ export const buildCmd = (): CompletableCommand => { .addOption(testTargetIdOption) .action(addTestTargetWrapper(listTestCase)); - createCommandWithCommonOptions(program, "create-discovery") .completer(testTargetIdCompleter) .completer(optionsCompleter) @@ -443,7 +446,7 @@ export const buildCmd = (): CompletableCommand => { .description("List all test targets") .helpGroup("test-targets") .action(listTestTargets); - + program .completableCommand("install-completion") .description("Install tab completion") @@ -454,7 +457,7 @@ export const buildCmd = (): CompletableCommand => { .description("Uninstall tab completion") .helpGroup("completion") .action(uninstallCompletion); - + program .completableCommand("completion") .description("Tab completion") diff --git a/src/completion.ts b/src/completion.ts index f3d167b..43e9c9f 100644 --- a/src/completion.ts +++ b/src/completion.ts @@ -1,38 +1,45 @@ -import { TabtabEnv, log, parseEnv, install, uninstall } from "tabtab"; -import { parse } from 'shell-quote'; import { Command } from "commander"; -import { getTestCases } from "./tools/test-cases"; -import { getTestTargets } from "./tools/test-targets"; -import { loadConfig } from "./config"; -import { getEnvironments } from "./tools/environments"; +import { parse } from "shell-quote"; +import { install, log, parseEnv, TabtabEnv, uninstall } from "tabtab"; + import { BINARY_NAME } from "./cli"; +import { loadConfig } from "./config"; import { getTestReports } from "./tools"; +import { getEnvironments } from "./tools/environments"; +import { getTestCases } from "./tools/test-cases"; +import { getTestTargets } from "./tools/test-targets"; // returns whether the completer has handled the completion -type CompleterFn = (command: CompletableCommand, env: TabtabEnv) => Promise; +type CompleterFn = ( + command: CompletableCommand, + env: TabtabEnv, +) => Promise; export class CompletableCommand extends Command { private _completerFn: CompleterFn[] = []; - + completer(completerFn?: CompleterFn): CompletableCommand { if (completerFn) { this._completerFn.push(completerFn); } return this; } - + getCompleter(): CompleterFn[] { return this._completerFn; } - + override createCommand(name?: string): CompletableCommand { return new CompletableCommand(name); } - + // Helper method to create completable commands - completableCommand(nameAndArgs: string, description?: string): CompletableCommand { - const cmd = description - ? this.command(nameAndArgs, description) + completableCommand( + nameAndArgs: string, + description?: string, + ): CompletableCommand { + const cmd = description + ? this.command(nameAndArgs, description) : this.command(nameAndArgs); // Ensure it has the right prototype Object.setPrototypeOf(cmd, CompletableCommand.prototype); @@ -42,66 +49,98 @@ export class CompletableCommand extends Command { const logOptions = async (command: CompletableCommand, line: string) => { const argv = parse(line).map((arg) => arg.toString()); - const usedOptions = command.options.filter((option) => argv.includes(option.long!) || argv.includes(option.short!)).map((option) => option.flags); - log(command.options.filter((option) => option.long) - .filter((option) => !usedOptions.includes(option.flags)) - .map((option) => option.long!)); - log(command.options.filter((option) => option.short) - .filter((option) => !usedOptions.includes(option.flags)) - .map((option) => option.short!)); -} + const usedOptions = command.options + .filter( + (option) => argv.includes(option.long!) || argv.includes(option.short!), + ) + .map((option) => option.flags); + log( + command.options + .filter((option) => option.long) + .filter((option) => !usedOptions.includes(option.flags)) + .map((option) => option.long!), + ); + log( + command.options + .filter((option) => option.short) + .filter((option) => !usedOptions.includes(option.flags)) + .map((option) => option.short!), + ); +}; -export const optionsCompleter = async (command: CompletableCommand, env: TabtabEnv): Promise => { +export const optionsCompleter = async ( + command: CompletableCommand, + env: TabtabEnv, +): Promise => { await logOptions(command, env.line); return true; -} +}; -export const testTargetIdCompleter = async (_command: CompletableCommand, env: TabtabEnv): Promise => { - if( env.prev === "-t" || env.prev === "--test-target-id") { +export const testTargetIdCompleter = async ( + _command: CompletableCommand, + env: TabtabEnv, +): Promise => { + if (env.prev === "-t" || env.prev === "--test-target-id") { const testTargets = await getTestTargets(); log(testTargets.map((testTarget) => testTarget.id)); return true; } return false; -} +}; -export const environmentIdCompleter = async (_command: CompletableCommand, env: TabtabEnv): Promise => { - if( env.prev === "-e" || env.prev === "--environment-id") { +export const environmentIdCompleter = async ( + _command: CompletableCommand, + env: TabtabEnv, +): Promise => { + if (env.prev === "-e" || env.prev === "--environment-id") { const config = await loadConfig(); - if( config.testTargetId ) { - const environments = await getEnvironments({ testTargetId: config.testTargetId }); + if (config.testTargetId) { + const environments = await getEnvironments({ + testTargetId: config.testTargetId, + }); log(environments.map((environment) => environment.id)); return true; } } return false; -} +}; -export const testCaseIdCompleter = async (_command: CompletableCommand, env: TabtabEnv): Promise => { - if( env.prev === "-c" || env.prev === "--test-case-id") { +export const testCaseIdCompleter = async ( + _command: CompletableCommand, + env: TabtabEnv, +): Promise => { + if (env.prev === "-c" || env.prev === "--test-case-id") { const config = await loadConfig(); - if( config.testTargetId ) { - const testCases = await getTestCases({ testTargetId: config.testTargetId, status: "ENABLED" }); + if (config.testTargetId) { + const testCases = await getTestCases({ + testTargetId: config.testTargetId, + status: "ENABLED", + }); log(testCases.map((testCase) => testCase.id)); return true; } } return false; -} +}; -export const testReportIdCompleter = async (_command: CompletableCommand, env: TabtabEnv): Promise => { - if( env.prev === "-r" || env.prev === "--test-report-id") { +export const testReportIdCompleter = async ( + _command: CompletableCommand, + env: TabtabEnv, +): Promise => { + if (env.prev === "-r" || env.prev === "--test-report-id") { const config = await loadConfig(); - if( config.testTargetId ) { - const testReports = await getTestReports({ testTargetId: config.testTargetId }); - if(testReports) { + if (config.testTargetId) { + const testReports = await getTestReports({ + testTargetId: config.testTargetId, + }); + if (testReports) { log(testReports.map((testReport) => testReport?.id ?? "")); } } return true; } return false; -} +}; export const tabCompletion = async (program: CompletableCommand) => { const env = parseEnv(process.env); @@ -109,13 +148,15 @@ export const tabCompletion = async (program: CompletableCommand) => { const argv = parse(env.line).map((arg) => arg.toString()); - const command = program.commands.find((command) => command.name() === argv[1]) as CompletableCommand; + const command = program.commands.find( + (command) => command.name() === argv[1], + ) as CompletableCommand; if (command) { const completers = command.getCompleter(); - if(completers.length > 0) { + if (completers.length > 0) { for (const completer of completers) { const handled = await completer(command, env); - if(handled) { + if (handled) { return; } } @@ -124,23 +165,28 @@ export const tabCompletion = async (program: CompletableCommand) => { } log(["--help"]); - log(program.options.filter((option) => option.long).map((option) => option.long!)); - log(program.options.filter((option) => option.short).map((option) => option.short!)); + log( + program.options + .filter((option) => option.long) + .map((option) => option.long!), + ); + log( + program.options + .filter((option) => option.short) + .map((option) => option.short!), + ); log(program.commands.map((command) => command.name())); }; export const installCompletion = async () => { await install({ name: BINARY_NAME, - completer: BINARY_NAME - }) - .catch(err => console.error('INSTALL ERROR', err)); -} + completer: BINARY_NAME, + }).catch((err) => console.error("INSTALL ERROR", err)); +}; export const uninstallCompletion = async () => { await uninstall({ name: BINARY_NAME, - }) - .catch(err => console.error('UNINSTALL ERROR', err)); -} - + }).catch((err) => console.error("UNINSTALL ERROR", err)); +}; diff --git a/src/index.ts b/src/index.ts index 17fbb4d..05df6f4 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,4 +3,3 @@ import { buildCmd } from "./cli"; buildCmd().parse(); - diff --git a/src/tools/index.ts b/src/tools/index.ts index 5e63c95..e6da8ad 100644 --- a/src/tools/index.ts +++ b/src/tools/index.ts @@ -2,8 +2,7 @@ export * from "./discoveries"; export * from "./environments"; export * from "./notifications"; export * from "./playwright"; -export * from "./test-targets"; export * from "./private-locations"; export * from "./test-cases"; export * from "./test-reports"; - +export * from "./test-targets"; From 2effd83986a03f2b233075e49f6375ba3312cb93 Mon Sep 17 00:00:00 2001 From: Stefan Rinke Date: Mon, 4 Aug 2025 19:18:40 +0200 Subject: [PATCH 17/21] biome fixes --- src/completion.ts | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/completion.ts b/src/completion.ts index 43e9c9f..f5a0c77 100644 --- a/src/completion.ts +++ b/src/completion.ts @@ -47,24 +47,35 @@ export class CompletableCommand extends Command { } } +const includesOrUndefined = ( + array: (T | undefined)[], + value: T | undefined, +): boolean => { + return ( + array.includes(value) || (value === undefined && array.includes(undefined)) + ); +}; + const logOptions = async (command: CompletableCommand, line: string) => { const argv = parse(line).map((arg) => arg.toString()); const usedOptions = command.options .filter( - (option) => argv.includes(option.long!) || argv.includes(option.short!), + (option) => + includesOrUndefined(argv, option.long) || + includesOrUndefined(argv, option.short), ) .map((option) => option.flags); log( command.options .filter((option) => option.long) .filter((option) => !usedOptions.includes(option.flags)) - .map((option) => option.long!), + .map((option) => option.long ?? ""), ); log( command.options .filter((option) => option.short) .filter((option) => !usedOptions.includes(option.flags)) - .map((option) => option.short!), + .map((option) => option.short ?? ""), ); }; @@ -149,7 +160,7 @@ export const tabCompletion = async (program: CompletableCommand) => { const argv = parse(env.line).map((arg) => arg.toString()); const command = program.commands.find( - (command) => command.name() === argv[1], + (c) => c.name() === argv[1], ) as CompletableCommand; if (command) { const completers = command.getCompleter(); @@ -168,14 +179,14 @@ export const tabCompletion = async (program: CompletableCommand) => { log( program.options .filter((option) => option.long) - .map((option) => option.long!), + .map((option) => option.long ?? ""), ); log( program.options .filter((option) => option.short) - .map((option) => option.short!), + .map((option) => option.short ?? ""), ); - log(program.commands.map((command) => command.name())); + log(program.commands.map((c) => c.name())); }; export const installCompletion = async () => { From 89692a55c19ae9b36f08cb68b7cd244edfb4eb84 Mon Sep 17 00:00:00 2001 From: Stefan Rinke Date: Mon, 4 Aug 2025 19:26:55 +0200 Subject: [PATCH 18/21] fix merge in package.json --- package.json | 41 +- pnpm-lock.yaml | 3119 +++--------------------------------------------- 2 files changed, 155 insertions(+), 3005 deletions(-) diff --git a/package.json b/package.json index de2b7e4..efd2feb 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ }, "scripts": { "gendoc": "tsx scripts/generate-docs.ts > README.md", - "lint": "pnpm apigen &&npx genversion -des src/version.ts && eslint src/**/*.ts tests/**/*.ts --max-warnings=0", + "lint": "pnpm apigen &&npx genversion -des src/version.ts && biome check", "tsc": "tsc --project tsconfig.build.json", "apigen": "openapi-typescript https://app.octomind.dev/openapi.yaml --output src/api.ts", "build": "pnpm apigen && npx genversion -des src/version.ts && pnpm gendoc && tsc --project tsconfig.build.json", @@ -22,35 +22,26 @@ "test:watch": "pnpm apigen && npx genversion -e src/version.ts && jest --watch" }, "keywords": [], - "author": "", + "author": "Stefan Rinke", "license": "MIT", "dependencies": { - "@playwright/test": "^1.54.1", + "@playwright/test": "1.54.1", "@types/shell-quote": "^1.7.5", - "commander": "^14.0.0", - "openapi-fetch": "^0.14.0", - "otplib": "^12.0.1", + "commander": "14.0.0", + "openapi-fetch": "0.14.0", + "otplib": "12.0.1", "shell-quote": "^1.8.3", "tabtab": "^3.0.2" }, "devDependencies": { - "@types/jest": "^30.0.0", - "@types/node": "^24.0.1", - "@types/tabtab": "^3.0.4", - "@typescript-eslint/parser": "^8.25.0", - "eslint": "8.57.1", - "eslint-config-prettier": "^10.0.1", - "eslint-import-resolver-typescript": "^4.0.0", - "eslint-plugin-github": "^5.0.0", - "eslint-plugin-import": "^2.27.5", - "eslint-plugin-jest": "^29.0.1", - "eslint-plugin-prettier": "^5.0.0", - "jest": "^30.0.0", - "openapi-typescript": "^7.8.0", - "prettier": "^3.0.1", - "ts-jest": "^29.2.6", - "ts-node": "^10.9.1", - "tsx": "^4.19.3", - "typescript": "^5.0.4" + "@biomejs/biome": "2.1.3", + "@types/jest": "30.0.0", + "@types/node": "24.1.0", + "jest": "30.0.5", + "openapi-typescript": "7.8.0", + "ts-jest": "29.4.0", + "ts-node": "10.9.2", + "tsx": "4.20.3", + "typescript": "5.7.3" } -} +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a49e520..3ec6451 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,19 +9,19 @@ importers: .: dependencies: '@playwright/test': - specifier: ^1.54.1 + specifier: 1.54.1 version: 1.54.1 '@types/shell-quote': specifier: ^1.7.5 version: 1.7.5 commander: - specifier: ^14.0.0 + specifier: 14.0.0 version: 14.0.0 openapi-fetch: - specifier: ^0.14.0 + specifier: 0.14.0 version: 0.14.0 otplib: - specifier: ^12.0.1 + specifier: 12.0.1 version: 12.0.1 shell-quote: specifier: ^1.8.3 @@ -30,59 +30,32 @@ importers: specifier: ^3.0.2 version: 3.0.2 devDependencies: + '@biomejs/biome': + specifier: 2.1.3 + version: 2.1.3 '@types/jest': - specifier: ^30.0.0 + specifier: 30.0.0 version: 30.0.0 '@types/node': - specifier: ^24.0.1 + specifier: 24.1.0 version: 24.1.0 - '@types/tabtab': - specifier: ^3.0.4 - version: 3.0.4 - '@typescript-eslint/parser': - specifier: ^8.25.0 - version: 8.38.0(eslint@8.57.1)(typescript@5.7.3) - eslint: - specifier: 8.57.1 - version: 8.57.1 - eslint-config-prettier: - specifier: ^10.0.1 - version: 10.1.8(eslint@8.57.1) - eslint-import-resolver-typescript: - specifier: ^4.0.0 - version: 4.4.4(eslint-plugin-import@2.32.0)(eslint@8.57.1) - eslint-plugin-github: - specifier: ^5.0.0 - version: 5.1.8(eslint-import-resolver-typescript@4.4.4)(eslint@8.57.1)(typescript@5.7.3) - eslint-plugin-import: - specifier: ^2.27.5 - version: 2.32.0(@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-typescript@4.4.4)(eslint@8.57.1) - eslint-plugin-jest: - specifier: ^29.0.1 - version: 29.0.1(@typescript-eslint/eslint-plugin@8.24.1(@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(jest@30.0.5(@types/node@24.1.0)(ts-node@10.9.2(@types/node@24.1.0)(typescript@5.7.3)))(typescript@5.7.3) - eslint-plugin-prettier: - specifier: ^5.0.0 - version: 5.5.3(eslint-config-prettier@10.1.8(eslint@8.57.1))(eslint@8.57.1)(prettier@3.6.2) jest: - specifier: ^30.0.0 + specifier: 30.0.5 version: 30.0.5(@types/node@24.1.0)(ts-node@10.9.2(@types/node@24.1.0)(typescript@5.7.3)) openapi-typescript: - specifier: ^7.8.0 + specifier: 7.8.0 version: 7.8.0(typescript@5.7.3) - prettier: - specifier: ^3.0.1 - version: 3.6.2 ts-jest: - specifier: ^29.2.6 - version: 29.4.1(@babel/core@7.28.0)(@jest/transform@30.0.5)(@jest/types@30.0.5)(babel-jest@30.0.5(@babel/core@7.28.0))(jest-util@30.0.5)(jest@30.0.5(@types/node@24.1.0)(ts-node@10.9.2(@types/node@24.1.0)(typescript@5.7.3)))(typescript@5.7.3) + specifier: 29.4.0 + version: 29.4.0(@babel/core@7.28.0)(@jest/transform@30.0.5)(@jest/types@30.0.5)(babel-jest@30.0.5(@babel/core@7.28.0))(jest-util@30.0.5)(jest@30.0.5(@types/node@24.1.0)(ts-node@10.9.2(@types/node@24.1.0)(typescript@5.7.3)))(typescript@5.7.3) ts-node: - specifier: ^10.9.1 + specifier: 10.9.2 version: 10.9.2(@types/node@24.1.0)(typescript@5.7.3) tsx: - specifier: ^4.19.3 + specifier: 4.20.3 version: 4.20.3 typescript: - specifier: ^5.0.4 + specifier: 5.7.3 version: 5.7.3 packages: @@ -256,25 +229,69 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + '@biomejs/biome@2.1.3': + resolution: {integrity: sha512-KE/tegvJIxTkl7gJbGWSgun7G6X/n2M6C35COT6ctYrAy7SiPyNvi6JtoQERVK/VRbttZfgGq96j2bFmhmnH4w==} + engines: {node: '>=14.21.3'} + hasBin: true + + '@biomejs/cli-darwin-arm64@2.1.3': + resolution: {integrity: sha512-LFLkSWRoSGS1wVUD/BE6Nlt2dSn0ulH3XImzg2O/36BoToJHKXjSxzPEMAqT9QvwVtk7/9AQhZpTneERU9qaXA==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [darwin] + + '@biomejs/cli-darwin-x64@2.1.3': + resolution: {integrity: sha512-Q/4OTw8P9No9QeowyxswcWdm0n2MsdCwWcc5NcKQQvzwPjwuPdf8dpPPf4r+x0RWKBtl1FLiAUtJvBlri6DnYw==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [darwin] + + '@biomejs/cli-linux-arm64-musl@2.1.3': + resolution: {integrity: sha512-KXouFSBnoxAWZYDQrnNRzZBbt5s9UJkIm40hdvSL9mBxSSoxRFQJbtg1hP3aa8A2SnXyQHxQfpiVeJlczZt76w==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-arm64@2.1.3': + resolution: {integrity: sha512-2hS6LgylRqMFmAZCOFwYrf77QMdUwJp49oe8PX/O8+P2yKZMSpyQTf3Eo5ewnsMFUEmYbPOskafdV1ds1MZMJA==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-x64-musl@2.1.3': + resolution: {integrity: sha512-KaLAxnROouzIWtl6a0Y88r/4hW5oDUJTIqQorOTVQITaKQsKjZX4XCUmHIhdEk8zMnaiLZzRTAwk1yIAl+mIew==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-linux-x64@2.1.3': + resolution: {integrity: sha512-NxlSCBhLvQtWGagEztfAZ4WcE1AkMTntZV65ZvR+J9jp06+EtOYEBPQndA70ZGhHbEDG57bR6uNvqkd1WrEYVA==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-win32-arm64@2.1.3': + resolution: {integrity: sha512-V9CUZCtWH4u0YwyCYbQ3W5F4ZGPWp2C2TYcsiWFNNyRfmOW1j/TY/jAurl33SaRjgZPO5UUhGyr9m6BN9t84NQ==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [win32] + + '@biomejs/cli-win32-x64@2.1.3': + resolution: {integrity: sha512-dxy599q6lgp8ANPpR8sDMscwdp9oOumEsVXuVCVT9N2vAho8uYXlCz53JhxX6LtJOXaE73qzgkGQ7QqvFlMC0g==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [win32] + '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - '@emnapi/core@1.4.3': - resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==} - '@emnapi/core@1.4.5': resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==} - '@emnapi/runtime@1.4.3': - resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} - '@emnapi/runtime@1.4.5': resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==} - '@emnapi/wasi-threads@1.0.2': - resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==} - '@emnapi/wasi-threads@1.0.4': resolution: {integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==} @@ -428,63 +445,6 @@ packages: cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.4.1': - resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/eslint-utils@4.7.0': - resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/regexpp@4.12.1': - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/compat@1.2.7': - resolution: {integrity: sha512-xvv7hJE32yhegJ8xNAnb62ggiAwTYHBpUCWhRxEj/ksvgDJuSXfoDkBcRYaYNFiJ+jH0IE3K16hd+xXzhBgNbg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^9.10.0 - peerDependenciesMeta: - eslint: - optional: true - - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@eslint/eslintrc@3.3.0': - resolution: {integrity: sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/js@8.57.1': - resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@eslint/js@9.21.0': - resolution: {integrity: sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@github/browserslist-config@1.0.0': - resolution: {integrity: sha512-gIhjdJp/c2beaIWWIlsXdqXVRUz3r2BxBCpfz/F3JXHvSAQ1paMYjLH+maEATtENg+k5eLV7gA+9yPp762ieuw==} - - '@humanwhocodes/config-array@0.13.0': - resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/object-schema@2.0.3': - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead - '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -510,10 +470,6 @@ packages: node-notifier: optional: true - '@jest/diff-sequences@30.0.0': - resolution: {integrity: sha512-xMbtoCeKJDto86GW6AiwVv7M4QAuI56R7dVBr1RNGYbOT44M2TIzOiske2RxopBqkumDY+A1H55pGvuribRY9A==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/diff-sequences@30.0.1': resolution: {integrity: sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -522,10 +478,6 @@ packages: resolution: {integrity: sha512-aRX7WoaWx1oaOkDQvCWImVQ8XNtdv5sEWgk4gxR6NXb7WBUnL5sRak4WRzIQRZ1VTWPvV4VI4mgGjNL9TeKMYA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/expect-utils@30.0.0': - resolution: {integrity: sha512-UiWfsqNi/+d7xepfOv8KDcbbzcYtkWBe3a3kVDtg6M1kuN6CJ7b4HzIp5e1YHrSaQaVS8sdCoyCMCZClTLNKFQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/expect-utils@30.0.5': resolution: {integrity: sha512-F3lmTT7CXWYywoVUGTCmom0vXq3HTTkaZyTAzIy+bXSBizB7o5qzlC9VCtq0arOa8GqmNsbg/cE9C6HLn7Szew==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -538,10 +490,6 @@ packages: resolution: {integrity: sha512-ZO5DHfNV+kgEAeP3gK3XlpJLL4U3Sz6ebl/n68Uwt64qFFs5bv4bfEEjyRGK5uM0C90ewooNgFuKMdkbEoMEXw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/get-type@30.0.0': - resolution: {integrity: sha512-VZWMjrBzqfDKngQ7sUctKeLxanAbsBFoZnPxNIG6CmxK7Gv6K44yqd0nzveNIBfuhGZMmk1n5PGbvdSTOu0yTg==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/get-type@30.0.1': resolution: {integrity: sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -550,10 +498,6 @@ packages: resolution: {integrity: sha512-7oEJT19WW4oe6HR7oLRvHxwlJk2gev0U9px3ufs8sX9PoD1Eza68KF0/tlN7X0dq/WVsBScXQGgCldA1V9Y/jA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/pattern@30.0.0': - resolution: {integrity: sha512-k+TpEThzLVXMkbdxf8KHjZ83Wl+G54ytVJoDIGWwS96Ql4xyASRjc6SU1hs5jHVql+hpyK9G8N7WuFhLpGHRpQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/pattern@30.0.1': resolution: {integrity: sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -567,10 +511,6 @@ packages: node-notifier: optional: true - '@jest/schemas@30.0.0': - resolution: {integrity: sha512-NID2VRyaEkevCRz6badhfqYwri/RvMbiHY81rk3AkK/LaiB0LSxi1RdVZ7MpZdTjNugtZeGfpL0mLs9Kp3MrQw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/schemas@30.0.5': resolution: {integrity: sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -595,10 +535,6 @@ packages: resolution: {integrity: sha512-Vk8amLQCmuZyy6GbBht1Jfo9RSdBtg7Lks+B0PecnjI8J+PCLQPGh7uI8Q/2wwpW2gLdiAfiHNsmekKlywULqg==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/types@30.0.0': - resolution: {integrity: sha512-1Nox8mAL52PKPfEnUQWBvKU/bp8FTT6AiDu76bFDEJj/qsRFSAVSldfCH3XYMqialti2zHXKvD5gN0AaHc0yKA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/types@30.0.5': resolution: {integrity: sha512-aREYa3aku9SSnea4aX6bhKn4bgv3AXkgijoQgbYV3yvbiGt6z+MQ85+6mIhx9DsKW2BuB/cLR/A+tcMThx+KLQ==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -610,9 +546,6 @@ packages: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - '@jridgewell/sourcemap-codec@1.5.4': resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} @@ -622,24 +555,9 @@ packages: '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - '@napi-rs/wasm-runtime@0.2.11': - resolution: {integrity: sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==} - '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - '@otplib/core@12.0.1': resolution: {integrity: sha512-4sGntwbA/AC+SbPhbsziRiD+jNDdIzsZ3JUyfZwjtKyc/wufl1pnSIaG4Uqx8ymPagujub0o92kgBnB89cuAMA==} @@ -678,12 +596,6 @@ packages: resolution: {integrity: sha512-3arRdUp1fNx55itnjKiUhO6t4Mf91TsrTIYINDNLAZPS0TPd5YpiXRctwjel0qqWoOOhjA34cZ3m4dksLDFUYg==} engines: {node: '>=18.17.0', npm: '>=9.5.0'} - '@rtsao/scc@1.1.0': - resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - - '@sinclair/typebox@0.34.35': - resolution: {integrity: sha512-C6ypdODf2VZkgRT6sFM8E1F8vR+HcffniX0Kp8MsU8PIfrlXbNCBz0jzj17GjdmjTx1OtZzdH8+iALL21UjF5A==} - '@sinclair/typebox@0.34.38': resolution: {integrity: sha512-HpkxMmc2XmZKhvaKIZZThlHmx1L0I/V1hWK1NubtlFnr6ZqdiOpV72TKudZUNQjZNsyDBay72qFEhEvb+bcwcA==} @@ -708,9 +620,6 @@ packages: '@tybys/wasm-util@0.10.0': resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==} - '@tybys/wasm-util@0.9.0': - resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} - '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -735,9 +644,6 @@ packages: '@types/jest@30.0.0': resolution: {integrity: sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==} - '@types/json5@0.0.29': - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/node@24.1.0': resolution: {integrity: sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==} @@ -747,136 +653,12 @@ packages: '@types/stack-utils@2.0.3': resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - '@types/tabtab@3.0.4': - resolution: {integrity: sha512-gmh8JsmIYPGRqk8Xb4dmulV37TpLwg0Quo3GJ0LgEcl4v0O92F14PGebBd7LHv9GBEw2KbmBSrvU0/NzIy5AoA==} - '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} '@types/yargs@17.0.33': resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} - '@typescript-eslint/eslint-plugin@8.24.1': - resolution: {integrity: sha512-ll1StnKtBigWIGqvYDVuDmXJHVH4zLVot1yQ4fJtLpL7qacwkxJc1T0bptqw+miBQ/QfUbhl1TcQ4accW5KUyA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' - - '@typescript-eslint/parser@8.24.1': - resolution: {integrity: sha512-Tqoa05bu+t5s8CTZFaGpCH2ub3QeT9YDkXbPd3uQ4SfsLoh1/vv2GEYAioPoxCWJJNsenXlC88tRjwoHNts1oQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' - - '@typescript-eslint/parser@8.38.0': - resolution: {integrity: sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/project-service@8.34.1': - resolution: {integrity: sha512-nuHlOmFZfuRwLJKDGQOVc0xnQrAmuq1Mj/ISou5044y1ajGNp2BNliIqp7F2LPQ5sForz8lempMFCovfeS1XoA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/project-service@8.38.0': - resolution: {integrity: sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/scope-manager@8.24.1': - resolution: {integrity: sha512-OdQr6BNBzwRjNEXMQyaGyZzgg7wzjYKfX2ZBV3E04hUCBDv3GQCHiz9RpqdUIiVrMgJGkXm3tcEh4vFSHreS2Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/scope-manager@8.34.1': - resolution: {integrity: sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/scope-manager@8.38.0': - resolution: {integrity: sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/tsconfig-utils@8.34.1': - resolution: {integrity: sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/tsconfig-utils@8.38.0': - resolution: {integrity: sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/type-utils@8.24.1': - resolution: {integrity: sha512-/Do9fmNgCsQ+K4rCz0STI7lYB4phTtEXqqCAs3gZW0pnK7lWNkvWd5iW545GSmApm4AzmQXmSqXPO565B4WVrw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' - - '@typescript-eslint/types@8.24.1': - resolution: {integrity: sha512-9kqJ+2DkUXiuhoiYIUvIYjGcwle8pcPpdlfkemGvTObzgmYfJ5d0Qm6jwb4NBXP9W1I5tss0VIAnWFumz3mC5A==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/types@8.34.1': - resolution: {integrity: sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/types@8.38.0': - resolution: {integrity: sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/typescript-estree@8.24.1': - resolution: {integrity: sha512-UPyy4MJ/0RE648DSKQe9g0VDSehPINiejjA6ElqnFaFIhI6ZEiZAkUI0D5MCk0bQcTf/LVqZStvQ6K4lPn/BRg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.8.0' - - '@typescript-eslint/typescript-estree@8.34.1': - resolution: {integrity: sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/typescript-estree@8.38.0': - resolution: {integrity: sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/utils@8.24.1': - resolution: {integrity: sha512-OOcg3PMMQx9EXspId5iktsI3eMaXVwlhC8BvNnX6B5w9a4dVgpkQZuU8Hy67TolKcl+iFWq0XX+jbDGN4xWxjQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' - - '@typescript-eslint/utils@8.34.1': - resolution: {integrity: sha512-mqOwUdZ3KjtGk7xJJnLbHxTuWVn3GO2WZZuM+Slhkun4+qthLdXx32C8xIXbO1kfCECb3jIs3eoxK3eryk7aoQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/visitor-keys@8.24.1': - resolution: {integrity: sha512-EwVHlp5l+2vp8CoqJm9KikPZgi3gbdZAtabKT9KPShGeOcJhsv4Zdo3oc8T8I0uKEmYoU4ItyxbptjF08enaxg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/visitor-keys@8.34.1': - resolution: {integrity: sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/visitor-keys@8.38.0': - resolution: {integrity: sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} @@ -885,196 +667,96 @@ packages: cpu: [arm] os: [android] - '@unrs/resolver-binding-android-arm-eabi@1.9.2': - resolution: {integrity: sha512-tS+lqTU3N0kkthU+rYp0spAYq15DU8ld9kXkaKg9sbQqJNF+WPMuNHZQGCgdxrUOEO0j22RKMwRVhF1HTl+X8A==} - cpu: [arm] - os: [android] - '@unrs/resolver-binding-android-arm64@1.11.1': resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==} cpu: [arm64] os: [android] - '@unrs/resolver-binding-android-arm64@1.9.2': - resolution: {integrity: sha512-MffGiZULa/KmkNjHeuuflLVqfhqLv1vZLm8lWIyeADvlElJ/GLSOkoUX+5jf4/EGtfwrNFcEaB8BRas03KT0/Q==} - cpu: [arm64] - os: [android] - '@unrs/resolver-binding-darwin-arm64@1.11.1': resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==} cpu: [arm64] os: [darwin] - '@unrs/resolver-binding-darwin-arm64@1.9.2': - resolution: {integrity: sha512-dzJYK5rohS1sYl1DHdJ3mwfwClJj5BClQnQSyAgEfggbUwA9RlROQSSbKBLqrGfsiC/VyrDPtbO8hh56fnkbsQ==} - cpu: [arm64] - os: [darwin] - '@unrs/resolver-binding-darwin-x64@1.11.1': resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==} cpu: [x64] os: [darwin] - '@unrs/resolver-binding-darwin-x64@1.9.2': - resolution: {integrity: sha512-gaIMWK+CWtXcg9gUyznkdV54LzQ90S3X3dn8zlh+QR5Xy7Y+Efqw4Rs4im61K1juy4YNb67vmJsCDAGOnIeffQ==} - cpu: [x64] - os: [darwin] - '@unrs/resolver-binding-freebsd-x64@1.11.1': resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==} cpu: [x64] os: [freebsd] - '@unrs/resolver-binding-freebsd-x64@1.9.2': - resolution: {integrity: sha512-S7QpkMbVoVJb0xwHFwujnwCAEDe/596xqY603rpi/ioTn9VDgBHnCCxh+UFrr5yxuMH+dliHfjwCZJXOPJGPnw==} - cpu: [x64] - os: [freebsd] - '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==} cpu: [arm] os: [linux] - '@unrs/resolver-binding-linux-arm-gnueabihf@1.9.2': - resolution: {integrity: sha512-+XPUMCuCCI80I46nCDFbGum0ZODP5NWGiwS3Pj8fOgsG5/ctz+/zzuBlq/WmGa+EjWZdue6CF0aWWNv84sE1uw==} - cpu: [arm] - os: [linux] - '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==} cpu: [arm] os: [linux] - '@unrs/resolver-binding-linux-arm-musleabihf@1.9.2': - resolution: {integrity: sha512-sqvUyAd1JUpwbz33Ce2tuTLJKM+ucSsYpPGl2vuFwZnEIg0CmdxiZ01MHQ3j6ExuRqEDUCy8yvkDKvjYFPb8Zg==} - cpu: [arm] - os: [linux] - '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} cpu: [arm64] os: [linux] - '@unrs/resolver-binding-linux-arm64-gnu@1.9.2': - resolution: {integrity: sha512-UYA0MA8ajkEDCFRQdng/FVx3F6szBvk3EPnkTTQuuO9lV1kPGuTB+V9TmbDxy5ikaEgyWKxa4CI3ySjklZ9lFA==} - cpu: [arm64] - os: [linux] - '@unrs/resolver-binding-linux-arm64-musl@1.11.1': resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} cpu: [arm64] os: [linux] - '@unrs/resolver-binding-linux-arm64-musl@1.9.2': - resolution: {integrity: sha512-P/CO3ODU9YJIHFqAkHbquKtFst0COxdphc8TKGL5yCX75GOiVpGqd1d15ahpqu8xXVsqP4MGFP2C3LRZnnL5MA==} - cpu: [arm64] - os: [linux] - '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} cpu: [ppc64] os: [linux] - '@unrs/resolver-binding-linux-ppc64-gnu@1.9.2': - resolution: {integrity: sha512-uKStFlOELBxBum2s1hODPtgJhY4NxYJE9pAeyBgNEzHgTqTiVBPjfTlPFJkfxyTjQEuxZbbJlJnMCrRgD7ubzw==} - cpu: [ppc64] - os: [linux] - '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} cpu: [riscv64] os: [linux] - '@unrs/resolver-binding-linux-riscv64-gnu@1.9.2': - resolution: {integrity: sha512-LkbNnZlhINfY9gK30AHs26IIVEZ9PEl9qOScYdmY2o81imJYI4IMnJiW0vJVtXaDHvBvxeAgEy5CflwJFIl3tQ==} - cpu: [riscv64] - os: [linux] - '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} cpu: [riscv64] os: [linux] - '@unrs/resolver-binding-linux-riscv64-musl@1.9.2': - resolution: {integrity: sha512-vI+e6FzLyZHSLFNomPi+nT+qUWN4YSj8pFtQZSFTtmgFoxqB6NyjxSjAxEC1m93qn6hUXhIsh8WMp+fGgxCoRg==} - cpu: [riscv64] - os: [linux] - '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} cpu: [s390x] os: [linux] - '@unrs/resolver-binding-linux-s390x-gnu@1.9.2': - resolution: {integrity: sha512-sSO4AlAYhSM2RAzBsRpahcJB1msc6uYLAtP6pesPbZtptF8OU/CbCPhSRW6cnYOGuVmEmWVW5xVboAqCnWTeHQ==} - cpu: [s390x] - os: [linux] - '@unrs/resolver-binding-linux-x64-gnu@1.11.1': resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} cpu: [x64] os: [linux] - '@unrs/resolver-binding-linux-x64-gnu@1.9.2': - resolution: {integrity: sha512-jkSkwch0uPFva20Mdu8orbQjv2A3G88NExTN2oPTI1AJ+7mZfYW3cDCTyoH6OnctBKbBVeJCEqh0U02lTkqD5w==} - cpu: [x64] - os: [linux] - '@unrs/resolver-binding-linux-x64-musl@1.11.1': resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} cpu: [x64] os: [linux] - '@unrs/resolver-binding-linux-x64-musl@1.9.2': - resolution: {integrity: sha512-Uk64NoiTpQbkpl+bXsbeyOPRpUoMdcUqa+hDC1KhMW7aN1lfW8PBlBH4mJ3n3Y47dYE8qi0XTxy1mBACruYBaw==} - cpu: [x64] - os: [linux] - '@unrs/resolver-binding-wasm32-wasi@1.11.1': resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@unrs/resolver-binding-wasm32-wasi@1.9.2': - resolution: {integrity: sha512-EpBGwkcjDicjR/ybC0g8wO5adPNdVuMrNalVgYcWi+gYtC1XYNuxe3rufcO7dA76OHGeVabcO6cSkPJKVcbCXQ==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==} cpu: [arm64] os: [win32] - '@unrs/resolver-binding-win32-arm64-msvc@1.9.2': - resolution: {integrity: sha512-EdFbGn7o1SxGmN6aZw9wAkehZJetFPao0VGZ9OMBwKx6TkvDuj6cNeLimF/Psi6ts9lMOe+Dt6z19fZQ9Ye2fw==} - cpu: [arm64] - os: [win32] - '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==} cpu: [ia32] os: [win32] - '@unrs/resolver-binding-win32-ia32-msvc@1.9.2': - resolution: {integrity: sha512-JY9hi1p7AG+5c/dMU8o2kWemM8I6VZxfGwn1GCtf3c5i+IKcMo2NQ8OjZ4Z3/itvY/Si3K10jOBQn7qsD/whUA==} - cpu: [ia32] - os: [win32] - '@unrs/resolver-binding-win32-x64-msvc@1.11.1': resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==} cpu: [x64] os: [win32] - '@unrs/resolver-binding-win32-x64-msvc@1.9.2': - resolution: {integrity: sha512-ryoo+EB19lMxAd80ln9BVf8pdOAxLb97amrQ3SFN9OCRn/5M5wvwDgAe4i8ZjhpbiHoDeP8yavcTEnpKBo7lZg==} - cpu: [x64] - os: [win32] - - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.3.4: resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} @@ -1088,9 +770,6 @@ packages: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} @@ -1148,52 +827,8 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - aria-query@5.3.2: - resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} - engines: {node: '>= 0.4'} - - array-buffer-byte-length@1.0.2: - resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} - engines: {node: '>= 0.4'} - - array-includes@3.1.9: - resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} - engines: {node: '>= 0.4'} - - array.prototype.findlastindex@1.2.6: - resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} - engines: {node: '>= 0.4'} - - array.prototype.flat@1.3.3: - resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} - engines: {node: '>= 0.4'} - - array.prototype.flatmap@1.3.3: - resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} - engines: {node: '>= 0.4'} - - arraybuffer.prototype.slice@1.0.4: - resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} - engines: {node: '>= 0.4'} - - ast-types-flow@0.0.8: - resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - - async-function@1.0.0: - resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} - engines: {node: '>= 0.4'} - - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - - axe-core@4.10.2: - resolution: {integrity: sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==} - engines: {node: '>=4'} - - axobject-query@4.1.0: - resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} - engines: {node: '>= 0.4'} + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} babel-jest@30.0.5: resolution: {integrity: sha512-mRijnKimhGDMsizTvBTWotwNpzrkHr+VvZUQBof2AufXKB8NXrL1W69TG20EvOz7aevx6FTJIaBuBkYxS8zolg==} @@ -1233,11 +868,6 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.24.4: - resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - browserslist@4.25.1: resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -1253,18 +883,6 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} - - call-bind@1.0.8: - resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} - engines: {node: '>= 0.4'} - - call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} - engines: {node: '>= 0.4'} - callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -1277,9 +895,6 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001700: - resolution: {integrity: sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==} - caniuse-lite@1.0.30001727: resolution: {integrity: sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==} @@ -1301,10 +916,6 @@ packages: chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - ci-info@4.2.0: - resolution: {integrity: sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==} - engines: {node: '>=8'} - ci-info@4.3.0: resolution: {integrity: sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==} engines: {node: '>=8'} @@ -1363,38 +974,6 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - - data-view-buffer@1.0.2: - resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} - engines: {node: '>= 0.4'} - - data-view-byte-length@1.0.2: - resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} - engines: {node: '>= 0.4'} - - data-view-byte-offset@1.0.1: - resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} - engines: {node: '>= 0.4'} - - debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.1: resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} engines: {node: '>=6.0'} @@ -1412,21 +991,10 @@ packages: babel-plugin-macros: optional: true - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} @@ -1435,23 +1003,13 @@ packages: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} - doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - - dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} - eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - electron-to-chromium@1.5.103: - resolution: {integrity: sha512-P6+XzIkfndgsrjROJWfSvVEgNHtPgbhVyTkwLjUM2HU/h7pZRORgaTlHqfAikqxKmdJMLW8fftrdGWbd/Ds0FA==} + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true electron-to-chromium@1.5.190: resolution: {integrity: sha512-k4McmnB2091YIsdCgkS0fMVMPOJgxl93ltFzaryXqwip1AaxeDqKCGLxkXODDA5Ab/D+tV5EL5+aTx76RvLRxw==} @@ -1469,34 +1027,6 @@ packages: error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - es-abstract@1.24.0: - resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} - engines: {node: '>= 0.4'} - - es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} - - es-shim-unscopables@1.1.0: - resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} - engines: {node: '>= 0.4'} - - es-to-primitive@1.3.0: - resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} - engines: {node: '>= 0.4'} - es6-promisify@6.1.1: resolution: {integrity: sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg==} @@ -1517,186 +1047,10 @@ packages: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - eslint-config-prettier@10.1.8: - resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} hasBin: true - peerDependencies: - eslint: '>=7.0.0' - - eslint-import-context@0.1.9: - resolution: {integrity: sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - peerDependencies: - unrs-resolver: ^1.0.0 - peerDependenciesMeta: - unrs-resolver: - optional: true - - eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - - eslint-import-resolver-typescript@4.4.4: - resolution: {integrity: sha512-1iM2zeBvrYmUNTj2vSC/90JTHDth+dfOfiNKkxApWRsTJYNrc8rOdxxIf5vazX+BiAXTeOT0UvWpGI/7qIWQOw==} - engines: {node: ^16.17.0 || >=18.6.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - eslint-plugin-import-x: '*' - peerDependenciesMeta: - eslint-plugin-import: - optional: true - eslint-plugin-import-x: - optional: true - - eslint-module-utils@2.12.1: - resolution: {integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - - eslint-plugin-escompat@3.11.4: - resolution: {integrity: sha512-j0ywwNnIufshOzgAu+PfIig1c7VRClKSNKzpniMT2vXQ4leL5q+e/SpMFQU0nrdL2WFFM44XmhSuwmxb3G0CJg==} - peerDependencies: - eslint: '>=5.14.1' - - eslint-plugin-eslint-comments@3.2.0: - resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} - engines: {node: '>=6.5.0'} - peerDependencies: - eslint: '>=4.19.1' - - eslint-plugin-filenames@1.3.2: - resolution: {integrity: sha512-tqxJTiEM5a0JmRCUYQmxw23vtTxrb2+a3Q2mMOPhFxvt7ZQQJmdiuMby9B/vUAuVMghyP7oET+nIf6EO6CBd/w==} - peerDependencies: - eslint: '*' - - eslint-plugin-github@5.1.8: - resolution: {integrity: sha512-A6q+R3EBMF7hxIViWpQsalqpu3O0POcQ9VpN1m9W2I8yGumw+SFxXZUTafBd9X9mgUJhaU4M9qSifC1q/39H3A==} - hasBin: true - peerDependencies: - eslint: ^8 || ^9 - - eslint-plugin-i18n-text@1.0.1: - resolution: {integrity: sha512-3G3UetST6rdqhqW9SfcfzNYMpQXS7wNkJvp6dsXnjzGiku6Iu5hl3B0kmk6lIcFPwYjhQIY+tXVRtK9TlGT7RA==} - peerDependencies: - eslint: '>=5.0.0' - - eslint-plugin-import@2.32.0: - resolution: {integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - - eslint-plugin-jest@29.0.1: - resolution: {integrity: sha512-EE44T0OSMCeXhDrrdsbKAhprobKkPtJTbQz5yEktysNpHeDZTAL1SfDTNKmcFfJkY6yrQLtTKZALrD3j/Gpmiw==} - engines: {node: ^20.12.0 || ^22.0.0 || >=24.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^8.0.0 - eslint: ^8.57.0 || ^9.0.0 - jest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - jest: - optional: true - - eslint-plugin-jsx-a11y@6.10.2: - resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 - - eslint-plugin-no-only-tests@3.3.0: - resolution: {integrity: sha512-brcKcxGnISN2CcVhXJ/kEQlNa0MEfGRtwKtWA16SkqXHKitaKIMrfemJKLKX1YqDU5C/5JY3PvZXd5jEW04e0Q==} - engines: {node: '>=5.0.0'} - - eslint-plugin-prettier@5.5.3: - resolution: {integrity: sha512-NAdMYww51ehKfDyDhv59/eIItUVzU0Io9H2E8nHNGKEeeqlnci+1gCvrHib6EmZdf6GxF+LCV5K7UC65Ezvw7w==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - '@types/eslint': '>=8.0.0' - eslint: '>=8.0.0' - eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0' - prettier: '>=3.0.0' - peerDependenciesMeta: - '@types/eslint': - optional: true - eslint-config-prettier: - optional: true - - eslint-rule-documentation@1.0.23: - resolution: {integrity: sha512-pWReu3fkohwyvztx/oQWWgld2iad25TfUdi6wvhhaDPIQjHU/pyvlKgXFw1kX31SQK2Nq9MH+vRDWB0ZLy8fYw==} - engines: {node: '>=4.0.0'} - - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@4.2.1: - resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint@8.57.1: - resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. - hasBin: true - - espree@10.3.0: - resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} - - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} @@ -1706,10 +1060,6 @@ packages: resolution: {integrity: sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==} engines: {node: '>= 0.8.0'} - expect@30.0.0: - resolution: {integrity: sha512-xCdPp6gwiR9q9lsPCHANarIkFTN/IMZso6Kkq03sOm9IIGtzK/UJqml0dkhHibGh8HKOj8BIDIpZ0BZuU7QK6w==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - expect@30.0.5: resolution: {integrity: sha512-P0te2pt+hHI5qLJkIR+iMvS+lYUZml8rKKsohVHAGY+uClp9XVbdyYNJOIjSRpHVp8s8YqxJCiHUkSYZGr8rtQ==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -1721,40 +1071,18 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - - fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} - fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - - fastq@1.19.0: - resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} - fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - fdir@6.4.6: - resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - figures@2.0.0: resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} engines: {node: '>=4'} - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} @@ -1764,21 +1092,6 @@ packages: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - - flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} - - flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} - - for-each@0.3.5: - resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} - engines: {node: '>= 0.4'} - foreground-child@3.3.1: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} @@ -1796,16 +1109,6 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - function.prototype.name@1.1.8: - resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -1814,37 +1117,17 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-intrinsic@1.3.0: - resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} - engines: {node: '>= 0.4'} - get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} - get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} - get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - get-symbol-description@1.1.0: - resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} - engines: {node: '>= 0.4'} - get-tsconfig@4.10.1: resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - glob@10.4.5: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true @@ -1853,41 +1136,9 @@ packages: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - - globals@14.0.0: - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} - engines: {node: '>=18'} - - globals@15.15.0: - resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} - engines: {node: '>=18'} - - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - - gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} - graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - - handlebars@4.7.8: - resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} - engines: {node: '>=0.4.7'} - hasBin: true - - has-bigints@1.1.0: - resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} - engines: {node: '>= 0.4'} - has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -1896,25 +1147,6 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} - engines: {node: '>= 0.4'} - - has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -1930,14 +1162,6 @@ packages: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} - ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} - - import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} - import-local@3.2.0: resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} engines: {node: '>=8'} @@ -1962,56 +1186,9 @@ packages: resolution: {integrity: sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==} engines: {node: '>=6.0.0'} - internal-slot@1.1.0: - resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} - engines: {node: '>= 0.4'} - - is-array-buffer@3.0.5: - resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} - engines: {node: '>= 0.4'} - is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-async-function@2.1.1: - resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} - engines: {node: '>= 0.4'} - - is-bigint@1.1.0: - resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} - engines: {node: '>= 0.4'} - - is-boolean-object@1.2.2: - resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} - engines: {node: '>= 0.4'} - - is-bun-module@2.0.0: - resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} - - is-data-view@1.0.2: - resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} - engines: {node: '>= 0.4'} - - is-date-object@1.1.0: - resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} - engines: {node: '>= 0.4'} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-finalizationregistry@1.1.1: - resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} - engines: {node: '>= 0.4'} - is-fullwidth-code-point@2.0.0: resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} engines: {node: '>=4'} @@ -2024,77 +1201,14 @@ packages: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} - is-generator-function@1.1.0: - resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} - engines: {node: '>= 0.4'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - - is-number-object@1.1.1: - resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} - engines: {node: '>= 0.4'} - is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - - is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} - engines: {node: '>= 0.4'} - - is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} - - is-shared-array-buffer@1.0.4: - resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} - engines: {node: '>= 0.4'} - is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - is-string@1.1.1: - resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} - engines: {node: '>= 0.4'} - - is-symbol@1.1.1: - resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} - engines: {node: '>= 0.4'} - - is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} - engines: {node: '>= 0.4'} - - is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - - is-weakref@1.1.1: - resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} - engines: {node: '>= 0.4'} - - is-weakset@2.0.4: - resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} - engines: {node: '>= 0.4'} - - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -2121,6 +1235,11 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jake@10.9.4: + resolution: {integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==} + engines: {node: '>=10'} + hasBin: true + jest-changed-files@30.0.5: resolution: {integrity: sha512-bGl2Ntdx0eAwXuGpdLdVYVr5YQHnSZlQ0y9HVDu565lCUAe9sj6JOtBbMmBBikGIegne9piDDIOeiLVoqTkz4A==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -2154,10 +1273,6 @@ packages: ts-node: optional: true - jest-diff@30.0.0: - resolution: {integrity: sha512-TgT1+KipV8JTLXXeFX0qSvIJR/UXiNNojjxb/awh3vYlBZyChU/NEmyKmq+wijKjWEztyrGJFL790nqMqNjTHA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-diff@30.0.5: resolution: {integrity: sha512-1UIqE9PoEKaHcIKvq2vbibrCog4Y8G0zmOxgQUVEiTqwR5hJVMCoDsN1vFvI5JvwD37hjueZ1C4l2FyGnfpE0A==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -2182,26 +1297,14 @@ packages: resolution: {integrity: sha512-3Uxr5uP8jmHMcsOtYMRB/zf1gXN3yUIc+iPorhNETG54gErFIiUhLvyY/OggYpSMOEYqsmRxmuU4ZOoX5jpRFg==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-matcher-utils@30.0.0: - resolution: {integrity: sha512-m5mrunqopkrqwG1mMdJxe1J4uGmS9AHHKYUmoxeQOxBcLjEvirIrIDwuKmUYrecPHVB/PUBpXs2gPoeA2FSSLQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-matcher-utils@30.0.5: resolution: {integrity: sha512-uQgGWt7GOrRLP1P7IwNWwK1WAQbq+m//ZY0yXygyfWp0rJlksMSLQAA4wYQC3b6wl3zfnchyTx+k3HZ5aPtCbQ==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-message-util@30.0.0: - resolution: {integrity: sha512-pV3qcrb4utEsa/U7UI2VayNzSDQcmCllBZLSoIucrESRu0geKThFZOjjh0kACDJFJRAQwsK7GVsmS6SpEceD8w==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-message-util@30.0.5: resolution: {integrity: sha512-NAiDOhsK3V7RU0Aa/HnrQo+E4JlbarbmI3q6Pi4KcxicdtjV82gcIUrejOtczChtVQR4kddu1E1EJlW6EN9IyA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-mock@30.0.0: - resolution: {integrity: sha512-W2sRA4ALXILrEetEOh2ooZG6fZ01iwVs0OWMKSSWRcUlaLr4ESHuiKXDNTg+ZVgOq8Ei5445i/Yxrv59VT+XkA==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-mock@30.0.5: resolution: {integrity: sha512-Od7TyasAAQX/6S+QCbN6vZoWOMwlTtzzGuxJku1GhGanAjz9y+QsQkpScDmETvdc9aSXyJ/Op4rhpMYBWW91wQ==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -2215,10 +1318,6 @@ packages: jest-resolve: optional: true - jest-regex-util@30.0.0: - resolution: {integrity: sha512-rT84010qRu/5OOU7a9TeidC2Tp3Qgt9Sty4pOZ/VSDuEmRupIjKZAb53gU3jr4ooMlhwScrgC9UixJxWzVu9oQ==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-regex-util@30.0.1: resolution: {integrity: sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -2243,10 +1342,6 @@ packages: resolution: {integrity: sha512-T00dWU/Ek3LqTp4+DcW6PraVxjk28WY5Ua/s+3zUKSERZSNyxTqhDXCWKG5p2HAJ+crVQ3WJ2P9YVHpj1tkW+g==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-util@30.0.0: - resolution: {integrity: sha512-fhNBBM9uSUbd4Lzsf8l/kcAdaHD/4SgoI48en3HXcBEMwKwoleKFMZ6cYEYs21SB779PRuRCyNLmymApAm8tZw==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-util@30.0.5: resolution: {integrity: sha512-pvyPWssDZR0FlfMxCBoc0tvM8iUEskaRFALUtGQYzVEAqisAztmy+R8LnU14KT4XA0H/a5HMVTXat1jLne010g==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -2293,52 +1388,21 @@ packages: engines: {node: '>=6'} hasBin: true - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - - json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true - jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} - - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - - language-subtag-registry@0.3.23: - resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} - - language-tags@1.0.9: - resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} - engines: {node: '>=0.10'} - leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -2346,28 +1410,9 @@ packages: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - - lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - - lodash.kebabcase@4.1.1: - resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} - lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - - lodash.snakecase@4.1.1: - resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} - - lodash.upperfirst@4.3.1: - resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} - lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -2387,17 +1432,9 @@ packages: makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} - math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} - merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} @@ -2438,11 +1475,6 @@ packages: mute-stream@0.0.7: resolution: {integrity: sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==} - napi-postinstall@0.2.4: - resolution: {integrity: sha512-ZEzHJwBhZ8qQSbknHqYcdtQVr8zUgGyM/q6h6qAyhtyVMNrSgDhrC4disf03dYW0e+czXyLnZINnCTEkWy0eJg==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - hasBin: true - napi-postinstall@0.3.2: resolution: {integrity: sha512-tWVJxJHmBWLy69PvO96TZMZDrzmw5KeiZBz3RHmiM2XZ9grBJ2WgMAFVVg25nqp3ZjTFUs2Ftw1JhscL3Teliw==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} @@ -2451,9 +1483,6 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} @@ -2468,30 +1497,6 @@ packages: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} - object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object.assign@4.1.7: - resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} - engines: {node: '>= 0.4'} - - object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} - - object.groupby@1.0.3: - resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} - engines: {node: '>= 0.4'} - - object.values@1.2.1: - resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} - engines: {node: '>= 0.4'} - once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -2515,10 +1520,6 @@ packages: peerDependencies: typescript: ^5.x - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} - os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} @@ -2526,10 +1527,6 @@ packages: otplib@12.0.1: resolution: {integrity: sha512-xDGvUOQjop7RDgxTQ+o4pOol0/3xSZzawTiPKRrHnQWAy0WjhNs/5HdIDJCrqC4MBynmjXgULc6YfioaxZeFgg==} - own-keys@1.0.1: - resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} - engines: {node: '>= 0.4'} - p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -2542,10 +1539,6 @@ packages: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -2553,10 +1546,6 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -2577,9 +1566,6 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@1.11.1: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} @@ -2591,10 +1577,6 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - picomatch@4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} - engines: {node: '>=12'} - picomatch@4.0.3: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} @@ -2621,52 +1603,16 @@ packages: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} - possible-typed-array-names@1.1.0: - resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} - engines: {node: '>= 0.4'} - - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - - prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} - engines: {node: '>=6.0.0'} - - prettier@3.6.2: - resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} - engines: {node: '>=14'} - hasBin: true - - pretty-format@30.0.0: - resolution: {integrity: sha512-18NAOUr4ZOQiIR+BgI5NhQE7uREdx4ZyV0dyay5izh4yfQ+1T7BSvggxvRGoXocrRyevqW5OhScUjbi9GB8R8Q==} - engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - pretty-format@30.0.5: resolution: {integrity: sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - pure-rand@7.0.1: resolution: {integrity: sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==} - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - reflect.getprototypeof@1.0.10: - resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} - engines: {node: '>= 0.4'} - - regexp.prototype.flags@1.5.4: - resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} - engines: {node: '>= 0.4'} - require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -2679,10 +1625,6 @@ packages: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} @@ -2690,47 +1632,18 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} - engines: {node: '>= 0.4'} - hasBin: true - restore-cursor@2.0.0: resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==} engines: {node: '>=4'} - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - run-async@2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} engines: {node: '>=0.12.0'} - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - rxjs@6.6.7: resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} engines: {npm: '>=2.0.0'} - safe-array-concat@1.1.3: - resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} - engines: {node: '>=0.4'} - - safe-push-apply@1.0.0: - resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} - engines: {node: '>= 0.4'} - - safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} - engines: {node: '>= 0.4'} - safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -2743,18 +1656,6 @@ packages: engines: {node: '>=10'} hasBin: true - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - - set-proto@1.0.0: - resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} - engines: {node: '>= 0.4'} - shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -2767,22 +1668,6 @@ packages: resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} engines: {node: '>= 0.4'} - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} - engines: {node: '>= 0.4'} - - side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} - - side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} - - side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} - engines: {node: '>= 0.4'} - signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -2804,18 +1689,10 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - stable-hash-x@0.2.0: - resolution: {integrity: sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==} - engines: {node: '>=12.0.0'} - stack-utils@2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} - stop-iteration-iterator@1.1.0: - resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} - engines: {node: '>= 0.4'} - string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} @@ -2832,22 +1709,6 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} - string.prototype.includes@2.0.1: - resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} - engines: {node: '>= 0.4'} - - string.prototype.trim@1.2.10: - resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.9: - resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} - engines: {node: '>= 0.4'} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - strip-ansi@4.0.0: resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} engines: {node: '>=4'} @@ -2864,10 +1725,6 @@ packages: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} - strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - strip-bom@4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} @@ -2896,13 +1753,6 @@ packages: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - svg-element-attributes@1.3.1: - resolution: {integrity: sha512-Bh05dSOnJBf3miNMqpsormfNtfidA/GxQVakhtn0T4DECWKeXQRQUceYjJ+OxYiiLdGe4Jo9iFV8wICFapFeIA==} - synckit@0.11.11: resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} engines: {node: ^14.18.0 || >=16.0.0} @@ -2914,9 +1764,6 @@ packages: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - thirty-two@1.0.2: resolution: {integrity: sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==} engines: {node: '>=0.2.6'} @@ -2924,10 +1771,6 @@ packages: through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - tinyglobby@0.2.14: - resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} - engines: {node: '>=12.0.0'} - tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -2939,20 +1782,8 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - ts-api-utils@2.0.1: - resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' - - ts-api-utils@2.1.0: - resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' - - ts-jest@29.4.1: - resolution: {integrity: sha512-SaeUtjfpg9Uqu8IbeDKtdaS0g8lS6FT6OzM3ezrDfErPJPHNDo/Ey+VFGP1bQIDfagYDLyRpd7O15XpG1Es2Uw==} + ts-jest@29.4.0: + resolution: {integrity: sha512-d423TJMnJGu80/eSgfQ5w/R+0zFJvdtTxwtF9KzFFunOpSeD+79lHJQIiAhluJoyGRbvj9NZJsl9WjCUo0ND7Q==} engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -2992,9 +1823,6 @@ packages: '@swc/wasm': optional: true - tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} @@ -3006,18 +1834,10 @@ packages: engines: {node: '>=18.0.0'} hasBin: true - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} @@ -3026,62 +1846,21 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} - typed-array-buffer@1.0.3: - resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.3: - resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.4: - resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.7: - resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} - engines: {node: '>= 0.4'} - - typescript-eslint@8.24.1: - resolution: {integrity: sha512-cw3rEdzDqBs70TIcb0Gdzbt6h11BSs2pS0yaq7hDWDBtCCSei1pPSUXE9qUdQ/Wm9NgFg8mKtMt1b8fTHIl1jA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' - typescript@5.7.3: resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} engines: {node: '>=14.17'} hasBin: true - uglify-js@3.19.3: - resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} - engines: {node: '>=0.8.0'} - hasBin: true - - unbox-primitive@1.1.0: - resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} - engines: {node: '>= 0.4'} - undici-types@7.8.0: resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} unrs-resolver@1.11.1: resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} - unrs-resolver@1.9.2: - resolution: {integrity: sha512-VUyWiTNQD7itdiMuJy+EuLEErLj3uwX/EpHQF8EOf33Dq3Ju6VW1GXm+swk6+1h7a49uv9fKZ+dft9jU7esdLA==} - untildify@3.0.3: resolution: {integrity: sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA==} engines: {node: '>=4'} - update-browserslist-db@1.1.2: - resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - update-browserslist-db@1.1.3: resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} hasBin: true @@ -3091,9 +1870,6 @@ packages: uri-js-replace@1.0.1: resolution: {integrity: sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==} - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} @@ -3104,34 +1880,11 @@ packages: walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - which-boxed-primitive@1.1.1: - resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} - engines: {node: '>= 0.4'} - - which-builtin-type@1.2.1: - resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} - engines: {node: '>= 0.4'} - - which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} - - which-typed-array@1.1.19: - resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} - engines: {node: '>= 0.4'} - which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - - wordwrap@1.0.0: - resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -3369,33 +2122,52 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} - '@cspotcode/source-map-support@0.8.1': - dependencies: - '@jridgewell/trace-mapping': 0.3.9 + '@biomejs/biome@2.1.3': + optionalDependencies: + '@biomejs/cli-darwin-arm64': 2.1.3 + '@biomejs/cli-darwin-x64': 2.1.3 + '@biomejs/cli-linux-arm64': 2.1.3 + '@biomejs/cli-linux-arm64-musl': 2.1.3 + '@biomejs/cli-linux-x64': 2.1.3 + '@biomejs/cli-linux-x64-musl': 2.1.3 + '@biomejs/cli-win32-arm64': 2.1.3 + '@biomejs/cli-win32-x64': 2.1.3 - '@emnapi/core@1.4.3': - dependencies: - '@emnapi/wasi-threads': 1.0.2 - tslib: 2.8.1 + '@biomejs/cli-darwin-arm64@2.1.3': optional: true - '@emnapi/core@1.4.5': - dependencies: - '@emnapi/wasi-threads': 1.0.4 - tslib: 2.8.1 + '@biomejs/cli-darwin-x64@2.1.3': optional: true - '@emnapi/runtime@1.4.3': - dependencies: - tslib: 2.8.1 + '@biomejs/cli-linux-arm64-musl@2.1.3': optional: true - '@emnapi/runtime@1.4.5': + '@biomejs/cli-linux-arm64@2.1.3': + optional: true + + '@biomejs/cli-linux-x64-musl@2.1.3': + optional: true + + '@biomejs/cli-linux-x64@2.1.3': + optional: true + + '@biomejs/cli-win32-arm64@2.1.3': + optional: true + + '@biomejs/cli-win32-x64@2.1.3': + optional: true + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@emnapi/core@1.4.5': dependencies: + '@emnapi/wasi-threads': 1.0.4 tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.0.2': + '@emnapi/runtime@1.4.5': dependencies: tslib: 2.8.1 optional: true @@ -3480,68 +2252,6 @@ snapshots: '@esbuild/win32-x64@0.25.5': optional: true - '@eslint-community/eslint-utils@4.4.1(eslint@8.57.1)': - dependencies: - eslint: 8.57.1 - eslint-visitor-keys: 3.4.3 - - '@eslint-community/eslint-utils@4.7.0(eslint@8.57.1)': - dependencies: - eslint: 8.57.1 - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.12.1': {} - - '@eslint/compat@1.2.7(eslint@8.57.1)': - optionalDependencies: - eslint: 8.57.1 - - '@eslint/eslintrc@2.1.4': - dependencies: - ajv: 6.12.6 - debug: 4.4.0 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.2 - import-fresh: 3.3.1 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/eslintrc@3.3.0': - dependencies: - ajv: 6.12.6 - debug: 4.4.1(supports-color@10.0.0) - espree: 10.3.0 - globals: 14.0.0 - ignore: 5.3.2 - import-fresh: 3.3.1 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@8.57.1': {} - - '@eslint/js@9.21.0': {} - - '@github/browserslist-config@1.0.0': {} - - '@humanwhocodes/config-array@0.13.0': - dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.4.0 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/object-schema@2.0.3': {} - '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -3606,8 +2316,6 @@ snapshots: - supports-color - ts-node - '@jest/diff-sequences@30.0.0': {} - '@jest/diff-sequences@30.0.1': {} '@jest/environment@30.0.5': @@ -3617,10 +2325,6 @@ snapshots: '@types/node': 24.1.0 jest-mock: 30.0.5 - '@jest/expect-utils@30.0.0': - dependencies: - '@jest/get-type': 30.0.0 - '@jest/expect-utils@30.0.5': dependencies: '@jest/get-type': 30.0.1 @@ -3641,8 +2345,6 @@ snapshots: jest-mock: 30.0.5 jest-util: 30.0.5 - '@jest/get-type@30.0.0': {} - '@jest/get-type@30.0.1': {} '@jest/globals@30.0.5': @@ -3654,11 +2356,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@jest/pattern@30.0.0': - dependencies: - '@types/node': 24.1.0 - jest-regex-util: 30.0.0 - '@jest/pattern@30.0.1': dependencies: '@types/node': 24.1.0 @@ -3692,10 +2389,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@jest/schemas@30.0.0': - dependencies: - '@sinclair/typebox': 0.34.35 - '@jest/schemas@30.0.5': dependencies: '@sinclair/typebox': 0.34.38 @@ -3747,16 +2440,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@jest/types@30.0.0': - dependencies: - '@jest/pattern': 30.0.0 - '@jest/schemas': 30.0.0 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@types/node': 24.1.0 - '@types/yargs': 17.0.33 - chalk: 4.1.2 - '@jest/types@30.0.5': dependencies: '@jest/pattern': 30.0.1 @@ -3774,8 +2457,6 @@ snapshots: '@jridgewell/resolve-uri@3.1.2': {} - '@jridgewell/sourcemap-codec@1.5.0': {} - '@jridgewell/sourcemap-codec@1.5.4': {} '@jridgewell/trace-mapping@0.3.29': @@ -3786,14 +2467,7 @@ snapshots: '@jridgewell/trace-mapping@0.3.9': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - - '@napi-rs/wasm-runtime@0.2.11': - dependencies: - '@emnapi/core': 1.4.3 - '@emnapi/runtime': 1.4.3 - '@tybys/wasm-util': 0.9.0 - optional: true + '@jridgewell/sourcemap-codec': 1.5.4 '@napi-rs/wasm-runtime@0.2.12': dependencies: @@ -3802,18 +2476,6 @@ snapshots: '@tybys/wasm-util': 0.10.0 optional: true - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.0 - '@otplib/core@12.0.1': {} '@otplib/plugin-crypto@12.0.1': @@ -3869,10 +2531,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@rtsao/scc@1.1.0': {} - - '@sinclair/typebox@0.34.35': {} - '@sinclair/typebox@0.34.38': {} '@sinonjs/commons@3.0.1': @@ -3896,11 +2554,6 @@ snapshots: tslib: 2.8.1 optional: true - '@tybys/wasm-util@0.9.0': - dependencies: - tslib: 2.8.1 - optional: true - '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.28.0 @@ -3934,10 +2587,8 @@ snapshots: '@types/jest@30.0.0': dependencies: - expect: 30.0.0 - pretty-format: 30.0.0 - - '@types/json5@0.0.29': {} + expect: 30.0.5 + pretty-format: 30.0.5 '@types/node@24.1.0': dependencies: @@ -3947,339 +2598,73 @@ snapshots: '@types/stack-utils@2.0.3': {} - '@types/tabtab@3.0.4': - dependencies: - '@types/node': 24.1.0 - '@types/yargs-parser@21.0.3': {} '@types/yargs@17.0.33': dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.24.1(@typescript-eslint/parser@8.24.1(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3)': - dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.24.1(eslint@8.57.1)(typescript@5.7.3) - '@typescript-eslint/scope-manager': 8.24.1 - '@typescript-eslint/type-utils': 8.24.1(eslint@8.57.1)(typescript@5.7.3) - '@typescript-eslint/utils': 8.24.1(eslint@8.57.1)(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.24.1 - eslint: 8.57.1 - graphemer: 1.4.0 - ignore: 5.3.2 - natural-compare: 1.4.0 - ts-api-utils: 2.0.1(typescript@5.7.3) - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/eslint-plugin@8.24.1(@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3)': - dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.38.0(eslint@8.57.1)(typescript@5.7.3) - '@typescript-eslint/scope-manager': 8.24.1 - '@typescript-eslint/type-utils': 8.24.1(eslint@8.57.1)(typescript@5.7.3) - '@typescript-eslint/utils': 8.24.1(eslint@8.57.1)(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.24.1 - eslint: 8.57.1 - graphemer: 1.4.0 - ignore: 5.3.2 - natural-compare: 1.4.0 - ts-api-utils: 2.0.1(typescript@5.7.3) - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.24.1(eslint@8.57.1)(typescript@5.7.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.24.1 - '@typescript-eslint/types': 8.24.1 - '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.24.1 - debug: 4.4.1(supports-color@10.0.0) - eslint: 8.57.1 - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.7.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.38.0 - debug: 4.4.1(supports-color@10.0.0) - eslint: 8.57.1 - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.34.1(typescript@5.7.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.7.3) - '@typescript-eslint/types': 8.34.1 - debug: 4.4.1(supports-color@10.0.0) - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.38.0(typescript@5.7.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.7.3) - '@typescript-eslint/types': 8.38.0 - debug: 4.4.1(supports-color@10.0.0) - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@8.24.1': - dependencies: - '@typescript-eslint/types': 8.24.1 - '@typescript-eslint/visitor-keys': 8.24.1 - - '@typescript-eslint/scope-manager@8.34.1': - dependencies: - '@typescript-eslint/types': 8.34.1 - '@typescript-eslint/visitor-keys': 8.34.1 - - '@typescript-eslint/scope-manager@8.38.0': - dependencies: - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/visitor-keys': 8.38.0 - - '@typescript-eslint/tsconfig-utils@8.34.1(typescript@5.7.3)': - dependencies: - typescript: 5.7.3 - - '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.7.3)': - dependencies: - typescript: 5.7.3 - - '@typescript-eslint/type-utils@8.24.1(eslint@8.57.1)(typescript@5.7.3)': - dependencies: - '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3) - '@typescript-eslint/utils': 8.24.1(eslint@8.57.1)(typescript@5.7.3) - debug: 4.4.1(supports-color@10.0.0) - eslint: 8.57.1 - ts-api-utils: 2.0.1(typescript@5.7.3) - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@8.24.1': {} - - '@typescript-eslint/types@8.34.1': {} - - '@typescript-eslint/types@8.38.0': {} - - '@typescript-eslint/typescript-estree@8.24.1(typescript@5.7.3)': - dependencies: - '@typescript-eslint/types': 8.24.1 - '@typescript-eslint/visitor-keys': 8.24.1 - debug: 4.4.1(supports-color@10.0.0) - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.7.3) - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/typescript-estree@8.34.1(typescript@5.7.3)': - dependencies: - '@typescript-eslint/project-service': 8.34.1(typescript@5.7.3) - '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.7.3) - '@typescript-eslint/types': 8.34.1 - '@typescript-eslint/visitor-keys': 8.34.1 - debug: 4.4.1(supports-color@10.0.0) - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.7.3) - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/typescript-estree@8.38.0(typescript@5.7.3)': - dependencies: - '@typescript-eslint/project-service': 8.38.0(typescript@5.7.3) - '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.7.3) - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/visitor-keys': 8.38.0 - debug: 4.4.1(supports-color@10.0.0) - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.7.3) - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.24.1(eslint@8.57.1)(typescript@5.7.3)': - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) - '@typescript-eslint/scope-manager': 8.24.1 - '@typescript-eslint/types': 8.24.1 - '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3) - eslint: 8.57.1 - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.34.1(eslint@8.57.1)(typescript@5.7.3)': - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) - '@typescript-eslint/scope-manager': 8.34.1 - '@typescript-eslint/types': 8.34.1 - '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.7.3) - eslint: 8.57.1 - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/visitor-keys@8.24.1': - dependencies: - '@typescript-eslint/types': 8.24.1 - eslint-visitor-keys: 4.2.1 - - '@typescript-eslint/visitor-keys@8.34.1': - dependencies: - '@typescript-eslint/types': 8.34.1 - eslint-visitor-keys: 4.2.1 - - '@typescript-eslint/visitor-keys@8.38.0': - dependencies: - '@typescript-eslint/types': 8.38.0 - eslint-visitor-keys: 4.2.1 - '@ungap/structured-clone@1.3.0': {} '@unrs/resolver-binding-android-arm-eabi@1.11.1': optional: true - '@unrs/resolver-binding-android-arm-eabi@1.9.2': - optional: true - '@unrs/resolver-binding-android-arm64@1.11.1': optional: true - '@unrs/resolver-binding-android-arm64@1.9.2': - optional: true - '@unrs/resolver-binding-darwin-arm64@1.11.1': optional: true - '@unrs/resolver-binding-darwin-arm64@1.9.2': - optional: true - '@unrs/resolver-binding-darwin-x64@1.11.1': optional: true - '@unrs/resolver-binding-darwin-x64@1.9.2': - optional: true - '@unrs/resolver-binding-freebsd-x64@1.11.1': optional: true - '@unrs/resolver-binding-freebsd-x64@1.9.2': - optional: true - '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': optional: true - '@unrs/resolver-binding-linux-arm-gnueabihf@1.9.2': - optional: true - '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': optional: true - '@unrs/resolver-binding-linux-arm-musleabihf@1.9.2': - optional: true - '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': optional: true - '@unrs/resolver-binding-linux-arm64-gnu@1.9.2': - optional: true - '@unrs/resolver-binding-linux-arm64-musl@1.11.1': optional: true - '@unrs/resolver-binding-linux-arm64-musl@1.9.2': - optional: true - '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': optional: true - '@unrs/resolver-binding-linux-ppc64-gnu@1.9.2': - optional: true - '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': optional: true - '@unrs/resolver-binding-linux-riscv64-gnu@1.9.2': - optional: true - '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': optional: true - '@unrs/resolver-binding-linux-riscv64-musl@1.9.2': - optional: true - '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': optional: true - '@unrs/resolver-binding-linux-s390x-gnu@1.9.2': - optional: true - '@unrs/resolver-binding-linux-x64-gnu@1.11.1': optional: true - '@unrs/resolver-binding-linux-x64-gnu@1.9.2': - optional: true - '@unrs/resolver-binding-linux-x64-musl@1.11.1': optional: true - '@unrs/resolver-binding-linux-x64-musl@1.9.2': - optional: true - '@unrs/resolver-binding-wasm32-wasi@1.11.1': dependencies: '@napi-rs/wasm-runtime': 0.2.12 optional: true - '@unrs/resolver-binding-wasm32-wasi@1.9.2': - dependencies: - '@napi-rs/wasm-runtime': 0.2.11 - optional: true - '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': optional: true - '@unrs/resolver-binding-win32-arm64-msvc@1.9.2': - optional: true - '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': optional: true - '@unrs/resolver-binding-win32-ia32-msvc@1.9.2': - optional: true - '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@unrs/resolver-binding-win32-x64-msvc@1.9.2': - optional: true - - acorn-jsx@5.3.2(acorn@8.14.0): - dependencies: - acorn: 8.14.0 - acorn-walk@8.3.4: dependencies: acorn: 8.14.0 @@ -4288,13 +2673,6 @@ snapshots: agent-base@7.1.4: {} - ajv@6.12.6: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - ansi-colors@4.1.3: {} ansi-escapes@3.2.0: {} @@ -4336,69 +2714,7 @@ snapshots: argparse@2.0.1: {} - aria-query@5.3.2: {} - - array-buffer-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - is-array-buffer: 3.0.5 - - array-includes@3.1.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - is-string: 1.1.1 - math-intrinsics: 1.1.0 - - array.prototype.findlastindex@1.2.6: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-shim-unscopables: 1.1.0 - - array.prototype.flat@1.3.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-shim-unscopables: 1.1.0 - - array.prototype.flatmap@1.3.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-shim-unscopables: 1.1.0 - - arraybuffer.prototype.slice@1.0.4: - dependencies: - array-buffer-byte-length: 1.0.2 - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - is-array-buffer: 3.0.5 - - ast-types-flow@0.0.8: {} - - async-function@1.0.0: {} - - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.1.0 - - axe-core@4.10.2: {} - - axobject-query@4.1.0: {} + async@3.2.6: {} babel-jest@30.0.5(@babel/core@7.28.0): dependencies: @@ -4469,13 +2785,6 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.24.4: - dependencies: - caniuse-lite: 1.0.30001700 - electron-to-chromium: 1.5.103 - node-releases: 2.0.19 - update-browserslist-db: 1.1.2(browserslist@4.24.4) - browserslist@4.25.1: dependencies: caniuse-lite: 1.0.30001727 @@ -4493,31 +2802,12 @@ snapshots: buffer-from@1.1.2: {} - call-bind-apply-helpers@1.0.2: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - - call-bind@1.0.8: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - get-intrinsic: 1.3.0 - set-function-length: 1.2.2 - - call-bound@1.0.4: - dependencies: - call-bind-apply-helpers: 1.0.2 - get-intrinsic: 1.3.0 - callsites@3.1.0: {} camelcase@5.3.1: {} camelcase@6.3.0: {} - caniuse-lite@1.0.30001700: {} - caniuse-lite@1.0.30001727: {} chalk@2.4.2: @@ -4537,8 +2827,6 @@ snapshots: chardet@0.7.0: {} - ci-info@4.2.0: {} - ci-info@4.3.0: {} cjs-module-lexer@2.1.0: {} @@ -4587,34 +2875,6 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - damerau-levenshtein@1.0.8: {} - - data-view-buffer@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-offset@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - debug@3.2.7: - dependencies: - ms: 2.1.3 - - debug@4.4.0: - dependencies: - ms: 2.1.3 - debug@4.4.1(supports-color@10.0.0): dependencies: ms: 2.1.3 @@ -4623,43 +2883,17 @@ snapshots: dedent@1.6.0: {} - deep-is@0.1.4: {} - deepmerge@4.3.1: {} - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.1 - es-errors: 1.3.0 - gopd: 1.2.0 - - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - detect-newline@3.1.0: {} diff@4.0.2: {} - doctrine@2.1.0: - dependencies: - esutils: 2.0.3 - - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - - dunder-proto@1.0.1: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-errors: 1.3.0 - gopd: 1.2.0 - eastasianwidth@0.2.0: {} - electron-to-chromium@1.5.103: {} + ejs@3.1.10: + dependencies: + jake: 10.9.4 electron-to-chromium@1.5.190: {} @@ -4673,88 +2907,6 @@ snapshots: dependencies: is-arrayish: 0.2.1 - es-abstract@1.24.0: - dependencies: - array-buffer-byte-length: 1.0.2 - arraybuffer.prototype.slice: 1.0.4 - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - data-view-buffer: 1.0.2 - data-view-byte-length: 1.0.2 - data-view-byte-offset: 1.0.1 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-set-tostringtag: 2.1.0 - es-to-primitive: 1.3.0 - function.prototype.name: 1.1.8 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - get-symbol-description: 1.1.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - internal-slot: 1.1.0 - is-array-buffer: 3.0.5 - is-callable: 1.2.7 - is-data-view: 1.0.2 - is-negative-zero: 2.0.3 - is-regex: 1.2.1 - is-set: 2.0.3 - is-shared-array-buffer: 1.0.4 - is-string: 1.1.1 - is-typed-array: 1.1.15 - is-weakref: 1.1.1 - math-intrinsics: 1.1.0 - object-inspect: 1.13.4 - object-keys: 1.1.1 - object.assign: 4.1.7 - own-keys: 1.0.1 - regexp.prototype.flags: 1.5.4 - safe-array-concat: 1.1.3 - safe-push-apply: 1.0.0 - safe-regex-test: 1.1.0 - set-proto: 1.0.0 - stop-iteration-iterator: 1.1.0 - string.prototype.trim: 1.2.10 - string.prototype.trimend: 1.0.9 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.3 - typed-array-byte-length: 1.0.3 - typed-array-byte-offset: 1.0.4 - typed-array-length: 1.0.7 - unbox-primitive: 1.1.0 - which-typed-array: 1.1.19 - - es-define-property@1.0.1: {} - - es-errors@1.3.0: {} - - es-object-atoms@1.1.1: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.1.0: - dependencies: - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - es-shim-unscopables@1.1.0: - dependencies: - hasown: 2.0.2 - - es-to-primitive@1.3.0: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.1.0 - is-symbol: 1.1.1 - es6-promisify@6.1.1: {} esbuild@0.25.5: @@ -4791,258 +2943,8 @@ snapshots: escape-string-regexp@2.0.0: {} - escape-string-regexp@4.0.0: {} - - eslint-config-prettier@10.1.8(eslint@8.57.1): - dependencies: - eslint: 8.57.1 - - eslint-import-context@0.1.9(unrs-resolver@1.9.2): - dependencies: - get-tsconfig: 4.10.1 - stable-hash-x: 0.2.0 - optionalDependencies: - unrs-resolver: 1.9.2 - - eslint-import-resolver-node@0.3.9: - dependencies: - debug: 3.2.7 - is-core-module: 2.16.1 - resolve: 1.22.10 - transitivePeerDependencies: - - supports-color - - eslint-import-resolver-typescript@4.4.4(eslint-plugin-import@2.32.0)(eslint@8.57.1): - dependencies: - debug: 4.4.1(supports-color@10.0.0) - eslint: 8.57.1 - eslint-import-context: 0.1.9(unrs-resolver@1.9.2) - get-tsconfig: 4.10.1 - is-bun-module: 2.0.0 - stable-hash-x: 0.2.0 - tinyglobby: 0.2.14 - unrs-resolver: 1.9.2 - optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-typescript@4.4.4)(eslint@8.57.1) - transitivePeerDependencies: - - supports-color - - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@8.57.1): - dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 8.38.0(eslint@8.57.1)(typescript@5.7.3) - eslint: 8.57.1 - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import@2.32.0)(eslint@8.57.1) - transitivePeerDependencies: - - supports-color - - eslint-plugin-escompat@3.11.4(eslint@8.57.1): - dependencies: - browserslist: 4.24.4 - eslint: 8.57.1 - - eslint-plugin-eslint-comments@3.2.0(eslint@8.57.1): - dependencies: - escape-string-regexp: 1.0.5 - eslint: 8.57.1 - ignore: 5.3.2 - - eslint-plugin-filenames@1.3.2(eslint@8.57.1): - dependencies: - eslint: 8.57.1 - lodash.camelcase: 4.3.0 - lodash.kebabcase: 4.1.1 - lodash.snakecase: 4.1.1 - lodash.upperfirst: 4.3.1 - - eslint-plugin-github@5.1.8(eslint-import-resolver-typescript@4.4.4)(eslint@8.57.1)(typescript@5.7.3): - dependencies: - '@eslint/compat': 1.2.7(eslint@8.57.1) - '@eslint/eslintrc': 3.3.0 - '@eslint/js': 9.21.0 - '@github/browserslist-config': 1.0.0 - '@typescript-eslint/eslint-plugin': 8.24.1(@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3) - '@typescript-eslint/parser': 8.38.0(eslint@8.57.1)(typescript@5.7.3) - aria-query: 5.3.2 - eslint: 8.57.1 - eslint-config-prettier: 10.1.8(eslint@8.57.1) - eslint-plugin-escompat: 3.11.4(eslint@8.57.1) - eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.1) - eslint-plugin-filenames: 1.3.2(eslint@8.57.1) - eslint-plugin-i18n-text: 1.0.1(eslint@8.57.1) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-typescript@4.4.4)(eslint@8.57.1) - eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1) - eslint-plugin-no-only-tests: 3.3.0 - eslint-plugin-prettier: 5.5.3(eslint-config-prettier@10.1.8(eslint@8.57.1))(eslint@8.57.1)(prettier@3.6.2) - eslint-rule-documentation: 1.0.23 - globals: 15.15.0 - jsx-ast-utils: 3.3.5 - prettier: 3.6.2 - svg-element-attributes: 1.3.1 - typescript-eslint: 8.24.1(eslint@8.57.1)(typescript@5.7.3) - transitivePeerDependencies: - - '@types/eslint' - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - typescript - - eslint-plugin-i18n-text@1.0.1(eslint@8.57.1): - dependencies: - eslint: 8.57.1 - - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-typescript@4.4.4)(eslint@8.57.1): - dependencies: - '@rtsao/scc': 1.1.0 - array-includes: 3.1.9 - array.prototype.findlastindex: 1.2.6 - array.prototype.flat: 1.3.3 - array.prototype.flatmap: 1.3.3 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.57.1 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@8.57.1) - hasown: 2.0.2 - is-core-module: 2.16.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.1 - semver: 6.3.1 - string.prototype.trimend: 1.0.9 - tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 8.38.0(eslint@8.57.1)(typescript@5.7.3) - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - eslint-plugin-jest@29.0.1(@typescript-eslint/eslint-plugin@8.24.1(@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(jest@30.0.5(@types/node@24.1.0)(ts-node@10.9.2(@types/node@24.1.0)(typescript@5.7.3)))(typescript@5.7.3): - dependencies: - '@typescript-eslint/utils': 8.34.1(eslint@8.57.1)(typescript@5.7.3) - eslint: 8.57.1 - optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.24.1(@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3) - jest: 30.0.5(@types/node@24.1.0)(ts-node@10.9.2(@types/node@24.1.0)(typescript@5.7.3)) - transitivePeerDependencies: - - supports-color - - typescript - - eslint-plugin-jsx-a11y@6.10.2(eslint@8.57.1): - dependencies: - aria-query: 5.3.2 - array-includes: 3.1.9 - array.prototype.flatmap: 1.3.3 - ast-types-flow: 0.0.8 - axe-core: 4.10.2 - axobject-query: 4.1.0 - damerau-levenshtein: 1.0.8 - emoji-regex: 9.2.2 - eslint: 8.57.1 - hasown: 2.0.2 - jsx-ast-utils: 3.3.5 - language-tags: 1.0.9 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - safe-regex-test: 1.1.0 - string.prototype.includes: 2.0.1 - - eslint-plugin-no-only-tests@3.3.0: {} - - eslint-plugin-prettier@5.5.3(eslint-config-prettier@10.1.8(eslint@8.57.1))(eslint@8.57.1)(prettier@3.6.2): - dependencies: - eslint: 8.57.1 - prettier: 3.6.2 - prettier-linter-helpers: 1.0.0 - synckit: 0.11.11 - optionalDependencies: - eslint-config-prettier: 10.1.8(eslint@8.57.1) - - eslint-rule-documentation@1.0.23: {} - - eslint-scope@7.2.2: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-visitor-keys@3.4.3: {} - - eslint-visitor-keys@4.2.1: {} - - eslint@8.57.1: - dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) - '@eslint-community/regexpp': 4.12.1 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.1 - '@humanwhocodes/config-array': 0.13.0 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.3.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.0 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.6.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - - espree@10.3.0: - dependencies: - acorn: 8.14.0 - acorn-jsx: 5.3.2(acorn@8.14.0) - eslint-visitor-keys: 4.2.1 - - espree@9.6.1: - dependencies: - acorn: 8.14.0 - acorn-jsx: 5.3.2(acorn@8.14.0) - eslint-visitor-keys: 3.4.3 - esprima@4.0.1: {} - esquery@1.6.0: - dependencies: - estraverse: 5.3.0 - - esrecurse@4.3.0: - dependencies: - estraverse: 5.3.0 - - estraverse@5.3.0: {} - - esutils@2.0.3: {} - execa@5.1.1: dependencies: cross-spawn: 7.0.6 @@ -5057,15 +2959,6 @@ snapshots: exit-x@0.2.2: {} - expect@30.0.0: - dependencies: - '@jest/expect-utils': 30.0.0 - '@jest/get-type': 30.0.0 - jest-matcher-utils: 30.0.0 - jest-message-util: 30.0.0 - jest-mock: 30.0.0 - jest-util: 30.0.0 - expect@30.0.5: dependencies: '@jest/expect-utils': 30.0.5 @@ -5083,39 +2976,19 @@ snapshots: fast-deep-equal@3.1.3: {} - fast-diff@1.3.0: {} - - fast-glob@3.3.3: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 - fast-json-stable-stringify@2.1.0: {} - fast-levenshtein@2.0.6: {} - - fastq@1.19.0: - dependencies: - reusify: 1.0.4 - fb-watchman@2.0.2: dependencies: bser: 2.1.1 - fdir@6.4.6(picomatch@4.0.2): - optionalDependencies: - picomatch: 4.0.2 - figures@2.0.0: dependencies: escape-string-regexp: 1.0.5 - file-entry-cache@6.0.1: + filelist@1.0.4: dependencies: - flat-cache: 3.2.0 + minimatch: 5.1.6 fill-range@7.1.1: dependencies: @@ -5126,23 +2999,6 @@ snapshots: locate-path: 5.0.0 path-exists: 4.0.0 - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - flat-cache@3.2.0: - dependencies: - flatted: 3.3.3 - keyv: 4.5.4 - rimraf: 3.0.2 - - flatted@3.3.3: {} - - for-each@0.3.5: - dependencies: - is-callable: 1.2.7 - foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 @@ -5156,63 +3012,18 @@ snapshots: fsevents@2.3.3: optional: true - function-bind@1.1.2: {} - - function.prototype.name@1.1.8: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - functions-have-names: 1.2.3 - hasown: 2.0.2 - is-callable: 1.2.7 - - functions-have-names@1.2.3: {} - gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} - get-intrinsic@1.3.0: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - function-bind: 1.1.2 - get-proto: 1.0.1 - gopd: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - math-intrinsics: 1.1.0 - get-package-type@0.1.0: {} - get-proto@1.0.1: - dependencies: - dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 - get-stream@6.0.1: {} - get-symbol-description@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - get-tsconfig@4.10.1: dependencies: resolve-pkg-maps: 1.0.0 - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - glob@10.4.5: dependencies: foreground-child: 3.3.1 @@ -5231,58 +3042,12 @@ snapshots: once: 1.4.0 path-is-absolute: 1.0.1 - globals@13.24.0: - dependencies: - type-fest: 0.20.2 - - globals@14.0.0: {} - - globals@15.15.0: {} - - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.2.0 - - gopd@1.2.0: {} - graceful-fs@4.2.11: {} - graphemer@1.4.0: {} - - handlebars@4.7.8: - dependencies: - minimist: 1.2.8 - neo-async: 2.6.2 - source-map: 0.6.1 - wordwrap: 1.0.0 - optionalDependencies: - uglify-js: 3.19.3 - - has-bigints@1.1.0: {} - has-flag@3.0.0: {} has-flag@4.0.0: {} - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.1 - - has-proto@1.2.0: - dependencies: - dunder-proto: 1.0.1 - - has-symbols@1.1.0: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.1.0 - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - html-escaper@2.0.2: {} https-proxy-agent@7.0.6(supports-color@10.0.0): @@ -5298,13 +3063,6 @@ snapshots: dependencies: safer-buffer: 2.1.2 - ignore@5.3.2: {} - - import-fresh@3.3.1: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - import-local@3.2.0: dependencies: pkg-dir: 4.2.0 @@ -5337,137 +3095,18 @@ snapshots: strip-ansi: 5.2.0 through: 2.3.8 - internal-slot@1.1.0: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.1.0 - - is-array-buffer@3.0.5: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-arrayish@0.2.1: {} - is-async-function@2.1.1: - dependencies: - async-function: 1.0.0 - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-bigint@1.1.0: - dependencies: - has-bigints: 1.1.0 - - is-boolean-object@1.2.2: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-bun-module@2.0.0: - dependencies: - semver: 7.7.2 - - is-callable@1.2.7: {} - - is-core-module@2.16.1: - dependencies: - hasown: 2.0.2 - - is-data-view@1.0.2: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-typed-array: 1.1.15 - - is-date-object@1.1.0: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-extglob@2.1.1: {} - - is-finalizationregistry@1.1.1: - dependencies: - call-bound: 1.0.4 - is-fullwidth-code-point@2.0.0: {} is-fullwidth-code-point@3.0.0: {} is-generator-fn@2.1.0: {} - is-generator-function@1.1.0: - dependencies: - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-map@2.0.3: {} - - is-negative-zero@2.0.3: {} - - is-number-object@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - is-number@7.0.0: {} - is-path-inside@3.0.3: {} - - is-regex@1.2.1: - dependencies: - call-bound: 1.0.4 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - is-set@2.0.3: {} - - is-shared-array-buffer@1.0.4: - dependencies: - call-bound: 1.0.4 - is-stream@2.0.1: {} - is-string@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-symbol@1.1.1: - dependencies: - call-bound: 1.0.4 - has-symbols: 1.1.0 - safe-regex-test: 1.1.0 - - is-typed-array@1.1.15: - dependencies: - which-typed-array: 1.1.19 - - is-weakmap@2.0.2: {} - - is-weakref@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-weakset@2.0.4: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - isarray@2.0.5: {} - isexe@2.0.0: {} istanbul-lib-coverage@3.2.2: {} @@ -5507,6 +3146,12 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jake@10.9.4: + dependencies: + async: 3.2.6 + filelist: 1.0.4 + picocolors: 1.1.1 + jest-changed-files@30.0.5: dependencies: execa: 5.1.1 @@ -5591,13 +3236,6 @@ snapshots: - babel-plugin-macros - supports-color - jest-diff@30.0.0: - dependencies: - '@jest/diff-sequences': 30.0.0 - '@jest/get-type': 30.0.0 - chalk: 4.1.2 - pretty-format: 30.0.0 - jest-diff@30.0.5: dependencies: '@jest/diff-sequences': 30.0.1 @@ -5647,13 +3285,6 @@ snapshots: '@jest/get-type': 30.0.1 pretty-format: 30.0.5 - jest-matcher-utils@30.0.0: - dependencies: - '@jest/get-type': 30.0.0 - chalk: 4.1.2 - jest-diff: 30.0.0 - pretty-format: 30.0.0 - jest-matcher-utils@30.0.5: dependencies: '@jest/get-type': 30.0.1 @@ -5661,18 +3292,6 @@ snapshots: jest-diff: 30.0.5 pretty-format: 30.0.5 - jest-message-util@30.0.0: - dependencies: - '@babel/code-frame': 7.27.1 - '@jest/types': 30.0.0 - '@types/stack-utils': 2.0.3 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.8 - pretty-format: 30.0.0 - slash: 3.0.0 - stack-utils: 2.0.6 - jest-message-util@30.0.5: dependencies: '@babel/code-frame': 7.27.1 @@ -5685,12 +3304,6 @@ snapshots: slash: 3.0.0 stack-utils: 2.0.6 - jest-mock@30.0.0: - dependencies: - '@jest/types': 30.0.0 - '@types/node': 24.1.0 - jest-util: 30.0.0 - jest-mock@30.0.5: dependencies: '@jest/types': 30.0.5 @@ -5701,8 +3314,6 @@ snapshots: optionalDependencies: jest-resolve: 30.0.5 - jest-regex-util@30.0.0: {} - jest-regex-util@30.0.1: {} jest-resolve-dependencies@30.0.5: @@ -5803,15 +3414,6 @@ snapshots: transitivePeerDependencies: - supports-color - jest-util@30.0.0: - dependencies: - '@jest/types': 30.0.0 - '@types/node': 24.1.0 - chalk: 4.1.2 - ci-info: 4.2.0 - graceful-fs: 4.2.11 - picomatch: 4.0.2 - jest-util@30.0.5: dependencies: '@jest/types': 30.0.5 @@ -5877,68 +3479,22 @@ snapshots: jsesc@3.1.0: {} - json-buffer@3.0.1: {} - json-parse-even-better-errors@2.3.1: {} - json-schema-traverse@0.4.1: {} - json-schema-traverse@1.0.0: {} - json-stable-stringify-without-jsonify@1.0.1: {} - - json5@1.0.2: - dependencies: - minimist: 1.2.8 - json5@2.2.3: {} - jsx-ast-utils@3.3.5: - dependencies: - array-includes: 3.1.9 - array.prototype.flat: 1.3.3 - object.assign: 4.1.7 - object.values: 1.2.1 - - keyv@4.5.4: - dependencies: - json-buffer: 3.0.1 - - language-subtag-registry@0.3.23: {} - - language-tags@1.0.9: - dependencies: - language-subtag-registry: 0.3.23 - leven@3.1.0: {} - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - lines-and-columns@1.2.4: {} locate-path@5.0.0: dependencies: p-locate: 4.1.0 - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - - lodash.camelcase@4.3.0: {} - - lodash.kebabcase@4.1.1: {} - lodash.memoize@4.1.2: {} - lodash.merge@4.6.2: {} - - lodash.snakecase@4.1.1: {} - - lodash.upperfirst@4.3.1: {} - lodash@4.17.21: {} lru-cache@10.4.3: {} @@ -5957,12 +3513,8 @@ snapshots: dependencies: tmpl: 1.0.5 - math-intrinsics@1.1.0: {} - merge-stream@2.0.0: {} - merge2@1.4.1: {} - micromatch@4.0.8: dependencies: braces: 3.0.3 @@ -5996,14 +3548,10 @@ snapshots: mute-stream@0.0.7: {} - napi-postinstall@0.2.4: {} - napi-postinstall@0.3.2: {} natural-compare@1.4.0: {} - neo-async@2.6.2: {} - node-int64@0.4.0: {} node-releases@2.0.19: {} @@ -6014,39 +3562,6 @@ snapshots: dependencies: path-key: 3.1.1 - object-inspect@1.13.4: {} - - object-keys@1.1.1: {} - - object.assign@4.1.7: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - has-symbols: 1.1.0 - object-keys: 1.1.1 - - object.fromentries@2.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-object-atoms: 1.1.1 - - object.groupby@1.0.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - - object.values@1.2.1: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - once@1.4.0: dependencies: wrappy: 1.0.2 @@ -6075,15 +3590,6 @@ snapshots: typescript: 5.7.3 yargs-parser: 21.1.1 - optionator@0.9.4: - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.5 - os-tmpdir@1.0.2: {} otplib@12.0.1: @@ -6092,12 +3598,6 @@ snapshots: '@otplib/preset-default': 12.0.1 '@otplib/preset-v11': 12.0.1 - own-keys@1.0.1: - dependencies: - get-intrinsic: 1.3.0 - object-keys: 1.1.1 - safe-push-apply: 1.0.0 - p-limit@2.3.0: dependencies: p-try: 2.2.0 @@ -6110,18 +3610,10 @@ snapshots: dependencies: p-limit: 2.3.0 - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 - p-try@2.2.0: {} package-json-from-dist@1.0.1: {} - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - parse-json@5.2.0: dependencies: '@babel/code-frame': 7.27.1 @@ -6141,8 +3633,6 @@ snapshots: path-key@3.1.1: {} - path-parse@1.0.7: {} - path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 @@ -6152,8 +3642,6 @@ snapshots: picomatch@2.3.1: {} - picomatch@4.0.2: {} - picomatch@4.0.3: {} pirates@4.0.7: {} @@ -6172,56 +3660,16 @@ snapshots: pluralize@8.0.0: {} - possible-typed-array-names@1.1.0: {} - - prelude-ls@1.2.1: {} - - prettier-linter-helpers@1.0.0: - dependencies: - fast-diff: 1.3.0 - - prettier@3.6.2: {} - - pretty-format@30.0.0: - dependencies: - '@jest/schemas': 30.0.0 - ansi-styles: 5.2.0 - react-is: 18.3.1 - pretty-format@30.0.5: dependencies: '@jest/schemas': 30.0.5 ansi-styles: 5.2.0 react-is: 18.3.1 - punycode@2.3.1: {} - pure-rand@7.0.1: {} - queue-microtask@1.2.3: {} - react-is@18.3.1: {} - reflect.getprototypeof@1.0.10: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - which-builtin-type: 1.2.1 - - regexp.prototype.flags@1.5.4: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-errors: 1.3.0 - get-proto: 1.0.1 - gopd: 1.2.0 - set-function-name: 2.0.2 - require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -6230,86 +3678,27 @@ snapshots: dependencies: resolve-from: 5.0.0 - resolve-from@4.0.0: {} - resolve-from@5.0.0: {} resolve-pkg-maps@1.0.0: {} - resolve@1.22.10: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - restore-cursor@2.0.0: dependencies: onetime: 2.0.1 signal-exit: 3.0.7 - reusify@1.0.4: {} - - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - run-async@2.4.1: {} - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - rxjs@6.6.7: dependencies: tslib: 1.14.1 - safe-array-concat@1.1.3: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - has-symbols: 1.1.0 - isarray: 2.0.5 - - safe-push-apply@1.0.0: - dependencies: - es-errors: 1.3.0 - isarray: 2.0.5 - - safe-regex-test@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-regex: 1.2.1 - safer-buffer@2.1.2: {} semver@6.3.1: {} semver@7.7.2: {} - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - - set-function-name@2.0.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - - set-proto@1.0.0: - dependencies: - dunder-proto: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -6318,34 +3707,6 @@ snapshots: shell-quote@1.8.3: {} - side-channel-list@1.0.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - - side-channel-map@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - - side-channel-weakmap@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - side-channel-map: 1.0.1 - - side-channel@1.1.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - side-channel-list: 1.0.0 - side-channel-map: 1.0.1 - side-channel-weakmap: 1.0.2 - signal-exit@3.0.7: {} signal-exit@4.1.0: {} @@ -6361,17 +3722,10 @@ snapshots: sprintf-js@1.0.3: {} - stable-hash-x@0.2.0: {} - stack-utils@2.0.6: dependencies: escape-string-regexp: 2.0.0 - stop-iteration-iterator@1.1.0: - dependencies: - es-errors: 1.3.0 - internal-slot: 1.1.0 - string-length@4.0.2: dependencies: char-regex: 1.0.2 @@ -6394,35 +3748,6 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 - string.prototype.includes@2.0.1: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - - string.prototype.trim@1.2.10: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-data-property: 1.1.4 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-object-atoms: 1.1.1 - has-property-descriptors: 1.0.2 - - string.prototype.trimend@1.0.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - strip-ansi@4.0.0: dependencies: ansi-regex: 3.0.1 @@ -6439,8 +3764,6 @@ snapshots: dependencies: ansi-regex: 6.1.0 - strip-bom@3.0.0: {} - strip-bom@4.0.0: {} strip-final-newline@2.0.0: {} @@ -6461,10 +3784,6 @@ snapshots: dependencies: has-flag: 4.0.0 - supports-preserve-symlinks-flag@1.0.0: {} - - svg-element-attributes@1.3.1: {} - synckit@0.11.11: dependencies: '@pkgr/core': 0.2.9 @@ -6486,17 +3805,10 @@ snapshots: glob: 7.2.3 minimatch: 3.1.2 - text-table@0.2.0: {} - thirty-two@1.0.2: {} through@2.3.8: {} - tinyglobby@0.2.14: - dependencies: - fdir: 6.4.6(picomatch@4.0.2) - picomatch: 4.0.2 - tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 @@ -6507,19 +3819,11 @@ snapshots: dependencies: is-number: 7.0.0 - ts-api-utils@2.0.1(typescript@5.7.3): - dependencies: - typescript: 5.7.3 - - ts-api-utils@2.1.0(typescript@5.7.3): - dependencies: - typescript: 5.7.3 - - ts-jest@29.4.1(@babel/core@7.28.0)(@jest/transform@30.0.5)(@jest/types@30.0.5)(babel-jest@30.0.5(@babel/core@7.28.0))(jest-util@30.0.5)(jest@30.0.5(@types/node@24.1.0)(ts-node@10.9.2(@types/node@24.1.0)(typescript@5.7.3)))(typescript@5.7.3): + ts-jest@29.4.0(@babel/core@7.28.0)(@jest/transform@30.0.5)(@jest/types@30.0.5)(babel-jest@30.0.5(@babel/core@7.28.0))(jest-util@30.0.5)(jest@30.0.5(@types/node@24.1.0)(ts-node@10.9.2(@types/node@24.1.0)(typescript@5.7.3)))(typescript@5.7.3): dependencies: bs-logger: 0.2.6 + ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - handlebars: 4.7.8 jest: 30.0.5(@types/node@24.1.0)(ts-node@10.9.2(@types/node@24.1.0)(typescript@5.7.3)) json5: 2.2.3 lodash.memoize: 4.1.2 @@ -6553,13 +3857,6 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - tsconfig-paths@3.15.0: - dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 - tslib@1.14.1: {} tslib@2.8.1: @@ -6572,73 +3869,14 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - type-detect@4.0.8: {} - type-fest@0.20.2: {} - type-fest@0.21.3: {} type-fest@4.41.0: {} - typed-array-buffer@1.0.3: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-typed-array: 1.1.15 - - typed-array-byte-length@1.0.3: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - - typed-array-byte-offset@1.0.4: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - reflect.getprototypeof: 1.0.10 - - typed-array-length@1.0.7: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - is-typed-array: 1.1.15 - possible-typed-array-names: 1.1.0 - reflect.getprototypeof: 1.0.10 - - typescript-eslint@8.24.1(eslint@8.57.1)(typescript@5.7.3): - dependencies: - '@typescript-eslint/eslint-plugin': 8.24.1(@typescript-eslint/parser@8.24.1(eslint@8.57.1)(typescript@5.7.3))(eslint@8.57.1)(typescript@5.7.3) - '@typescript-eslint/parser': 8.24.1(eslint@8.57.1)(typescript@5.7.3) - '@typescript-eslint/utils': 8.24.1(eslint@8.57.1)(typescript@5.7.3) - eslint: 8.57.1 - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color - typescript@5.7.3: {} - uglify-js@3.19.3: - optional: true - - unbox-primitive@1.1.0: - dependencies: - call-bound: 1.0.4 - has-bigints: 1.1.0 - has-symbols: 1.1.0 - which-boxed-primitive: 1.1.1 - undici-types@7.8.0: {} unrs-resolver@1.11.1: @@ -6665,38 +3903,8 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 - unrs-resolver@1.9.2: - dependencies: - napi-postinstall: 0.2.4 - optionalDependencies: - '@unrs/resolver-binding-android-arm-eabi': 1.9.2 - '@unrs/resolver-binding-android-arm64': 1.9.2 - '@unrs/resolver-binding-darwin-arm64': 1.9.2 - '@unrs/resolver-binding-darwin-x64': 1.9.2 - '@unrs/resolver-binding-freebsd-x64': 1.9.2 - '@unrs/resolver-binding-linux-arm-gnueabihf': 1.9.2 - '@unrs/resolver-binding-linux-arm-musleabihf': 1.9.2 - '@unrs/resolver-binding-linux-arm64-gnu': 1.9.2 - '@unrs/resolver-binding-linux-arm64-musl': 1.9.2 - '@unrs/resolver-binding-linux-ppc64-gnu': 1.9.2 - '@unrs/resolver-binding-linux-riscv64-gnu': 1.9.2 - '@unrs/resolver-binding-linux-riscv64-musl': 1.9.2 - '@unrs/resolver-binding-linux-s390x-gnu': 1.9.2 - '@unrs/resolver-binding-linux-x64-gnu': 1.9.2 - '@unrs/resolver-binding-linux-x64-musl': 1.9.2 - '@unrs/resolver-binding-wasm32-wasi': 1.9.2 - '@unrs/resolver-binding-win32-arm64-msvc': 1.9.2 - '@unrs/resolver-binding-win32-ia32-msvc': 1.9.2 - '@unrs/resolver-binding-win32-x64-msvc': 1.9.2 - untildify@3.0.3: {} - update-browserslist-db@1.1.2(browserslist@4.24.4): - dependencies: - browserslist: 4.24.4 - escalade: 3.2.0 - picocolors: 1.1.1 - update-browserslist-db@1.1.3(browserslist@4.25.1): dependencies: browserslist: 4.25.1 @@ -6705,10 +3913,6 @@ snapshots: uri-js-replace@1.0.1: {} - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - v8-compile-cache-lib@3.0.1: {} v8-to-istanbul@9.3.0: @@ -6721,55 +3925,10 @@ snapshots: dependencies: makeerror: 1.0.12 - which-boxed-primitive@1.1.1: - dependencies: - is-bigint: 1.1.0 - is-boolean-object: 1.2.2 - is-number-object: 1.1.1 - is-string: 1.1.1 - is-symbol: 1.1.1 - - which-builtin-type@1.2.1: - dependencies: - call-bound: 1.0.4 - function.prototype.name: 1.1.8 - has-tostringtag: 1.0.2 - is-async-function: 2.1.1 - is-date-object: 1.1.0 - is-finalizationregistry: 1.1.1 - is-generator-function: 1.1.0 - is-regex: 1.2.1 - is-weakref: 1.1.1 - isarray: 2.0.5 - which-boxed-primitive: 1.1.1 - which-collection: 1.0.2 - which-typed-array: 1.1.19 - - which-collection@1.0.2: - dependencies: - is-map: 2.0.3 - is-set: 2.0.3 - is-weakmap: 2.0.2 - is-weakset: 2.0.4 - - which-typed-array@1.1.19: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - for-each: 0.3.5 - get-proto: 1.0.1 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - which@2.0.2: dependencies: isexe: 2.0.0 - word-wrap@1.2.5: {} - - wordwrap@1.0.0: {} - wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 From d60442c5a16e31f5f044250fcde3dbaa682548cd Mon Sep 17 00:00:00 2001 From: Stefan Rinke Date: Mon, 4 Aug 2025 19:28:04 +0200 Subject: [PATCH 19/21] re added tabtab --- package.json | 9 ++++++++- pnpm-lock.yaml | 10 ++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index efd2feb..b0c1103 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,13 @@ "description": "a command line client for octomind apis", "main": "./dist/index.js", "packageManager": "pnpm@10.13.1", - "files": ["dist", "src", "README.md", "LICENSE", "package.json"], + "files": [ + "dist", + "src", + "README.md", + "LICENSE", + "package.json" + ], "engines": { "node": ">=20.0.0" }, @@ -37,6 +43,7 @@ "@biomejs/biome": "2.1.3", "@types/jest": "30.0.0", "@types/node": "24.1.0", + "@types/tabtab": "3.0.4", "jest": "30.0.5", "openapi-typescript": "7.8.0", "ts-jest": "29.4.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3ec6451..3bf74a0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -39,6 +39,9 @@ importers: '@types/node': specifier: 24.1.0 version: 24.1.0 + '@types/tabtab': + specifier: 3.0.4 + version: 3.0.4 jest: specifier: 30.0.5 version: 30.0.5(@types/node@24.1.0)(ts-node@10.9.2(@types/node@24.1.0)(typescript@5.7.3)) @@ -653,6 +656,9 @@ packages: '@types/stack-utils@2.0.3': resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + '@types/tabtab@3.0.4': + resolution: {integrity: sha512-gmh8JsmIYPGRqk8Xb4dmulV37TpLwg0Quo3GJ0LgEcl4v0O92F14PGebBd7LHv9GBEw2KbmBSrvU0/NzIy5AoA==} + '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} @@ -2598,6 +2604,10 @@ snapshots: '@types/stack-utils@2.0.3': {} + '@types/tabtab@3.0.4': + dependencies: + '@types/node': 24.1.0 + '@types/yargs-parser@21.0.3': {} '@types/yargs@17.0.33': From 1dc897f76d96d4230bfd928f3800783919e57905 Mon Sep 17 00:00:00 2001 From: Stefan Rinke Date: Mon, 4 Aug 2025 19:30:09 +0200 Subject: [PATCH 20/21] another package --- package.json | 3 ++- pnpm-lock.yaml | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index b0c1103..fae7b51 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ }, "scripts": { "gendoc": "tsx scripts/generate-docs.ts > README.md", - "lint": "pnpm apigen &&npx genversion -des src/version.ts && biome check", + "lint": "pnpm apigen && npx genversion -des src/version.ts && biome check", "tsc": "tsc --project tsconfig.build.json", "apigen": "openapi-typescript https://app.octomind.dev/openapi.yaml --output src/api.ts", "build": "pnpm apigen && npx genversion -des src/version.ts && pnpm gendoc && tsc --project tsconfig.build.json", @@ -44,6 +44,7 @@ "@types/jest": "30.0.0", "@types/node": "24.1.0", "@types/tabtab": "3.0.4", + "genversion": "3.2.0", "jest": "30.0.5", "openapi-typescript": "7.8.0", "ts-jest": "29.4.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3bf74a0..e7bbad3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -42,6 +42,9 @@ importers: '@types/tabtab': specifier: 3.0.4 version: 3.0.4 + genversion: + specifier: 3.2.0 + version: 3.2.0 jest: specifier: 30.0.5 version: 30.0.5(@types/node@24.1.0)(ts-node@10.9.2(@types/node@24.1.0)(typescript@5.7.3)) @@ -967,6 +970,10 @@ packages: resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==} engines: {node: '>=20'} + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -1094,6 +1101,9 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + find-package@1.0.0: + resolution: {integrity: sha512-yVn71XCCaNgxz58ERTl8nA/8YYtIQDY9mHSrgFBfiFtdNNfY0h183Vh8BRkKxD8x9TUw3ec290uJKhDVxqGZBw==} + find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -1119,6 +1129,11 @@ packages: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} + genversion@3.2.0: + resolution: {integrity: sha512-OIYSX6XYA8PHecLDCTri30hadSZfAjZ8Iq1+BBDXqLWP4dRLuJNLoNjsSWtTpw97IccK2LDWzkEstxAB8GdN7g==} + engines: {node: '>=10.0.0'} + hasBin: true + get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -1552,6 +1567,9 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + parents@1.0.1: + resolution: {integrity: sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg==} + parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -1572,6 +1590,10 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + path-platform@0.11.15: + resolution: {integrity: sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg==} + engines: {node: '>= 0.8.0'} + path-scurry@1.11.1: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} @@ -2873,6 +2895,8 @@ snapshots: commander@14.0.0: {} + commander@7.2.0: {} + concat-map@0.0.1: {} convert-source-map@2.0.0: {} @@ -3004,6 +3028,10 @@ snapshots: dependencies: to-regex-range: 5.0.1 + find-package@1.0.0: + dependencies: + parents: 1.0.1 + find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -3024,6 +3052,12 @@ snapshots: gensync@1.0.0-beta.2: {} + genversion@3.2.0: + dependencies: + commander: 7.2.0 + ejs: 3.1.10 + find-package: 1.0.0 + get-caller-file@2.0.5: {} get-package-type@0.1.0: {} @@ -3624,6 +3658,10 @@ snapshots: package-json-from-dist@1.0.1: {} + parents@1.0.1: + dependencies: + path-platform: 0.11.15 + parse-json@5.2.0: dependencies: '@babel/code-frame': 7.27.1 @@ -3643,6 +3681,8 @@ snapshots: path-key@3.1.1: {} + path-platform@0.11.15: {} + path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 From a6c322d9b1d14b4812d3051ff662d27a7858e2ee Mon Sep 17 00:00:00 2001 From: Stefan Rinke Date: Mon, 4 Aug 2025 19:31:41 +0200 Subject: [PATCH 21/21] lint --- package.json | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index fae7b51..efd4df1 100644 --- a/package.json +++ b/package.json @@ -4,13 +4,7 @@ "description": "a command line client for octomind apis", "main": "./dist/index.js", "packageManager": "pnpm@10.13.1", - "files": [ - "dist", - "src", - "README.md", - "LICENSE", - "package.json" - ], + "files": ["dist", "src", "README.md", "LICENSE", "package.json"], "engines": { "node": ">=20.0.0" }, @@ -52,4 +46,4 @@ "tsx": "4.20.3", "typescript": "5.7.3" } -} \ No newline at end of file +}