diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml new file mode 100644 index 0000000000..c57ef065eb --- /dev/null +++ b/.github/workflows/integration-tests.yml @@ -0,0 +1,77 @@ +name: Integration Tests + +on: + workflow_run: + workflows: [Create agent-standalone bundles] + types: + - completed + branches: [main, feature/*, release/agentic/*] + +jobs: + agent-server-tests: + name: Agent Server Tests (${{ matrix.target }}) + if: ${{ github.event.workflow_run.conclusion == 'success' }} + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-24.04-arm + target: linux-arm64 + - os: ubuntu-latest + target: linux-x64 + - os: macos-latest + target: mac-arm64 + - os: macos-13 + target: mac-x64 + - os: windows-latest + target: win-x64 + runs-on: ${{ matrix.os }} + permissions: + id-token: write + contents: read + steps: + - name: Sync Code + uses: actions/checkout@v4 + with: + ref: ${{ github.event.workflow_run.head_sha }} + - name: Set up Node + uses: actions/setup-node@v4 + with: + node-version: 18 + - name: Download build artifacts + uses: actions/download-artifact@v4 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + run-id: ${{ github.event.workflow_run.id }} + name: ${{ matrix.target }} + path: ./downloaded-artifacts + - name: Extract server files + run: | + cd ./downloaded-artifacts/ + unzip servers.zip + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + role-to-assume: arn:aws:iam::964765661569:role/GitHubActionsTokenRefresherRole + role-session-name: language-servers-github + aws-region: us-east-1 + - name: Build + run: | + npm ci + npm run compile + - name: Refresh Token + run: aws lambda invoke --function-name TokenRefresherLambda --region us-east-1 --payload '{}' response.json + - name: Get SSO Token + uses: aws-actions/aws-secretsmanager-get-secrets@v2 + with: + secret-ids: | + ,SsoTokenSecret + parse-json-secrets: true + - name: Run Integration Tests + run: | + npm test-integ -w integration-tests/q-agentic-chat-server + env: + TEST_SSO_TOKEN: ${{ env.SSOTOKEN }} + TEST_SSO_START_URL: ${{ secrets.TEST_SSO_START_URL }} + TEST_PROFILE_ARN: ${{ secrets.TEST_PROFILE_ARN }} + TEST_RUNTIME_FILE: ${{ github.workspace }}/downloaded-artifacts/aws-lsp-codewhisperer.js diff --git a/.github/workflows/lsp-ci.yaml b/.github/workflows/lsp-ci.yaml index f717b46ee1..bda44ec74a 100644 --- a/.github/workflows/lsp-ci.yaml +++ b/.github/workflows/lsp-ci.yaml @@ -20,9 +20,15 @@ jobs: run: | npm ci npm run check:formatting - - name: Test + - name: Test with Coverage run: | - npm run test + npm run test:coverage + - name: Upload Coverage to Codecov + uses: codecov/codecov-action@v5 + with: + flags: unittests + fail_ci_if_error: false + token: ${{ secrets.CODECOV_TOKEN }} build: name: Package runs-on: ubuntu-latest diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 2fd2146814..fc20ebb843 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,9 +1,9 @@ { - "chat-client": "0.1.22", - "core/aws-lsp-core": "0.0.11", - "server/aws-lsp-antlr4": "0.1.15", - "server/aws-lsp-codewhisperer": "0.0.62", - "server/aws-lsp-json": "0.1.15", - "server/aws-lsp-partiql": "0.0.14", - "server/aws-lsp-yaml": "0.1.15" + "chat-client": "0.1.25", + "core/aws-lsp-core": "0.0.12", + "server/aws-lsp-antlr4": "0.1.16", + "server/aws-lsp-codewhisperer": "0.0.66", + "server/aws-lsp-json": "0.1.16", + "server/aws-lsp-partiql": "0.0.15", + "server/aws-lsp-yaml": "0.1.16" } diff --git a/README.md b/README.md index e559c296a0..fad70742fe 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Language Servers for AWS +[![codecov](https://codecov.io/github/aws/language-servers/graph/badge.svg?token=ZSHpIVkG8S)](https://codecov.io/github/aws/language-servers) + Language servers for integration with IDEs and Editors, which implement the protocol (LSP extensions) defined in the [language-server-runtimes](https://github.com/aws/language-server-runtimes/tree/main/runtimes) repo. ## Where things go diff --git a/app/aws-lsp-antlr4-runtimes/package.json b/app/aws-lsp-antlr4-runtimes/package.json index 5da6791993..9140397279 100644 --- a/app/aws-lsp-antlr4-runtimes/package.json +++ b/app/aws-lsp-antlr4-runtimes/package.json @@ -12,7 +12,7 @@ "webpack": "webpack" }, "dependencies": { - "@aws/language-server-runtimes": "^0.2.102", + "@aws/language-server-runtimes": "^0.2.112", "@aws/lsp-antlr4": "*", "antlr4-c3": "^3.4.1", "antlr4ng": "^3.0.4" diff --git a/app/aws-lsp-buildspec-runtimes/package.json b/app/aws-lsp-buildspec-runtimes/package.json index aeaa60226f..50f049d945 100644 --- a/app/aws-lsp-buildspec-runtimes/package.json +++ b/app/aws-lsp-buildspec-runtimes/package.json @@ -7,6 +7,7 @@ "compile": "tsc --build" }, "dependencies": { + "@aws/language-server-runtimes": "^0.2.112", "@aws/lsp-buildspec": "^0.0.1" } } diff --git a/app/aws-lsp-cloudformation-runtimes/package.json b/app/aws-lsp-cloudformation-runtimes/package.json index 817591a6b6..ab11794d3b 100644 --- a/app/aws-lsp-cloudformation-runtimes/package.json +++ b/app/aws-lsp-cloudformation-runtimes/package.json @@ -7,6 +7,7 @@ "compile": "tsc --build" }, "dependencies": { + "@aws/language-server-runtimes": "^0.2.112", "@aws/lsp-cloudformation": "^0.0.1" } } diff --git a/app/aws-lsp-codewhisperer-runtimes/package.json b/app/aws-lsp-codewhisperer-runtimes/package.json index d67bb57bf8..85d68fb736 100644 --- a/app/aws-lsp-codewhisperer-runtimes/package.json +++ b/app/aws-lsp-codewhisperer-runtimes/package.json @@ -15,7 +15,7 @@ "local-build": "node scripts/local-build.js" }, "dependencies": { - "@aws/language-server-runtimes": "^0.2.102", + "@aws/language-server-runtimes": "^0.2.112", "@aws/lsp-codewhisperer": "*", "copyfiles": "^2.4.1", "cross-env": "^7.0.3", diff --git a/app/aws-lsp-codewhisperer-runtimes/src/agent-standalone.ts b/app/aws-lsp-codewhisperer-runtimes/src/agent-standalone.ts index 6921ccde68..8c972438f8 100644 --- a/app/aws-lsp-codewhisperer-runtimes/src/agent-standalone.ts +++ b/app/aws-lsp-codewhisperer-runtimes/src/agent-standalone.ts @@ -14,6 +14,7 @@ import { IdentityServer } from '@aws/lsp-identity' import { BashToolsServer, FsToolsServer, + QCodeAnalysisServer, McpToolsServer, } from '@aws/lsp-codewhisperer/out/language-server/agenticChat/tools/toolServer' import { RuntimeProps } from '@aws/language-server-runtimes/runtimes/runtime' @@ -33,6 +34,7 @@ const props = { QAgenticChatServerProxy, IdentityServer.create, FsToolsServer, + QCodeAnalysisServer, BashToolsServer, QLocalProjectContextServerProxy, WorkspaceContextServerTokenProxy, diff --git a/app/aws-lsp-identity-runtimes/package.json b/app/aws-lsp-identity-runtimes/package.json index 1d67c0b9ee..44737e1759 100644 --- a/app/aws-lsp-identity-runtimes/package.json +++ b/app/aws-lsp-identity-runtimes/package.json @@ -7,7 +7,7 @@ "compile": "tsc --build" }, "dependencies": { - "@aws/language-server-runtimes": "^0.2.102", + "@aws/language-server-runtimes": "^0.2.112", "@aws/lsp-identity": "^0.0.1" } } diff --git a/app/aws-lsp-json-runtimes/package.json b/app/aws-lsp-json-runtimes/package.json index a7dc1aae69..9e8068dbb3 100644 --- a/app/aws-lsp-json-runtimes/package.json +++ b/app/aws-lsp-json-runtimes/package.json @@ -11,7 +11,7 @@ "webpack": "webpack" }, "dependencies": { - "@aws/language-server-runtimes": "^0.2.102", + "@aws/language-server-runtimes": "^0.2.112", "@aws/lsp-json": "*" }, "devDependencies": { diff --git a/app/aws-lsp-notification-runtimes/package.json b/app/aws-lsp-notification-runtimes/package.json index 7e2cbd6289..c2239ac481 100644 --- a/app/aws-lsp-notification-runtimes/package.json +++ b/app/aws-lsp-notification-runtimes/package.json @@ -7,7 +7,7 @@ "compile": "tsc --build" }, "dependencies": { - "@aws/language-server-runtimes": "^0.2.102", + "@aws/language-server-runtimes": "^0.2.112", "@aws/lsp-notification": "^0.0.1" } } diff --git a/app/aws-lsp-partiql-runtimes/package.json b/app/aws-lsp-partiql-runtimes/package.json index 3391f57bac..0b8d41bd79 100644 --- a/app/aws-lsp-partiql-runtimes/package.json +++ b/app/aws-lsp-partiql-runtimes/package.json @@ -11,7 +11,7 @@ "package": "npm run compile && npm run compile:webpack" }, "dependencies": { - "@aws/language-server-runtimes": "^0.2.89", + "@aws/language-server-runtimes": "^0.2.109", "@aws/lsp-partiql": "^0.0.5" }, "devDependencies": { diff --git a/app/aws-lsp-s3-runtimes/package.json b/app/aws-lsp-s3-runtimes/package.json index 94e6880b7a..d1e0062658 100644 --- a/app/aws-lsp-s3-runtimes/package.json +++ b/app/aws-lsp-s3-runtimes/package.json @@ -10,6 +10,7 @@ "compile": "tsc --build" }, "dependencies": { + "@aws/language-server-runtimes": "^0.2.112", "@aws/lsp-s3": "^0.0.1" } } diff --git a/app/aws-lsp-yaml-json-webworker/package.json b/app/aws-lsp-yaml-json-webworker/package.json index 91fb0e1fc5..fc288cd7c2 100644 --- a/app/aws-lsp-yaml-json-webworker/package.json +++ b/app/aws-lsp-yaml-json-webworker/package.json @@ -11,7 +11,7 @@ "serve:webpack": "NODE_ENV=development webpack serve" }, "dependencies": { - "@aws/language-server-runtimes": "^0.2.102", + "@aws/language-server-runtimes": "^0.2.112", "@aws/lsp-json": "*", "@aws/lsp-yaml": "*" }, diff --git a/app/aws-lsp-yaml-runtimes/package.json b/app/aws-lsp-yaml-runtimes/package.json index 4ff38f6f99..5dc2b4b4ad 100644 --- a/app/aws-lsp-yaml-runtimes/package.json +++ b/app/aws-lsp-yaml-runtimes/package.json @@ -11,7 +11,7 @@ "webpack": "webpack" }, "dependencies": { - "@aws/language-server-runtimes": "^0.2.102", + "@aws/language-server-runtimes": "^0.2.112", "@aws/lsp-yaml": "*" }, "devDependencies": { diff --git a/app/hello-world-lsp-runtimes/package.json b/app/hello-world-lsp-runtimes/package.json index f487c8d295..2ed83d1499 100644 --- a/app/hello-world-lsp-runtimes/package.json +++ b/app/hello-world-lsp-runtimes/package.json @@ -15,7 +15,7 @@ }, "dependencies": { "@aws/hello-world-lsp": "^0.0.1", - "@aws/language-server-runtimes": "^0.2.102" + "@aws/language-server-runtimes": "^0.2.112" }, "devDependencies": { "@types/chai": "^4.3.5", diff --git a/chat-client/.c8rc.json b/chat-client/.c8rc.json new file mode 100644 index 0000000000..d70dc0699d --- /dev/null +++ b/chat-client/.c8rc.json @@ -0,0 +1,12 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text", "html", "lcov"], + "reports-dir": "coverage", + "include": ["src/**/*.ts"], + "exclude": ["src/**/*.test.ts", "src/**/*.spec.ts", "src/**/test/**", "src/**/*.d.ts"], + "branches": 80, + "lines": 80, + "functions": 80, + "statements": 80 +} diff --git a/chat-client/CHANGELOG.md b/chat-client/CHANGELOG.md index e15b0a24c4..c5d6f08deb 100644 --- a/chat-client/CHANGELOG.md +++ b/chat-client/CHANGELOG.md @@ -1,5 +1,51 @@ # Changelog +## [0.1.25](https://github.com/aws/language-servers/compare/chat-client/v0.1.24...chat-client/v0.1.25) (2025-07-17) + + +### Features + +* add conversation compaction ([#1895](https://github.com/aws/language-servers/issues/1895)) ([8bb7144](https://github.com/aws/language-servers/commit/8bb7144e45cfce6cc9337fd49de7edbee61105b8)) + + +### Bug Fixes + +* **amazonq:** change to use promptStickyCard to show image verification notification ([#1904](https://github.com/aws/language-servers/issues/1904)) ([caaefef](https://github.com/aws/language-servers/commit/caaefef2c9b2af66840ec2f7ccabe9bf937c2983)) +* remove disclaimer message ([#1884](https://github.com/aws/language-servers/issues/1884)) ([0845eed](https://github.com/aws/language-servers/commit/0845eeda8d73ed1df3b8801e79dad1ddd7016781)) +* replace thinking with working and replace stop with cancel ([#1922](https://github.com/aws/language-servers/issues/1922)) ([371e731](https://github.com/aws/language-servers/commit/371e731545f7572d3356d061cd8b94db35e4c333)) +* use document change events for auto trigger classifier input ([#1912](https://github.com/aws/language-servers/issues/1912)) ([2204da6](https://github.com/aws/language-servers/commit/2204da6193f2030ee546f61c969b1a664d8025e3)) + +## [0.1.24](https://github.com/aws/language-servers/compare/chat-client/v0.1.23...chat-client/v0.1.24) (2025-07-15) + + +### Features + +* **chat-client:** add built-in tool permission and enable auto-approve ([#1890](https://github.com/aws/language-servers/issues/1890)) ([03b59c8](https://github.com/aws/language-servers/commit/03b59c8fba58db0f6b6c387cf5d53227c3f54673)) +* **chat-client:** handle keyboard shortcut for run/reject/stop shell commands and tooltips ([#1885](https://github.com/aws/language-servers/issues/1885)) ([f8e9461](https://github.com/aws/language-servers/commit/f8e94615b5ce8a3f4bf8837627fa4816a09cbef2)) + + +### Bug Fixes + +* **chat-client:** revert for add built-in tool permission and enable auto-approve ([#1890](https://github.com/aws/language-servers/issues/1890)) ([#1900](https://github.com/aws/language-servers/issues/1900)) ([34b41b8](https://github.com/aws/language-servers/commit/34b41b8f87c21d2ee6b98643339dbdfa71efcb77)) +* **chat-client:** revert for amazon q keyboard shortcuts feature ([#1901](https://github.com/aws/language-servers/issues/1901)) ([522f8de](https://github.com/aws/language-servers/commit/522f8de6dba8dfa9b4363934cd7fcea905add1ce)) +* validate Create Prompt & Create Rule prompts input onChange ([#1854](https://github.com/aws/language-servers/issues/1854)) ([ee215c4](https://github.com/aws/language-servers/commit/ee215c4bc652a54556d31e64f86ed5179d174b4b)) + +## [0.1.23](https://github.com/aws/language-servers/compare/chat-client/v0.1.22...chat-client/v0.1.23) (2025-07-08) + + +### Features + +* **chat-client:** add stringOverrides to createChat config ([#1847](https://github.com/aws/language-servers/issues/1847)) ([89f85ff](https://github.com/aws/language-servers/commit/89f85ff6c676eb30d2cb6bc3368676b0d0913bac)) +* support listAvailableModels server request ([#1808](https://github.com/aws/language-servers/issues/1808)) ([9f1ddb3](https://github.com/aws/language-servers/commit/9f1ddb327778dba6da49337b79c5fef19023b52d)) + + +### Bug Fixes + +* **amazonq:** allow taking .jpg file as image context, add image cont… ([#1814](https://github.com/aws/language-servers/issues/1814)) ([4d36fa4](https://github.com/aws/language-servers/commit/4d36fa4a0a04692dba720bc0288c6cee7f45a1fc)) +* **amazonq:** use config to render the overlay ([#1851](https://github.com/aws/language-servers/issues/1851)) ([f5c2038](https://github.com/aws/language-servers/commit/f5c2038c090f9bb66b3cbd7e31f4d26c37943aeb)) +* image context drag and drop fix on windows ([#1837](https://github.com/aws/language-servers/issues/1837)) ([14df236](https://github.com/aws/language-servers/commit/14df23633138d9b84875fba79a3eaf2d18dca8ce)) +* imagecontext image name bug, mutliple images in pinned context ([#1834](https://github.com/aws/language-servers/issues/1834)) ([27d60ab](https://github.com/aws/language-servers/commit/27d60ab5f5249635a9e73be1ee96ecb820133f9a)) + ## [0.1.22](https://github.com/aws/language-servers/compare/chat-client/v0.1.21...chat-client/v0.1.22) (2025-07-02) diff --git a/chat-client/package.json b/chat-client/package.json index b2c81d04f4..41ae843229 100644 --- a/chat-client/package.json +++ b/chat-client/package.json @@ -1,6 +1,6 @@ { "name": "@aws/chat-client", - "version": "0.1.22", + "version": "0.1.25", "description": "AWS Chat Client", "main": "out/index.js", "repository": { @@ -16,19 +16,24 @@ "scripts": { "compile": "tsc --build && npm run package", "test:unit": "ts-mocha -b \"./src/**/*.test.ts\"", + "test:unit:coverage": "c8 ts-mocha -b \"./src/**/*.test.ts\"", "test": "npm run test:unit", + "test:coverage": "npm run test:unit:coverage", + "coverage:report": "c8 report --reporter=html --reporter=text", "fix:prettier": "prettier . --write", "package": "webpack" }, "dependencies": { - "@aws/chat-client-ui-types": "^0.1.47", - "@aws/language-server-runtimes-types": "^0.1.43", - "@aws/mynah-ui": "^4.35.7" + "@aws/chat-client-ui-types": "^0.1.51", + "@aws/language-server-runtimes": "^0.2.112", + "@aws/language-server-runtimes-types": "^0.1.45", + "@aws/mynah-ui": "^4.35.9" }, "devDependencies": { "@types/jsdom": "^21.1.6", "@types/mocha": "^10.0.9", "assert": "^2.0.0", + "c8": "^10.1.2", "jsdom": "^24.0.0", "sinon": "^19.0.2", "ts-mocha": "^11.1.0", diff --git a/chat-client/src/client/chat.ts b/chat-client/src/client/chat.ts index a19fa0f8f4..a23a73263c 100644 --- a/chat-client/src/client/chat.ts +++ b/chat-client/src/client/chat.ts @@ -108,7 +108,7 @@ import { OPEN_FILE_DIALOG_METHOD, OpenFileDialogResult, } from '@aws/language-server-runtimes-types' -import { MynahUIDataModel, MynahUITabStoreModel } from '@aws/mynah-ui' +import { ConfigTexts, MynahUIDataModel, MynahUITabStoreModel } from '@aws/mynah-ui' import { ServerMessage, TELEMETRY, TelemetryParams } from '../contracts/serverContracts' import { Messager, OutboundChatApi } from './messager' import { InboundChatApi, createMynahUi } from './mynahUi' @@ -120,8 +120,6 @@ import { modelSelectionForRegion } from './texts/modelSelection' const getDefaultTabConfig = (agenticMode?: boolean) => { return { tabTitle: 'Chat', - promptInputInfo: - 'Amazon Q Developer uses generative AI. You may need to verify responses. See the [AWS Responsible AI Policy](https://aws.amazon.com/machine-learning/responsible-ai/policy/).', promptInputPlaceholder: `Ask a question. Use${agenticMode ? ' @ to add context,' : ''} / for quick actions`, } } @@ -131,6 +129,7 @@ type ChatClientConfig = Pick & { pairProgrammingAcknowledged?: boolean agenticMode?: boolean modelSelectionEnabled?: boolean + stringOverrides?: Partial } export const createChat = ( @@ -537,7 +536,8 @@ export const createChat = ( config?.pairProgrammingAcknowledged ?? false, chatClientAdapter, featureConfig, - !!config?.agenticMode + !!config?.agenticMode, + config?.stringOverrides ) mynahApi = api diff --git a/chat-client/src/client/features/rules.test.ts b/chat-client/src/client/features/rules.test.ts new file mode 100644 index 0000000000..c8f93ed4eb --- /dev/null +++ b/chat-client/src/client/features/rules.test.ts @@ -0,0 +1,287 @@ +import { MynahUI, DetailedListItem } from '@aws/mynah-ui' +import { Messager } from '../messager' +import * as sinon from 'sinon' +import { RulesList, ContextRule, convertRulesListToDetailedListGroup } from './rules' +import { ListRulesResult, RulesFolder } from '@aws/language-server-runtimes-types' +import * as assert from 'assert' + +describe('rules', () => { + let mynahUi: MynahUI + let messager: Messager + let openTopBarButtonOverlayStub: sinon.SinonStub + let showCustomFormStub: sinon.SinonStub + let rulesList: RulesList + + beforeEach(() => { + mynahUi = { + openTopBarButtonOverlay: sinon.stub(), + showCustomForm: sinon.stub(), + } as unknown as MynahUI + openTopBarButtonOverlayStub = mynahUi.openTopBarButtonOverlay as sinon.SinonStub + showCustomFormStub = mynahUi.showCustomForm as sinon.SinonStub + + messager = { + onRuleClick: sinon.stub(), + } as unknown as Messager + + rulesList = new RulesList(mynahUi, messager) + }) + + afterEach(() => { + sinon.restore() + }) + + describe('showLoading', () => { + it('opens top bar button overlay with loading message', () => { + const mockOverlay = { + update: sinon.stub(), + close: sinon.stub(), + } + openTopBarButtonOverlayStub.returns(mockOverlay) + + rulesList.showLoading('test-tab-id') + + sinon.assert.calledOnce(openTopBarButtonOverlayStub) + const arg = openTopBarButtonOverlayStub.getCall(0).args[0] + assert.equal(arg.tabId, 'test-tab-id') + assert.equal(arg.topBarButtonOverlay.list[0].groupName, 'Loading rules...') + assert.equal(arg.topBarButtonOverlay.selectable, false) + }) + }) + + describe('show', () => { + it('opens top bar button overlay when called first time', () => { + const mockParams: ListRulesResult = { + tabId: 'test-tab-id', + rules: [ + { + folderName: 'test-folder', + active: true, + rules: [ + { + id: 'rule-1', + name: 'Test Rule', + active: true, + }, + ], + }, + ], + filterOptions: [ + { + id: 'filter-1', + type: 'textinput', + icon: 'search', + }, + ], + } + + const mockOverlay = { + update: sinon.stub(), + close: sinon.stub(), + } + openTopBarButtonOverlayStub.returns(mockOverlay) + + rulesList.show(mockParams) + + sinon.assert.calledOnce(openTopBarButtonOverlayStub) + const arg = openTopBarButtonOverlayStub.getCall(0).args[0] + assert.equal(arg.tabId, 'test-tab-id') + assert.equal(arg.topBarButtonOverlay.selectable, 'clickable') + }) + + it('updates existing overlay when called second time', () => { + const mockParams: ListRulesResult = { + tabId: 'test-tab-id', + rules: [], + } + + const mockOverlay = { + update: sinon.stub(), + close: sinon.stub(), + } + openTopBarButtonOverlayStub.returns(mockOverlay) + + // First call + rulesList.showLoading('test-tab-id') + + // Second call + rulesList.show(mockParams) + + sinon.assert.calledOnce(mockOverlay.update) + }) + }) + + describe('rule click handling', () => { + let mockOverlay: ReturnType + let onItemClick: (item: DetailedListItem) => void + + beforeEach(() => { + mockOverlay = { + update: sinon.stub(), + close: sinon.stub(), + } + openTopBarButtonOverlayStub.returns(mockOverlay) + + rulesList.showLoading('test-tab-id') + onItemClick = openTopBarButtonOverlayStub.getCall(0).args[0].events.onItemClick + }) + + it('shows custom form when create rule is clicked', () => { + const createRuleItem: DetailedListItem = { + id: ContextRule.CreateRuleId, + description: 'Create a new rule', + } + + onItemClick(createRuleItem) + + sinon.assert.calledOnce(showCustomFormStub) + const formArgs = showCustomFormStub.getCall(0).args + assert.equal(formArgs[0], 'test-tab-id') + assert.equal(formArgs[1][0].id, ContextRule.RuleNameFieldId) + assert.equal(formArgs[2][0].id, ContextRule.CancelButtonId) + assert.equal(formArgs[2][1].id, ContextRule.SubmitButtonId) + }) + + it('calls messager when regular rule is clicked', () => { + const ruleItem: DetailedListItem = { + id: 'test-rule-id', + description: 'Test Rule', + } + + onItemClick(ruleItem) + + sinon.assert.calledOnce(messager.onRuleClick as sinon.SinonStub) + const callArgs = (messager.onRuleClick as sinon.SinonStub).getCall(0).args[0] + assert.equal(callArgs.tabId, 'test-tab-id') + assert.equal(callArgs.type, 'rule') + assert.equal(callArgs.id, 'test-rule-id') + }) + + it('does nothing when item has no id', () => { + const itemWithoutId: DetailedListItem = { + description: 'Item without ID', + } + + onItemClick(itemWithoutId) + + sinon.assert.notCalled(messager.onRuleClick as sinon.SinonStub) + sinon.assert.notCalled(showCustomFormStub) + }) + }) + + describe('folder click handling', () => { + it('calls messager when folder is clicked', () => { + const mockOverlay = { + update: sinon.stub(), + close: sinon.stub(), + } + openTopBarButtonOverlayStub.returns(mockOverlay) + + rulesList.showLoading('test-tab-id') + const onGroupClick = openTopBarButtonOverlayStub.getCall(0).args[0].events.onGroupClick + + onGroupClick('test-folder') + + sinon.assert.calledOnce(messager.onRuleClick as sinon.SinonStub) + const callArgs = (messager.onRuleClick as sinon.SinonStub).getCall(0).args[0] + assert.equal(callArgs.tabId, 'test-tab-id') + assert.equal(callArgs.type, 'folder') + assert.equal(callArgs.id, 'test-folder') + }) + }) + + describe('keyboard handling', () => { + it('closes overlay when Escape is pressed', () => { + const mockOverlay = { + update: sinon.stub(), + close: sinon.stub(), + } + openTopBarButtonOverlayStub.returns(mockOverlay) + + rulesList.showLoading('test-tab-id') + const onKeyPress = openTopBarButtonOverlayStub.getCall(0).args[0].events.onKeyPress + + const escapeEvent = { key: 'Escape' } as KeyboardEvent + onKeyPress(escapeEvent) + + sinon.assert.calledOnce(mockOverlay.close) + }) + + it('does nothing when other keys are pressed', () => { + const mockOverlay = { + update: sinon.stub(), + close: sinon.stub(), + } + openTopBarButtonOverlayStub.returns(mockOverlay) + + rulesList.showLoading('test-tab-id') + const onKeyPress = openTopBarButtonOverlayStub.getCall(0).args[0].events.onKeyPress + + const enterEvent = { key: 'Enter' } as KeyboardEvent + onKeyPress(enterEvent) + + sinon.assert.notCalled(mockOverlay.close) + }) + }) + + describe('close', () => { + it('closes the overlay', () => { + const mockOverlay = { + update: sinon.stub(), + close: sinon.stub(), + } + openTopBarButtonOverlayStub.returns(mockOverlay) + + rulesList.showLoading('test-tab-id') + rulesList.close() + + sinon.assert.calledOnce(mockOverlay.close) + }) + }) + + describe('convertRulesListToDetailedListGroup', () => { + it('converts rules folder to detailed list group', () => { + const rulesFolder: RulesFolder[] = [ + { + folderName: 'test-folder', + active: true, + rules: [ + { + id: 'rule-1', + name: 'Test Rule 1', + active: true, + }, + { + id: 'rule-2', + name: 'Test Rule 2', + active: false, + }, + ], + }, + { + folderName: 'inactive-folder', + active: 'indeterminate', + rules: [], + }, + ] + + const result = convertRulesListToDetailedListGroup(rulesFolder) + + assert.equal(result.length, 3) // 2 folders + create rule group + assert.equal(result[0].groupName, 'test-folder') + assert.equal(result[0].children?.length, 2) + assert.equal(result[0].children?.[0].id, 'rule-1') + assert.equal(result[0].children?.[0].description, 'Test Rule 1') + assert.equal(result[1].groupName, 'inactive-folder') + assert.equal(result[1].children?.length, 0) + assert.equal(result[2].children?.[0].id, ContextRule.CreateRuleId) + }) + + it('handles empty rules array', () => { + const result = convertRulesListToDetailedListGroup([]) + + assert.equal(result.length, 1) // Only create rule group + assert.equal(result[0].children?.[0].id, ContextRule.CreateRuleId) + }) + }) +}) diff --git a/chat-client/src/client/features/rules.ts b/chat-client/src/client/features/rules.ts index f2be8948a1..f5ea2cca22 100644 --- a/chat-client/src/client/features/rules.ts +++ b/chat-client/src/client/features/rules.ts @@ -47,6 +47,7 @@ export class RulesList { }, ], }, + validateOnChange: true, description: "This will create a [rule name].md file in your project's .amazonq/rules folder.", }, diff --git a/chat-client/src/client/imageVerification.test.ts b/chat-client/src/client/imageVerification.test.ts new file mode 100644 index 0000000000..3d769b2088 --- /dev/null +++ b/chat-client/src/client/imageVerification.test.ts @@ -0,0 +1,294 @@ +import * as assert from 'assert' +import * as sinon from 'sinon' +import { + isSupportedImageExtension, + isFileSizeValid, + areImageDimensionsValid, + verifyClientImage, + verifyClientImages, + DEFAULT_IMAGE_VERIFICATION_OPTIONS, + MAX_IMAGE_CONTEXT, +} from './imageVerification' + +class MockImage { + onload: (() => void) | null = null + onerror: (() => void) | null = null + width = 800 + height = 600 + _src = '' + get src() { + return this._src + } + set src(value: string) { + this._src = value + // Simulate image loading + Promise.resolve().then(() => this.onload?.()) + } +} + +class MockFileReader { + onload: ((event: any) => void) | null = null + onerror: (() => void) | null = null + result: string | ArrayBuffer | null = null + readAsDataURL(file: File) { + setTimeout(() => { + this.result = 'data:image/png;base64,mock-data' + this.onload?.({ target: { result: this.result } }) + }, 0) + } +} + +describe('imageVerification', () => { + let imageStub: sinon.SinonStub + let urlStub: sinon.SinonStub + let fileReaderStub: sinon.SinonStub + + beforeEach(() => { + imageStub = sinon.stub(global, 'Image').callsFake(() => new MockImage()) + urlStub = sinon.stub(global, 'URL').value({ + createObjectURL: sinon.stub().returns('blob:mock-url'), + revokeObjectURL: sinon.stub(), + }) + fileReaderStub = sinon.stub(global, 'FileReader').callsFake(() => new MockFileReader()) + }) + + afterEach(() => { + sinon.restore() + }) + + describe('constants', () => { + it('has correct MAX_IMAGE_CONTEXT value', () => { + assert.equal(MAX_IMAGE_CONTEXT, 20) + }) + + it('has correct default options', () => { + assert.equal(DEFAULT_IMAGE_VERIFICATION_OPTIONS.maxSizeBytes, 3.75 * 1024 * 1024) + assert.equal(DEFAULT_IMAGE_VERIFICATION_OPTIONS.maxDimension, 8000) + assert.deepEqual(DEFAULT_IMAGE_VERIFICATION_OPTIONS.supportedExtensions, [ + 'jpeg', + 'jpg', + 'png', + 'gif', + 'webp', + ]) + }) + }) + + describe('isSupportedImageExtension', () => { + it('returns true for supported extensions', () => { + assert.equal(isSupportedImageExtension('jpg'), true) + assert.equal(isSupportedImageExtension('jpeg'), true) + assert.equal(isSupportedImageExtension('png'), true) + assert.equal(isSupportedImageExtension('gif'), true) + assert.equal(isSupportedImageExtension('webp'), true) + }) + + it('returns true for supported extensions with dots', () => { + assert.equal(isSupportedImageExtension('.jpg'), true) + assert.equal(isSupportedImageExtension('.png'), true) + }) + + it('returns true for uppercase extensions', () => { + assert.equal(isSupportedImageExtension('JPG'), true) + assert.equal(isSupportedImageExtension('PNG'), true) + }) + + it('returns false for unsupported extensions', () => { + assert.equal(isSupportedImageExtension('txt'), false) + assert.equal(isSupportedImageExtension('pdf'), false) + assert.equal(isSupportedImageExtension('doc'), false) + }) + }) + + describe('isFileSizeValid', () => { + it('returns true for valid file sizes', () => { + assert.equal(isFileSizeValid(1024), true) // 1KB + assert.equal(isFileSizeValid(1024 * 1024), true) // 1MB + }) + + it('returns false for oversized files', () => { + const maxSize = DEFAULT_IMAGE_VERIFICATION_OPTIONS.maxSizeBytes + assert.equal(isFileSizeValid(maxSize + 1), false) + }) + + it('accepts custom max size', () => { + assert.equal(isFileSizeValid(2048, 1024), false) + assert.equal(isFileSizeValid(512, 1024), true) + }) + }) + + describe('areImageDimensionsValid', () => { + it('returns true for valid dimensions', () => { + assert.equal(areImageDimensionsValid(800, 600), true) + assert.equal(areImageDimensionsValid(1920, 1080), true) + }) + + it('returns false for oversized dimensions', () => { + const maxDim = DEFAULT_IMAGE_VERIFICATION_OPTIONS.maxDimension + assert.equal(areImageDimensionsValid(maxDim + 1, 600), false) + assert.equal(areImageDimensionsValid(800, maxDim + 1), false) + }) + + it('accepts custom max dimension', () => { + assert.equal(areImageDimensionsValid(1200, 800, 1000), false) + assert.equal(areImageDimensionsValid(800, 600, 1000), true) + }) + }) + + describe('verifyClientImage', () => { + let mockFile: File + + beforeEach(() => { + mockFile = { + name: 'test.jpg', + size: 1024 * 1024, // 1MB + type: 'image/jpeg', + } as File + }) + + it('validates a correct image file', async () => { + const result = await verifyClientImage(mockFile, 'test.jpg') + assert.equal(result.isValid, true) + assert.equal(result.errors.length, 0) + }) + + it('rejects unsupported file extension', async () => { + const result = await verifyClientImage(mockFile, 'test.txt') + assert.equal(result.isValid, false) + assert.equal(result.errors.length, 1) + assert.ok(result.errors[0].includes('File must be an image')) + }) + + it('rejects oversized files', async () => { + const largeFile = { + ...mockFile, + size: DEFAULT_IMAGE_VERIFICATION_OPTIONS.maxSizeBytes + 1, + } as File + + const result = await verifyClientImage(largeFile, 'large.jpg') + assert.equal(result.isValid, false) + assert.equal(result.errors.length, 1) + assert.ok(result.errors[0].includes('must be no more than')) + }) + + it('rejects images with oversized dimensions', async () => { + // Stub Image to return oversized dimensions + imageStub.callsFake(() => ({ + onload: null, + onerror: null, + width: DEFAULT_IMAGE_VERIFICATION_OPTIONS.maxDimension + 1, + height: 600, + _src: '', + get src() { + return this._src + }, + set src(value: string) { + this._src = value + Promise.resolve().then(() => this.onload?.()) + }, + })) + + const result = await verifyClientImage(mockFile, 'oversized.jpg') + assert.equal(result.isValid, false) + assert.equal(result.errors.length, 1) + assert.ok(result.errors[0].includes('must be no more than')) + }) + + it('handles image loading errors', async () => { + // Stub Image to fail loading + imageStub.callsFake(() => ({ + onload: null, + onerror: null, + width: 0, + height: 0, + _src: '', + get src() { + return this._src + }, + set src(value: string) { + this._src = value + Promise.resolve().then(() => this.onerror?.()) + }, + })) + + // Stub FileReader to also fail + fileReaderStub.callsFake(() => ({ + onload: null, + onerror: null, + result: null, + readAsDataURL() { + setTimeout(() => this.onerror?.(), 0) + }, + })) + + const result = await verifyClientImage(mockFile, 'failing.jpg') + assert.equal(result.isValid, false) + assert.equal(result.errors.length, 1) + assert.ok(result.errors[0].includes('Unable to read image dimensions')) + }) + }) + + describe('verifyClientImages', () => { + let mockFileList: FileList + + beforeEach(() => { + const validFile = { + name: 'valid.jpg', + size: 1024 * 1024, + type: 'image/jpeg', + } as File + + const invalidFile = { + name: 'invalid.txt', + size: 1024, + type: 'text/plain', + } as File + + mockFileList = { + length: 2, + 0: validFile, + 1: invalidFile, + item: (index: number) => (index === 0 ? validFile : invalidFile), + } as unknown as FileList + }) + + it('separates valid and invalid files', async () => { + const result = await verifyClientImages(mockFileList) + assert.equal(result.validFiles.length, 1) + assert.equal(result.errors.length, 1) + assert.equal(result.validFiles[0].name, 'valid.jpg') + assert.ok(result.errors[0].includes('invalid.txt')) + }) + + it('handles empty file list', async () => { + const emptyFileList = { + length: 0, + item: () => null, + } as unknown as FileList + + const result = await verifyClientImages(emptyFileList) + assert.equal(result.validFiles.length, 0) + assert.equal(result.errors.length, 0) + }) + + it('handles files without names', async () => { + const fileWithoutName = { + name: '', + size: 1024, + type: 'image/jpeg', + } as File + + const fileListWithUnnamed = { + length: 1, + 0: fileWithoutName, + item: () => fileWithoutName, + } as unknown as FileList + + const result = await verifyClientImages(fileListWithUnnamed) + // File without extension should be rejected + assert.equal(result.validFiles.length, 0) + assert.equal(result.errors.length, 1) + assert.ok(result.errors[0].includes('Unknown file')) + }) + }) +}) diff --git a/chat-client/src/client/imageVerification.ts b/chat-client/src/client/imageVerification.ts index 074b181de4..7bde7f73f1 100644 --- a/chat-client/src/client/imageVerification.ts +++ b/chat-client/src/client/imageVerification.ts @@ -20,7 +20,7 @@ export interface ImageVerificationOptions { export const DEFAULT_IMAGE_VERIFICATION_OPTIONS: Required = { maxSizeBytes: 3.75 * 1024 * 1024, // 3.75MB maxDimension: 8000, // 8000px - supportedExtensions: ['jpeg', 'png', 'gif', 'webp'], + supportedExtensions: ['jpeg', 'jpg', 'png', 'gif', 'webp'], } /** @@ -118,7 +118,29 @@ async function getClientImageDimensions(file: File): Promise<{ width: number; he img.onerror = () => { URL.revokeObjectURL(objectUrl) - reject(new Error('Failed to load image')) + // Fall back to FileReader if ObjectURL fails + const reader = new FileReader() + + reader.onload = e => { + const fallbackImg = new Image() + + fallbackImg.onload = () => { + resolve({ width: fallbackImg.width, height: fallbackImg.height }) + } + + fallbackImg.onerror = () => { + reject(new Error('Failed to load image')) + } + + if (e.target?.result) { + fallbackImg.src = e.target.result as string + } else { + reject(new Error('Failed to read image file')) + } + } + + reader.onerror = reject + reader.readAsDataURL(file) } img.src = objectUrl diff --git a/chat-client/src/client/mynahUi.test.ts b/chat-client/src/client/mynahUi.test.ts index fcb3e8dd61..31e64f0e76 100644 --- a/chat-client/src/client/mynahUi.test.ts +++ b/chat-client/src/client/mynahUi.test.ts @@ -7,14 +7,16 @@ import { handleChatPrompt, DEFAULT_HELP_PROMPT, handlePromptInputChange, + uiComponentsTexts, } from './mynahUi' import { Messager, OutboundChatApi } from './messager' import { TabFactory } from './tabs/tabFactory' import { ChatItemType, MynahUI, NotificationType } from '@aws/mynah-ui' import { ChatClientAdapter } from '../contracts/chatClientAdapter' -import { ChatMessage, ListAvailableModelsResult } from '@aws/language-server-runtimes-types' +import { ChatMessage, ContextCommand, ListAvailableModelsResult } from '@aws/language-server-runtimes-types' import { ChatHistory } from './features/history' import { pairProgrammingModeOn, pairProgrammingModeOff } from './texts/pairProgramming' +import { strictEqual } from 'assert' describe('MynahUI', () => { let messager: Messager @@ -570,6 +572,170 @@ describe('MynahUI', () => { }) }) }) + + describe('sendPinnedContext', () => { + it('should update UI with pinned context items', () => { + const tabId = 'tab-1' + const pinnedContextCommands = [ + { + id: 'pinned-file-1', + command: 'File 1', + label: 'file', + route: ['/workspace', 'src/file1.ts'], + icon: 'file', + }, + ] as ContextCommand[] + + // Call sendPinnedContext with pinned context items + inboundChatApi.sendPinnedContext({ + tabId, + contextCommandGroups: [{ commands: pinnedContextCommands }], + showRules: true, + }) + + // Verify updateStore was called with the correct parameters + sinon.assert.calledWith(updateStoreSpy, tabId, { + promptTopBarContextItems: [ + { + id: 'pinned-file-1', + command: 'File 1', + label: 'file', + route: ['/workspace', 'src/file1.ts'], + icon: 'file', + children: undefined, + }, + ], + promptTopBarTitle: '@', + promptTopBarButton: { + id: 'Rules', + status: 'clear', + text: 'Rules', + icon: 'check-list', + }, + }) + }) + + it('should show full title when no pinned context items exist', () => { + const tabId = 'tab-1' + + // Call sendPinnedContext with empty context items + inboundChatApi.sendPinnedContext({ + tabId, + contextCommandGroups: [{ commands: [] }], + showRules: false, + }) + + // Verify updateStore was called with the correct parameters + sinon.assert.calledWith(updateStoreSpy, tabId, { + promptTopBarContextItems: [], + promptTopBarTitle: '@Pin Context', + promptTopBarButton: null, + }) + }) + + it('should handle active editor context item', () => { + const tabId = 'tab-1' + const activeEditorCommand = { + id: 'active-editor', + command: 'Active file', + label: 'file', + icon: 'file', + description: '', + } + + // Call sendPinnedContext with active editor context + inboundChatApi.sendPinnedContext({ + tabId, + contextCommandGroups: [{ commands: [activeEditorCommand] as ContextCommand[] }], + showRules: true, + textDocument: { uri: 'file:///workspace/src/active.ts' }, + }) + + // Verify updateStore was called with the correct parameters + // Active editor description should be updated with the URI + sinon.assert.calledWith(updateStoreSpy, tabId, { + promptTopBarContextItems: [ + { + ...activeEditorCommand, + description: 'file:///workspace/src/active.ts', + children: undefined, + }, + ], + promptTopBarTitle: '@Pin Context', + promptTopBarButton: { + id: 'Rules', + status: 'clear', + text: 'Rules', + icon: 'check-list', + }, + }) + }) + + it('should remove active editor when no textDocument is provided', () => { + const tabId = 'tab-1' + const activeEditorCommand = { + id: 'active-editor', + command: 'Active file', + label: 'file', + icon: 'file', + } + + const fileCommand = { + id: 'pinned-file-1', + command: 'File 1', + label: 'file', + route: ['/workspace', 'src/file1.ts'], + icon: 'file', + } + + // Call sendPinnedContext with active editor context but no textDocument + inboundChatApi.sendPinnedContext({ + tabId, + contextCommandGroups: [{ commands: [activeEditorCommand, fileCommand] as ContextCommand[] }], + showRules: false, + }) + + // Verify updateStore was called with empty context items + // Active editor should be removed since no textDocument was provided + sinon.assert.calledWith(updateStoreSpy, tabId, { + promptTopBarContextItems: [{ ...fileCommand, children: undefined }], + promptTopBarTitle: '@', + promptTopBarButton: null, + }) + }) + }) + + describe('stringOverrides', () => { + it('should apply string overrides to config texts', () => { + const stringOverrides = { + spinnerText: 'Custom loading message...', + stopGenerating: 'Custom stop text', + showMore: 'Custom show more text', + } + + const messager = new Messager(outboundChatApi) + const tabFactory = new TabFactory({}) + const [customMynahUi] = createMynahUi( + messager, + tabFactory, + true, + true, + undefined, + undefined, + true, + stringOverrides + ) + + // Access the config texts from the instance + const configTexts = (customMynahUi as any).props.config.texts + + // Verify that string overrides were applied and defaults are preserved + strictEqual(configTexts.spinnerText, 'Custom loading message...') + strictEqual(configTexts.stopGenerating, 'Custom stop text') + strictEqual(configTexts.showMore, 'Custom show more text') + strictEqual(configTexts.clickFileToViewDiff, uiComponentsTexts.clickFileToViewDiff) + }) + }) }) describe('withAdapter', () => { diff --git a/chat-client/src/client/mynahUi.ts b/chat-client/src/client/mynahUi.ts index 38ea0e24a4..17749e5e5e 100644 --- a/chat-client/src/client/mynahUi.ts +++ b/chat-client/src/client/mynahUi.ts @@ -50,6 +50,7 @@ import { ChatItemButton, MynahIcons, CustomQuickActionCommand, + ConfigTexts, } from '@aws/mynah-ui' import { VoteParams } from '../contracts/telemetry' import { Messager } from './messager' @@ -178,8 +179,8 @@ export const handleChatPrompt = ( // Add cancellation message BEFORE showing the new prompt mynahUi.addChatItem(tabId, { type: ChatItemType.DIRECTIVE, - messageId: 'stopped' + Date.now(), - body: 'You stopped your current work and asked me to work on the following task instead.', + messageId: 'canceled' + Date.now(), + body: 'You canceled your current work and asked me to work on the following task instead.', }) // Reset loading state @@ -199,7 +200,8 @@ export const handleChatPrompt = ( prompt.command && ['/dev', '/test', '/doc'].includes(prompt.command) - if (prompt.command && !isReroutedCommand) { + if (prompt.command && !isReroutedCommand && prompt.command !== '/compact') { + // Send /compact quick action as normal regular chat prompt // Handle non-rerouted commands (/clear, /help, /transform, /review) as quick actions // Temporary solution to handle clear quick actions on the client side if (prompt.command === '/clear') { @@ -310,7 +312,8 @@ export const createMynahUi = ( pairProgrammingCardAcknowledged: boolean, customChatClientAdapter?: ChatClientAdapter, featureConfig?: Map, - agenticMode?: boolean + agenticMode?: boolean, + stringOverrides?: Partial ): [MynahUI, InboundChatApi] => { let disclaimerCardActive = !disclaimerAcknowledged let programmingModeCardActive = !pairProgrammingCardAcknowledged @@ -584,6 +587,7 @@ export const createMynahUi = ( }, ], }, + validateOnChange: true, description: "Use this prompt by typing '@' followed by the prompt name.", }, ], @@ -700,8 +704,8 @@ export const createMynahUi = ( // Add cancellation message when stop button is clicked mynahUi.addChatItem(tabId, { type: ChatItemType.DIRECTIVE, - messageId: 'stopped' + Date.now(), - body: 'You stopped your current work, please provide additional examples or ask another question.', + messageId: 'canceled' + Date.now(), + body: 'You canceled your current work, please provide additional examples or ask another question.', }) }, 500) // 500ms delay }, @@ -767,6 +771,7 @@ export const createMynahUi = ( label: 'image', icon: icon, content: bytes, + id: fileName, } }) ) @@ -774,13 +779,21 @@ export const createMynahUi = ( // Add valid files to context commands mynahUi.addCustomContextToPrompt(tabId, commands, insertPosition) } - const uniqueErrors = [...new Set(errors)] - for (const error of uniqueErrors) { - mynahUi.notify({ - content: error, - type: NotificationType.WARNING, - }) + + const imageVerificationBanner: Partial = { + messageId: 'image-verification-banner', + header: { + icon: 'warning', + iconStatus: 'warning', + body: '### Invalid Image', + }, + body: `${errors.join('\n')}`, + canBeDismissed: true, } + + mynahUi.updateStore(tabId, { + promptInputStickyCard: imageVerificationBanner, + }) }, } @@ -799,11 +812,14 @@ export const createMynahUi = ( }, config: { maxTabs: 10, + dragOverlayIcon: MynahIcons.IMAGE, texts: { ...uiComponentsTexts, + dragOverlayText: 'Add image to context', // Fallback to original texts in non-agentic chat mode stopGenerating: agenticMode ? uiComponentsTexts.stopGenerating : 'Stop generating', spinnerText: agenticMode ? uiComponentsTexts.spinnerText : 'Generating your answer...', + ...stringOverrides, }, // Total model context window limit 600k. // 500k for user input, 100k for context, history, system prompt. @@ -1364,7 +1380,7 @@ export const createMynahUi = ( // Adding this conditional check to show the stop message in the center. const contentHorizontalAlignment: ChatItem['contentHorizontalAlignment'] = undefined - // If message.header?.status?.text is Stopped or Rejected or Ignored or Completed etc.. card should be in disabled state. + // If message.header?.status?.text is Canceled or Rejected or Ignored or Completed etc.. card should be in disabled state. const shouldMute = message.header?.status?.text !== undefined && message.header?.status?.text !== 'Completed' return { @@ -1479,13 +1495,15 @@ ${params.message}`, const sendPinnedContext = (params: PinnedContextParams) => { const pinnedContext = toContextCommands(params.contextCommandGroups[0]?.commands || []) - const activeEditor = pinnedContext[0]?.id === ACTIVE_EDITOR_CONTEXT_ID + let activeEditor = pinnedContext[0]?.id === ACTIVE_EDITOR_CONTEXT_ID // Update Active File pill description with active editor URI passed from IDE if (activeEditor) { if (params.textDocument != null) { pinnedContext[0].description = params.textDocument.uri } else { + // IDE did not pass in active file, remove it from pinned context pinnedContext.shift() + activeEditor = false } } let promptTopBarTitle = '@' @@ -1535,7 +1553,7 @@ ${params.message}`, } const commands: QuickActionCommand[] = [] for (const filePath of params.filePaths) { - const fileName = filePath.split('/').pop() || filePath + const fileName = filePath.split(/[\\/]/).pop() || filePath if (params.fileType === 'image') { commands.push({ command: fileName, @@ -1543,6 +1561,7 @@ ${params.message}`, label: 'image', route: [filePath], icon: MynahIcons.IMAGE, + id: fileName, }) } } @@ -1690,7 +1709,7 @@ const DEFAULT_TEST_PROMPT = `You are Amazon Q. Start with a warm greeting, then const DEFAULT_DEV_PROMPT = `You are Amazon Q. Start with a warm greeting, then ask the user to specify what kind of help they need in code development. Present common questions asked (like Creating a new project, Adding a new feature, Modifying your files). Keep the question brief and friendly. Don't make assumptions about existing content or context. Wait for their response before providing specific guidance.` -const uiComponentsTexts = { +export const uiComponentsTexts = { mainTitle: 'Amazon Q (Preview)', copy: 'Copy', insertAtCursorLabel: 'Insert at cursor', @@ -1706,9 +1725,9 @@ const uiComponentsTexts = { save: 'Save', cancel: 'Cancel', submit: 'Submit', - stopGenerating: 'Stop', + stopGenerating: 'Cancel', copyToClipboard: 'Copied to clipboard', noMoreTabsTooltip: 'You can only open ten conversation tabs at a time.', codeSuggestionWithReferenceTitle: 'Some suggestions contain code with references.', - spinnerText: 'Thinking...', + spinnerText: 'Working...', } diff --git a/chat-client/src/client/texts/pairProgramming.test.ts b/chat-client/src/client/texts/pairProgramming.test.ts new file mode 100644 index 0000000000..3ffec1bcaf --- /dev/null +++ b/chat-client/src/client/texts/pairProgramming.test.ts @@ -0,0 +1,122 @@ +import * as assert from 'assert' +import { ChatItemType, MynahIcons } from '@aws/mynah-ui' +import { + programmerModeCard, + pairProgrammingPromptInput, + pairProgrammingModeOn, + pairProgrammingModeOff, + testRerouteCard, + docRerouteCard, + devRerouteCard, + createRerouteCard, +} from './pairProgramming' + +describe('pairProgramming', () => { + describe('programmerModeCard', () => { + it('has correct properties', () => { + assert.equal(programmerModeCard.type, ChatItemType.ANSWER) + assert.equal(programmerModeCard.title, 'NEW FEATURE') + assert.equal(programmerModeCard.messageId, 'programmerModeCardId') + assert.equal(programmerModeCard.fullWidth, true) + assert.equal(programmerModeCard.canBeDismissed, true) + assert.ok(programmerModeCard.body?.includes('Amazon Q can now help')) + assert.equal(programmerModeCard.header?.icon, 'code-block') + assert.equal(programmerModeCard.header?.iconStatus, 'primary') + }) + }) + + describe('pairProgrammingPromptInput', () => { + it('has correct properties', () => { + assert.equal(pairProgrammingPromptInput.type, 'switch') + assert.equal(pairProgrammingPromptInput.id, 'pair-programmer-mode') + assert.equal(pairProgrammingPromptInput.tooltip, 'Turn OFF agentic coding') + if (pairProgrammingPromptInput.type === 'switch') { + // Type guard for switch type + assert.equal(pairProgrammingPromptInput.alternateTooltip, 'Turn ON agentic coding') + } + assert.equal(pairProgrammingPromptInput.value, 'true') + assert.equal(pairProgrammingPromptInput.icon, 'code-block') + }) + }) + + describe('pairProgrammingModeOn', () => { + it('has correct properties', () => { + assert.equal(pairProgrammingModeOn.type, ChatItemType.DIRECTIVE) + assert.equal(pairProgrammingModeOn.contentHorizontalAlignment, 'center') + assert.equal(pairProgrammingModeOn.fullWidth, true) + assert.equal(pairProgrammingModeOn.body, 'Agentic coding - ON') + }) + }) + + describe('pairProgrammingModeOff', () => { + it('has correct properties', () => { + assert.equal(pairProgrammingModeOff.type, ChatItemType.DIRECTIVE) + assert.equal(pairProgrammingModeOff.contentHorizontalAlignment, 'center') + assert.equal(pairProgrammingModeOff.fullWidth, true) + assert.equal(pairProgrammingModeOff.body, 'Agentic coding - OFF') + }) + }) + + describe('testRerouteCard', () => { + it('has correct properties', () => { + assert.equal(testRerouteCard.type, ChatItemType.ANSWER) + assert.equal(testRerouteCard.border, true) + assert.equal(testRerouteCard.header?.padding, true) + assert.equal(testRerouteCard.header?.iconForegroundStatus, 'warning') + assert.equal(testRerouteCard.header?.icon, MynahIcons.INFO) + assert.ok(testRerouteCard.header?.body?.includes('generate unit tests')) + assert.ok(testRerouteCard.body?.includes("You don't need to explicitly use /test")) + }) + }) + + describe('docRerouteCard', () => { + it('has correct properties', () => { + assert.equal(docRerouteCard.type, ChatItemType.ANSWER) + assert.equal(docRerouteCard.border, true) + assert.equal(docRerouteCard.header?.padding, true) + assert.equal(docRerouteCard.header?.iconForegroundStatus, 'warning') + assert.equal(docRerouteCard.header?.icon, MynahIcons.INFO) + assert.ok(docRerouteCard.header?.body?.includes('generate documentation')) + assert.ok(docRerouteCard.body?.includes("You don't need to explicitly use /doc")) + }) + }) + + describe('devRerouteCard', () => { + it('has correct properties', () => { + assert.equal(devRerouteCard.type, ChatItemType.ANSWER) + assert.equal(devRerouteCard.border, true) + assert.equal(devRerouteCard.header?.padding, true) + assert.equal(devRerouteCard.header?.iconForegroundStatus, 'warning') + assert.equal(devRerouteCard.header?.icon, MynahIcons.INFO) + assert.ok(devRerouteCard.header?.body?.includes('generate code')) + assert.ok(devRerouteCard.body?.includes("You don't need to explicitly use /dev")) + }) + }) + + describe('createRerouteCard', () => { + it('returns testRerouteCard for /test command', () => { + const result = createRerouteCard('/test') + assert.deepEqual(result, testRerouteCard) + }) + + it('returns docRerouteCard for /doc command', () => { + const result = createRerouteCard('/doc') + assert.deepEqual(result, docRerouteCard) + }) + + it('returns devRerouteCard for /dev command', () => { + const result = createRerouteCard('/dev') + assert.deepEqual(result, devRerouteCard) + }) + + it('returns devRerouteCard for unknown command', () => { + const result = createRerouteCard('/unknown') + assert.deepEqual(result, devRerouteCard) + }) + + it('returns devRerouteCard for empty string', () => { + const result = createRerouteCard('') + assert.deepEqual(result, devRerouteCard) + }) + }) +}) diff --git a/chat-client/src/client/utils.test.ts b/chat-client/src/client/utils.test.ts new file mode 100644 index 0000000000..38e64404a0 --- /dev/null +++ b/chat-client/src/client/utils.test.ts @@ -0,0 +1,251 @@ +import * as assert from 'assert' +import { MynahIcons } from '@aws/mynah-ui' +import { Button, ChatMessage } from '@aws/language-server-runtimes-types' +import { FeatureContext } from '@aws/chat-client-ui-types' +import { + toMynahIcon, + toMynahButtons, + toMynahHeader, + toMynahFileList, + toDetailsWithoutIcon, + toMynahContextCommand, +} from './utils' + +describe('utils', () => { + describe('toMynahIcon', () => { + it('returns valid MynahIcon when icon exists', () => { + const result = toMynahIcon(MynahIcons.CHAT) + assert.equal(result, MynahIcons.CHAT) + }) + + it('returns undefined for invalid icon', () => { + const result = toMynahIcon('invalid-icon') + assert.equal(result, undefined) + }) + + it('returns undefined for undefined input', () => { + const result = toMynahIcon(undefined) + assert.equal(result, undefined) + }) + }) + + describe('toMynahButtons', () => { + it('converts buttons with valid icons', () => { + const buttons: Button[] = [ + { id: 'btn1', text: 'Button 1', icon: MynahIcons.CHAT }, + { id: 'btn2', text: 'Button 2', icon: 'invalid-icon' }, + ] + + const result = toMynahButtons(buttons) + assert.equal(result?.length, 2) + assert.equal(result?.[0].icon, MynahIcons.CHAT) + assert.equal(result?.[1].icon, undefined) + }) + + it('returns undefined for undefined input', () => { + const result = toMynahButtons(undefined) + assert.equal(result, undefined) + }) + + it('handles empty array', () => { + const result = toMynahButtons([]) + assert.deepEqual(result, []) + }) + }) + + describe('toMynahHeader', () => { + it('converts header with all properties', () => { + const header: ChatMessage['header'] = { + icon: MynahIcons.CHAT, + buttons: [{ id: 'btn1', text: 'Button', icon: MynahIcons.OK }], + status: { text: 'Status', icon: MynahIcons.WARNING }, + summary: { + content: { + body: 'Test summary', + }, + }, + } + + const result = toMynahHeader(header) + assert.equal(result?.icon, MynahIcons.CHAT) + assert.equal(result?.buttons?.length, 1) + assert.equal(result?.status?.text, 'Status') + assert.equal(result?.status?.icon, MynahIcons.WARNING) + assert.equal(result?.summary?.content?.body, 'Test summary') + }) + + it('handles header without status', () => { + const header: ChatMessage['header'] = { + icon: MynahIcons.CHAT, + } + + const result = toMynahHeader(header) + assert.equal(result?.status, undefined) + }) + + it('returns undefined for undefined header', () => { + const result = toMynahHeader(undefined) + assert.equal(result, undefined) + }) + + it('handles header with invalid icons', () => { + const header: ChatMessage['header'] = { + icon: 'invalid-icon', + status: { text: 'Status', icon: 'invalid-status-icon' }, + } + + const result = toMynahHeader(header) + assert.equal(result?.icon, undefined) + assert.equal(result?.status?.icon, undefined) + }) + }) + + describe('toMynahFileList', () => { + it('converts file list with all properties', () => { + const fileList: ChatMessage['fileList'] = { + filePaths: ['src/file1.ts', 'src/file2.ts'], + rootFolderTitle: 'Project Root', + details: { + 'src/file1.ts': { + lineRanges: [{ first: 1, second: 10 }], + description: 'First file', + fullPath: '/full/path/src/file1.ts', + }, + 'src/file2.ts': { + lineRanges: [{ first: -1, second: -1 }], + description: 'Second file', + }, + }, + } + + const result = toMynahFileList(fileList) + assert.equal(result?.rootFolderTitle, 'Project Root') + assert.equal(result?.filePaths?.length, 2) + assert.equal(result?.flatList, true) + assert.equal(result?.hideFileCount, true) + assert.equal(result?.collapsed, true) + assert.equal(result?.details?.['src/file1.ts']?.label, 'line 1 - 10') + assert.equal(result?.details?.['src/file1.ts']?.description, 'First file') + assert.equal(result?.details?.['src/file1.ts']?.visibleName, 'file1.ts') + assert.equal(result?.details?.['src/file2.ts']?.label, '') + }) + + it('uses default root folder title when not provided', () => { + const fileList: ChatMessage['fileList'] = { + filePaths: ['file.ts'], + } + + const result = toMynahFileList(fileList) + assert.equal(result?.rootFolderTitle, 'Context') + }) + + it('returns undefined for undefined input', () => { + const result = toMynahFileList(undefined) + assert.equal(result, undefined) + }) + + it('handles file paths with different structures', () => { + const fileList: ChatMessage['fileList'] = { + filePaths: ['simple.ts', 'folder/nested.ts', 'deep/nested/path/file.ts'], + details: { + 'simple.ts': {}, + 'folder/nested.ts': {}, + 'deep/nested/path/file.ts': {}, + }, + } + + const result = toMynahFileList(fileList) + assert.equal(result?.details?.['simple.ts']?.visibleName, 'simple.ts') + assert.equal(result?.details?.['folder/nested.ts']?.visibleName, 'nested.ts') + assert.equal(result?.details?.['deep/nested/path/file.ts']?.visibleName, 'file.ts') + }) + + it('handles multiple line ranges', () => { + const fileList: ChatMessage['fileList'] = { + filePaths: ['file.ts'], + details: { + 'file.ts': { + lineRanges: [ + { first: 1, second: 5 }, + { first: 10, second: 15 }, + ], + }, + }, + } + + const result = toMynahFileList(fileList) + assert.equal(result?.details?.['file.ts']?.label, 'line 1 - 5, line 10 - 15') + }) + }) + + describe('toDetailsWithoutIcon', () => { + it('removes icons from details', () => { + const details = { + 'file1.ts': { + label: 'File 1', + icon: MynahIcons.FILE, + description: 'First file', + }, + 'file2.ts': { + label: 'File 2', + description: 'Second file', + }, + } + + const result = toDetailsWithoutIcon(details) + assert.equal(result['file1.ts'].icon, null) + assert.equal(result['file1.ts'].label, 'File 1') + assert.equal(result['file2.ts'].icon, null) + assert.equal(result['file2.ts'].label, 'File 2') + }) + + it('handles undefined input', () => { + const result = toDetailsWithoutIcon(undefined) + assert.deepEqual(result, {}) + }) + + it('handles empty object', () => { + const result = toDetailsWithoutIcon({}) + assert.deepEqual(result, {}) + }) + }) + + describe('toMynahContextCommand', () => { + it('converts feature context with string value', () => { + const feature: FeatureContext = { + value: { stringValue: 'test-command' }, + variation: 'Test Command Description', + } + + const result = toMynahContextCommand(feature) + assert.equal(result.command, 'test-command') + assert.equal(result.id, 'test-command') + assert.equal(result.description, 'Test Command Description') + }) + + it('returns empty object for undefined feature', () => { + const result = toMynahContextCommand(undefined) + assert.deepEqual(result, {}) + }) + + it('returns empty object for feature without string value', () => { + const feature: FeatureContext = { + value: {}, + variation: 'Description', + } + + const result = toMynahContextCommand(feature) + assert.deepEqual(result, {}) + }) + + it('returns empty object for feature with empty string value', () => { + const feature: FeatureContext = { + value: { stringValue: '' }, + variation: 'Description', + } + + const result = toMynahContextCommand(feature) + assert.deepEqual(result, {}) + }) + }) +}) diff --git a/chat-client/src/test/jsDomInjector.ts b/chat-client/src/test/jsDomInjector.ts index 2d80344ef1..b73ad67484 100644 --- a/chat-client/src/test/jsDomInjector.ts +++ b/chat-client/src/test/jsDomInjector.ts @@ -15,6 +15,8 @@ export function injectJSDOM() { global.HTMLElement = dom.window.HTMLElement global.CustomEvent = dom.window.CustomEvent global.MutationObserver = dom.window.MutationObserver + global.Image = dom.window.Image + global.FileReader = dom.window.FileReader // jsdom doesn't have support for innerText: https://github.com/jsdom/jsdom/issues/1245 which mynah ui uses Object.defineProperty(global.Element.prototype, 'innerText', { diff --git a/client/vscode/package.json b/client/vscode/package.json index a4c7f9f5fa..98387eba0d 100644 --- a/client/vscode/package.json +++ b/client/vscode/package.json @@ -347,7 +347,7 @@ "@aws-sdk/credential-providers": "^3.731.1", "@aws-sdk/types": "^3.734.0", "@aws/chat-client-ui-types": "^0.1.40", - "@aws/language-server-runtimes": "^0.2.102", + "@aws/language-server-runtimes": "^0.2.112", "@types/uuid": "^9.0.8", "@types/vscode": "^1.98.0", "jose": "^5.2.4", diff --git a/core/aws-lsp-core/.c8rc.json b/core/aws-lsp-core/.c8rc.json new file mode 100644 index 0000000000..252b6831fb --- /dev/null +++ b/core/aws-lsp-core/.c8rc.json @@ -0,0 +1,12 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text", "html", "lcov"], + "reports-dir": "coverage", + "include": ["out/**/*.js"], + "exclude": ["out/**/*.test.js", "out/**/*.spec.js", "out/**/test/**"], + "branches": 80, + "lines": 80, + "functions": 80, + "statements": 80 +} diff --git a/core/aws-lsp-core/CHANGELOG.md b/core/aws-lsp-core/CHANGELOG.md index beec4af0a1..6861a1f46e 100644 --- a/core/aws-lsp-core/CHANGELOG.md +++ b/core/aws-lsp-core/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [0.0.12](https://github.com/aws/language-servers/compare/lsp-core/v0.0.11...lsp-core/v0.0.12) (2025-07-17) + + +### Bug Fixes + +* add proper encoding support for shell output ([#1903](https://github.com/aws/language-servers/issues/1903)) ([44a6d62](https://github.com/aws/language-servers/commit/44a6d629af7702662a02f384a6a542c0d72ccc39)) +* use document change events for auto trigger classifier input ([#1912](https://github.com/aws/language-servers/issues/1912)) ([2204da6](https://github.com/aws/language-servers/commit/2204da6193f2030ee546f61c969b1a664d8025e3)) + ## [0.0.11](https://github.com/aws/language-servers/compare/lsp-core/v0.0.10...lsp-core/v0.0.11) (2025-07-02) diff --git a/core/aws-lsp-core/package.json b/core/aws-lsp-core/package.json index adc967b2d4..d1ed41e742 100644 --- a/core/aws-lsp-core/package.json +++ b/core/aws-lsp-core/package.json @@ -1,6 +1,6 @@ { "name": "@aws/lsp-core", - "version": "0.0.11", + "version": "0.0.12", "description": "Core library, contains common code and utilities", "main": "out/index.js", "repository": { @@ -22,12 +22,16 @@ "compile": "tsc --build", "test": "npm run test-unit", "test-unit": "mocha --timeout 0 \"./out/**/*.test.js\"", + "test-unit:coverage": "npm run compile && c8 mocha --timeout 0 \"./out/**/*.test.js\"", + "test:coverage": "npm run test-unit:coverage", + "coverage:report": "c8 report --reporter=html --reporter=text", "prepack": "shx cp ../../LICENSE ../../NOTICE ../../SECURITY.md ." }, "dependencies": { + "@aws/language-server-runtimes": "^0.2.112", "@gerhobbelt/gitignore-parser": "^0.2.0-9", - "jose": "^5.2.4", "cross-spawn": "7.0.6", + "jose": "^5.2.4", "request-light": "^0.8.0", "vscode-languageserver-textdocument": "^1.0.8", "vscode-languageserver-types": "^3.17.3", @@ -35,10 +39,11 @@ }, "devDependencies": { "@types/chai": "^4.3.5", - "@types/cross-spawn": "^6.0.2", "@types/chai-as-promised": "^7.1.5", + "@types/cross-spawn": "^6.0.2", "@types/mocha": "^10.0.9", "@types/mock-fs": "^4.13.1", + "c8": "^10.1.2", "chai": "^4.3.7", "chai-as-promised": "^7.1.1", "mocha": "^11.0.1", diff --git a/core/aws-lsp-core/src/util/processUtils.ts b/core/aws-lsp-core/src/util/processUtils.ts index eb54ee6a5d..eca985d548 100644 --- a/core/aws-lsp-core/src/util/processUtils.ts +++ b/core/aws-lsp-core/src/util/processUtils.ts @@ -6,6 +6,7 @@ import * as crossSpawn from 'cross-spawn' import { Logging } from '@aws/language-server-runtimes/server-interface' import { PollingSet } from './pollingSet' import { waitUntil } from './timeoutUtils' +import * as Encoding from 'encoding-japanese' export interface RunParameterContext { /** Reports an error parsed from the stdin/stdout streams. */ @@ -56,6 +57,21 @@ export interface ChildProcessResult { export const eof = Symbol('EOF') +/** + * Decodes a Buffer chunk from a shell process using encoding-japanese + * to handle various encodings including UTF-16LE (Windows cmd.exe /u) + */ +function decodeShellChunk(buf: Buffer): string { + const byteArray = new Uint8Array(buf) + const detectedEncoding = Encoding.detect(byteArray) || 'UTF8' + + return Encoding.convert(byteArray, { + from: detectedEncoding, + to: 'UNICODE', + type: 'string', + }) as string +} + export interface ProcessStats { memory: number cpu: number @@ -328,20 +344,24 @@ export class ChildProcess { this.#childProcess.stdout?.on('error', errorHandler) this.#childProcess.stderr?.on('error', errorHandler) - this.#childProcess.stdout?.on('data', (data: { toString(): string }) => { + this.#childProcess.stdout?.on('data', (chunk: Buffer) => { + const decoded = decodeShellChunk(chunk) + if (options.collect) { - this.#stdoutChunks.push(data.toString()) + this.#stdoutChunks.push(decoded) } - options.onStdout?.(data.toString(), paramsContext) + options.onStdout?.(decoded, paramsContext) }) - this.#childProcess.stderr?.on('data', (data: { toString(): string }) => { + this.#childProcess.stderr?.on('data', (chunk: Buffer) => { + const decoded = decodeShellChunk(chunk) + if (options.collect) { - this.#stderrChunks.push(data.toString()) + this.#stderrChunks.push(decoded) } - options.onStderr?.(data.toString(), paramsContext) + options.onStderr?.(decoded, paramsContext) }) // Emitted when streams are closed. diff --git a/integration-tests/q-agentic-chat-server/.eslintrc.js b/integration-tests/q-agentic-chat-server/.eslintrc.js new file mode 100644 index 0000000000..791f5e0aec --- /dev/null +++ b/integration-tests/q-agentic-chat-server/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + root: true, + parser: '@typescript-eslint/parser', + rules: { + // Add rules here + }, +} diff --git a/integration-tests/q-agentic-chat-server/README.md b/integration-tests/q-agentic-chat-server/README.md new file mode 100644 index 0000000000..753ddf3cfb --- /dev/null +++ b/integration-tests/q-agentic-chat-server/README.md @@ -0,0 +1,35 @@ +# Q Agentic Chat Server Integration Tests + +Integration tests for the AWS Q Agentic Chat Language Server. + +## Setup + +1. Install dependencies: + ```bash + npm install + ``` + +2. Set required environment variables: + ```bash + export TEST_SSO_TOKEN="your-sso-token" + export TEST_SSO_START_URL="your-sso-start-url" + export TEST_PROFILE_ARN="your-profile-arn" + export TEST_RUNTIME_FILE="/path/to/aws-lsp-codewhisperer.js" + ``` + +3. Optional - Enable debug output: + ```bash + export DEBUG = true + ``` + +## Running Tests + +```bash +npm run test-integ +``` + +## Test Structure + +- `src/tests/agenticChatInteg.test.ts` - Main integration test suite +- `src/tests/testUtils.ts` - Utility functions for test setup +- `src/tests/testFixture/` - Test fixture files (excluded from compilation) diff --git a/integration-tests/q-agentic-chat-server/package.json b/integration-tests/q-agentic-chat-server/package.json new file mode 100644 index 0000000000..f562e5521e --- /dev/null +++ b/integration-tests/q-agentic-chat-server/package.json @@ -0,0 +1,28 @@ +{ + "name": "@aws/q-agentic-chat-server-integration-tests", + "version": "0.0.1", + "description": "Integration tests for Q Agentic Chat Server", + "main": "out/index.js", + "scripts": { + "clean": "rm -rf out/ node_modules/ tsconfig.tsbuildinfo .tsbuildinfo", + "compile": "tsc --build && cp -r src/tests/testFixture out/tests/", + "test-integ": "npm run compile && mocha --timeout 30000 \"./out/**/*.test.js\" --retries 2" + }, + "dependencies": { + "@aws/language-server-runtimes": "^0.2.112", + "@aws/lsp-core": "*" + }, + "devDependencies": { + "@types/chai": "^4.3.5", + "@types/chai-as-promised": "^7.1.5", + "@types/mocha": "^10.0.9", + "@types/yauzl-promise": "^4.0.1", + "chai": "^4.3.7", + "chai-as-promised": "^7.1.1", + "jose": "^5.10.0", + "mocha": "^11.0.1", + "ts-lsp-client": "^1.0.3", + "typescript": "^5.0.0", + "yauzl-promise": "^4.0.0" + } +} diff --git a/integration-tests/q-agentic-chat-server/src/tests/agenticChatInteg.test.ts b/integration-tests/q-agentic-chat-server/src/tests/agenticChatInteg.test.ts new file mode 100644 index 0000000000..e79846d1a0 --- /dev/null +++ b/integration-tests/q-agentic-chat-server/src/tests/agenticChatInteg.test.ts @@ -0,0 +1,132 @@ +import * as chai from 'chai' +import { expect } from 'chai' +import * as chaiAsPromised from 'chai-as-promised' +import { ChildProcessWithoutNullStreams, spawn } from 'child_process' +import { describe } from 'node:test' +import * as path from 'path' +import { JSONRPCEndpoint, LspClient } from 'ts-lsp-client' +import { pathToFileURL } from 'url' +import * as crypto from 'crypto' +import { EncryptionInitialization } from '@aws/lsp-core' +import { authenticateServer, decryptObjectWithKey, encryptObjectWithKey } from './testUtils' +import { ChatParams, ChatResult } from '@aws/language-server-runtimes/protocol' + +chai.use(chaiAsPromised) + +describe('Q Agentic Chat Server Integration Tests', async () => { + // In compiled output, __dirname points to out/tests, so testFixture is at out/tests/testFixture + const rootPath = path.resolve(path.join(__dirname, 'testFixture')) + let serverProcess: ChildProcessWithoutNullStreams + let endpoint: JSONRPCEndpoint + let client: LspClient + let encryptionKey: string + let runtimeFile: string + + let testSsoToken: string + let testSsoStartUrl: string + let testProfileArn: string + + before(async () => { + testSsoToken = process.env.TEST_SSO_TOKEN || '' + testSsoStartUrl = process.env.TEST_SSO_START_URL || '' + testProfileArn = process.env.TEST_PROFILE_ARN || '' + + runtimeFile = + process.env.TEST_RUNTIME_FILE || + path.join(__dirname, '../../../../app/aws-lsp-codewhisperer-runtimes/build/aws-lsp-codewhisperer.js') + + serverProcess = spawn( + 'node', + [ + runtimeFile, + '--nolazy', + '--preserve-symlinks', + '--stdio', + '--pre-init-encryption', + '--set-credentials-encryption-key', + ], + { + shell: true, + stdio: 'pipe', + } + ) + + if (process.env.DEBUG) { + serverProcess.stdout.on('data', data => { + console.log(data.toString()) + }) + serverProcess.stderr.on('data', data => { + console.error(data.toString()) + }) + } + + encryptionKey = Buffer.from(crypto.randomBytes(32)).toString('base64') + const encryptionDetails: EncryptionInitialization = { + version: '1.0', + key: encryptionKey, + mode: 'JWT', + } + serverProcess.stdin.write(JSON.stringify(encryptionDetails) + '\n') + + // create an RPC endpoint for the process + endpoint = new JSONRPCEndpoint(serverProcess.stdin, serverProcess.stdout) + + // create the LSP client + client = new LspClient(endpoint) + + const result = await client.initialize({ + processId: serverProcess.pid ?? null, + capabilities: { + textDocument: { + completion: { + completionItem: { + snippetSupport: true, + }, + }, + }, + workspace: { + configuration: false, + }, + }, + initializationOptions: { + aws: { + awsClientCapabilities: { + q: { + developerProfiles: true, + }, + }, + }, + }, + workspaceFolders: [ + { + name: 'workspace', + uri: pathToFileURL(rootPath).href, + }, + ], + rootUri: null, + }) + + await authenticateServer(endpoint, testSsoToken, testSsoStartUrl, testProfileArn) + + client.initialized() + + expect(result.capabilities).to.exist + }) + + after(async () => { + client.exit() + }) + + it('responds to chat prompt', async () => { + const encryptedMessage = await encryptObjectWithKey( + { tabId: 'tab-id', prompt: { prompt: 'Hello' } }, + encryptionKey + ) + const result = await endpoint.send('aws/chat/sendChatPrompt', { message: encryptedMessage }) + const decryptedResult = await decryptObjectWithKey(result, encryptionKey) + + expect(decryptedResult).to.have.property('messageId') + expect(decryptedResult).to.have.property('body') + expect(decryptedResult.body).to.not.be.empty + }) +}) diff --git a/integration-tests/q-agentic-chat-server/src/tests/testFixture/test.py b/integration-tests/q-agentic-chat-server/src/tests/testFixture/test.py new file mode 100644 index 0000000000..869a7f72bc --- /dev/null +++ b/integration-tests/q-agentic-chat-server/src/tests/testFixture/test.py @@ -0,0 +1,2 @@ +def hello(): + print("Hello World") \ No newline at end of file diff --git a/integration-tests/q-agentic-chat-server/src/tests/testFixture/test.ts b/integration-tests/q-agentic-chat-server/src/tests/testFixture/test.ts new file mode 100644 index 0000000000..e9e0dac158 --- /dev/null +++ b/integration-tests/q-agentic-chat-server/src/tests/testFixture/test.ts @@ -0,0 +1,3 @@ +function hello() { + console.log('Hello World') +} diff --git a/integration-tests/q-agentic-chat-server/src/tests/testUtils.ts b/integration-tests/q-agentic-chat-server/src/tests/testUtils.ts new file mode 100644 index 0000000000..d90cc2915b --- /dev/null +++ b/integration-tests/q-agentic-chat-server/src/tests/testUtils.ts @@ -0,0 +1,79 @@ +import { UpdateCredentialsParams } from '@aws/language-server-runtimes/protocol' +import * as jose from 'jose' +import { JSONRPCEndpoint } from 'ts-lsp-client' +import * as fs from 'fs' +import * as os from 'os' +import * as path from 'path' +import * as yauzl from 'yauzl-promise' +import { pipeline } from 'stream/promises' + +/** + * Encrypts an object using JWT with the provided key. + * @param request - The object to encrypt + * @param key - Base64 encoded encryption key + * @returns Promise resolving to encrypted JWT string + */ +export function encryptObjectWithKey(request: T, key: string): Promise { + const payload = new TextEncoder().encode(JSON.stringify(request)) + const keyBuffer = Buffer.from(key, 'base64') + return new jose.CompactEncrypt(payload).setProtectedHeader({ alg: 'dir', enc: 'A256GCM' }).encrypt(keyBuffer) +} + +/** + * Decrypts a JWT string using the provided key. + * @param request - The encrypted JWT string to decrypt + * @param key - Base64 encoded decryption key + * @returns Promise resolving to the decrypted object + */ +export async function decryptObjectWithKey(request: string, key: string): Promise { + const result = await jose.jwtDecrypt(request, Buffer.from(key, 'base64'), { + clockTolerance: 60, // Allow up to 60 seconds to account for clock differences + contentEncryptionAlgorithms: ['A256GCM'], + keyManagementAlgorithms: ['dir'], + }) + + if (!result.payload) { + throw new Error('JWT payload not found') + } + return result.payload as T +} + +function getUpdateCredentialsParams(token: string, startUrl: string): UpdateCredentialsParams { + return { + data: { token }, + encrypted: false, + metadata: { sso: { startUrl } }, + } +} + +/** + * Authenticates the server using SSO token and sets the profile. + * @param endpoint - The JSON-RPC endpoint to authenticate + * @param ssoToken - The SSO token for authentication + * @param startUrl - The SSO start URL + * @param profileArn - The AWS profile ARN to set + */ +export async function authenticateServer( + endpoint: JSONRPCEndpoint, + ssoToken: string, + startUrl: string, + profileArn: string +): Promise { + const updateCredentialsParams = getUpdateCredentialsParams(ssoToken, startUrl) + await updateServerAuthToken(endpoint, updateCredentialsParams) + await setProfile(endpoint, profileArn) +} + +async function updateServerAuthToken( + endpoint: JSONRPCEndpoint, + updateCredentialsRequest: UpdateCredentialsParams +): Promise { + await endpoint.send('aws/credentials/token/update', updateCredentialsRequest) +} + +async function setProfile(endpoint: JSONRPCEndpoint, profileArn: string): Promise { + await endpoint.send('aws/updateConfiguration', { + section: 'aws.q', + settings: { profileArn }, + }) +} diff --git a/integration-tests/q-agentic-chat-server/tsconfig.json b/integration-tests/q-agentic-chat-server/tsconfig.json new file mode 100644 index 0000000000..b16e422497 --- /dev/null +++ b/integration-tests/q-agentic-chat-server/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.packages.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./out" + }, + "include": ["src"], + "exclude": ["src/tests/testFixture"] +} diff --git a/package-lock.json b/package-lock.json index dee2fd4648..2600b94803 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,11 +13,17 @@ "chat-client", "core/*", "server/*", - "server/**" + "server/**", + "integration-tests/*" ], "dependencies": { - "@aws/language-server-runtimes": "^0.2.102", +<<<<<<< HEAD + "@aws/language-server-runtimes": "^0.2.111", +======= + "@aws/language-server-runtimes": "^0.2.112", +>>>>>>> aws/main "@smithy/types": "4.2.0", + "clean": "^4.0.2", "typescript": "^5.8.2" }, "devDependencies": { @@ -46,7 +52,7 @@ "name": "@aws/lsp-antlr4-runtimes", "version": "0.0.1", "dependencies": { - "@aws/language-server-runtimes": "^0.2.102", + "@aws/language-server-runtimes": "^0.2.112", "@aws/lsp-antlr4": "*", "antlr4-c3": "^3.4.1", "antlr4ng": "^3.0.4" @@ -69,6 +75,7 @@ "name": "@aws/lsp-buildspec-runtimes", "version": "0.0.1", "dependencies": { + "@aws/language-server-runtimes": "^0.2.112", "@aws/lsp-buildspec": "^0.0.1" } }, @@ -76,6 +83,7 @@ "name": "@aws/lsp-cloudformation-runtimes", "version": "0.0.1", "dependencies": { + "@aws/language-server-runtimes": "^0.2.112", "@aws/lsp-cloudformation": "^0.0.1" } }, @@ -83,7 +91,7 @@ "name": "@aws/lsp-codewhisperer-runtimes", "version": "0.0.1", "dependencies": { - "@aws/language-server-runtimes": "^0.2.102", + "@aws/language-server-runtimes": "^0.2.112", "@aws/lsp-codewhisperer": "*", "copyfiles": "^2.4.1", "cross-env": "^7.0.3", @@ -116,7 +124,7 @@ "name": "@aws/lsp-identity-runtimes", "version": "0.1.0", "dependencies": { - "@aws/language-server-runtimes": "^0.2.102", + "@aws/language-server-runtimes": "^0.2.112", "@aws/lsp-identity": "^0.0.1" } }, @@ -124,7 +132,7 @@ "name": "@aws/lsp-json-runtimes", "version": "0.0.1", "dependencies": { - "@aws/language-server-runtimes": "^0.2.102", + "@aws/language-server-runtimes": "^0.2.112", "@aws/lsp-json": "*" }, "devDependencies": { @@ -144,7 +152,7 @@ "name": "@aws/lsp-notification-runtimes", "version": "0.1.0", "dependencies": { - "@aws/language-server-runtimes": "^0.2.102", + "@aws/language-server-runtimes": "^0.2.112", "@aws/lsp-notification": "^0.0.1" } }, @@ -152,7 +160,7 @@ "name": "@aws/lsp-partiql-runtimes", "version": "0.0.1", "dependencies": { - "@aws/language-server-runtimes": "^0.2.89", + "@aws/language-server-runtimes": "^0.2.109", "@aws/lsp-partiql": "^0.0.5" }, "devDependencies": { @@ -164,7 +172,8 @@ }, "app/aws-lsp-partiql-runtimes/node_modules/@aws/lsp-partiql": { "version": "0.0.5", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws/lsp-partiql/-/lsp-partiql-0.0.5.tgz", + "integrity": "sha512-WGRJIR2H13avwNWtTp8od1q1s2IJlUNLXft1OQxDV7xKnL4AJ0O/r3+X2oTg3PbT7j8n5a9CY9HzIU8LTMaR0Q==", "dependencies": { "@aws/language-server-runtimes": "^0.2.40", "antlr4-c3": "3.4.2", @@ -176,6 +185,7 @@ "name": "@aws/lsp-s3-runtimes", "version": "0.0.1", "dependencies": { + "@aws/language-server-runtimes": "^0.2.112", "@aws/lsp-s3": "^0.0.1" }, "bin": { @@ -186,7 +196,7 @@ "name": "@aws/lsp-yaml-json-webworker", "version": "0.0.1", "dependencies": { - "@aws/language-server-runtimes": "^0.2.102", + "@aws/language-server-runtimes": "^0.2.112", "@aws/lsp-json": "*", "@aws/lsp-yaml": "*" }, @@ -206,7 +216,7 @@ "name": "@aws/lsp-yaml-runtimes", "version": "0.0.1", "dependencies": { - "@aws/language-server-runtimes": "^0.2.102", + "@aws/language-server-runtimes": "^0.2.112", "@aws/lsp-yaml": "*" }, "devDependencies": { @@ -228,7 +238,7 @@ "version": "0.0.1", "dependencies": { "@aws/hello-world-lsp": "^0.0.1", - "@aws/language-server-runtimes": "^0.2.102" + "@aws/language-server-runtimes": "^0.2.112" }, "devDependencies": { "@types/chai": "^4.3.5", @@ -245,17 +255,19 @@ }, "chat-client": { "name": "@aws/chat-client", - "version": "0.1.22", + "version": "0.1.25", "license": "Apache-2.0", "dependencies": { - "@aws/chat-client-ui-types": "^0.1.47", - "@aws/language-server-runtimes-types": "^0.1.43", - "@aws/mynah-ui": "^4.35.7" + "@aws/chat-client-ui-types": "^0.1.51", + "@aws/language-server-runtimes": "^0.2.112", + "@aws/language-server-runtimes-types": "^0.1.45", + "@aws/mynah-ui": "^4.35.9" }, "devDependencies": { "@types/jsdom": "^21.1.6", "@types/mocha": "^10.0.9", "assert": "^2.0.0", + "c8": "^10.1.2", "jsdom": "^24.0.0", "sinon": "^19.0.2", "ts-mocha": "^11.1.0", @@ -272,7 +284,7 @@ "@aws-sdk/credential-providers": "^3.731.1", "@aws-sdk/types": "^3.734.0", "@aws/chat-client-ui-types": "^0.1.40", - "@aws/language-server-runtimes": "^0.2.102", + "@aws/language-server-runtimes": "^0.2.112", "@types/uuid": "^9.0.8", "@types/vscode": "^1.98.0", "jose": "^5.2.4", @@ -285,9 +297,10 @@ }, "core/aws-lsp-core": { "name": "@aws/lsp-core", - "version": "0.0.11", + "version": "0.0.12", "license": "Apache-2.0", "dependencies": { + "@aws/language-server-runtimes": "^0.2.112", "@gerhobbelt/gitignore-parser": "^0.2.0-9", "cross-spawn": "7.0.6", "jose": "^5.2.4", @@ -302,6 +315,7 @@ "@types/cross-spawn": "^6.0.2", "@types/mocha": "^10.0.9", "@types/mock-fs": "^4.13.1", + "c8": "^10.1.2", "chai": "^4.3.7", "chai-as-promised": "^7.1.1", "mocha": "^11.0.1", @@ -313,10 +327,32 @@ "node": ">=18.0.0" } }, + "integration-tests/q-agentic-chat-server": { + "name": "@aws/q-agentic-chat-server-integration-tests", + "version": "0.0.1", + "dependencies": { + "@aws/language-server-runtimes": "^0.2.112", + "@aws/lsp-core": "*" + }, + "devDependencies": { + "@types/chai": "^4.3.5", + "@types/chai-as-promised": "^7.1.5", + "@types/mocha": "^10.0.9", + "@types/yauzl-promise": "^4.0.1", + "chai": "^4.3.7", + "chai-as-promised": "^7.1.1", + "jose": "^5.10.0", + "mocha": "^11.0.1", + "ts-lsp-client": "^1.0.3", + "typescript": "^5.0.0", + "yauzl-promise": "^4.0.0" + } + }, "node_modules/@ampproject/remapping": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" @@ -378,7 +414,8 @@ }, "node_modules/@amzn/amazon-q-developer-streaming-client/node_modules/@aws-sdk/types": { "version": "3.731.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.731.0.tgz", + "integrity": "sha512-NrdkJg6oOUbXR2r9WvHP408CLyvST8cJfp1/jP9pemtjvjPoh6NukbCtiSFdOOb1eryP02CnqQWItfJC1p2Y/Q==", "dependencies": { "@smithy/types": "^4.0.0", "tslib": "^2.6.2" @@ -389,7 +426,8 @@ }, "node_modules/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/abort-controller": { "version": "4.0.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.4.tgz", + "integrity": "sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA==", "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -400,7 +438,8 @@ }, "node_modules/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/node-http-handler": { "version": "4.0.6", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.6.tgz", + "integrity": "sha512-NqbmSz7AW2rvw4kXhKGrYTiJVDHnMsFnX4i+/FzcZAfbOBauPYs2ekuECkSbtqaxETLLTu9Rl/ex6+I2BKErPA==", "dependencies": { "@smithy/abort-controller": "^4.0.4", "@smithy/protocol-http": "^5.1.2", @@ -414,7 +453,8 @@ }, "node_modules/@amzn/amazon-q-developer-streaming-client/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -424,11 +464,12 @@ }, "node_modules/@amzn/amazon-q-developer-streaming-client/node_modules/uuid": { "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], - "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -488,7 +529,6 @@ "version": "3.731.1", "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.731.1.tgz", "integrity": "sha512-t34GOPwBZsX7zGHjiTXmMHGY3kHM7fLiQ60Jqk0On9P0ASHTDE5U75RgCXboE3u+qEv9wyKyaqMNyMWj9qQlFg==", - "license": "Apache-2.0", "dependencies": { "@aws-sdk/nested-clients": "3.731.1", "@aws-sdk/types": "3.731.0", @@ -505,7 +545,6 @@ "version": "3.731.0", "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.731.0.tgz", "integrity": "sha512-NrdkJg6oOUbXR2r9WvHP408CLyvST8cJfp1/jP9pemtjvjPoh6NukbCtiSFdOOb1eryP02CnqQWItfJC1p2Y/Q==", - "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.0.0", "tslib": "^2.6.2" @@ -518,7 +557,6 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.4.tgz", "integrity": "sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA==", - "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -531,7 +569,6 @@ "version": "4.0.6", "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.6.tgz", "integrity": "sha512-NqbmSz7AW2rvw4kXhKGrYTiJVDHnMsFnX4i+/FzcZAfbOBauPYs2ekuECkSbtqaxETLLTu9Rl/ex6+I2BKErPA==", - "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^4.0.4", "@smithy/protocol-http": "^5.1.2", @@ -547,7 +584,6 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", - "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -563,7 +599,6 @@ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], - "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -574,8 +609,9 @@ }, "node_modules/@asamuzakjp/css-color": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", + "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==", "dev": true, - "license": "MIT", "dependencies": { "@csstools/css-calc": "^2.1.3", "@csstools/css-color-parser": "^3.0.9", @@ -586,12 +622,14 @@ }, "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { "version": "10.4.3", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true }, "node_modules/@aws-crypto/crc32": { "version": "5.2.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", + "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", @@ -603,7 +641,8 @@ }, "node_modules/@aws-crypto/crc32c": { "version": "5.2.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz", + "integrity": "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==", "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", @@ -612,7 +651,8 @@ }, "node_modules/@aws-crypto/sha1-browser": { "version": "5.2.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz", + "integrity": "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==", "dependencies": { "@aws-crypto/supports-web-crypto": "^5.2.0", "@aws-crypto/util": "^5.2.0", @@ -624,7 +664,8 @@ }, "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/is-array-buffer": { "version": "2.2.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", "dependencies": { "tslib": "^2.6.2" }, @@ -634,7 +675,8 @@ }, "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-buffer-from": { "version": "2.2.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" @@ -645,7 +687,8 @@ }, "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-utf8": { "version": "2.3.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -656,7 +699,8 @@ }, "node_modules/@aws-crypto/sha256-browser": { "version": "5.2.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", "dependencies": { "@aws-crypto/sha256-js": "^5.2.0", "@aws-crypto/supports-web-crypto": "^5.2.0", @@ -669,7 +713,8 @@ }, "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { "version": "2.2.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", "dependencies": { "tslib": "^2.6.2" }, @@ -679,7 +724,8 @@ }, "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { "version": "2.2.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" @@ -690,7 +736,8 @@ }, "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { "version": "2.3.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -701,7 +748,8 @@ }, "node_modules/@aws-crypto/sha256-js": { "version": "5.2.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", "dependencies": { "@aws-crypto/util": "^5.2.0", "@aws-sdk/types": "^3.222.0", @@ -713,14 +761,16 @@ }, "node_modules/@aws-crypto/supports-web-crypto": { "version": "5.2.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", "dependencies": { "tslib": "^2.6.2" } }, "node_modules/@aws-crypto/util": { "version": "5.2.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", @@ -729,7 +779,8 @@ }, "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { "version": "2.2.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", "dependencies": { "tslib": "^2.6.2" }, @@ -739,7 +790,8 @@ }, "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { "version": "2.2.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", "dependencies": { "@smithy/is-array-buffer": "^2.2.0", "tslib": "^2.6.2" @@ -750,7 +802,8 @@ }, "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { "version": "2.3.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", "dependencies": { "@smithy/util-buffer-from": "^2.2.0", "tslib": "^2.6.2" @@ -760,44 +813,45 @@ } }, "node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.835.0", + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.839.0.tgz", + "integrity": "sha512-Pq/A5W46Z0JrRTIl4eVvguQjXWwVHiiBC3WyrLxlIH0hMS6bILgC7H+z+JiCm4mXR/oF2ZobQ8Wei/Sga1Uxkw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.835.0", - "@aws-sdk/credential-provider-node": "3.835.0", + "@aws-sdk/core": "3.839.0", + "@aws-sdk/credential-provider-node": "3.839.0", "@aws-sdk/middleware-host-header": "3.821.0", "@aws-sdk/middleware-logger": "3.821.0", "@aws-sdk/middleware-recursion-detection": "3.821.0", - "@aws-sdk/middleware-user-agent": "3.835.0", + "@aws-sdk/middleware-user-agent": "3.839.0", "@aws-sdk/region-config-resolver": "3.821.0", "@aws-sdk/types": "3.821.0", "@aws-sdk/util-endpoints": "3.828.0", "@aws-sdk/util-user-agent-browser": "3.821.0", - "@aws-sdk/util-user-agent-node": "3.835.0", + "@aws-sdk/util-user-agent-node": "3.839.0", "@smithy/config-resolver": "^4.1.4", - "@smithy/core": "^3.5.3", + "@smithy/core": "^3.6.0", "@smithy/fetch-http-handler": "^5.0.4", "@smithy/hash-node": "^4.0.4", "@smithy/invalid-dependency": "^4.0.4", "@smithy/middleware-content-length": "^4.0.4", - "@smithy/middleware-endpoint": "^4.1.12", - "@smithy/middleware-retry": "^4.1.13", + "@smithy/middleware-endpoint": "^4.1.13", + "@smithy/middleware-retry": "^4.1.14", "@smithy/middleware-serde": "^4.0.8", "@smithy/middleware-stack": "^4.0.4", "@smithy/node-config-provider": "^4.1.3", "@smithy/node-http-handler": "^4.0.6", "@smithy/protocol-http": "^5.1.2", - "@smithy/smithy-client": "^4.4.4", + "@smithy/smithy-client": "^4.4.5", "@smithy/types": "^4.3.1", "@smithy/url-parser": "^4.0.4", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.20", - "@smithy/util-defaults-mode-node": "^4.0.20", + "@smithy/util-defaults-mode-browser": "^4.0.21", + "@smithy/util-defaults-mode-node": "^4.0.21", "@smithy/util-endpoints": "^3.0.6", "@smithy/util-middleware": "^4.0.4", "@smithy/util-retry": "^4.0.6", @@ -809,43 +863,44 @@ } }, "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/client-sso": { - "version": "3.835.0", + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.839.0.tgz", + "integrity": "sha512-AZABysUhbfcwXVlMo97/vwHgsfJNF81wypCAowpqAJkSjP2KrqsqHpb71/RoR2w8JGmEnBBXRD4wIxDhnmifWg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.835.0", + "@aws-sdk/core": "3.839.0", "@aws-sdk/middleware-host-header": "3.821.0", "@aws-sdk/middleware-logger": "3.821.0", "@aws-sdk/middleware-recursion-detection": "3.821.0", - "@aws-sdk/middleware-user-agent": "3.835.0", + "@aws-sdk/middleware-user-agent": "3.839.0", "@aws-sdk/region-config-resolver": "3.821.0", "@aws-sdk/types": "3.821.0", "@aws-sdk/util-endpoints": "3.828.0", "@aws-sdk/util-user-agent-browser": "3.821.0", - "@aws-sdk/util-user-agent-node": "3.835.0", + "@aws-sdk/util-user-agent-node": "3.839.0", "@smithy/config-resolver": "^4.1.4", - "@smithy/core": "^3.5.3", + "@smithy/core": "^3.6.0", "@smithy/fetch-http-handler": "^5.0.4", "@smithy/hash-node": "^4.0.4", "@smithy/invalid-dependency": "^4.0.4", "@smithy/middleware-content-length": "^4.0.4", - "@smithy/middleware-endpoint": "^4.1.12", - "@smithy/middleware-retry": "^4.1.13", + "@smithy/middleware-endpoint": "^4.1.13", + "@smithy/middleware-retry": "^4.1.14", "@smithy/middleware-serde": "^4.0.8", "@smithy/middleware-stack": "^4.0.4", "@smithy/node-config-provider": "^4.1.3", "@smithy/node-http-handler": "^4.0.6", "@smithy/protocol-http": "^5.1.2", - "@smithy/smithy-client": "^4.4.4", + "@smithy/smithy-client": "^4.4.5", "@smithy/types": "^4.3.1", "@smithy/url-parser": "^4.0.4", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.20", - "@smithy/util-defaults-mode-node": "^4.0.20", + "@smithy/util-defaults-mode-browser": "^4.0.21", + "@smithy/util-defaults-mode-node": "^4.0.21", "@smithy/util-endpoints": "^3.0.6", "@smithy/util-middleware": "^4.0.4", "@smithy/util-retry": "^4.0.6", @@ -857,18 +912,19 @@ } }, "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/core": { - "version": "3.835.0", + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.839.0.tgz", + "integrity": "sha512-KdwL5RaK7eUIlOpdOoZ5u+2t4X1rdX/MTZgz3IV/aBzjVUoGsp+uUnbyqXomLQSUitPHp72EE/NHDsvWW/IHvQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.821.0", "@aws-sdk/xml-builder": "3.821.0", - "@smithy/core": "^3.5.3", + "@smithy/core": "^3.6.0", "@smithy/node-config-provider": "^4.1.3", "@smithy/property-provider": "^4.0.4", "@smithy/protocol-http": "^5.1.2", "@smithy/signature-v4": "^5.1.2", - "@smithy/smithy-client": "^4.4.4", + "@smithy/smithy-client": "^4.4.5", "@smithy/types": "^4.3.1", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", @@ -882,11 +938,12 @@ } }, "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/credential-provider-env": { - "version": "3.835.0", + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.839.0.tgz", + "integrity": "sha512-cWTadewPPz1OvObZJB+olrgh8VwcgIVcT293ZUT9V0CMF0UU7QaPwJP7uNXcNxltTh+sk1yhjH4UlcnJigZZbA==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.835.0", + "@aws-sdk/core": "3.839.0", "@aws-sdk/types": "3.821.0", "@smithy/property-provider": "^4.0.4", "@smithy/types": "^4.3.1", @@ -897,17 +954,18 @@ } }, "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.835.0", + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.839.0.tgz", + "integrity": "sha512-fv0BZwrDhWDju4D1MCLT4I2aPjr0dVQ6P+MpqvcGNOA41Oa9UdRhYTV5iuy5NLXzIzoCmnS+XfSq5Kbsf6//xw==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.835.0", + "@aws-sdk/core": "3.839.0", "@aws-sdk/types": "3.821.0", "@smithy/fetch-http-handler": "^5.0.4", "@smithy/node-http-handler": "^4.0.6", "@smithy/property-provider": "^4.0.4", "@smithy/protocol-http": "^5.1.2", - "@smithy/smithy-client": "^4.4.4", + "@smithy/smithy-client": "^4.4.5", "@smithy/types": "^4.3.1", "@smithy/util-stream": "^4.2.2", "tslib": "^2.6.2" @@ -917,17 +975,18 @@ } }, "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.835.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.835.0", - "@aws-sdk/credential-provider-env": "3.835.0", - "@aws-sdk/credential-provider-http": "3.835.0", - "@aws-sdk/credential-provider-process": "3.835.0", - "@aws-sdk/credential-provider-sso": "3.835.0", - "@aws-sdk/credential-provider-web-identity": "3.835.0", - "@aws-sdk/nested-clients": "3.835.0", + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.839.0.tgz", + "integrity": "sha512-GHm0hF4CiDxIDR7TauMaA6iI55uuSqRxMBcqTAHaTPm6+h1A+MS+ysQMxZ+Jvwtoy8WmfTIGrJVxSCw0sK2hvA==", + "dev": true, + "dependencies": { + "@aws-sdk/core": "3.839.0", + "@aws-sdk/credential-provider-env": "3.839.0", + "@aws-sdk/credential-provider-http": "3.839.0", + "@aws-sdk/credential-provider-process": "3.839.0", + "@aws-sdk/credential-provider-sso": "3.839.0", + "@aws-sdk/credential-provider-web-identity": "3.839.0", + "@aws-sdk/nested-clients": "3.839.0", "@aws-sdk/types": "3.821.0", "@smithy/credential-provider-imds": "^4.0.6", "@smithy/property-provider": "^4.0.4", @@ -940,16 +999,17 @@ } }, "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.835.0", + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.839.0.tgz", + "integrity": "sha512-7bR+U2h+ft0V8chyeu9Bh/pvau4ZkQMeRt5f0dAULoepZQ77QQVRP4H04yJPTg9DCtqbVULQ3uf5YOp1/08vQw==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.835.0", - "@aws-sdk/credential-provider-http": "3.835.0", - "@aws-sdk/credential-provider-ini": "3.835.0", - "@aws-sdk/credential-provider-process": "3.835.0", - "@aws-sdk/credential-provider-sso": "3.835.0", - "@aws-sdk/credential-provider-web-identity": "3.835.0", + "@aws-sdk/credential-provider-env": "3.839.0", + "@aws-sdk/credential-provider-http": "3.839.0", + "@aws-sdk/credential-provider-ini": "3.839.0", + "@aws-sdk/credential-provider-process": "3.839.0", + "@aws-sdk/credential-provider-sso": "3.839.0", + "@aws-sdk/credential-provider-web-identity": "3.839.0", "@aws-sdk/types": "3.821.0", "@smithy/credential-provider-imds": "^4.0.6", "@smithy/property-provider": "^4.0.4", @@ -962,11 +1022,12 @@ } }, "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/credential-provider-process": { - "version": "3.835.0", + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.839.0.tgz", + "integrity": "sha512-qShpekjociUZ+isyQNa0P7jo+0q3N2+0eJDg8SGyP6K6hHTcGfiqxTDps+IKl6NreCPhZCBzyI9mWkP0xSDR6g==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.835.0", + "@aws-sdk/core": "3.839.0", "@aws-sdk/types": "3.821.0", "@smithy/property-provider": "^4.0.4", "@smithy/shared-ini-file-loader": "^4.0.4", @@ -978,13 +1039,14 @@ } }, "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.835.0", + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.839.0.tgz", + "integrity": "sha512-w10zBLHhU8SBQcdrSPMI02haLoRGZg+gP7mH/Er8VhIXfHefbr7o4NirmB0hwdw/YAH8MLlC9jj7c2SJlsNhYA==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.835.0", - "@aws-sdk/core": "3.835.0", - "@aws-sdk/token-providers": "3.835.0", + "@aws-sdk/client-sso": "3.839.0", + "@aws-sdk/core": "3.839.0", + "@aws-sdk/token-providers": "3.839.0", "@aws-sdk/types": "3.821.0", "@smithy/property-provider": "^4.0.4", "@smithy/shared-ini-file-loader": "^4.0.4", @@ -996,12 +1058,13 @@ } }, "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.835.0", + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.839.0.tgz", + "integrity": "sha512-EvqTc7J1kgmiuxknpCp1S60hyMQvmKxsI5uXzQtcogl/N55rxiXEqnCLI5q6p33q91PJegrcMCM5Q17Afhm5qA==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.835.0", - "@aws-sdk/nested-clients": "3.835.0", + "@aws-sdk/core": "3.839.0", + "@aws-sdk/nested-clients": "3.839.0", "@aws-sdk/types": "3.821.0", "@smithy/property-provider": "^4.0.4", "@smithy/types": "^4.3.1", @@ -1013,8 +1076,9 @@ }, "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/middleware-host-header": { "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.821.0.tgz", + "integrity": "sha512-xSMR+sopSeWGx5/4pAGhhfMvGBHioVBbqGvDs6pG64xfNwM5vq5s5v6D04e2i+uSTj4qGa71dLUs5I0UzAK3sw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.821.0", "@smithy/protocol-http": "^5.1.2", @@ -1027,8 +1091,9 @@ }, "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/middleware-logger": { "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.821.0.tgz", + "integrity": "sha512-0cvI0ipf2tGx7fXYEEN5fBeZDz2RnHyb9xftSgUsEq7NBxjV0yTZfLJw6Za5rjE6snC80dRN8+bTNR1tuG89zA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.821.0", "@smithy/types": "^4.3.1", @@ -1040,8 +1105,9 @@ }, "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/middleware-recursion-detection": { "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.821.0.tgz", + "integrity": "sha512-efmaifbhBoqKG3bAoEfDdcM8hn1psF+4qa7ykWuYmfmah59JBeqHLfz5W9m9JoTwoKPkFcVLWZxnyZzAnVBOIg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.821.0", "@smithy/protocol-http": "^5.1.2", @@ -1053,14 +1119,15 @@ } }, "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.835.0", + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.839.0.tgz", + "integrity": "sha512-2u74uRM1JWq6Sf7+3YpjejPM9YkomGt4kWhrmooIBEq1k5r2GTbkH7pNCxBQwBueXM21jAGVDxxeClpTx+5hig==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.835.0", + "@aws-sdk/core": "3.839.0", "@aws-sdk/types": "3.821.0", "@aws-sdk/util-endpoints": "3.828.0", - "@smithy/core": "^3.5.3", + "@smithy/core": "^3.6.0", "@smithy/protocol-http": "^5.1.2", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -1070,43 +1137,44 @@ } }, "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/nested-clients": { - "version": "3.835.0", + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.839.0.tgz", + "integrity": "sha512-Glic0pg2THYP3aRhJORwJJBe1JLtJoEdWV/MFZNyzCklfMwEzpWtZAyxy+tQyFmMeW50uBAnh2R0jhMMcf257w==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.835.0", + "@aws-sdk/core": "3.839.0", "@aws-sdk/middleware-host-header": "3.821.0", "@aws-sdk/middleware-logger": "3.821.0", "@aws-sdk/middleware-recursion-detection": "3.821.0", - "@aws-sdk/middleware-user-agent": "3.835.0", + "@aws-sdk/middleware-user-agent": "3.839.0", "@aws-sdk/region-config-resolver": "3.821.0", "@aws-sdk/types": "3.821.0", "@aws-sdk/util-endpoints": "3.828.0", "@aws-sdk/util-user-agent-browser": "3.821.0", - "@aws-sdk/util-user-agent-node": "3.835.0", + "@aws-sdk/util-user-agent-node": "3.839.0", "@smithy/config-resolver": "^4.1.4", - "@smithy/core": "^3.5.3", + "@smithy/core": "^3.6.0", "@smithy/fetch-http-handler": "^5.0.4", "@smithy/hash-node": "^4.0.4", "@smithy/invalid-dependency": "^4.0.4", "@smithy/middleware-content-length": "^4.0.4", - "@smithy/middleware-endpoint": "^4.1.12", - "@smithy/middleware-retry": "^4.1.13", + "@smithy/middleware-endpoint": "^4.1.13", + "@smithy/middleware-retry": "^4.1.14", "@smithy/middleware-serde": "^4.0.8", "@smithy/middleware-stack": "^4.0.4", "@smithy/node-config-provider": "^4.1.3", "@smithy/node-http-handler": "^4.0.6", "@smithy/protocol-http": "^5.1.2", - "@smithy/smithy-client": "^4.4.4", + "@smithy/smithy-client": "^4.4.5", "@smithy/types": "^4.3.1", "@smithy/url-parser": "^4.0.4", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.20", - "@smithy/util-defaults-mode-node": "^4.0.20", + "@smithy/util-defaults-mode-browser": "^4.0.21", + "@smithy/util-defaults-mode-node": "^4.0.21", "@smithy/util-endpoints": "^3.0.6", "@smithy/util-middleware": "^4.0.4", "@smithy/util-retry": "^4.0.6", @@ -1119,8 +1187,9 @@ }, "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/region-config-resolver": { "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.821.0.tgz", + "integrity": "sha512-t8og+lRCIIy5nlId0bScNpCkif8sc0LhmtaKsbm0ZPm3sCa/WhCbSZibjbZ28FNjVCV+p0D9RYZx0VDDbtWyjw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.821.0", "@smithy/node-config-provider": "^4.1.3", @@ -1135,8 +1204,9 @@ }, "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/util-user-agent-browser": { "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.821.0.tgz", + "integrity": "sha512-irWZHyM0Jr1xhC+38OuZ7JB6OXMLPZlj48thElpsO1ZSLRkLZx5+I7VV6k3sp2yZ7BYbKz/G2ojSv4wdm7XTLw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@aws-sdk/types": "3.821.0", "@smithy/types": "^4.3.1", @@ -1145,11 +1215,12 @@ } }, "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.835.0", + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.839.0.tgz", + "integrity": "sha512-MuunkIG1bJVMtTH7MbjXOrhHleU5wjHz5eCAUc6vj7M9rwol71nqjj9b8RLnkO5gsJcKc29Qk8iV6xQuzKWNMw==", "dev": true, - "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "3.835.0", + "@aws-sdk/middleware-user-agent": "3.839.0", "@aws-sdk/types": "3.821.0", "@smithy/node-config-provider": "^4.1.3", "@smithy/types": "^4.3.1", @@ -1169,8 +1240,9 @@ }, "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/abort-controller": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.4.tgz", + "integrity": "sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -1181,8 +1253,9 @@ }, "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/node-http-handler": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.6.tgz", + "integrity": "sha512-NqbmSz7AW2rvw4kXhKGrYTiJVDHnMsFnX4i+/FzcZAfbOBauPYs2ekuECkSbtqaxETLLTu9Rl/ex6+I2BKErPA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^4.0.4", "@smithy/protocol-http": "^5.1.2", @@ -1196,8 +1269,9 @@ }, "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/types": { "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -1743,110 +1817,98 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3": { - "version": "3.837.0", + "node_modules/@aws-sdk/client-iam": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-iam/-/client-iam-3.840.0.tgz", + "integrity": "sha512-+HWqpTwXQYhFzgwfjGFHfo+a0mRQwYq29BEYlgfcydo8UOApc1oxsVmEmnYh2nbukaefUkOaMDb1xORybsE6Lw==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.835.0", - "@aws-sdk/credential-provider-node": "3.835.0", - "@aws-sdk/middleware-bucket-endpoint": "3.830.0", - "@aws-sdk/middleware-expect-continue": "3.821.0", - "@aws-sdk/middleware-flexible-checksums": "3.835.0", - "@aws-sdk/middleware-host-header": "3.821.0", - "@aws-sdk/middleware-location-constraint": "3.821.0", - "@aws-sdk/middleware-logger": "3.821.0", - "@aws-sdk/middleware-recursion-detection": "3.821.0", - "@aws-sdk/middleware-sdk-s3": "3.835.0", - "@aws-sdk/middleware-ssec": "3.821.0", - "@aws-sdk/middleware-user-agent": "3.835.0", - "@aws-sdk/region-config-resolver": "3.821.0", - "@aws-sdk/signature-v4-multi-region": "3.835.0", - "@aws-sdk/types": "3.821.0", - "@aws-sdk/util-endpoints": "3.828.0", - "@aws-sdk/util-user-agent-browser": "3.821.0", - "@aws-sdk/util-user-agent-node": "3.835.0", - "@aws-sdk/xml-builder": "3.821.0", + "@aws-sdk/core": "3.840.0", + "@aws-sdk/credential-provider-node": "3.840.0", + "@aws-sdk/middleware-host-header": "3.840.0", + "@aws-sdk/middleware-logger": "3.840.0", + "@aws-sdk/middleware-recursion-detection": "3.840.0", + "@aws-sdk/middleware-user-agent": "3.840.0", + "@aws-sdk/region-config-resolver": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-endpoints": "3.840.0", + "@aws-sdk/util-user-agent-browser": "3.840.0", + "@aws-sdk/util-user-agent-node": "3.840.0", "@smithy/config-resolver": "^4.1.4", - "@smithy/core": "^3.5.3", - "@smithy/eventstream-serde-browser": "^4.0.4", - "@smithy/eventstream-serde-config-resolver": "^4.1.2", - "@smithy/eventstream-serde-node": "^4.0.4", + "@smithy/core": "^3.6.0", "@smithy/fetch-http-handler": "^5.0.4", - "@smithy/hash-blob-browser": "^4.0.4", "@smithy/hash-node": "^4.0.4", - "@smithy/hash-stream-node": "^4.0.4", "@smithy/invalid-dependency": "^4.0.4", - "@smithy/md5-js": "^4.0.4", "@smithy/middleware-content-length": "^4.0.4", - "@smithy/middleware-endpoint": "^4.1.12", - "@smithy/middleware-retry": "^4.1.13", + "@smithy/middleware-endpoint": "^4.1.13", + "@smithy/middleware-retry": "^4.1.14", "@smithy/middleware-serde": "^4.0.8", "@smithy/middleware-stack": "^4.0.4", "@smithy/node-config-provider": "^4.1.3", "@smithy/node-http-handler": "^4.0.6", "@smithy/protocol-http": "^5.1.2", - "@smithy/smithy-client": "^4.4.4", + "@smithy/smithy-client": "^4.4.5", "@smithy/types": "^4.3.1", "@smithy/url-parser": "^4.0.4", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.20", - "@smithy/util-defaults-mode-node": "^4.0.20", + "@smithy/util-defaults-mode-browser": "^4.0.21", + "@smithy/util-defaults-mode-node": "^4.0.21", "@smithy/util-endpoints": "^3.0.6", "@smithy/util-middleware": "^4.0.4", "@smithy/util-retry": "^4.0.6", - "@smithy/util-stream": "^4.2.2", "@smithy/util-utf8": "^4.0.0", - "@smithy/util-waiter": "^4.0.5", - "@types/uuid": "^9.0.1", - "tslib": "^2.6.2", - "uuid": "^9.0.1" + "@smithy/util-waiter": "^4.0.6", + "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/client-sso": { - "version": "3.835.0", + "node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/client-sso": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.840.0.tgz", + "integrity": "sha512-3Zp+FWN2hhmKdpS0Ragi5V2ZPsZNScE3jlbgoJjzjI/roHZqO+e3/+XFN4TlM0DsPKYJNp+1TAjmhxN6rOnfYA==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.835.0", - "@aws-sdk/middleware-host-header": "3.821.0", - "@aws-sdk/middleware-logger": "3.821.0", - "@aws-sdk/middleware-recursion-detection": "3.821.0", - "@aws-sdk/middleware-user-agent": "3.835.0", - "@aws-sdk/region-config-resolver": "3.821.0", - "@aws-sdk/types": "3.821.0", - "@aws-sdk/util-endpoints": "3.828.0", - "@aws-sdk/util-user-agent-browser": "3.821.0", - "@aws-sdk/util-user-agent-node": "3.835.0", + "@aws-sdk/core": "3.840.0", + "@aws-sdk/middleware-host-header": "3.840.0", + "@aws-sdk/middleware-logger": "3.840.0", + "@aws-sdk/middleware-recursion-detection": "3.840.0", + "@aws-sdk/middleware-user-agent": "3.840.0", + "@aws-sdk/region-config-resolver": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-endpoints": "3.840.0", + "@aws-sdk/util-user-agent-browser": "3.840.0", + "@aws-sdk/util-user-agent-node": "3.840.0", "@smithy/config-resolver": "^4.1.4", - "@smithy/core": "^3.5.3", + "@smithy/core": "^3.6.0", "@smithy/fetch-http-handler": "^5.0.4", "@smithy/hash-node": "^4.0.4", "@smithy/invalid-dependency": "^4.0.4", "@smithy/middleware-content-length": "^4.0.4", - "@smithy/middleware-endpoint": "^4.1.12", - "@smithy/middleware-retry": "^4.1.13", + "@smithy/middleware-endpoint": "^4.1.13", + "@smithy/middleware-retry": "^4.1.14", "@smithy/middleware-serde": "^4.0.8", "@smithy/middleware-stack": "^4.0.4", "@smithy/node-config-provider": "^4.1.3", "@smithy/node-http-handler": "^4.0.6", "@smithy/protocol-http": "^5.1.2", - "@smithy/smithy-client": "^4.4.4", + "@smithy/smithy-client": "^4.4.5", "@smithy/types": "^4.3.1", "@smithy/url-parser": "^4.0.4", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.20", - "@smithy/util-defaults-mode-node": "^4.0.20", + "@smithy/util-defaults-mode-browser": "^4.0.21", + "@smithy/util-defaults-mode-node": "^4.0.21", "@smithy/util-endpoints": "^3.0.6", "@smithy/util-middleware": "^4.0.4", "@smithy/util-retry": "^4.0.6", @@ -1857,18 +1919,21 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/core": { - "version": "3.835.0", + "node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/core": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.840.0.tgz", + "integrity": "sha512-x3Zgb39tF1h2XpU+yA4OAAQlW6LVEfXNlSedSYJ7HGKXqA/E9h3rWQVpYfhXXVVsLdYXdNw5KBUkoAoruoZSZA==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.821.0", + "@aws-sdk/types": "3.840.0", "@aws-sdk/xml-builder": "3.821.0", - "@smithy/core": "^3.5.3", + "@smithy/core": "^3.6.0", "@smithy/node-config-provider": "^4.1.3", "@smithy/property-provider": "^4.0.4", "@smithy/protocol-http": "^5.1.2", "@smithy/signature-v4": "^5.1.2", - "@smithy/smithy-client": "^4.4.4", + "@smithy/smithy-client": "^4.4.5", "@smithy/types": "^4.3.1", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", @@ -1881,12 +1946,15 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-env": { - "version": "3.835.0", + "node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.840.0.tgz", + "integrity": "sha512-EzF6VcJK7XvQ/G15AVEfJzN2mNXU8fcVpXo4bRyr1S6t2q5zx6UPH/XjDbn18xyUmOq01t+r8gG+TmHEVo18fA==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.835.0", - "@aws-sdk/types": "3.821.0", + "@aws-sdk/core": "3.840.0", + "@aws-sdk/types": "3.840.0", "@smithy/property-provider": "^4.0.4", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -1895,17 +1963,20 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.835.0", + "node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.840.0.tgz", + "integrity": "sha512-wbnUiPGLVea6mXbUh04fu+VJmGkQvmToPeTYdHE8eRZq3NRDi3t3WltT+jArLBKD/4NppRpMjf2ju4coMCz91g==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.835.0", - "@aws-sdk/types": "3.821.0", + "@aws-sdk/core": "3.840.0", + "@aws-sdk/types": "3.840.0", "@smithy/fetch-http-handler": "^5.0.4", "@smithy/node-http-handler": "^4.0.6", "@smithy/property-provider": "^4.0.4", "@smithy/protocol-http": "^5.1.2", - "@smithy/smithy-client": "^4.4.4", + "@smithy/smithy-client": "^4.4.5", "@smithy/types": "^4.3.1", "@smithy/util-stream": "^4.2.2", "tslib": "^2.6.2" @@ -1914,18 +1985,21 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.835.0", + "node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.840.0.tgz", + "integrity": "sha512-7F290BsWydShHb+7InXd+IjJc3mlEIm9I0R57F/Pjl1xZB69MdkhVGCnuETWoBt4g53ktJd6NEjzm/iAhFXFmw==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.835.0", - "@aws-sdk/credential-provider-env": "3.835.0", - "@aws-sdk/credential-provider-http": "3.835.0", - "@aws-sdk/credential-provider-process": "3.835.0", - "@aws-sdk/credential-provider-sso": "3.835.0", - "@aws-sdk/credential-provider-web-identity": "3.835.0", - "@aws-sdk/nested-clients": "3.835.0", - "@aws-sdk/types": "3.821.0", + "@aws-sdk/core": "3.840.0", + "@aws-sdk/credential-provider-env": "3.840.0", + "@aws-sdk/credential-provider-http": "3.840.0", + "@aws-sdk/credential-provider-process": "3.840.0", + "@aws-sdk/credential-provider-sso": "3.840.0", + "@aws-sdk/credential-provider-web-identity": "3.840.0", + "@aws-sdk/nested-clients": "3.840.0", + "@aws-sdk/types": "3.840.0", "@smithy/credential-provider-imds": "^4.0.6", "@smithy/property-provider": "^4.0.4", "@smithy/shared-ini-file-loader": "^4.0.4", @@ -1936,17 +2010,20 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.835.0", + "node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.840.0.tgz", + "integrity": "sha512-KufP8JnxA31wxklLm63evUPSFApGcH8X86z3mv9SRbpCm5ycgWIGVCTXpTOdgq6rPZrwT9pftzv2/b4mV/9clg==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.835.0", - "@aws-sdk/credential-provider-http": "3.835.0", - "@aws-sdk/credential-provider-ini": "3.835.0", - "@aws-sdk/credential-provider-process": "3.835.0", - "@aws-sdk/credential-provider-sso": "3.835.0", - "@aws-sdk/credential-provider-web-identity": "3.835.0", - "@aws-sdk/types": "3.821.0", + "@aws-sdk/credential-provider-env": "3.840.0", + "@aws-sdk/credential-provider-http": "3.840.0", + "@aws-sdk/credential-provider-ini": "3.840.0", + "@aws-sdk/credential-provider-process": "3.840.0", + "@aws-sdk/credential-provider-sso": "3.840.0", + "@aws-sdk/credential-provider-web-identity": "3.840.0", + "@aws-sdk/types": "3.840.0", "@smithy/credential-provider-imds": "^4.0.6", "@smithy/property-provider": "^4.0.4", "@smithy/shared-ini-file-loader": "^4.0.4", @@ -1957,12 +2034,15 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-process": { - "version": "3.835.0", + "node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.840.0.tgz", + "integrity": "sha512-HkDQWHy8tCI4A0Ps2NVtuVYMv9cB4y/IuD/TdOsqeRIAT12h8jDb98BwQPNLAImAOwOWzZJ8Cu0xtSpX7CQhMw==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.835.0", - "@aws-sdk/types": "3.821.0", + "@aws-sdk/core": "3.840.0", + "@aws-sdk/types": "3.840.0", "@smithy/property-provider": "^4.0.4", "@smithy/shared-ini-file-loader": "^4.0.4", "@smithy/types": "^4.3.1", @@ -1972,14 +2052,17 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.835.0", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/client-sso": "3.835.0", - "@aws-sdk/core": "3.835.0", - "@aws-sdk/token-providers": "3.835.0", - "@aws-sdk/types": "3.821.0", + "node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.840.0.tgz", + "integrity": "sha512-2qgdtdd6R0Z1y0KL8gzzwFUGmhBHSUx4zy85L2XV1CXhpRNwV71SVWJqLDVV5RVWVf9mg50Pm3AWrUC0xb0pcA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.840.0", + "@aws-sdk/core": "3.840.0", + "@aws-sdk/token-providers": "3.840.0", + "@aws-sdk/types": "3.840.0", "@smithy/property-provider": "^4.0.4", "@smithy/shared-ini-file-loader": "^4.0.4", "@smithy/types": "^4.3.1", @@ -1989,13 +2072,16 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.835.0", + "node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.840.0.tgz", + "integrity": "sha512-dpEeVXG8uNZSmVXReE4WP0lwoioX2gstk4RnUgrdUE3YaPq8A+hJiVAyc3h+cjDeIqfbsQbZm9qFetKC2LF9dQ==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.835.0", - "@aws-sdk/nested-clients": "3.835.0", - "@aws-sdk/types": "3.821.0", + "@aws-sdk/core": "3.840.0", + "@aws-sdk/nested-clients": "3.840.0", + "@aws-sdk/types": "3.840.0", "@smithy/property-provider": "^4.0.4", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -2004,11 +2090,14 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.821.0", + "node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.840.0.tgz", + "integrity": "sha512-ub+hXJAbAje94+Ya6c6eL7sYujoE8D4Bumu1NUI8TXjUhVVn0HzVWQjpRLshdLsUp1AW7XyeJaxyajRaJQ8+Xg==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.821.0", + "@aws-sdk/types": "3.840.0", "@smithy/protocol-http": "^5.1.2", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -2017,11 +2106,14 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-logger": { - "version": "3.821.0", + "node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/middleware-logger": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.840.0.tgz", + "integrity": "sha512-lSV8FvjpdllpGaRspywss4CtXV8M7NNNH+2/j86vMH+YCOZ6fu2T/TyFd/tHwZ92vDfHctWkRbQxg0bagqwovA==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.821.0", + "@aws-sdk/types": "3.840.0", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, @@ -2029,11 +2121,14 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.821.0", + "node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.840.0.tgz", + "integrity": "sha512-Gu7lGDyfddyhIkj1Z1JtrY5NHb5+x/CRiB87GjaSrKxkDaydtX2CU977JIABtt69l9wLbcGDIQ+W0uJ5xPof7g==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.821.0", + "@aws-sdk/types": "3.840.0", "@smithy/protocol-http": "^5.1.2", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -2042,14 +2137,17 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.835.0", + "node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.840.0.tgz", + "integrity": "sha512-hiiMf7BP5ZkAFAvWRcK67Mw/g55ar7OCrvrynC92hunx/xhMkrgSLM0EXIZ1oTn3uql9kH/qqGF0nqsK6K555A==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.835.0", - "@aws-sdk/types": "3.821.0", - "@aws-sdk/util-endpoints": "3.828.0", - "@smithy/core": "^3.5.3", + "@aws-sdk/core": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-endpoints": "3.840.0", + "@smithy/core": "^3.6.0", "@smithy/protocol-http": "^5.1.2", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -2058,43 +2156,46 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/nested-clients": { - "version": "3.835.0", + "node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/nested-clients": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.840.0.tgz", + "integrity": "sha512-LXYYo9+n4hRqnRSIMXLBb+BLz+cEmjMtTudwK1BF6Bn2RfdDv29KuyeDRrPCS3TwKl7ZKmXUmE9n5UuHAPfBpA==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.835.0", - "@aws-sdk/middleware-host-header": "3.821.0", - "@aws-sdk/middleware-logger": "3.821.0", - "@aws-sdk/middleware-recursion-detection": "3.821.0", - "@aws-sdk/middleware-user-agent": "3.835.0", - "@aws-sdk/region-config-resolver": "3.821.0", - "@aws-sdk/types": "3.821.0", - "@aws-sdk/util-endpoints": "3.828.0", - "@aws-sdk/util-user-agent-browser": "3.821.0", - "@aws-sdk/util-user-agent-node": "3.835.0", + "@aws-sdk/core": "3.840.0", + "@aws-sdk/middleware-host-header": "3.840.0", + "@aws-sdk/middleware-logger": "3.840.0", + "@aws-sdk/middleware-recursion-detection": "3.840.0", + "@aws-sdk/middleware-user-agent": "3.840.0", + "@aws-sdk/region-config-resolver": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-endpoints": "3.840.0", + "@aws-sdk/util-user-agent-browser": "3.840.0", + "@aws-sdk/util-user-agent-node": "3.840.0", "@smithy/config-resolver": "^4.1.4", - "@smithy/core": "^3.5.3", + "@smithy/core": "^3.6.0", "@smithy/fetch-http-handler": "^5.0.4", "@smithy/hash-node": "^4.0.4", "@smithy/invalid-dependency": "^4.0.4", "@smithy/middleware-content-length": "^4.0.4", - "@smithy/middleware-endpoint": "^4.1.12", - "@smithy/middleware-retry": "^4.1.13", + "@smithy/middleware-endpoint": "^4.1.13", + "@smithy/middleware-retry": "^4.1.14", "@smithy/middleware-serde": "^4.0.8", "@smithy/middleware-stack": "^4.0.4", "@smithy/node-config-provider": "^4.1.3", "@smithy/node-http-handler": "^4.0.6", "@smithy/protocol-http": "^5.1.2", - "@smithy/smithy-client": "^4.4.4", + "@smithy/smithy-client": "^4.4.5", "@smithy/types": "^4.3.1", "@smithy/url-parser": "^4.0.4", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.20", - "@smithy/util-defaults-mode-node": "^4.0.20", + "@smithy/util-defaults-mode-browser": "^4.0.21", + "@smithy/util-defaults-mode-node": "^4.0.21", "@smithy/util-endpoints": "^3.0.6", "@smithy/util-middleware": "^4.0.4", "@smithy/util-retry": "^4.0.6", @@ -2105,11 +2206,14 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/region-config-resolver": { - "version": "3.821.0", + "node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.840.0.tgz", + "integrity": "sha512-Qjnxd/yDv9KpIMWr90ZDPtRj0v75AqGC92Lm9+oHXZ8p1MjG5JE2CW0HL8JRgK9iKzgKBL7pPQRXI8FkvEVfrA==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.821.0", + "@aws-sdk/types": "3.840.0", "@smithy/node-config-provider": "^4.1.3", "@smithy/types": "^4.3.1", "@smithy/util-config-provider": "^4.0.0", @@ -2120,22 +2224,77 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.821.0", + "node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/token-providers": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.840.0.tgz", + "integrity": "sha512-6BuTOLTXvmgwjK7ve7aTg9JaWFdM5UoMolLVPMyh3wTv9Ufalh8oklxYHUBIxsKkBGO2WiHXytveuxH6tAgTYg==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.821.0", + "@aws-sdk/core": "3.840.0", + "@aws-sdk/nested-clients": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/types": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.840.0.tgz", + "integrity": "sha512-xliuHaUFZxEx1NSXeLLZ9Dyu6+EJVQKEoD+yM+zqUo3YDZ7medKJWY6fIOKiPX/N7XbLdBYwajb15Q7IL8KkeA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/util-endpoints": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.840.0.tgz", + "integrity": "sha512-eqE9ROdg/Kk0rj3poutyRCFauPDXIf/WSvCqFiRDDVi6QOnCv/M0g2XW8/jSvkJlOyaXkNCptapIp6BeeFFGYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.840.0", + "@smithy/types": "^4.3.1", + "@smithy/util-endpoints": "^3.0.6", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.840.0.tgz", + "integrity": "sha512-JdyZM3EhhL4PqwFpttZu1afDpPJCCc3eyZOLi+srpX11LsGj6sThf47TYQN75HT1CarZ7cCdQHGzP2uy3/xHfQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.840.0", "@smithy/types": "^4.3.1", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.835.0", + "node_modules/@aws-sdk/client-iam/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.840.0.tgz", + "integrity": "sha512-Fy5JUEDQU1tPm2Yw/YqRYYc27W5+QD/J4mYvQvdWjUGZLB5q3eLFMGD35Uc28ZFoGMufPr4OCxK/bRfWROBRHQ==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "3.835.0", - "@aws-sdk/types": "3.821.0", + "@aws-sdk/middleware-user-agent": "3.840.0", + "@aws-sdk/types": "3.840.0", "@smithy/node-config-provider": "^4.1.3", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -2152,8 +2311,11 @@ } } }, - "node_modules/@aws-sdk/client-s3/node_modules/@smithy/abort-controller": { + "node_modules/@aws-sdk/client-iam/node_modules/@smithy/abort-controller": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.4.tgz", + "integrity": "sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.3.1", @@ -2163,8 +2325,11 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@smithy/node-http-handler": { + "node_modules/@aws-sdk/client-iam/node_modules/@smithy/node-http-handler": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.6.tgz", + "integrity": "sha512-NqbmSz7AW2rvw4kXhKGrYTiJVDHnMsFnX4i+/FzcZAfbOBauPYs2ekuECkSbtqaxETLLTu9Rl/ex6+I2BKErPA==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^4.0.4", @@ -2177,8 +2342,11 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/@smithy/types": { + "node_modules/@aws-sdk/client-iam/node_modules/@smithy/types": { "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", + "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -2187,149 +2355,112 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-s3/node_modules/uuid": { - "version": "9.0.1", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@aws-sdk/client-sso": { - "version": "3.731.0", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.731.0", - "@aws-sdk/middleware-host-header": "3.731.0", - "@aws-sdk/middleware-logger": "3.731.0", - "@aws-sdk/middleware-recursion-detection": "3.731.0", - "@aws-sdk/middleware-user-agent": "3.731.0", - "@aws-sdk/region-config-resolver": "3.731.0", - "@aws-sdk/types": "3.731.0", - "@aws-sdk/util-endpoints": "3.731.0", - "@aws-sdk/util-user-agent-browser": "3.731.0", - "@aws-sdk/util-user-agent-node": "3.731.0", - "@smithy/config-resolver": "^4.0.0", - "@smithy/core": "^3.0.0", - "@smithy/fetch-http-handler": "^5.0.0", - "@smithy/hash-node": "^4.0.0", - "@smithy/invalid-dependency": "^4.0.0", - "@smithy/middleware-content-length": "^4.0.0", - "@smithy/middleware-endpoint": "^4.0.0", - "@smithy/middleware-retry": "^4.0.0", - "@smithy/middleware-serde": "^4.0.0", - "@smithy/middleware-stack": "^4.0.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/node-http-handler": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/smithy-client": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/url-parser": "^4.0.0", - "@smithy/util-base64": "^4.0.0", - "@smithy/util-body-length-browser": "^4.0.0", - "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.0", - "@smithy/util-defaults-mode-node": "^4.0.0", - "@smithy/util-endpoints": "^3.0.0", - "@smithy/util-middleware": "^4.0.0", - "@smithy/util-retry": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.835.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-s3": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.839.0.tgz", + "integrity": "sha512-7zDInY+qltKxeG+9d/97nbs+FWINcAi5bChBrleUQkuQ/dA9pSP1URo/6JlVzD2Ejvksm+hVK6z3VUWZaIAVOw==", "dependencies": { + "@aws-crypto/sha1-browser": "5.2.0", "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.835.0", - "@aws-sdk/credential-provider-node": "3.835.0", + "@aws-sdk/core": "3.839.0", + "@aws-sdk/credential-provider-node": "3.839.0", + "@aws-sdk/middleware-bucket-endpoint": "3.830.0", + "@aws-sdk/middleware-expect-continue": "3.821.0", + "@aws-sdk/middleware-flexible-checksums": "3.839.0", "@aws-sdk/middleware-host-header": "3.821.0", + "@aws-sdk/middleware-location-constraint": "3.821.0", "@aws-sdk/middleware-logger": "3.821.0", "@aws-sdk/middleware-recursion-detection": "3.821.0", - "@aws-sdk/middleware-user-agent": "3.835.0", + "@aws-sdk/middleware-sdk-s3": "3.839.0", + "@aws-sdk/middleware-ssec": "3.821.0", + "@aws-sdk/middleware-user-agent": "3.839.0", "@aws-sdk/region-config-resolver": "3.821.0", + "@aws-sdk/signature-v4-multi-region": "3.839.0", "@aws-sdk/types": "3.821.0", "@aws-sdk/util-endpoints": "3.828.0", "@aws-sdk/util-user-agent-browser": "3.821.0", - "@aws-sdk/util-user-agent-node": "3.835.0", + "@aws-sdk/util-user-agent-node": "3.839.0", + "@aws-sdk/xml-builder": "3.821.0", "@smithy/config-resolver": "^4.1.4", - "@smithy/core": "^3.5.3", + "@smithy/core": "^3.6.0", + "@smithy/eventstream-serde-browser": "^4.0.4", + "@smithy/eventstream-serde-config-resolver": "^4.1.2", + "@smithy/eventstream-serde-node": "^4.0.4", "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/hash-blob-browser": "^4.0.4", "@smithy/hash-node": "^4.0.4", + "@smithy/hash-stream-node": "^4.0.4", "@smithy/invalid-dependency": "^4.0.4", + "@smithy/md5-js": "^4.0.4", "@smithy/middleware-content-length": "^4.0.4", - "@smithy/middleware-endpoint": "^4.1.12", - "@smithy/middleware-retry": "^4.1.13", - "@smithy/middleware-serde": "^4.0.8", + "@smithy/middleware-endpoint": "^4.1.13", + "@smithy/middleware-retry": "^4.1.14", + "@smithy/middleware-serde": "^4.0.8", "@smithy/middleware-stack": "^4.0.4", "@smithy/node-config-provider": "^4.1.3", "@smithy/node-http-handler": "^4.0.6", "@smithy/protocol-http": "^5.1.2", - "@smithy/smithy-client": "^4.4.4", + "@smithy/smithy-client": "^4.4.5", "@smithy/types": "^4.3.1", "@smithy/url-parser": "^4.0.4", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.20", - "@smithy/util-defaults-mode-node": "^4.0.20", + "@smithy/util-defaults-mode-browser": "^4.0.21", + "@smithy/util-defaults-mode-node": "^4.0.21", "@smithy/util-endpoints": "^3.0.6", "@smithy/util-middleware": "^4.0.4", "@smithy/util-retry": "^4.0.6", + "@smithy/util-stream": "^4.2.2", "@smithy/util-utf8": "^4.0.0", - "tslib": "^2.6.2" + "@smithy/util-waiter": "^4.0.6", + "@types/uuid": "^9.0.1", + "tslib": "^2.6.2", + "uuid": "^9.0.1" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/client-sso": { - "version": "3.835.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/client-sso": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.839.0.tgz", + "integrity": "sha512-AZABysUhbfcwXVlMo97/vwHgsfJNF81wypCAowpqAJkSjP2KrqsqHpb71/RoR2w8JGmEnBBXRD4wIxDhnmifWg==", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.835.0", + "@aws-sdk/core": "3.839.0", "@aws-sdk/middleware-host-header": "3.821.0", "@aws-sdk/middleware-logger": "3.821.0", "@aws-sdk/middleware-recursion-detection": "3.821.0", - "@aws-sdk/middleware-user-agent": "3.835.0", + "@aws-sdk/middleware-user-agent": "3.839.0", "@aws-sdk/region-config-resolver": "3.821.0", "@aws-sdk/types": "3.821.0", "@aws-sdk/util-endpoints": "3.828.0", "@aws-sdk/util-user-agent-browser": "3.821.0", - "@aws-sdk/util-user-agent-node": "3.835.0", + "@aws-sdk/util-user-agent-node": "3.839.0", "@smithy/config-resolver": "^4.1.4", - "@smithy/core": "^3.5.3", + "@smithy/core": "^3.6.0", "@smithy/fetch-http-handler": "^5.0.4", "@smithy/hash-node": "^4.0.4", "@smithy/invalid-dependency": "^4.0.4", "@smithy/middleware-content-length": "^4.0.4", - "@smithy/middleware-endpoint": "^4.1.12", - "@smithy/middleware-retry": "^4.1.13", + "@smithy/middleware-endpoint": "^4.1.13", + "@smithy/middleware-retry": "^4.1.14", "@smithy/middleware-serde": "^4.0.8", "@smithy/middleware-stack": "^4.0.4", "@smithy/node-config-provider": "^4.1.3", "@smithy/node-http-handler": "^4.0.6", "@smithy/protocol-http": "^5.1.2", - "@smithy/smithy-client": "^4.4.4", + "@smithy/smithy-client": "^4.4.5", "@smithy/types": "^4.3.1", "@smithy/url-parser": "^4.0.4", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.20", - "@smithy/util-defaults-mode-node": "^4.0.20", + "@smithy/util-defaults-mode-browser": "^4.0.21", + "@smithy/util-defaults-mode-node": "^4.0.21", "@smithy/util-endpoints": "^3.0.6", "@smithy/util-middleware": "^4.0.4", "@smithy/util-retry": "^4.0.6", @@ -2340,18 +2471,19 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/core": { - "version": "3.835.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/core": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.839.0.tgz", + "integrity": "sha512-KdwL5RaK7eUIlOpdOoZ5u+2t4X1rdX/MTZgz3IV/aBzjVUoGsp+uUnbyqXomLQSUitPHp72EE/NHDsvWW/IHvQ==", "dependencies": { "@aws-sdk/types": "3.821.0", "@aws-sdk/xml-builder": "3.821.0", - "@smithy/core": "^3.5.3", + "@smithy/core": "^3.6.0", "@smithy/node-config-provider": "^4.1.3", "@smithy/property-provider": "^4.0.4", "@smithy/protocol-http": "^5.1.2", "@smithy/signature-v4": "^5.1.2", - "@smithy/smithy-client": "^4.4.4", + "@smithy/smithy-client": "^4.4.5", "@smithy/types": "^4.3.1", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", @@ -2364,11 +2496,12 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/credential-provider-env": { - "version": "3.835.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.839.0.tgz", + "integrity": "sha512-cWTadewPPz1OvObZJB+olrgh8VwcgIVcT293ZUT9V0CMF0UU7QaPwJP7uNXcNxltTh+sk1yhjH4UlcnJigZZbA==", "dependencies": { - "@aws-sdk/core": "3.835.0", + "@aws-sdk/core": "3.839.0", "@aws-sdk/types": "3.821.0", "@smithy/property-provider": "^4.0.4", "@smithy/types": "^4.3.1", @@ -2378,17 +2511,18 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.835.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.839.0.tgz", + "integrity": "sha512-fv0BZwrDhWDju4D1MCLT4I2aPjr0dVQ6P+MpqvcGNOA41Oa9UdRhYTV5iuy5NLXzIzoCmnS+XfSq5Kbsf6//xw==", "dependencies": { - "@aws-sdk/core": "3.835.0", + "@aws-sdk/core": "3.839.0", "@aws-sdk/types": "3.821.0", "@smithy/fetch-http-handler": "^5.0.4", "@smithy/node-http-handler": "^4.0.6", "@smithy/property-provider": "^4.0.4", "@smithy/protocol-http": "^5.1.2", - "@smithy/smithy-client": "^4.4.4", + "@smithy/smithy-client": "^4.4.5", "@smithy/types": "^4.3.1", "@smithy/util-stream": "^4.2.2", "tslib": "^2.6.2" @@ -2397,17 +2531,18 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.835.0", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.835.0", - "@aws-sdk/credential-provider-env": "3.835.0", - "@aws-sdk/credential-provider-http": "3.835.0", - "@aws-sdk/credential-provider-process": "3.835.0", - "@aws-sdk/credential-provider-sso": "3.835.0", - "@aws-sdk/credential-provider-web-identity": "3.835.0", - "@aws-sdk/nested-clients": "3.835.0", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.839.0.tgz", + "integrity": "sha512-GHm0hF4CiDxIDR7TauMaA6iI55uuSqRxMBcqTAHaTPm6+h1A+MS+ysQMxZ+Jvwtoy8WmfTIGrJVxSCw0sK2hvA==", + "dependencies": { + "@aws-sdk/core": "3.839.0", + "@aws-sdk/credential-provider-env": "3.839.0", + "@aws-sdk/credential-provider-http": "3.839.0", + "@aws-sdk/credential-provider-process": "3.839.0", + "@aws-sdk/credential-provider-sso": "3.839.0", + "@aws-sdk/credential-provider-web-identity": "3.839.0", + "@aws-sdk/nested-clients": "3.839.0", "@aws-sdk/types": "3.821.0", "@smithy/credential-provider-imds": "^4.0.6", "@smithy/property-provider": "^4.0.4", @@ -2419,16 +2554,17 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.835.0", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.835.0", - "@aws-sdk/credential-provider-http": "3.835.0", - "@aws-sdk/credential-provider-ini": "3.835.0", - "@aws-sdk/credential-provider-process": "3.835.0", - "@aws-sdk/credential-provider-sso": "3.835.0", - "@aws-sdk/credential-provider-web-identity": "3.835.0", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.839.0.tgz", + "integrity": "sha512-7bR+U2h+ft0V8chyeu9Bh/pvau4ZkQMeRt5f0dAULoepZQ77QQVRP4H04yJPTg9DCtqbVULQ3uf5YOp1/08vQw==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.839.0", + "@aws-sdk/credential-provider-http": "3.839.0", + "@aws-sdk/credential-provider-ini": "3.839.0", + "@aws-sdk/credential-provider-process": "3.839.0", + "@aws-sdk/credential-provider-sso": "3.839.0", + "@aws-sdk/credential-provider-web-identity": "3.839.0", "@aws-sdk/types": "3.821.0", "@smithy/credential-provider-imds": "^4.0.6", "@smithy/property-provider": "^4.0.4", @@ -2440,11 +2576,12 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/credential-provider-process": { - "version": "3.835.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.839.0.tgz", + "integrity": "sha512-qShpekjociUZ+isyQNa0P7jo+0q3N2+0eJDg8SGyP6K6hHTcGfiqxTDps+IKl6NreCPhZCBzyI9mWkP0xSDR6g==", "dependencies": { - "@aws-sdk/core": "3.835.0", + "@aws-sdk/core": "3.839.0", "@aws-sdk/types": "3.821.0", "@smithy/property-provider": "^4.0.4", "@smithy/shared-ini-file-loader": "^4.0.4", @@ -2455,13 +2592,14 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.835.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.839.0.tgz", + "integrity": "sha512-w10zBLHhU8SBQcdrSPMI02haLoRGZg+gP7mH/Er8VhIXfHefbr7o4NirmB0hwdw/YAH8MLlC9jj7c2SJlsNhYA==", "dependencies": { - "@aws-sdk/client-sso": "3.835.0", - "@aws-sdk/core": "3.835.0", - "@aws-sdk/token-providers": "3.835.0", + "@aws-sdk/client-sso": "3.839.0", + "@aws-sdk/core": "3.839.0", + "@aws-sdk/token-providers": "3.839.0", "@aws-sdk/types": "3.821.0", "@smithy/property-provider": "^4.0.4", "@smithy/shared-ini-file-loader": "^4.0.4", @@ -2472,12 +2610,13 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.835.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.839.0.tgz", + "integrity": "sha512-EvqTc7J1kgmiuxknpCp1S60hyMQvmKxsI5uXzQtcogl/N55rxiXEqnCLI5q6p33q91PJegrcMCM5Q17Afhm5qA==", "dependencies": { - "@aws-sdk/core": "3.835.0", - "@aws-sdk/nested-clients": "3.835.0", + "@aws-sdk/core": "3.839.0", + "@aws-sdk/nested-clients": "3.839.0", "@aws-sdk/types": "3.821.0", "@smithy/property-provider": "^4.0.4", "@smithy/types": "^4.3.1", @@ -2487,9 +2626,10 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/middleware-host-header": { + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-host-header": { "version": "3.821.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.821.0.tgz", + "integrity": "sha512-xSMR+sopSeWGx5/4pAGhhfMvGBHioVBbqGvDs6pG64xfNwM5vq5s5v6D04e2i+uSTj4qGa71dLUs5I0UzAK3sw==", "dependencies": { "@aws-sdk/types": "3.821.0", "@smithy/protocol-http": "^5.1.2", @@ -2500,9 +2640,10 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/middleware-logger": { + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-logger": { "version": "3.821.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.821.0.tgz", + "integrity": "sha512-0cvI0ipf2tGx7fXYEEN5fBeZDz2RnHyb9xftSgUsEq7NBxjV0yTZfLJw6Za5rjE6snC80dRN8+bTNR1tuG89zA==", "dependencies": { "@aws-sdk/types": "3.821.0", "@smithy/types": "^4.3.1", @@ -2512,9 +2653,10 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/middleware-recursion-detection": { + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-recursion-detection": { "version": "3.821.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.821.0.tgz", + "integrity": "sha512-efmaifbhBoqKG3bAoEfDdcM8hn1psF+4qa7ykWuYmfmah59JBeqHLfz5W9m9JoTwoKPkFcVLWZxnyZzAnVBOIg==", "dependencies": { "@aws-sdk/types": "3.821.0", "@smithy/protocol-http": "^5.1.2", @@ -2525,14 +2667,15 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.835.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.839.0.tgz", + "integrity": "sha512-2u74uRM1JWq6Sf7+3YpjejPM9YkomGt4kWhrmooIBEq1k5r2GTbkH7pNCxBQwBueXM21jAGVDxxeClpTx+5hig==", "dependencies": { - "@aws-sdk/core": "3.835.0", + "@aws-sdk/core": "3.839.0", "@aws-sdk/types": "3.821.0", "@aws-sdk/util-endpoints": "3.828.0", - "@smithy/core": "^3.5.3", + "@smithy/core": "^3.6.0", "@smithy/protocol-http": "^5.1.2", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -2541,43 +2684,44 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/nested-clients": { - "version": "3.835.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/nested-clients": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.839.0.tgz", + "integrity": "sha512-Glic0pg2THYP3aRhJORwJJBe1JLtJoEdWV/MFZNyzCklfMwEzpWtZAyxy+tQyFmMeW50uBAnh2R0jhMMcf257w==", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.835.0", + "@aws-sdk/core": "3.839.0", "@aws-sdk/middleware-host-header": "3.821.0", "@aws-sdk/middleware-logger": "3.821.0", "@aws-sdk/middleware-recursion-detection": "3.821.0", - "@aws-sdk/middleware-user-agent": "3.835.0", + "@aws-sdk/middleware-user-agent": "3.839.0", "@aws-sdk/region-config-resolver": "3.821.0", "@aws-sdk/types": "3.821.0", "@aws-sdk/util-endpoints": "3.828.0", "@aws-sdk/util-user-agent-browser": "3.821.0", - "@aws-sdk/util-user-agent-node": "3.835.0", + "@aws-sdk/util-user-agent-node": "3.839.0", "@smithy/config-resolver": "^4.1.4", - "@smithy/core": "^3.5.3", + "@smithy/core": "^3.6.0", "@smithy/fetch-http-handler": "^5.0.4", "@smithy/hash-node": "^4.0.4", "@smithy/invalid-dependency": "^4.0.4", "@smithy/middleware-content-length": "^4.0.4", - "@smithy/middleware-endpoint": "^4.1.12", - "@smithy/middleware-retry": "^4.1.13", + "@smithy/middleware-endpoint": "^4.1.13", + "@smithy/middleware-retry": "^4.1.14", "@smithy/middleware-serde": "^4.0.8", "@smithy/middleware-stack": "^4.0.4", "@smithy/node-config-provider": "^4.1.3", "@smithy/node-http-handler": "^4.0.6", "@smithy/protocol-http": "^5.1.2", - "@smithy/smithy-client": "^4.4.4", + "@smithy/smithy-client": "^4.4.5", "@smithy/types": "^4.3.1", "@smithy/url-parser": "^4.0.4", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.20", - "@smithy/util-defaults-mode-node": "^4.0.20", + "@smithy/util-defaults-mode-browser": "^4.0.21", + "@smithy/util-defaults-mode-node": "^4.0.21", "@smithy/util-endpoints": "^3.0.6", "@smithy/util-middleware": "^4.0.4", "@smithy/util-retry": "^4.0.6", @@ -2588,9 +2732,10 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/region-config-resolver": { + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/region-config-resolver": { "version": "3.821.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.821.0.tgz", + "integrity": "sha512-t8og+lRCIIy5nlId0bScNpCkif8sc0LhmtaKsbm0ZPm3sCa/WhCbSZibjbZ28FNjVCV+p0D9RYZx0VDDbtWyjw==", "dependencies": { "@aws-sdk/types": "3.821.0", "@smithy/node-config-provider": "^4.1.3", @@ -2603,9 +2748,10 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/util-user-agent-browser": { + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-user-agent-browser": { "version": "3.821.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.821.0.tgz", + "integrity": "sha512-irWZHyM0Jr1xhC+38OuZ7JB6OXMLPZlj48thElpsO1ZSLRkLZx5+I7VV6k3sp2yZ7BYbKz/G2ojSv4wdm7XTLw==", "dependencies": { "@aws-sdk/types": "3.821.0", "@smithy/types": "^4.3.1", @@ -2613,11 +2759,12 @@ "tslib": "^2.6.2" } }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.835.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-s3/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.839.0.tgz", + "integrity": "sha512-MuunkIG1bJVMtTH7MbjXOrhHleU5wjHz5eCAUc6vj7M9rwol71nqjj9b8RLnkO5gsJcKc29Qk8iV6xQuzKWNMw==", "dependencies": { - "@aws-sdk/middleware-user-agent": "3.835.0", + "@aws-sdk/middleware-user-agent": "3.839.0", "@aws-sdk/types": "3.821.0", "@smithy/node-config-provider": "^4.1.3", "@smithy/types": "^4.3.1", @@ -2635,9 +2782,10 @@ } } }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/abort-controller": { + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/abort-controller": { "version": "4.0.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.4.tgz", + "integrity": "sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA==", "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -2646,9 +2794,10 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/node-http-handler": { + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/node-http-handler": { "version": "4.0.6", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.6.tgz", + "integrity": "sha512-NqbmSz7AW2rvw4kXhKGrYTiJVDHnMsFnX4i+/FzcZAfbOBauPYs2ekuECkSbtqaxETLLTu9Rl/ex6+I2BKErPA==", "dependencies": { "@smithy/abort-controller": "^4.0.4", "@smithy/protocol-http": "^5.1.2", @@ -2660,9 +2809,10 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/types": { + "node_modules/@aws-sdk/client-s3/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -2670,85 +2820,84 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/types": { - "version": "3.731.0", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" + "node_modules/@aws-sdk/client-s3/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/util-endpoints": { + "node_modules/@aws-sdk/client-sso": { "version": "3.731.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.731.0.tgz", + "integrity": "sha512-O4C/UYGgqMsBg21MMApFdgyh8BX568hQhbdoNFmRVTBoSnCZ3w+H4a1wBPX4Gyl0NX+ab6Xxo9rId8HiyPXJ0A==", "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.731.0", + "@aws-sdk/middleware-host-header": "3.731.0", + "@aws-sdk/middleware-logger": "3.731.0", + "@aws-sdk/middleware-recursion-detection": "3.731.0", + "@aws-sdk/middleware-user-agent": "3.731.0", + "@aws-sdk/region-config-resolver": "3.731.0", "@aws-sdk/types": "3.731.0", + "@aws-sdk/util-endpoints": "3.731.0", + "@aws-sdk/util-user-agent-browser": "3.731.0", + "@aws-sdk/util-user-agent-node": "3.731.0", + "@smithy/config-resolver": "^4.0.0", + "@smithy/core": "^3.0.0", + "@smithy/fetch-http-handler": "^5.0.0", + "@smithy/hash-node": "^4.0.0", + "@smithy/invalid-dependency": "^4.0.0", + "@smithy/middleware-content-length": "^4.0.0", + "@smithy/middleware-endpoint": "^4.0.0", + "@smithy/middleware-retry": "^4.0.0", + "@smithy/middleware-serde": "^4.0.0", + "@smithy/middleware-stack": "^4.0.0", + "@smithy/node-config-provider": "^4.0.0", + "@smithy/node-http-handler": "^4.0.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/smithy-client": "^4.0.0", "@smithy/types": "^4.0.0", + "@smithy/url-parser": "^4.0.0", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.0", + "@smithy/util-defaults-mode-node": "^4.0.0", "@smithy/util-endpoints": "^3.0.0", + "@smithy/util-middleware": "^4.0.0", + "@smithy/util-retry": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/abort-controller": { - "version": "4.0.4", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.3.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/node-http-handler": { - "version": "4.0.6", - "license": "Apache-2.0", - "dependencies": { - "@smithy/abort-controller": "^4.0.4", - "@smithy/protocol-http": "^5.1.2", - "@smithy/querystring-builder": "^4.0.4", - "@smithy/types": "^4.3.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sso/node_modules/@smithy/types": { - "version": "4.3.1", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sts": { - "version": "3.840.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.840.0.tgz", - "integrity": "sha512-h+mu89Wk81Ne+B624GT/pBM5VjuAZueSeQNixhgtQ1QHi6bZzrpz8+lvMSibKO+kXFyQsTLzkyibbxnhLpWQZA==", - "dev": true, - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.839.0.tgz", + "integrity": "sha512-7QnMApYfQBT441YkxObxt1hZ8TdqZH7h0NdYsvbLdEqGROXBDDT+Wq7ZVfsnKjuVUGQ/t75bIqFn7M8cdyESfA==", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.840.0", - "@aws-sdk/credential-provider-node": "3.840.0", - "@aws-sdk/middleware-host-header": "3.840.0", - "@aws-sdk/middleware-logger": "3.840.0", - "@aws-sdk/middleware-recursion-detection": "3.840.0", - "@aws-sdk/middleware-user-agent": "3.840.0", - "@aws-sdk/region-config-resolver": "3.840.0", - "@aws-sdk/types": "3.840.0", - "@aws-sdk/util-endpoints": "3.840.0", - "@aws-sdk/util-user-agent-browser": "3.840.0", - "@aws-sdk/util-user-agent-node": "3.840.0", + "@aws-sdk/core": "3.839.0", + "@aws-sdk/credential-provider-node": "3.839.0", + "@aws-sdk/middleware-host-header": "3.821.0", + "@aws-sdk/middleware-logger": "3.821.0", + "@aws-sdk/middleware-recursion-detection": "3.821.0", + "@aws-sdk/middleware-user-agent": "3.839.0", + "@aws-sdk/region-config-resolver": "3.821.0", + "@aws-sdk/types": "3.821.0", + "@aws-sdk/util-endpoints": "3.828.0", + "@aws-sdk/util-user-agent-browser": "3.821.0", + "@aws-sdk/util-user-agent-node": "3.839.0", "@smithy/config-resolver": "^4.1.4", "@smithy/core": "^3.6.0", "@smithy/fetch-http-handler": "^5.0.4", @@ -2780,25 +2929,23 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/client-sso": { - "version": "3.840.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.840.0.tgz", - "integrity": "sha512-3Zp+FWN2hhmKdpS0Ragi5V2ZPsZNScE3jlbgoJjzjI/roHZqO+e3/+XFN4TlM0DsPKYJNp+1TAjmhxN6rOnfYA==", - "dev": true, - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/client-sso": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.839.0.tgz", + "integrity": "sha512-AZABysUhbfcwXVlMo97/vwHgsfJNF81wypCAowpqAJkSjP2KrqsqHpb71/RoR2w8JGmEnBBXRD4wIxDhnmifWg==", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.840.0", - "@aws-sdk/middleware-host-header": "3.840.0", - "@aws-sdk/middleware-logger": "3.840.0", - "@aws-sdk/middleware-recursion-detection": "3.840.0", - "@aws-sdk/middleware-user-agent": "3.840.0", - "@aws-sdk/region-config-resolver": "3.840.0", - "@aws-sdk/types": "3.840.0", - "@aws-sdk/util-endpoints": "3.840.0", - "@aws-sdk/util-user-agent-browser": "3.840.0", - "@aws-sdk/util-user-agent-node": "3.840.0", + "@aws-sdk/core": "3.839.0", + "@aws-sdk/middleware-host-header": "3.821.0", + "@aws-sdk/middleware-logger": "3.821.0", + "@aws-sdk/middleware-recursion-detection": "3.821.0", + "@aws-sdk/middleware-user-agent": "3.839.0", + "@aws-sdk/region-config-resolver": "3.821.0", + "@aws-sdk/types": "3.821.0", + "@aws-sdk/util-endpoints": "3.828.0", + "@aws-sdk/util-user-agent-browser": "3.821.0", + "@aws-sdk/util-user-agent-node": "3.839.0", "@smithy/config-resolver": "^4.1.4", "@smithy/core": "^3.6.0", "@smithy/fetch-http-handler": "^5.0.4", @@ -2830,14 +2977,12 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/core": { - "version": "3.840.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.840.0.tgz", - "integrity": "sha512-x3Zgb39tF1h2XpU+yA4OAAQlW6LVEfXNlSedSYJ7HGKXqA/E9h3rWQVpYfhXXVVsLdYXdNw5KBUkoAoruoZSZA==", - "dev": true, - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/core": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.839.0.tgz", + "integrity": "sha512-KdwL5RaK7eUIlOpdOoZ5u+2t4X1rdX/MTZgz3IV/aBzjVUoGsp+uUnbyqXomLQSUitPHp72EE/NHDsvWW/IHvQ==", "dependencies": { - "@aws-sdk/types": "3.840.0", + "@aws-sdk/types": "3.821.0", "@aws-sdk/xml-builder": "3.821.0", "@smithy/core": "^3.6.0", "@smithy/node-config-provider": "^4.1.3", @@ -2857,15 +3002,13 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-env": { - "version": "3.840.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.840.0.tgz", - "integrity": "sha512-EzF6VcJK7XvQ/G15AVEfJzN2mNXU8fcVpXo4bRyr1S6t2q5zx6UPH/XjDbn18xyUmOq01t+r8gG+TmHEVo18fA==", - "dev": true, - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.839.0.tgz", + "integrity": "sha512-cWTadewPPz1OvObZJB+olrgh8VwcgIVcT293ZUT9V0CMF0UU7QaPwJP7uNXcNxltTh+sk1yhjH4UlcnJigZZbA==", "dependencies": { - "@aws-sdk/core": "3.840.0", - "@aws-sdk/types": "3.840.0", + "@aws-sdk/core": "3.839.0", + "@aws-sdk/types": "3.821.0", "@smithy/property-provider": "^4.0.4", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -2874,15 +3017,13 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.840.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.840.0.tgz", - "integrity": "sha512-wbnUiPGLVea6mXbUh04fu+VJmGkQvmToPeTYdHE8eRZq3NRDi3t3WltT+jArLBKD/4NppRpMjf2ju4coMCz91g==", - "dev": true, - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.839.0.tgz", + "integrity": "sha512-fv0BZwrDhWDju4D1MCLT4I2aPjr0dVQ6P+MpqvcGNOA41Oa9UdRhYTV5iuy5NLXzIzoCmnS+XfSq5Kbsf6//xw==", "dependencies": { - "@aws-sdk/core": "3.840.0", - "@aws-sdk/types": "3.840.0", + "@aws-sdk/core": "3.839.0", + "@aws-sdk/types": "3.821.0", "@smithy/fetch-http-handler": "^5.0.4", "@smithy/node-http-handler": "^4.0.6", "@smithy/property-provider": "^4.0.4", @@ -2896,21 +3037,19 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.840.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.840.0.tgz", - "integrity": "sha512-7F290BsWydShHb+7InXd+IjJc3mlEIm9I0R57F/Pjl1xZB69MdkhVGCnuETWoBt4g53ktJd6NEjzm/iAhFXFmw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.840.0", - "@aws-sdk/credential-provider-env": "3.840.0", - "@aws-sdk/credential-provider-http": "3.840.0", - "@aws-sdk/credential-provider-process": "3.840.0", - "@aws-sdk/credential-provider-sso": "3.840.0", - "@aws-sdk/credential-provider-web-identity": "3.840.0", - "@aws-sdk/nested-clients": "3.840.0", - "@aws-sdk/types": "3.840.0", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.839.0.tgz", + "integrity": "sha512-GHm0hF4CiDxIDR7TauMaA6iI55uuSqRxMBcqTAHaTPm6+h1A+MS+ysQMxZ+Jvwtoy8WmfTIGrJVxSCw0sK2hvA==", + "dependencies": { + "@aws-sdk/core": "3.839.0", + "@aws-sdk/credential-provider-env": "3.839.0", + "@aws-sdk/credential-provider-http": "3.839.0", + "@aws-sdk/credential-provider-process": "3.839.0", + "@aws-sdk/credential-provider-sso": "3.839.0", + "@aws-sdk/credential-provider-web-identity": "3.839.0", + "@aws-sdk/nested-clients": "3.839.0", + "@aws-sdk/types": "3.821.0", "@smithy/credential-provider-imds": "^4.0.6", "@smithy/property-provider": "^4.0.4", "@smithy/shared-ini-file-loader": "^4.0.4", @@ -2921,20 +3060,18 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.840.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.840.0.tgz", - "integrity": "sha512-KufP8JnxA31wxklLm63evUPSFApGcH8X86z3mv9SRbpCm5ycgWIGVCTXpTOdgq6rPZrwT9pftzv2/b4mV/9clg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.840.0", - "@aws-sdk/credential-provider-http": "3.840.0", - "@aws-sdk/credential-provider-ini": "3.840.0", - "@aws-sdk/credential-provider-process": "3.840.0", - "@aws-sdk/credential-provider-sso": "3.840.0", - "@aws-sdk/credential-provider-web-identity": "3.840.0", - "@aws-sdk/types": "3.840.0", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.839.0.tgz", + "integrity": "sha512-7bR+U2h+ft0V8chyeu9Bh/pvau4ZkQMeRt5f0dAULoepZQ77QQVRP4H04yJPTg9DCtqbVULQ3uf5YOp1/08vQw==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.839.0", + "@aws-sdk/credential-provider-http": "3.839.0", + "@aws-sdk/credential-provider-ini": "3.839.0", + "@aws-sdk/credential-provider-process": "3.839.0", + "@aws-sdk/credential-provider-sso": "3.839.0", + "@aws-sdk/credential-provider-web-identity": "3.839.0", + "@aws-sdk/types": "3.821.0", "@smithy/credential-provider-imds": "^4.0.6", "@smithy/property-provider": "^4.0.4", "@smithy/shared-ini-file-loader": "^4.0.4", @@ -2945,15 +3082,13 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-process": { - "version": "3.840.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.840.0.tgz", - "integrity": "sha512-HkDQWHy8tCI4A0Ps2NVtuVYMv9cB4y/IuD/TdOsqeRIAT12h8jDb98BwQPNLAImAOwOWzZJ8Cu0xtSpX7CQhMw==", - "dev": true, - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.839.0.tgz", + "integrity": "sha512-qShpekjociUZ+isyQNa0P7jo+0q3N2+0eJDg8SGyP6K6hHTcGfiqxTDps+IKl6NreCPhZCBzyI9mWkP0xSDR6g==", "dependencies": { - "@aws-sdk/core": "3.840.0", - "@aws-sdk/types": "3.840.0", + "@aws-sdk/core": "3.839.0", + "@aws-sdk/types": "3.821.0", "@smithy/property-provider": "^4.0.4", "@smithy/shared-ini-file-loader": "^4.0.4", "@smithy/types": "^4.3.1", @@ -2963,17 +3098,15 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.840.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.840.0.tgz", - "integrity": "sha512-2qgdtdd6R0Z1y0KL8gzzwFUGmhBHSUx4zy85L2XV1CXhpRNwV71SVWJqLDVV5RVWVf9mg50Pm3AWrUC0xb0pcA==", - "dev": true, - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.839.0.tgz", + "integrity": "sha512-w10zBLHhU8SBQcdrSPMI02haLoRGZg+gP7mH/Er8VhIXfHefbr7o4NirmB0hwdw/YAH8MLlC9jj7c2SJlsNhYA==", "dependencies": { - "@aws-sdk/client-sso": "3.840.0", - "@aws-sdk/core": "3.840.0", - "@aws-sdk/token-providers": "3.840.0", - "@aws-sdk/types": "3.840.0", + "@aws-sdk/client-sso": "3.839.0", + "@aws-sdk/core": "3.839.0", + "@aws-sdk/token-providers": "3.839.0", + "@aws-sdk/types": "3.821.0", "@smithy/property-provider": "^4.0.4", "@smithy/shared-ini-file-loader": "^4.0.4", "@smithy/types": "^4.3.1", @@ -2983,16 +3116,14 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.840.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.840.0.tgz", - "integrity": "sha512-dpEeVXG8uNZSmVXReE4WP0lwoioX2gstk4RnUgrdUE3YaPq8A+hJiVAyc3h+cjDeIqfbsQbZm9qFetKC2LF9dQ==", - "dev": true, - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.839.0.tgz", + "integrity": "sha512-EvqTc7J1kgmiuxknpCp1S60hyMQvmKxsI5uXzQtcogl/N55rxiXEqnCLI5q6p33q91PJegrcMCM5Q17Afhm5qA==", "dependencies": { - "@aws-sdk/core": "3.840.0", - "@aws-sdk/nested-clients": "3.840.0", - "@aws-sdk/types": "3.840.0", + "@aws-sdk/core": "3.839.0", + "@aws-sdk/nested-clients": "3.839.0", + "@aws-sdk/types": "3.821.0", "@smithy/property-provider": "^4.0.4", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -3001,14 +3132,12 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.840.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.840.0.tgz", - "integrity": "sha512-ub+hXJAbAje94+Ya6c6eL7sYujoE8D4Bumu1NUI8TXjUhVVn0HzVWQjpRLshdLsUp1AW7XyeJaxyajRaJQ8+Xg==", - "dev": true, - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.821.0.tgz", + "integrity": "sha512-xSMR+sopSeWGx5/4pAGhhfMvGBHioVBbqGvDs6pG64xfNwM5vq5s5v6D04e2i+uSTj4qGa71dLUs5I0UzAK3sw==", "dependencies": { - "@aws-sdk/types": "3.840.0", + "@aws-sdk/types": "3.821.0", "@smithy/protocol-http": "^5.1.2", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -3017,14 +3146,12 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-logger": { - "version": "3.840.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.840.0.tgz", - "integrity": "sha512-lSV8FvjpdllpGaRspywss4CtXV8M7NNNH+2/j86vMH+YCOZ6fu2T/TyFd/tHwZ92vDfHctWkRbQxg0bagqwovA==", - "dev": true, - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/middleware-logger": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.821.0.tgz", + "integrity": "sha512-0cvI0ipf2tGx7fXYEEN5fBeZDz2RnHyb9xftSgUsEq7NBxjV0yTZfLJw6Za5rjE6snC80dRN8+bTNR1tuG89zA==", "dependencies": { - "@aws-sdk/types": "3.840.0", + "@aws-sdk/types": "3.821.0", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, @@ -3032,14 +3159,12 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.840.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.840.0.tgz", - "integrity": "sha512-Gu7lGDyfddyhIkj1Z1JtrY5NHb5+x/CRiB87GjaSrKxkDaydtX2CU977JIABtt69l9wLbcGDIQ+W0uJ5xPof7g==", - "dev": true, - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.821.0.tgz", + "integrity": "sha512-efmaifbhBoqKG3bAoEfDdcM8hn1psF+4qa7ykWuYmfmah59JBeqHLfz5W9m9JoTwoKPkFcVLWZxnyZzAnVBOIg==", "dependencies": { - "@aws-sdk/types": "3.840.0", + "@aws-sdk/types": "3.821.0", "@smithy/protocol-http": "^5.1.2", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -3048,16 +3173,14 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.840.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.840.0.tgz", - "integrity": "sha512-hiiMf7BP5ZkAFAvWRcK67Mw/g55ar7OCrvrynC92hunx/xhMkrgSLM0EXIZ1oTn3uql9kH/qqGF0nqsK6K555A==", - "dev": true, - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.839.0.tgz", + "integrity": "sha512-2u74uRM1JWq6Sf7+3YpjejPM9YkomGt4kWhrmooIBEq1k5r2GTbkH7pNCxBQwBueXM21jAGVDxxeClpTx+5hig==", "dependencies": { - "@aws-sdk/core": "3.840.0", - "@aws-sdk/types": "3.840.0", - "@aws-sdk/util-endpoints": "3.840.0", + "@aws-sdk/core": "3.839.0", + "@aws-sdk/types": "3.821.0", + "@aws-sdk/util-endpoints": "3.828.0", "@smithy/core": "^3.6.0", "@smithy/protocol-http": "^5.1.2", "@smithy/types": "^4.3.1", @@ -3067,25 +3190,23 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/nested-clients": { - "version": "3.840.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.840.0.tgz", - "integrity": "sha512-LXYYo9+n4hRqnRSIMXLBb+BLz+cEmjMtTudwK1BF6Bn2RfdDv29KuyeDRrPCS3TwKl7ZKmXUmE9n5UuHAPfBpA==", - "dev": true, - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/nested-clients": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.839.0.tgz", + "integrity": "sha512-Glic0pg2THYP3aRhJORwJJBe1JLtJoEdWV/MFZNyzCklfMwEzpWtZAyxy+tQyFmMeW50uBAnh2R0jhMMcf257w==", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.840.0", - "@aws-sdk/middleware-host-header": "3.840.0", - "@aws-sdk/middleware-logger": "3.840.0", - "@aws-sdk/middleware-recursion-detection": "3.840.0", - "@aws-sdk/middleware-user-agent": "3.840.0", - "@aws-sdk/region-config-resolver": "3.840.0", - "@aws-sdk/types": "3.840.0", - "@aws-sdk/util-endpoints": "3.840.0", - "@aws-sdk/util-user-agent-browser": "3.840.0", - "@aws-sdk/util-user-agent-node": "3.840.0", + "@aws-sdk/core": "3.839.0", + "@aws-sdk/middleware-host-header": "3.821.0", + "@aws-sdk/middleware-logger": "3.821.0", + "@aws-sdk/middleware-recursion-detection": "3.821.0", + "@aws-sdk/middleware-user-agent": "3.839.0", + "@aws-sdk/region-config-resolver": "3.821.0", + "@aws-sdk/types": "3.821.0", + "@aws-sdk/util-endpoints": "3.828.0", + "@aws-sdk/util-user-agent-browser": "3.821.0", + "@aws-sdk/util-user-agent-node": "3.839.0", "@smithy/config-resolver": "^4.1.4", "@smithy/core": "^3.6.0", "@smithy/fetch-http-handler": "^5.0.4", @@ -3117,14 +3238,12 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/region-config-resolver": { - "version": "3.840.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.840.0.tgz", - "integrity": "sha512-Qjnxd/yDv9KpIMWr90ZDPtRj0v75AqGC92Lm9+oHXZ8p1MjG5JE2CW0HL8JRgK9iKzgKBL7pPQRXI8FkvEVfrA==", - "dev": true, - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.821.0.tgz", + "integrity": "sha512-t8og+lRCIIy5nlId0bScNpCkif8sc0LhmtaKsbm0ZPm3sCa/WhCbSZibjbZ28FNjVCV+p0D9RYZx0VDDbtWyjw==", "dependencies": { - "@aws-sdk/types": "3.840.0", + "@aws-sdk/types": "3.821.0", "@smithy/node-config-provider": "^4.1.3", "@smithy/types": "^4.3.1", "@smithy/util-config-provider": "^4.0.0", @@ -3135,77 +3254,24 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/token-providers": { - "version": "3.840.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.840.0.tgz", - "integrity": "sha512-6BuTOLTXvmgwjK7ve7aTg9JaWFdM5UoMolLVPMyh3wTv9Ufalh8oklxYHUBIxsKkBGO2WiHXytveuxH6tAgTYg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.840.0", - "@aws-sdk/nested-clients": "3.840.0", - "@aws-sdk/types": "3.840.0", - "@smithy/property-provider": "^4.0.4", - "@smithy/shared-ini-file-loader": "^4.0.4", - "@smithy/types": "^4.3.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/types": { - "version": "3.840.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.840.0.tgz", - "integrity": "sha512-xliuHaUFZxEx1NSXeLLZ9Dyu6+EJVQKEoD+yM+zqUo3YDZ7medKJWY6fIOKiPX/N7XbLdBYwajb15Q7IL8KkeA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.3.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/util-endpoints": { - "version": "3.840.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.840.0.tgz", - "integrity": "sha512-eqE9ROdg/Kk0rj3poutyRCFauPDXIf/WSvCqFiRDDVi6QOnCv/M0g2XW8/jSvkJlOyaXkNCptapIp6BeeFFGYw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.840.0", - "@smithy/types": "^4.3.1", - "@smithy/util-endpoints": "^3.0.6", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.840.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.840.0.tgz", - "integrity": "sha512-JdyZM3EhhL4PqwFpttZu1afDpPJCCc3eyZOLi+srpX11LsGj6sThf47TYQN75HT1CarZ7cCdQHGzP2uy3/xHfQ==", - "dev": true, - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.821.0.tgz", + "integrity": "sha512-irWZHyM0Jr1xhC+38OuZ7JB6OXMLPZlj48thElpsO1ZSLRkLZx5+I7VV6k3sp2yZ7BYbKz/G2ojSv4wdm7XTLw==", "dependencies": { - "@aws-sdk/types": "3.840.0", + "@aws-sdk/types": "3.821.0", "@smithy/types": "^4.3.1", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, - "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.840.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.840.0.tgz", - "integrity": "sha512-Fy5JUEDQU1tPm2Yw/YqRYYc27W5+QD/J4mYvQvdWjUGZLB5q3eLFMGD35Uc28ZFoGMufPr4OCxK/bRfWROBRHQ==", - "dev": true, - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.839.0.tgz", + "integrity": "sha512-MuunkIG1bJVMtTH7MbjXOrhHleU5wjHz5eCAUc6vj7M9rwol71nqjj9b8RLnkO5gsJcKc29Qk8iV6xQuzKWNMw==", "dependencies": { - "@aws-sdk/middleware-user-agent": "3.840.0", - "@aws-sdk/types": "3.840.0", + "@aws-sdk/middleware-user-agent": "3.839.0", + "@aws-sdk/types": "3.821.0", "@smithy/node-config-provider": "^4.1.3", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -3222,12 +3288,10 @@ } } }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/abort-controller": { + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/abort-controller": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.4.tgz", "integrity": "sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA==", - "dev": true, - "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -3236,12 +3300,10 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/node-http-handler": { + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/node-http-handler": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.6.tgz", "integrity": "sha512-NqbmSz7AW2rvw4kXhKGrYTiJVDHnMsFnX4i+/FzcZAfbOBauPYs2ekuECkSbtqaxETLLTu9Rl/ex6+I2BKErPA==", - "dev": true, - "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^4.0.4", "@smithy/protocol-http": "^5.1.2", @@ -3253,12 +3315,10 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/client-sts/node_modules/@smithy/types": { + "node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/types": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", - "dev": true, - "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -3266,45 +3326,37 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/core": { + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/types": { "version": "3.731.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.731.0.tgz", + "integrity": "sha512-NrdkJg6oOUbXR2r9WvHP408CLyvST8cJfp1/jP9pemtjvjPoh6NukbCtiSFdOOb1eryP02CnqQWItfJC1p2Y/Q==", "dependencies": { - "@aws-sdk/types": "3.731.0", - "@smithy/core": "^3.0.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/signature-v4": "^5.0.0", - "@smithy/smithy-client": "^4.0.0", "@smithy/types": "^4.0.0", - "@smithy/util-middleware": "^4.0.0", - "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/core/node_modules/@aws-sdk/types": { + "node_modules/@aws-sdk/client-sso/node_modules/@aws-sdk/util-endpoints": { "version": "3.731.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.731.0.tgz", + "integrity": "sha512-riztxTAfncFS9yQWcBJffGgOgLoKSa63ph+rxWJxKl6BHAmWEvHICj1qDcVmnWfIcvJ5cClclY75l9qKaUH7rQ==", "dependencies": { + "@aws-sdk/types": "3.731.0", "@smithy/types": "^4.0.0", + "@smithy/util-endpoints": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity": { - "version": "3.835.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/client-cognito-identity": "3.835.0", - "@aws-sdk/types": "3.821.0", - "@smithy/property-provider": "^4.0.4", + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/abort-controller": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.4.tgz", + "integrity": "sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA==", + "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, @@ -3312,76 +3364,170 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/types": { - "version": "4.3.1", - "dev": true, - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/node-http-handler": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.6.tgz", + "integrity": "sha512-NqbmSz7AW2rvw4kXhKGrYTiJVDHnMsFnX4i+/FzcZAfbOBauPYs2ekuECkSbtqaxETLLTu9Rl/ex6+I2BKErPA==", "dependencies": { + "@smithy/abort-controller": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/querystring-builder": "^4.0.4", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.731.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/client-sso/node_modules/@smithy/types": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { - "@aws-sdk/core": "3.731.0", - "@aws-sdk/types": "3.731.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-env/node_modules/@aws-sdk/types": { - "version": "3.731.0", + "node_modules/@aws-sdk/client-sts": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.840.0.tgz", + "integrity": "sha512-h+mu89Wk81Ne+B624GT/pBM5VjuAZueSeQNixhgtQ1QHi6bZzrpz8+lvMSibKO+kXFyQsTLzkyibbxnhLpWQZA==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.0.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.840.0", + "@aws-sdk/credential-provider-node": "3.840.0", + "@aws-sdk/middleware-host-header": "3.840.0", + "@aws-sdk/middleware-logger": "3.840.0", + "@aws-sdk/middleware-recursion-detection": "3.840.0", + "@aws-sdk/middleware-user-agent": "3.840.0", + "@aws-sdk/region-config-resolver": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-endpoints": "3.840.0", + "@aws-sdk/util-user-agent-browser": "3.840.0", + "@aws-sdk/util-user-agent-node": "3.840.0", + "@smithy/config-resolver": "^4.1.4", + "@smithy/core": "^3.6.0", + "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/hash-node": "^4.0.4", + "@smithy/invalid-dependency": "^4.0.4", + "@smithy/middleware-content-length": "^4.0.4", + "@smithy/middleware-endpoint": "^4.1.13", + "@smithy/middleware-retry": "^4.1.14", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/node-http-handler": "^4.0.6", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.5", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.21", + "@smithy/util-defaults-mode-node": "^4.0.21", + "@smithy/util-endpoints": "^3.0.6", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.6", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.731.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/client-sso": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.840.0.tgz", + "integrity": "sha512-3Zp+FWN2hhmKdpS0Ragi5V2ZPsZNScE3jlbgoJjzjI/roHZqO+e3/+XFN4TlM0DsPKYJNp+1TAjmhxN6rOnfYA==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.731.0", - "@aws-sdk/types": "3.731.0", - "@smithy/fetch-http-handler": "^5.0.0", - "@smithy/node-http-handler": "^4.0.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/smithy-client": "^4.0.0", - "@smithy/types": "^4.0.0", - "@smithy/util-stream": "^4.0.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.840.0", + "@aws-sdk/middleware-host-header": "3.840.0", + "@aws-sdk/middleware-logger": "3.840.0", + "@aws-sdk/middleware-recursion-detection": "3.840.0", + "@aws-sdk/middleware-user-agent": "3.840.0", + "@aws-sdk/region-config-resolver": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-endpoints": "3.840.0", + "@aws-sdk/util-user-agent-browser": "3.840.0", + "@aws-sdk/util-user-agent-node": "3.840.0", + "@smithy/config-resolver": "^4.1.4", + "@smithy/core": "^3.6.0", + "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/hash-node": "^4.0.4", + "@smithy/invalid-dependency": "^4.0.4", + "@smithy/middleware-content-length": "^4.0.4", + "@smithy/middleware-endpoint": "^4.1.13", + "@smithy/middleware-retry": "^4.1.14", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/node-http-handler": "^4.0.6", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.5", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.21", + "@smithy/util-defaults-mode-node": "^4.0.21", + "@smithy/util-endpoints": "^3.0.6", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.6", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@aws-sdk/types": { - "version": "3.731.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/core": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.840.0.tgz", + "integrity": "sha512-x3Zgb39tF1h2XpU+yA4OAAQlW6LVEfXNlSedSYJ7HGKXqA/E9h3rWQVpYfhXXVVsLdYXdNw5KBUkoAoruoZSZA==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.0.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/xml-builder": "3.821.0", + "@smithy/core": "^3.6.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/property-provider": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/signature-v4": "^5.1.2", + "@smithy/smithy-client": "^4.4.5", + "@smithy/types": "^4.3.1", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-utf8": "^4.0.0", + "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/abort-controller": { - "version": "4.0.4", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.840.0.tgz", + "integrity": "sha512-EzF6VcJK7XvQ/G15AVEfJzN2mNXU8fcVpXo4bRyr1S6t2q5zx6UPH/XjDbn18xyUmOq01t+r8gG+TmHEVo18fA==", + "dev": true, "license": "Apache-2.0", "dependencies": { + "@aws-sdk/core": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@smithy/property-provider": "^4.0.4", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, @@ -3389,212 +3535,192 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler": { - "version": "4.0.6", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.840.0.tgz", + "integrity": "sha512-wbnUiPGLVea6mXbUh04fu+VJmGkQvmToPeTYdHE8eRZq3NRDi3t3WltT+jArLBKD/4NppRpMjf2ju4coMCz91g==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^4.0.4", + "@aws-sdk/core": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/node-http-handler": "^4.0.6", + "@smithy/property-provider": "^4.0.4", "@smithy/protocol-http": "^5.1.2", - "@smithy/querystring-builder": "^4.0.4", + "@smithy/smithy-client": "^4.4.5", "@smithy/types": "^4.3.1", + "@smithy/util-stream": "^4.2.2", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/types": { - "version": "4.3.1", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.840.0.tgz", + "integrity": "sha512-7F290BsWydShHb+7InXd+IjJc3mlEIm9I0R57F/Pjl1xZB69MdkhVGCnuETWoBt4g53ktJd6NEjzm/iAhFXFmw==", + "dev": true, "license": "Apache-2.0", "dependencies": { + "@aws-sdk/core": "3.840.0", + "@aws-sdk/credential-provider-env": "3.840.0", + "@aws-sdk/credential-provider-http": "3.840.0", + "@aws-sdk/credential-provider-process": "3.840.0", + "@aws-sdk/credential-provider-sso": "3.840.0", + "@aws-sdk/credential-provider-web-identity": "3.840.0", + "@aws-sdk/nested-clients": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@smithy/credential-provider-imds": "^4.0.6", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.731.1", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.840.0.tgz", + "integrity": "sha512-KufP8JnxA31wxklLm63evUPSFApGcH8X86z3mv9SRbpCm5ycgWIGVCTXpTOdgq6rPZrwT9pftzv2/b4mV/9clg==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.731.0", - "@aws-sdk/credential-provider-env": "3.731.0", - "@aws-sdk/credential-provider-http": "3.731.0", - "@aws-sdk/credential-provider-process": "3.731.0", - "@aws-sdk/credential-provider-sso": "3.731.1", - "@aws-sdk/credential-provider-web-identity": "3.731.1", - "@aws-sdk/nested-clients": "3.731.1", - "@aws-sdk/types": "3.731.0", - "@smithy/credential-provider-imds": "^4.0.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/shared-ini-file-loader": "^4.0.0", - "@smithy/types": "^4.0.0", + "@aws-sdk/credential-provider-env": "3.840.0", + "@aws-sdk/credential-provider-http": "3.840.0", + "@aws-sdk/credential-provider-ini": "3.840.0", + "@aws-sdk/credential-provider-process": "3.840.0", + "@aws-sdk/credential-provider-sso": "3.840.0", + "@aws-sdk/credential-provider-web-identity": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@smithy/credential-provider-imds": "^4.0.6", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/types": { - "version": "3.731.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.840.0.tgz", + "integrity": "sha512-HkDQWHy8tCI4A0Ps2NVtuVYMv9cB4y/IuD/TdOsqeRIAT12h8jDb98BwQPNLAImAOwOWzZJ8Cu0xtSpX7CQhMw==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.0.0", + "@aws-sdk/core": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.731.1", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.840.0.tgz", + "integrity": "sha512-2qgdtdd6R0Z1y0KL8gzzwFUGmhBHSUx4zy85L2XV1CXhpRNwV71SVWJqLDVV5RVWVf9mg50Pm3AWrUC0xb0pcA==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.731.0", - "@aws-sdk/credential-provider-http": "3.731.0", - "@aws-sdk/credential-provider-ini": "3.731.1", - "@aws-sdk/credential-provider-process": "3.731.0", - "@aws-sdk/credential-provider-sso": "3.731.1", - "@aws-sdk/credential-provider-web-identity": "3.731.1", - "@aws-sdk/types": "3.731.0", - "@smithy/credential-provider-imds": "^4.0.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/shared-ini-file-loader": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/types": { - "version": "3.731.0", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.731.0", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.731.0", - "@aws-sdk/types": "3.731.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/shared-ini-file-loader": "^4.0.0", - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-process/node_modules/@aws-sdk/types": { - "version": "3.731.0", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.731.1", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/client-sso": "3.731.0", - "@aws-sdk/core": "3.731.0", - "@aws-sdk/token-providers": "3.731.1", - "@aws-sdk/types": "3.731.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/shared-ini-file-loader": "^4.0.0", - "@smithy/types": "^4.0.0", + "@aws-sdk/client-sso": "3.840.0", + "@aws-sdk/core": "3.840.0", + "@aws-sdk/token-providers": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers": { - "version": "3.731.1", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.840.0.tgz", + "integrity": "sha512-dpEeVXG8uNZSmVXReE4WP0lwoioX2gstk4RnUgrdUE3YaPq8A+hJiVAyc3h+cjDeIqfbsQbZm9qFetKC2LF9dQ==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/nested-clients": "3.731.1", - "@aws-sdk/types": "3.731.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/shared-ini-file-loader": "^4.0.0", - "@smithy/types": "^4.0.0", + "@aws-sdk/core": "3.840.0", + "@aws-sdk/nested-clients": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/types": { - "version": "3.731.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.840.0.tgz", + "integrity": "sha512-ub+hXJAbAje94+Ya6c6eL7sYujoE8D4Bumu1NUI8TXjUhVVn0HzVWQjpRLshdLsUp1AW7XyeJaxyajRaJQ8+Xg==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.0.0", + "@aws-sdk/types": "3.840.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.731.1", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-logger": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.840.0.tgz", + "integrity": "sha512-lSV8FvjpdllpGaRspywss4CtXV8M7NNNH+2/j86vMH+YCOZ6fu2T/TyFd/tHwZ92vDfHctWkRbQxg0bagqwovA==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.731.0", - "@aws-sdk/nested-clients": "3.731.1", - "@aws-sdk/types": "3.731.0", - "@smithy/property-provider": "^4.0.0", - "@smithy/types": "^4.0.0", + "@aws-sdk/types": "3.840.0", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@aws-sdk/types": { - "version": "3.731.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.840.0.tgz", + "integrity": "sha512-Gu7lGDyfddyhIkj1Z1JtrY5NHb5+x/CRiB87GjaSrKxkDaydtX2CU977JIABtt69l9wLbcGDIQ+W0uJ5xPof7g==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.0.0", + "@aws-sdk/types": "3.840.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers": { - "version": "3.835.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.840.0.tgz", + "integrity": "sha512-hiiMf7BP5ZkAFAvWRcK67Mw/g55ar7OCrvrynC92hunx/xhMkrgSLM0EXIZ1oTn3uql9kH/qqGF0nqsK6K555A==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-cognito-identity": "3.835.0", - "@aws-sdk/core": "3.835.0", - "@aws-sdk/credential-provider-cognito-identity": "3.835.0", - "@aws-sdk/credential-provider-env": "3.835.0", - "@aws-sdk/credential-provider-http": "3.835.0", - "@aws-sdk/credential-provider-ini": "3.835.0", - "@aws-sdk/credential-provider-node": "3.835.0", - "@aws-sdk/credential-provider-process": "3.835.0", - "@aws-sdk/credential-provider-sso": "3.835.0", - "@aws-sdk/credential-provider-web-identity": "3.835.0", - "@aws-sdk/nested-clients": "3.835.0", - "@aws-sdk/types": "3.821.0", - "@smithy/config-resolver": "^4.1.4", - "@smithy/core": "^3.5.3", - "@smithy/credential-provider-imds": "^4.0.6", - "@smithy/node-config-provider": "^4.1.3", - "@smithy/property-provider": "^4.0.4", + "@aws-sdk/core": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-endpoints": "3.840.0", + "@smithy/core": "^3.6.0", + "@smithy/protocol-http": "^5.1.2", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, @@ -3602,44 +3728,46 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/client-sso": { - "version": "3.835.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/nested-clients": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.840.0.tgz", + "integrity": "sha512-LXYYo9+n4hRqnRSIMXLBb+BLz+cEmjMtTudwK1BF6Bn2RfdDv29KuyeDRrPCS3TwKl7ZKmXUmE9n5UuHAPfBpA==", "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.835.0", - "@aws-sdk/middleware-host-header": "3.821.0", - "@aws-sdk/middleware-logger": "3.821.0", - "@aws-sdk/middleware-recursion-detection": "3.821.0", - "@aws-sdk/middleware-user-agent": "3.835.0", - "@aws-sdk/region-config-resolver": "3.821.0", - "@aws-sdk/types": "3.821.0", - "@aws-sdk/util-endpoints": "3.828.0", - "@aws-sdk/util-user-agent-browser": "3.821.0", - "@aws-sdk/util-user-agent-node": "3.835.0", + "@aws-sdk/core": "3.840.0", + "@aws-sdk/middleware-host-header": "3.840.0", + "@aws-sdk/middleware-logger": "3.840.0", + "@aws-sdk/middleware-recursion-detection": "3.840.0", + "@aws-sdk/middleware-user-agent": "3.840.0", + "@aws-sdk/region-config-resolver": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-endpoints": "3.840.0", + "@aws-sdk/util-user-agent-browser": "3.840.0", + "@aws-sdk/util-user-agent-node": "3.840.0", "@smithy/config-resolver": "^4.1.4", - "@smithy/core": "^3.5.3", + "@smithy/core": "^3.6.0", "@smithy/fetch-http-handler": "^5.0.4", "@smithy/hash-node": "^4.0.4", "@smithy/invalid-dependency": "^4.0.4", "@smithy/middleware-content-length": "^4.0.4", - "@smithy/middleware-endpoint": "^4.1.12", - "@smithy/middleware-retry": "^4.1.13", + "@smithy/middleware-endpoint": "^4.1.13", + "@smithy/middleware-retry": "^4.1.14", "@smithy/middleware-serde": "^4.0.8", "@smithy/middleware-stack": "^4.0.4", "@smithy/node-config-provider": "^4.1.3", "@smithy/node-http-handler": "^4.0.6", "@smithy/protocol-http": "^5.1.2", - "@smithy/smithy-client": "^4.4.4", + "@smithy/smithy-client": "^4.4.5", "@smithy/types": "^4.3.1", "@smithy/url-parser": "^4.0.4", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.20", - "@smithy/util-defaults-mode-node": "^4.0.20", + "@smithy/util-defaults-mode-browser": "^4.0.21", + "@smithy/util-defaults-mode-node": "^4.0.21", "@smithy/util-endpoints": "^3.0.6", "@smithy/util-middleware": "^4.0.4", "@smithy/util-retry": "^4.0.6", @@ -3650,39 +3778,36 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/core": { - "version": "3.835.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.840.0.tgz", + "integrity": "sha512-Qjnxd/yDv9KpIMWr90ZDPtRj0v75AqGC92Lm9+oHXZ8p1MjG5JE2CW0HL8JRgK9iKzgKBL7pPQRXI8FkvEVfrA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.821.0", - "@aws-sdk/xml-builder": "3.821.0", - "@smithy/core": "^3.5.3", + "@aws-sdk/types": "3.840.0", "@smithy/node-config-provider": "^4.1.3", - "@smithy/property-provider": "^4.0.4", - "@smithy/protocol-http": "^5.1.2", - "@smithy/signature-v4": "^5.1.2", - "@smithy/smithy-client": "^4.4.4", "@smithy/types": "^4.3.1", - "@smithy/util-base64": "^4.0.0", - "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-config-provider": "^4.0.0", "@smithy/util-middleware": "^4.0.4", - "@smithy/util-utf8": "^4.0.0", - "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-env": { - "version": "3.835.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/token-providers": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.840.0.tgz", + "integrity": "sha512-6BuTOLTXvmgwjK7ve7aTg9JaWFdM5UoMolLVPMyh3wTv9Ufalh8oklxYHUBIxsKkBGO2WiHXytveuxH6tAgTYg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.835.0", - "@aws-sdk/types": "3.821.0", + "@aws-sdk/core": "3.840.0", + "@aws-sdk/nested-clients": "3.840.0", + "@aws-sdk/types": "3.840.0", "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, @@ -3690,98 +3815,81 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-http": { - "version": "3.835.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/types": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.840.0.tgz", + "integrity": "sha512-xliuHaUFZxEx1NSXeLLZ9Dyu6+EJVQKEoD+yM+zqUo3YDZ7medKJWY6fIOKiPX/N7XbLdBYwajb15Q7IL8KkeA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.835.0", - "@aws-sdk/types": "3.821.0", - "@smithy/fetch-http-handler": "^5.0.4", - "@smithy/node-http-handler": "^4.0.6", - "@smithy/property-provider": "^4.0.4", - "@smithy/protocol-http": "^5.1.2", - "@smithy/smithy-client": "^4.4.4", "@smithy/types": "^4.3.1", - "@smithy/util-stream": "^4.2.2", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.835.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/util-endpoints": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.840.0.tgz", + "integrity": "sha512-eqE9ROdg/Kk0rj3poutyRCFauPDXIf/WSvCqFiRDDVi6QOnCv/M0g2XW8/jSvkJlOyaXkNCptapIp6BeeFFGYw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.835.0", - "@aws-sdk/credential-provider-env": "3.835.0", - "@aws-sdk/credential-provider-http": "3.835.0", - "@aws-sdk/credential-provider-process": "3.835.0", - "@aws-sdk/credential-provider-sso": "3.835.0", - "@aws-sdk/credential-provider-web-identity": "3.835.0", - "@aws-sdk/nested-clients": "3.835.0", - "@aws-sdk/types": "3.821.0", - "@smithy/credential-provider-imds": "^4.0.6", - "@smithy/property-provider": "^4.0.4", - "@smithy/shared-ini-file-loader": "^4.0.4", + "@aws-sdk/types": "3.840.0", "@smithy/types": "^4.3.1", + "@smithy/util-endpoints": "^3.0.6", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-node": { - "version": "3.835.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.840.0.tgz", + "integrity": "sha512-JdyZM3EhhL4PqwFpttZu1afDpPJCCc3eyZOLi+srpX11LsGj6sThf47TYQN75HT1CarZ7cCdQHGzP2uy3/xHfQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.835.0", - "@aws-sdk/credential-provider-http": "3.835.0", - "@aws-sdk/credential-provider-ini": "3.835.0", - "@aws-sdk/credential-provider-process": "3.835.0", - "@aws-sdk/credential-provider-sso": "3.835.0", - "@aws-sdk/credential-provider-web-identity": "3.835.0", - "@aws-sdk/types": "3.821.0", - "@smithy/credential-provider-imds": "^4.0.6", - "@smithy/property-provider": "^4.0.4", - "@smithy/shared-ini-file-loader": "^4.0.4", + "@aws-sdk/types": "3.840.0", "@smithy/types": "^4.3.1", + "bowser": "^2.11.0", "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-process": { - "version": "3.835.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.840.0.tgz", + "integrity": "sha512-Fy5JUEDQU1tPm2Yw/YqRYYc27W5+QD/J4mYvQvdWjUGZLB5q3eLFMGD35Uc28ZFoGMufPr4OCxK/bRfWROBRHQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.835.0", - "@aws-sdk/types": "3.821.0", - "@smithy/property-provider": "^4.0.4", - "@smithy/shared-ini-file-loader": "^4.0.4", + "@aws-sdk/middleware-user-agent": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@smithy/node-config-provider": "^4.1.3", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.835.0", + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/abort-controller": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.4.tgz", + "integrity": "sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.835.0", - "@aws-sdk/core": "3.835.0", - "@aws-sdk/token-providers": "3.835.0", - "@aws-sdk/types": "3.821.0", - "@smithy/property-provider": "^4.0.4", - "@smithy/shared-ini-file-loader": "^4.0.4", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, @@ -3789,15 +3897,16 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.835.0", + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/node-http-handler": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.6.tgz", + "integrity": "sha512-NqbmSz7AW2rvw4kXhKGrYTiJVDHnMsFnX4i+/FzcZAfbOBauPYs2ekuECkSbtqaxETLLTu9Rl/ex6+I2BKErPA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.835.0", - "@aws-sdk/nested-clients": "3.835.0", - "@aws-sdk/types": "3.821.0", - "@smithy/property-provider": "^4.0.4", + "@smithy/abort-controller": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/querystring-builder": "^4.0.4", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, @@ -3805,102 +3914,110 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.821.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.821.0", - "@smithy/protocol-http": "^5.1.2", - "@smithy/types": "^4.3.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/middleware-logger": { - "version": "3.821.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.821.0", - "@smithy/types": "^4.3.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.821.0", + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/types": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.821.0", - "@smithy/protocol-http": "^5.1.2", - "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.835.0", + "node_modules/@aws-sdk/client-sts": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.840.0.tgz", + "integrity": "sha512-h+mu89Wk81Ne+B624GT/pBM5VjuAZueSeQNixhgtQ1QHi6bZzrpz8+lvMSibKO+kXFyQsTLzkyibbxnhLpWQZA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.835.0", - "@aws-sdk/types": "3.821.0", - "@aws-sdk/util-endpoints": "3.828.0", - "@smithy/core": "^3.5.3", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.840.0", + "@aws-sdk/credential-provider-node": "3.840.0", + "@aws-sdk/middleware-host-header": "3.840.0", + "@aws-sdk/middleware-logger": "3.840.0", + "@aws-sdk/middleware-recursion-detection": "3.840.0", + "@aws-sdk/middleware-user-agent": "3.840.0", + "@aws-sdk/region-config-resolver": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-endpoints": "3.840.0", + "@aws-sdk/util-user-agent-browser": "3.840.0", + "@aws-sdk/util-user-agent-node": "3.840.0", + "@smithy/config-resolver": "^4.1.4", + "@smithy/core": "^3.6.0", + "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/hash-node": "^4.0.4", + "@smithy/invalid-dependency": "^4.0.4", + "@smithy/middleware-content-length": "^4.0.4", + "@smithy/middleware-endpoint": "^4.1.13", + "@smithy/middleware-retry": "^4.1.14", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/node-http-handler": "^4.0.6", "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.5", "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.21", + "@smithy/util-defaults-mode-node": "^4.0.21", + "@smithy/util-endpoints": "^3.0.6", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.6", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/nested-clients": { - "version": "3.835.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/client-sso": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.840.0.tgz", + "integrity": "sha512-3Zp+FWN2hhmKdpS0Ragi5V2ZPsZNScE3jlbgoJjzjI/roHZqO+e3/+XFN4TlM0DsPKYJNp+1TAjmhxN6rOnfYA==", "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.835.0", - "@aws-sdk/middleware-host-header": "3.821.0", - "@aws-sdk/middleware-logger": "3.821.0", - "@aws-sdk/middleware-recursion-detection": "3.821.0", - "@aws-sdk/middleware-user-agent": "3.835.0", - "@aws-sdk/region-config-resolver": "3.821.0", - "@aws-sdk/types": "3.821.0", - "@aws-sdk/util-endpoints": "3.828.0", - "@aws-sdk/util-user-agent-browser": "3.821.0", - "@aws-sdk/util-user-agent-node": "3.835.0", + "@aws-sdk/core": "3.840.0", + "@aws-sdk/middleware-host-header": "3.840.0", + "@aws-sdk/middleware-logger": "3.840.0", + "@aws-sdk/middleware-recursion-detection": "3.840.0", + "@aws-sdk/middleware-user-agent": "3.840.0", + "@aws-sdk/region-config-resolver": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-endpoints": "3.840.0", + "@aws-sdk/util-user-agent-browser": "3.840.0", + "@aws-sdk/util-user-agent-node": "3.840.0", "@smithy/config-resolver": "^4.1.4", - "@smithy/core": "^3.5.3", + "@smithy/core": "^3.6.0", "@smithy/fetch-http-handler": "^5.0.4", "@smithy/hash-node": "^4.0.4", "@smithy/invalid-dependency": "^4.0.4", "@smithy/middleware-content-length": "^4.0.4", - "@smithy/middleware-endpoint": "^4.1.12", - "@smithy/middleware-retry": "^4.1.13", + "@smithy/middleware-endpoint": "^4.1.13", + "@smithy/middleware-retry": "^4.1.14", "@smithy/middleware-serde": "^4.0.8", "@smithy/middleware-stack": "^4.0.4", "@smithy/node-config-provider": "^4.1.3", "@smithy/node-http-handler": "^4.0.6", "@smithy/protocol-http": "^5.1.2", - "@smithy/smithy-client": "^4.4.4", + "@smithy/smithy-client": "^4.4.5", "@smithy/types": "^4.3.1", "@smithy/url-parser": "^4.0.4", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.20", - "@smithy/util-defaults-mode-node": "^4.0.20", + "@smithy/util-defaults-mode-browser": "^4.0.21", + "@smithy/util-defaults-mode-node": "^4.0.21", "@smithy/util-endpoints": "^3.0.6", "@smithy/util-middleware": "^4.0.4", "@smithy/util-retry": "^4.0.6", @@ -3911,61 +4028,90 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/region-config-resolver": { - "version": "3.821.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/core": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.840.0.tgz", + "integrity": "sha512-x3Zgb39tF1h2XpU+yA4OAAQlW6LVEfXNlSedSYJ7HGKXqA/E9h3rWQVpYfhXXVVsLdYXdNw5KBUkoAoruoZSZA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.821.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/xml-builder": "3.821.0", + "@smithy/core": "^3.6.0", "@smithy/node-config-provider": "^4.1.3", + "@smithy/property-provider": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/signature-v4": "^5.1.2", + "@smithy/smithy-client": "^4.4.5", "@smithy/types": "^4.3.1", - "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-middleware": "^4.0.4", + "@smithy/util-utf8": "^4.0.0", + "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.821.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.840.0.tgz", + "integrity": "sha512-EzF6VcJK7XvQ/G15AVEfJzN2mNXU8fcVpXo4bRyr1S6t2q5zx6UPH/XjDbn18xyUmOq01t+r8gG+TmHEVo18fA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.821.0", + "@aws-sdk/core": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@smithy/property-provider": "^4.0.4", "@smithy/types": "^4.3.1", - "bowser": "^2.11.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.835.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.840.0.tgz", + "integrity": "sha512-wbnUiPGLVea6mXbUh04fu+VJmGkQvmToPeTYdHE8eRZq3NRDi3t3WltT+jArLBKD/4NppRpMjf2ju4coMCz91g==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "3.835.0", - "@aws-sdk/types": "3.821.0", - "@smithy/node-config-provider": "^4.1.3", + "@aws-sdk/core": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/node-http-handler": "^4.0.6", + "@smithy/property-provider": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.5", "@smithy/types": "^4.3.1", + "@smithy/util-stream": "^4.2.2", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/abort-controller": { - "version": "4.0.4", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.840.0.tgz", + "integrity": "sha512-7F290BsWydShHb+7InXd+IjJc3mlEIm9I0R57F/Pjl1xZB69MdkhVGCnuETWoBt4g53ktJd6NEjzm/iAhFXFmw==", "dev": true, "license": "Apache-2.0", "dependencies": { + "@aws-sdk/core": "3.840.0", + "@aws-sdk/credential-provider-env": "3.840.0", + "@aws-sdk/credential-provider-http": "3.840.0", + "@aws-sdk/credential-provider-process": "3.840.0", + "@aws-sdk/credential-provider-sso": "3.840.0", + "@aws-sdk/credential-provider-web-identity": "3.840.0", + "@aws-sdk/nested-clients": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@smithy/credential-provider-imds": "^4.0.6", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, @@ -3973,14 +4119,23 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/node-http-handler": { - "version": "4.0.6", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.840.0.tgz", + "integrity": "sha512-KufP8JnxA31wxklLm63evUPSFApGcH8X86z3mv9SRbpCm5ycgWIGVCTXpTOdgq6rPZrwT9pftzv2/b4mV/9clg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^4.0.4", - "@smithy/protocol-http": "^5.1.2", - "@smithy/querystring-builder": "^4.0.4", + "@aws-sdk/credential-provider-env": "3.840.0", + "@aws-sdk/credential-provider-http": "3.840.0", + "@aws-sdk/credential-provider-ini": "3.840.0", + "@aws-sdk/credential-provider-process": "3.840.0", + "@aws-sdk/credential-provider-sso": "3.840.0", + "@aws-sdk/credential-provider-web-identity": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@smithy/credential-provider-imds": "^4.0.6", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, @@ -3988,48 +4143,70 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/types": { - "version": "4.3.1", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.840.0.tgz", + "integrity": "sha512-HkDQWHy8tCI4A0Ps2NVtuVYMv9cB4y/IuD/TdOsqeRIAT12h8jDb98BwQPNLAImAOwOWzZJ8Cu0xtSpX7CQhMw==", "dev": true, "license": "Apache-2.0", "dependencies": { + "@aws-sdk/core": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.830.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.840.0.tgz", + "integrity": "sha512-2qgdtdd6R0Z1y0KL8gzzwFUGmhBHSUx4zy85L2XV1CXhpRNwV71SVWJqLDVV5RVWVf9mg50Pm3AWrUC0xb0pcA==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.821.0", - "@aws-sdk/util-arn-parser": "3.804.0", - "@smithy/node-config-provider": "^4.1.3", - "@smithy/protocol-http": "^5.1.2", + "@aws-sdk/client-sso": "3.840.0", + "@aws-sdk/core": "3.840.0", + "@aws-sdk/token-providers": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", "@smithy/types": "^4.3.1", - "@smithy/util-config-provider": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-bucket-endpoint/node_modules/@smithy/types": { - "version": "4.3.1", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.840.0.tgz", + "integrity": "sha512-dpEeVXG8uNZSmVXReE4WP0lwoioX2gstk4RnUgrdUE3YaPq8A+hJiVAyc3h+cjDeIqfbsQbZm9qFetKC2LF9dQ==", + "dev": true, "license": "Apache-2.0", "dependencies": { + "@aws-sdk/core": "3.840.0", + "@aws-sdk/nested-clients": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.821.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.840.0.tgz", + "integrity": "sha512-ub+hXJAbAje94+Ya6c6eL7sYujoE8D4Bumu1NUI8TXjUhVVn0HzVWQjpRLshdLsUp1AW7XyeJaxyajRaJQ8+Xg==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.821.0", + "@aws-sdk/types": "3.840.0", "@smithy/protocol-http": "^5.1.2", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -4038,101 +4215,150 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-expect-continue/node_modules/@smithy/types": { - "version": "4.3.1", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-logger": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.840.0.tgz", + "integrity": "sha512-lSV8FvjpdllpGaRspywss4CtXV8M7NNNH+2/j86vMH+YCOZ6fu2T/TyFd/tHwZ92vDfHctWkRbQxg0bagqwovA==", + "dev": true, "license": "Apache-2.0", "dependencies": { + "@aws-sdk/types": "3.840.0", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.835.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.840.0.tgz", + "integrity": "sha512-Gu7lGDyfddyhIkj1Z1JtrY5NHb5+x/CRiB87GjaSrKxkDaydtX2CU977JIABtt69l9wLbcGDIQ+W0uJ5xPof7g==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-crypto/crc32": "5.2.0", - "@aws-crypto/crc32c": "5.2.0", - "@aws-crypto/util": "5.2.0", - "@aws-sdk/core": "3.835.0", - "@aws-sdk/types": "3.821.0", - "@smithy/is-array-buffer": "^4.0.0", - "@smithy/node-config-provider": "^4.1.3", + "@aws-sdk/types": "3.840.0", "@smithy/protocol-http": "^5.1.2", "@smithy/types": "^4.3.1", - "@smithy/util-middleware": "^4.0.4", - "@smithy/util-stream": "^4.2.2", - "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@aws-sdk/core": { - "version": "3.835.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.840.0.tgz", + "integrity": "sha512-hiiMf7BP5ZkAFAvWRcK67Mw/g55ar7OCrvrynC92hunx/xhMkrgSLM0EXIZ1oTn3uql9kH/qqGF0nqsK6K555A==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.821.0", - "@aws-sdk/xml-builder": "3.821.0", - "@smithy/core": "^3.5.3", - "@smithy/node-config-provider": "^4.1.3", - "@smithy/property-provider": "^4.0.4", + "@aws-sdk/core": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-endpoints": "3.840.0", + "@smithy/core": "^3.6.0", "@smithy/protocol-http": "^5.1.2", - "@smithy/signature-v4": "^5.1.2", - "@smithy/smithy-client": "^4.4.4", "@smithy/types": "^4.3.1", - "@smithy/util-base64": "^4.0.0", - "@smithy/util-body-length-browser": "^4.0.0", - "@smithy/util-middleware": "^4.0.4", - "@smithy/util-utf8": "^4.0.0", - "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/types": { - "version": "4.3.1", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/nested-clients": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.840.0.tgz", + "integrity": "sha512-LXYYo9+n4hRqnRSIMXLBb+BLz+cEmjMtTudwK1BF6Bn2RfdDv29KuyeDRrPCS3TwKl7ZKmXUmE9n5UuHAPfBpA==", + "dev": true, "license": "Apache-2.0", "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.840.0", + "@aws-sdk/middleware-host-header": "3.840.0", + "@aws-sdk/middleware-logger": "3.840.0", + "@aws-sdk/middleware-recursion-detection": "3.840.0", + "@aws-sdk/middleware-user-agent": "3.840.0", + "@aws-sdk/region-config-resolver": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-endpoints": "3.840.0", + "@aws-sdk/util-user-agent-browser": "3.840.0", + "@aws-sdk/util-user-agent-node": "3.840.0", + "@smithy/config-resolver": "^4.1.4", + "@smithy/core": "^3.6.0", + "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/hash-node": "^4.0.4", + "@smithy/invalid-dependency": "^4.0.4", + "@smithy/middleware-content-length": "^4.0.4", + "@smithy/middleware-endpoint": "^4.1.13", + "@smithy/middleware-retry": "^4.1.14", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/node-http-handler": "^4.0.6", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.5", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.21", + "@smithy/util-defaults-mode-node": "^4.0.21", + "@smithy/util-endpoints": "^3.0.6", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.6", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.731.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.840.0.tgz", + "integrity": "sha512-Qjnxd/yDv9KpIMWr90ZDPtRj0v75AqGC92Lm9+oHXZ8p1MjG5JE2CW0HL8JRgK9iKzgKBL7pPQRXI8FkvEVfrA==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.731.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/types": "^4.0.0", + "@aws-sdk/types": "3.840.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-host-header/node_modules/@aws-sdk/types": { - "version": "3.731.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/token-providers": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.840.0.tgz", + "integrity": "sha512-6BuTOLTXvmgwjK7ve7aTg9JaWFdM5UoMolLVPMyh3wTv9Ufalh8oklxYHUBIxsKkBGO2WiHXytveuxH6tAgTYg==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.0.0", + "@aws-sdk/core": "3.840.0", + "@aws-sdk/nested-clients": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.821.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/types": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.840.0.tgz", + "integrity": "sha512-xliuHaUFZxEx1NSXeLLZ9Dyu6+EJVQKEoD+yM+zqUo3YDZ7medKJWY6fIOKiPX/N7XbLdBYwajb15Q7IL8KkeA==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.821.0", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, @@ -4140,103 +4366,118 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-location-constraint/node_modules/@smithy/types": { - "version": "4.3.1", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/util-endpoints": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.840.0.tgz", + "integrity": "sha512-eqE9ROdg/Kk0rj3poutyRCFauPDXIf/WSvCqFiRDDVi6QOnCv/M0g2XW8/jSvkJlOyaXkNCptapIp6BeeFFGYw==", + "dev": true, "license": "Apache-2.0", "dependencies": { + "@aws-sdk/types": "3.840.0", + "@smithy/types": "^4.3.1", + "@smithy/util-endpoints": "^3.0.6", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-logger": { - "version": "3.731.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.840.0.tgz", + "integrity": "sha512-JdyZM3EhhL4PqwFpttZu1afDpPJCCc3eyZOLi+srpX11LsGj6sThf47TYQN75HT1CarZ7cCdQHGzP2uy3/xHfQ==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.731.0", - "@smithy/types": "^4.0.0", + "@aws-sdk/types": "3.840.0", + "@smithy/types": "^4.3.1", + "bowser": "^2.11.0", "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-logger/node_modules/@aws-sdk/types": { - "version": "3.731.0", + "node_modules/@aws-sdk/client-sts/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.840.0.tgz", + "integrity": "sha512-Fy5JUEDQU1tPm2Yw/YqRYYc27W5+QD/J4mYvQvdWjUGZLB5q3eLFMGD35Uc28ZFoGMufPr4OCxK/bRfWROBRHQ==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.0.0", + "@aws-sdk/middleware-user-agent": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } } }, - "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.731.0", + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/abort-controller": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.4.tgz", + "integrity": "sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.731.0", - "@smithy/protocol-http": "^5.0.0", - "@smithy/types": "^4.0.0", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@aws-sdk/types": { - "version": "3.731.0", + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/node-http-handler": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.6.tgz", + "integrity": "sha512-NqbmSz7AW2rvw4kXhKGrYTiJVDHnMsFnX4i+/FzcZAfbOBauPYs2ekuECkSbtqaxETLLTu9Rl/ex6+I2BKErPA==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.0.0", + "@smithy/abort-controller": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/querystring-builder": "^4.0.4", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.835.0", + "node_modules/@aws-sdk/client-sts/node_modules/@smithy/types": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", + "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.835.0", - "@aws-sdk/types": "3.821.0", - "@aws-sdk/util-arn-parser": "3.804.0", - "@smithy/core": "^3.5.3", - "@smithy/node-config-provider": "^4.1.3", - "@smithy/protocol-http": "^5.1.2", - "@smithy/signature-v4": "^5.1.2", - "@smithy/smithy-client": "^4.4.4", - "@smithy/types": "^4.3.1", - "@smithy/util-config-provider": "^4.0.0", - "@smithy/util-middleware": "^4.0.4", - "@smithy/util-stream": "^4.2.2", - "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@aws-sdk/core": { - "version": "3.835.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/core": { + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.731.0.tgz", + "integrity": "sha512-ithBN1VWASkvAIlozJmenqDvNnFddr/SZXAs58+jCnBHgy3tXLHABZGVNCjetZkHRqNdXEO1kirnoxaFeXMeDA==", "dependencies": { - "@aws-sdk/types": "3.821.0", - "@aws-sdk/xml-builder": "3.821.0", - "@smithy/core": "^3.5.3", - "@smithy/node-config-provider": "^4.1.3", - "@smithy/property-provider": "^4.0.4", - "@smithy/protocol-http": "^5.1.2", - "@smithy/signature-v4": "^5.1.2", - "@smithy/smithy-client": "^4.4.4", - "@smithy/types": "^4.3.1", - "@smithy/util-base64": "^4.0.0", - "@smithy/util-body-length-browser": "^4.0.0", - "@smithy/util-middleware": "^4.0.4", - "@smithy/util-utf8": "^4.0.0", + "@aws-sdk/types": "3.731.0", + "@smithy/core": "^3.0.0", + "@smithy/node-config-provider": "^4.0.0", + "@smithy/property-provider": "^4.0.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/signature-v4": "^5.0.0", + "@smithy/smithy-client": "^4.0.0", + "@smithy/types": "^4.0.0", + "@smithy/util-middleware": "^4.0.0", "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, @@ -4244,21 +4485,27 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/types": { - "version": "4.3.1", - "license": "Apache-2.0", + "node_modules/@aws-sdk/core/node_modules/@aws-sdk/types": { + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.731.0.tgz", + "integrity": "sha512-NrdkJg6oOUbXR2r9WvHP408CLyvST8cJfp1/jP9pemtjvjPoh6NukbCtiSFdOOb1eryP02CnqQWItfJC1p2Y/Q==", "dependencies": { + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.821.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/credential-provider-cognito-identity": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.839.0.tgz", + "integrity": "sha512-dXJsdSEVzG+8nIihqVnWzyW8Dc41kNKZEXYguHDb+VM/cIjRSVkaw9jXc+KAvbwcGkEB7BfAuW9VMjxpTR5eAA==", + "dev": true, "dependencies": { + "@aws-sdk/client-cognito-identity": "3.839.0", "@aws-sdk/types": "3.821.0", + "@smithy/property-provider": "^4.0.4", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, @@ -4266,9 +4513,11 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-ssec/node_modules/@smithy/types": { + "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", + "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -4276,15 +4525,14 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-user-agent": { + "node_modules/@aws-sdk/credential-provider-env": { "version": "3.731.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.731.0.tgz", + "integrity": "sha512-h0WWZg4QMLgFVyIvQrC43zpVqsUWg1mPM1clpogP43B8+wEhDEQ4qWRzvFs3dQ4cqx/FLyDUZZF4cqgd94z7kw==", "dependencies": { "@aws-sdk/core": "3.731.0", "@aws-sdk/types": "3.731.0", - "@aws-sdk/util-endpoints": "3.731.0", - "@smithy/core": "^3.0.0", - "@smithy/protocol-http": "^5.0.0", + "@smithy/property-provider": "^4.0.0", "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, @@ -4292,9 +4540,10 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-user-agent/node_modules/@aws-sdk/types": { + "node_modules/@aws-sdk/credential-provider-env/node_modules/@aws-sdk/types": { "version": "3.731.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.731.0.tgz", + "integrity": "sha512-NrdkJg6oOUbXR2r9WvHP408CLyvST8cJfp1/jP9pemtjvjPoh6NukbCtiSFdOOb1eryP02CnqQWItfJC1p2Y/Q==", "dependencies": { "@smithy/types": "^4.0.0", "tslib": "^2.6.2" @@ -4303,93 +4552,42 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/middleware-user-agent/node_modules/@aws-sdk/util-endpoints": { + "node_modules/@aws-sdk/credential-provider-http": { "version": "3.731.0", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.731.0", - "@smithy/types": "^4.0.0", - "@smithy/util-endpoints": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/nested-clients": { - "version": "3.731.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.731.0.tgz", + "integrity": "sha512-iRtrjtcYaWgbvtu2cvDhIsPWXZGvhy1Hgks4682MEBNTc9AUwlfvDrYz2EEnTtJJyrbOdEHVrYrzqD8qPyVLCg==", "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", "@aws-sdk/core": "3.731.0", - "@aws-sdk/middleware-host-header": "3.731.0", - "@aws-sdk/middleware-logger": "3.731.0", - "@aws-sdk/middleware-recursion-detection": "3.731.0", - "@aws-sdk/middleware-user-agent": "3.731.0", - "@aws-sdk/region-config-resolver": "3.731.0", "@aws-sdk/types": "3.731.0", - "@aws-sdk/util-endpoints": "3.731.0", - "@aws-sdk/util-user-agent-browser": "3.731.0", - "@aws-sdk/util-user-agent-node": "3.731.0", - "@smithy/config-resolver": "^4.0.0", - "@smithy/core": "^3.0.0", "@smithy/fetch-http-handler": "^5.0.0", - "@smithy/hash-node": "^4.0.0", - "@smithy/invalid-dependency": "^4.0.0", - "@smithy/middleware-content-length": "^4.0.0", - "@smithy/middleware-endpoint": "^4.0.0", - "@smithy/middleware-retry": "^4.0.0", - "@smithy/middleware-serde": "^4.0.0", - "@smithy/middleware-stack": "^4.0.0", - "@smithy/node-config-provider": "^4.0.0", "@smithy/node-http-handler": "^4.0.0", + "@smithy/property-provider": "^4.0.0", "@smithy/protocol-http": "^5.0.0", "@smithy/smithy-client": "^4.0.0", "@smithy/types": "^4.0.0", - "@smithy/url-parser": "^4.0.0", - "@smithy/util-base64": "^4.0.0", - "@smithy/util-body-length-browser": "^4.0.0", - "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.0", - "@smithy/util-defaults-mode-node": "^4.0.0", - "@smithy/util-endpoints": "^3.0.0", - "@smithy/util-middleware": "^4.0.0", - "@smithy/util-retry": "^4.0.0", - "@smithy/util-utf8": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/types": { - "version": "3.731.0", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.0.0", + "@smithy/util-stream": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/util-endpoints": { + "node_modules/@aws-sdk/credential-provider-http/node_modules/@aws-sdk/types": { "version": "3.731.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.731.0.tgz", + "integrity": "sha512-NrdkJg6oOUbXR2r9WvHP408CLyvST8cJfp1/jP9pemtjvjPoh6NukbCtiSFdOOb1eryP02CnqQWItfJC1p2Y/Q==", "dependencies": { - "@aws-sdk/types": "3.731.0", "@smithy/types": "^4.0.0", - "@smithy/util-endpoints": "^3.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/abort-controller": { + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/abort-controller": { "version": "4.0.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.4.tgz", + "integrity": "sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA==", "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -4398,9 +4596,10 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler": { + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler": { "version": "4.0.6", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.6.tgz", + "integrity": "sha512-NqbmSz7AW2rvw4kXhKGrYTiJVDHnMsFnX4i+/FzcZAfbOBauPYs2ekuECkSbtqaxETLLTu9Rl/ex6+I2BKErPA==", "dependencies": { "@smithy/abort-controller": "^4.0.4", "@smithy/protocol-http": "^5.1.2", @@ -4412,9 +4611,10 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/types": { + "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -4422,24 +4622,33 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.731.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.731.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.731.1.tgz", + "integrity": "sha512-0M0ejuqW8iHNcTH2ZXSY9m+I7Y06qVkj6k3vfQU9XaB//mTUCxxfGfqWAtgfr7Yi73egABTcPc0jyPdcvSW4Kw==", "dependencies": { + "@aws-sdk/core": "3.731.0", + "@aws-sdk/credential-provider-env": "3.731.0", + "@aws-sdk/credential-provider-http": "3.731.0", + "@aws-sdk/credential-provider-process": "3.731.0", + "@aws-sdk/credential-provider-sso": "3.731.1", + "@aws-sdk/credential-provider-web-identity": "3.731.1", + "@aws-sdk/nested-clients": "3.731.1", "@aws-sdk/types": "3.731.0", - "@smithy/node-config-provider": "^4.0.0", + "@smithy/credential-provider-imds": "^4.0.0", + "@smithy/property-provider": "^4.0.0", + "@smithy/shared-ini-file-loader": "^4.0.0", "@smithy/types": "^4.0.0", - "@smithy/util-config-provider": "^4.0.0", - "@smithy/util-middleware": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/region-config-resolver/node_modules/@aws-sdk/types": { + "node_modules/@aws-sdk/credential-provider-ini/node_modules/@aws-sdk/types": { "version": "3.731.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.731.0.tgz", + "integrity": "sha512-NrdkJg6oOUbXR2r9WvHP408CLyvST8cJfp1/jP9pemtjvjPoh6NukbCtiSFdOOb1eryP02CnqQWItfJC1p2Y/Q==", "dependencies": { "@smithy/types": "^4.0.0", "tslib": "^2.6.2" @@ -4448,118 +4657,165 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.835.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.731.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.731.1.tgz", + "integrity": "sha512-5c0ZiagMTPmWilXNffeXJCLoCEz97jilHr3QJWwf2GaTay4tzN+Ld71rpdfEenzUR7fuxEWFfVlwQbFOzFNYHg==", "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.835.0", - "@aws-sdk/types": "3.821.0", - "@smithy/protocol-http": "^5.1.2", - "@smithy/signature-v4": "^5.1.2", - "@smithy/types": "^4.3.1", + "@aws-sdk/credential-provider-env": "3.731.0", + "@aws-sdk/credential-provider-http": "3.731.0", + "@aws-sdk/credential-provider-ini": "3.731.1", + "@aws-sdk/credential-provider-process": "3.731.0", + "@aws-sdk/credential-provider-sso": "3.731.1", + "@aws-sdk/credential-provider-web-identity": "3.731.1", + "@aws-sdk/types": "3.731.0", + "@smithy/credential-provider-imds": "^4.0.0", + "@smithy/property-provider": "^4.0.0", + "@smithy/shared-ini-file-loader": "^4.0.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/signature-v4-multi-region/node_modules/@smithy/types": { - "version": "4.3.1", - "license": "Apache-2.0", + "node_modules/@aws-sdk/credential-provider-node/node_modules/@aws-sdk/types": { + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.731.0.tgz", + "integrity": "sha512-NrdkJg6oOUbXR2r9WvHP408CLyvST8cJfp1/jP9pemtjvjPoh6NukbCtiSFdOOb1eryP02CnqQWItfJC1p2Y/Q==", "dependencies": { + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/token-providers": { - "version": "3.835.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.731.0.tgz", + "integrity": "sha512-6yNMY6q3xHLbs2f2+C6GhvMrjTgtFBiPJJqKaPLsTIhlTRvh4sK8pGm3ITcma0jOxtPDIuoPfBAV8N8XVMBlZg==", "dependencies": { - "@aws-sdk/core": "3.835.0", - "@aws-sdk/nested-clients": "3.835.0", - "@aws-sdk/types": "3.821.0", - "@smithy/property-provider": "^4.0.4", - "@smithy/shared-ini-file-loader": "^4.0.4", - "@smithy/types": "^4.3.1", + "@aws-sdk/core": "3.731.0", + "@aws-sdk/types": "3.731.0", + "@smithy/property-provider": "^4.0.0", + "@smithy/shared-ini-file-loader": "^4.0.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/core": { - "version": "3.835.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/credential-provider-process/node_modules/@aws-sdk/types": { + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.731.0.tgz", + "integrity": "sha512-NrdkJg6oOUbXR2r9WvHP408CLyvST8cJfp1/jP9pemtjvjPoh6NukbCtiSFdOOb1eryP02CnqQWItfJC1p2Y/Q==", "dependencies": { - "@aws-sdk/types": "3.821.0", - "@aws-sdk/xml-builder": "3.821.0", - "@smithy/core": "^3.5.3", - "@smithy/node-config-provider": "^4.1.3", - "@smithy/property-provider": "^4.0.4", - "@smithy/protocol-http": "^5.1.2", - "@smithy/signature-v4": "^5.1.2", - "@smithy/smithy-client": "^4.4.4", - "@smithy/types": "^4.3.1", - "@smithy/util-base64": "^4.0.0", - "@smithy/util-body-length-browser": "^4.0.0", - "@smithy/util-middleware": "^4.0.4", - "@smithy/util-utf8": "^4.0.0", - "fast-xml-parser": "4.4.1", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/middleware-host-header": { - "version": "3.821.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.731.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.731.1.tgz", + "integrity": "sha512-p1tp+rMUf5YNQLr8rVRmDgNtKGYLL0KCdq3K2hwwvFnx9MjReF1sA4lfm3xWsxBQM+j3QN9AvMQqBzDJ+NOSdw==", "dependencies": { - "@aws-sdk/types": "3.821.0", - "@smithy/protocol-http": "^5.1.2", - "@smithy/types": "^4.3.1", + "@aws-sdk/client-sso": "3.731.0", + "@aws-sdk/core": "3.731.0", + "@aws-sdk/token-providers": "3.731.1", + "@aws-sdk/types": "3.731.0", + "@smithy/property-provider": "^4.0.0", + "@smithy/shared-ini-file-loader": "^4.0.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/middleware-logger": { - "version": "3.821.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers": { + "version": "3.731.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.731.1.tgz", + "integrity": "sha512-t34GOPwBZsX7zGHjiTXmMHGY3kHM7fLiQ60Jqk0On9P0ASHTDE5U75RgCXboE3u+qEv9wyKyaqMNyMWj9qQlFg==", "dependencies": { - "@aws-sdk/types": "3.821.0", - "@smithy/types": "^4.3.1", + "@aws-sdk/nested-clients": "3.731.1", + "@aws-sdk/types": "3.731.0", + "@smithy/property-provider": "^4.0.0", + "@smithy/shared-ini-file-loader": "^4.0.0", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.821.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/types": { + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.731.0.tgz", + "integrity": "sha512-NrdkJg6oOUbXR2r9WvHP408CLyvST8cJfp1/jP9pemtjvjPoh6NukbCtiSFdOOb1eryP02CnqQWItfJC1p2Y/Q==", "dependencies": { - "@aws-sdk/types": "3.821.0", - "@smithy/protocol-http": "^5.1.2", - "@smithy/types": "^4.3.1", + "@smithy/types": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.835.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.731.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.731.1.tgz", + "integrity": "sha512-+ynAvEGWDR5ZJFxgpwwzhvlQ3WQ7BleWXU6JwpIw3yFrD4eZEn85b8DZC1aEz7C9kb1HSV6B3gpqHqlyS6wj8g==", + "dependencies": { + "@aws-sdk/core": "3.731.0", + "@aws-sdk/nested-clients": "3.731.1", + "@aws-sdk/types": "3.731.0", + "@smithy/property-provider": "^4.0.0", + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/@aws-sdk/types": { + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.731.0.tgz", + "integrity": "sha512-NrdkJg6oOUbXR2r9WvHP408CLyvST8cJfp1/jP9pemtjvjPoh6NukbCtiSFdOOb1eryP02CnqQWItfJC1p2Y/Q==", "dependencies": { - "@aws-sdk/core": "3.835.0", + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.839.0.tgz", + "integrity": "sha512-hiM7vY2qYAdNT87+Qd3vvfNA+bqhtecsPIduIxkhwispEs9NGcQYtOaG3KQRcHkJBb4kaMYpudVNMXeYUYi2Aw==", + "dev": true, + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.839.0", + "@aws-sdk/core": "3.839.0", + "@aws-sdk/credential-provider-cognito-identity": "3.839.0", + "@aws-sdk/credential-provider-env": "3.839.0", + "@aws-sdk/credential-provider-http": "3.839.0", + "@aws-sdk/credential-provider-ini": "3.839.0", + "@aws-sdk/credential-provider-node": "3.839.0", + "@aws-sdk/credential-provider-process": "3.839.0", + "@aws-sdk/credential-provider-sso": "3.839.0", + "@aws-sdk/credential-provider-web-identity": "3.839.0", + "@aws-sdk/nested-clients": "3.839.0", "@aws-sdk/types": "3.821.0", - "@aws-sdk/util-endpoints": "3.828.0", - "@smithy/core": "^3.5.3", - "@smithy/protocol-http": "^5.1.2", + "@smithy/config-resolver": "^4.1.4", + "@smithy/core": "^3.6.0", + "@smithy/credential-provider-imds": "^4.0.6", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/property-provider": "^4.0.4", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, @@ -4567,43 +4823,45 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients": { - "version": "3.835.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/client-sso": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.839.0.tgz", + "integrity": "sha512-AZABysUhbfcwXVlMo97/vwHgsfJNF81wypCAowpqAJkSjP2KrqsqHpb71/RoR2w8JGmEnBBXRD4wIxDhnmifWg==", + "dev": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.835.0", + "@aws-sdk/core": "3.839.0", "@aws-sdk/middleware-host-header": "3.821.0", "@aws-sdk/middleware-logger": "3.821.0", "@aws-sdk/middleware-recursion-detection": "3.821.0", - "@aws-sdk/middleware-user-agent": "3.835.0", + "@aws-sdk/middleware-user-agent": "3.839.0", "@aws-sdk/region-config-resolver": "3.821.0", "@aws-sdk/types": "3.821.0", "@aws-sdk/util-endpoints": "3.828.0", "@aws-sdk/util-user-agent-browser": "3.821.0", - "@aws-sdk/util-user-agent-node": "3.835.0", + "@aws-sdk/util-user-agent-node": "3.839.0", "@smithy/config-resolver": "^4.1.4", - "@smithy/core": "^3.5.3", + "@smithy/core": "^3.6.0", "@smithy/fetch-http-handler": "^5.0.4", "@smithy/hash-node": "^4.0.4", "@smithy/invalid-dependency": "^4.0.4", "@smithy/middleware-content-length": "^4.0.4", - "@smithy/middleware-endpoint": "^4.1.12", - "@smithy/middleware-retry": "^4.1.13", + "@smithy/middleware-endpoint": "^4.1.13", + "@smithy/middleware-retry": "^4.1.14", "@smithy/middleware-serde": "^4.0.8", "@smithy/middleware-stack": "^4.0.4", "@smithy/node-config-provider": "^4.1.3", "@smithy/node-http-handler": "^4.0.6", "@smithy/protocol-http": "^5.1.2", - "@smithy/smithy-client": "^4.4.4", + "@smithy/smithy-client": "^4.4.5", "@smithy/types": "^4.3.1", "@smithy/url-parser": "^4.0.4", "@smithy/util-base64": "^4.0.0", "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-body-length-node": "^4.0.0", - "@smithy/util-defaults-mode-browser": "^4.0.20", - "@smithy/util-defaults-mode-node": "^4.0.20", + "@smithy/util-defaults-mode-browser": "^4.0.21", + "@smithy/util-defaults-mode-node": "^4.0.21", "@smithy/util-endpoints": "^3.0.6", "@smithy/util-middleware": "^4.0.4", "@smithy/util-retry": "^4.0.6", @@ -4614,57 +4872,86 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/region-config-resolver": { - "version": "3.821.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/core": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.839.0.tgz", + "integrity": "sha512-KdwL5RaK7eUIlOpdOoZ5u+2t4X1rdX/MTZgz3IV/aBzjVUoGsp+uUnbyqXomLQSUitPHp72EE/NHDsvWW/IHvQ==", + "dev": true, "dependencies": { "@aws-sdk/types": "3.821.0", + "@aws-sdk/xml-builder": "3.821.0", + "@smithy/core": "^3.6.0", "@smithy/node-config-provider": "^4.1.3", + "@smithy/property-provider": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/signature-v4": "^5.1.2", + "@smithy/smithy-client": "^4.4.5", "@smithy/types": "^4.3.1", - "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", "@smithy/util-middleware": "^4.0.4", + "@smithy/util-utf8": "^4.0.0", + "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.821.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-env": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.839.0.tgz", + "integrity": "sha512-cWTadewPPz1OvObZJB+olrgh8VwcgIVcT293ZUT9V0CMF0UU7QaPwJP7uNXcNxltTh+sk1yhjH4UlcnJigZZbA==", + "dev": true, "dependencies": { + "@aws-sdk/core": "3.839.0", "@aws-sdk/types": "3.821.0", + "@smithy/property-provider": "^4.0.4", "@smithy/types": "^4.3.1", - "bowser": "^2.11.0", "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.835.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-http": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.839.0.tgz", + "integrity": "sha512-fv0BZwrDhWDju4D1MCLT4I2aPjr0dVQ6P+MpqvcGNOA41Oa9UdRhYTV5iuy5NLXzIzoCmnS+XfSq5Kbsf6//xw==", + "dev": true, "dependencies": { - "@aws-sdk/middleware-user-agent": "3.835.0", + "@aws-sdk/core": "3.839.0", "@aws-sdk/types": "3.821.0", - "@smithy/node-config-provider": "^4.1.3", + "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/node-http-handler": "^4.0.6", + "@smithy/property-provider": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.5", "@smithy/types": "^4.3.1", + "@smithy/util-stream": "^4.2.2", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/abort-controller": { - "version": "4.0.4", - "license": "Apache-2.0", - "dependencies": { + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.839.0.tgz", + "integrity": "sha512-GHm0hF4CiDxIDR7TauMaA6iI55uuSqRxMBcqTAHaTPm6+h1A+MS+ysQMxZ+Jvwtoy8WmfTIGrJVxSCw0sK2hvA==", + "dev": true, + "dependencies": { + "@aws-sdk/core": "3.839.0", + "@aws-sdk/credential-provider-env": "3.839.0", + "@aws-sdk/credential-provider-http": "3.839.0", + "@aws-sdk/credential-provider-process": "3.839.0", + "@aws-sdk/credential-provider-sso": "3.839.0", + "@aws-sdk/credential-provider-web-identity": "3.839.0", + "@aws-sdk/nested-clients": "3.839.0", + "@aws-sdk/types": "3.821.0", + "@smithy/credential-provider-imds": "^4.0.6", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, @@ -4672,13 +4959,22 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/node-http-handler": { - "version": "4.0.6", - "license": "Apache-2.0", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-node": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.839.0.tgz", + "integrity": "sha512-7bR+U2h+ft0V8chyeu9Bh/pvau4ZkQMeRt5f0dAULoepZQ77QQVRP4H04yJPTg9DCtqbVULQ3uf5YOp1/08vQw==", + "dev": true, "dependencies": { - "@smithy/abort-controller": "^4.0.4", - "@smithy/protocol-http": "^5.1.2", - "@smithy/querystring-builder": "^4.0.4", + "@aws-sdk/credential-provider-env": "3.839.0", + "@aws-sdk/credential-provider-http": "3.839.0", + "@aws-sdk/credential-provider-ini": "3.839.0", + "@aws-sdk/credential-provider-process": "3.839.0", + "@aws-sdk/credential-provider-sso": "3.839.0", + "@aws-sdk/credential-provider-web-identity": "3.839.0", + "@aws-sdk/types": "3.821.0", + "@smithy/credential-provider-imds": "^4.0.6", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, @@ -4686,20 +4982,35 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/token-providers/node_modules/@smithy/types": { - "version": "4.3.1", - "license": "Apache-2.0", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-process": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.839.0.tgz", + "integrity": "sha512-qShpekjociUZ+isyQNa0P7jo+0q3N2+0eJDg8SGyP6K6hHTcGfiqxTDps+IKl6NreCPhZCBzyI9mWkP0xSDR6g==", + "dev": true, "dependencies": { + "@aws-sdk/core": "3.839.0", + "@aws-sdk/types": "3.821.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/types": { - "version": "3.821.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.839.0.tgz", + "integrity": "sha512-w10zBLHhU8SBQcdrSPMI02haLoRGZg+gP7mH/Er8VhIXfHefbr7o4NirmB0hwdw/YAH8MLlC9jj7c2SJlsNhYA==", + "dev": true, "dependencies": { + "@aws-sdk/client-sso": "3.839.0", + "@aws-sdk/core": "3.839.0", + "@aws-sdk/token-providers": "3.839.0", + "@aws-sdk/types": "3.821.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, @@ -4707,117 +5018,173 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/types/node_modules/@smithy/types": { - "version": "4.3.1", - "license": "Apache-2.0", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.839.0.tgz", + "integrity": "sha512-EvqTc7J1kgmiuxknpCp1S60hyMQvmKxsI5uXzQtcogl/N55rxiXEqnCLI5q6p33q91PJegrcMCM5Q17Afhm5qA==", + "dev": true, "dependencies": { + "@aws-sdk/core": "3.839.0", + "@aws-sdk/nested-clients": "3.839.0", + "@aws-sdk/types": "3.821.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.804.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.821.0.tgz", + "integrity": "sha512-xSMR+sopSeWGx5/4pAGhhfMvGBHioVBbqGvDs6pG64xfNwM5vq5s5v6D04e2i+uSTj4qGa71dLUs5I0UzAK3sw==", + "dev": true, "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/util-endpoints": { - "version": "3.828.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/middleware-logger": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.821.0.tgz", + "integrity": "sha512-0cvI0ipf2tGx7fXYEEN5fBeZDz2RnHyb9xftSgUsEq7NBxjV0yTZfLJw6Za5rjE6snC80dRN8+bTNR1tuG89zA==", + "dev": true, "dependencies": { "@aws-sdk/types": "3.821.0", "@smithy/types": "^4.3.1", - "@smithy/util-endpoints": "^3.0.6", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/util-endpoints/node_modules/@smithy/types": { - "version": "4.3.1", - "license": "Apache-2.0", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.821.0.tgz", + "integrity": "sha512-efmaifbhBoqKG3bAoEfDdcM8hn1psF+4qa7ykWuYmfmah59JBeqHLfz5W9m9JoTwoKPkFcVLWZxnyZzAnVBOIg==", + "dev": true, "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/util-locate-window": { - "version": "3.804.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.839.0.tgz", + "integrity": "sha512-2u74uRM1JWq6Sf7+3YpjejPM9YkomGt4kWhrmooIBEq1k5r2GTbkH7pNCxBQwBueXM21jAGVDxxeClpTx+5hig==", + "dev": true, "dependencies": { + "@aws-sdk/core": "3.839.0", + "@aws-sdk/types": "3.821.0", + "@aws-sdk/util-endpoints": "3.828.0", + "@smithy/core": "^3.6.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/util-retry": { - "version": "3.374.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/nested-clients": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.839.0.tgz", + "integrity": "sha512-Glic0pg2THYP3aRhJORwJJBe1JLtJoEdWV/MFZNyzCklfMwEzpWtZAyxy+tQyFmMeW50uBAnh2R0jhMMcf257w==", + "dev": true, "dependencies": { - "@smithy/util-retry": "^1.0.3", - "tslib": "^2.5.0" + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.839.0", + "@aws-sdk/middleware-host-header": "3.821.0", + "@aws-sdk/middleware-logger": "3.821.0", + "@aws-sdk/middleware-recursion-detection": "3.821.0", + "@aws-sdk/middleware-user-agent": "3.839.0", + "@aws-sdk/region-config-resolver": "3.821.0", + "@aws-sdk/types": "3.821.0", + "@aws-sdk/util-endpoints": "3.828.0", + "@aws-sdk/util-user-agent-browser": "3.821.0", + "@aws-sdk/util-user-agent-node": "3.839.0", + "@smithy/config-resolver": "^4.1.4", + "@smithy/core": "^3.6.0", + "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/hash-node": "^4.0.4", + "@smithy/invalid-dependency": "^4.0.4", + "@smithy/middleware-content-length": "^4.0.4", + "@smithy/middleware-endpoint": "^4.1.13", + "@smithy/middleware-retry": "^4.1.14", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/node-http-handler": "^4.0.6", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.5", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.21", + "@smithy/util-defaults-mode-node": "^4.0.21", + "@smithy/util-endpoints": "^3.0.6", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.6", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@aws-sdk/util-retry/node_modules/@smithy/service-error-classification": { - "version": "1.1.0", - "license": "Apache-2.0", - "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/util-retry/node_modules/@smithy/util-retry": { - "version": "1.1.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.821.0.tgz", + "integrity": "sha512-t8og+lRCIIy5nlId0bScNpCkif8sc0LhmtaKsbm0ZPm3sCa/WhCbSZibjbZ28FNjVCV+p0D9RYZx0VDDbtWyjw==", + "dev": true, "dependencies": { - "@smithy/service-error-classification": "^1.1.0", - "tslib": "^2.5.0" + "@aws-sdk/types": "3.821.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "tslib": "^2.6.2" }, "engines": { - "node": ">= 14.0.0" + "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.731.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.821.0.tgz", + "integrity": "sha512-irWZHyM0Jr1xhC+38OuZ7JB6OXMLPZlj48thElpsO1ZSLRkLZx5+I7VV6k3sp2yZ7BYbKz/G2ojSv4wdm7XTLw==", + "dev": true, "dependencies": { - "@aws-sdk/types": "3.731.0", - "@smithy/types": "^4.0.0", + "@aws-sdk/types": "3.821.0", + "@smithy/types": "^4.3.1", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, - "node_modules/@aws-sdk/util-user-agent-browser/node_modules/@aws-sdk/types": { - "version": "3.731.0", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.731.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.839.0.tgz", + "integrity": "sha512-MuunkIG1bJVMtTH7MbjXOrhHleU5wjHz5eCAUc6vj7M9rwol71nqjj9b8RLnkO5gsJcKc29Qk8iV6xQuzKWNMw==", + "dev": true, "dependencies": { - "@aws-sdk/middleware-user-agent": "3.731.0", - "@aws-sdk/types": "3.731.0", - "@smithy/node-config-provider": "^4.0.0", - "@smithy/types": "^4.0.0", + "@aws-sdk/middleware-user-agent": "3.839.0", + "@aws-sdk/types": "3.821.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { @@ -4832,21 +5199,28 @@ } } }, - "node_modules/@aws-sdk/util-user-agent-node/node_modules/@aws-sdk/types": { - "version": "3.731.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/abort-controller": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.4.tgz", + "integrity": "sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA==", + "dev": true, "dependencies": { - "@smithy/types": "^4.0.0", + "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/xml-builder": { - "version": "3.821.0", - "license": "Apache-2.0", + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/node-http-handler": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.6.tgz", + "integrity": "sha512-NqbmSz7AW2rvw4kXhKGrYTiJVDHnMsFnX4i+/FzcZAfbOBauPYs2ekuECkSbtqaxETLLTu9Rl/ex6+I2BKErPA==", + "dev": true, "dependencies": { + "@smithy/abort-controller": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/querystring-builder": "^4.0.4", "@smithy/types": "^4.3.1", "tslib": "^2.6.2" }, @@ -4854,9 +5228,11 @@ "node": ">=18.0.0" } }, - "node_modules/@aws-sdk/xml-builder/node_modules/@smithy/types": { + "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", + "dev": true, "dependencies": { "tslib": "^2.6.2" }, @@ -4864,95 +5240,111 @@ "node": ">=18.0.0" } }, - "node_modules/@aws/chat-client": { - "resolved": "chat-client", - "link": true - }, - "node_modules/@aws/chat-client-ui-types": { - "version": "0.1.47", - "license": "Apache-2.0", + "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.830.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.830.0.tgz", + "integrity": "sha512-ElVeCReZSH5Ds+/pkL5ebneJjuo8f49e9JXV1cYizuH0OAOQfYaBU9+M+7+rn61pTttOFE8W//qKzrXBBJhfMg==", "dependencies": { - "@aws/language-server-runtimes-types": "^0.1.41" + "@aws-sdk/types": "3.821.0", + "@aws-sdk/util-arn-parser": "3.804.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "@smithy/util-config-provider": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@aws/hello-world-lsp": { - "resolved": "server/hello-world-lsp", - "link": true - }, - "node_modules/@aws/hello-world-lsp-runtimes": { - "resolved": "app/hello-world-lsp-runtimes", - "link": true + "node_modules/@aws-sdk/middleware-bucket-endpoint/node_modules/@smithy/types": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } }, - "node_modules/@aws/language-server-runtimes": { - "version": "0.2.102", - "resolved": "https://registry.npmjs.org/@aws/language-server-runtimes/-/language-server-runtimes-0.2.102.tgz", - "integrity": "sha512-O68zmXClLP6mtKxh0fzGKYW3MwgFCTkAgL32WKzOWLwD6gMc5CaVRrNsZ2cabkAudf2laTeWeSDZJZsiQ0hCfA==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/middleware-expect-continue": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.821.0.tgz", + "integrity": "sha512-zAOoSZKe1njOrtynvK6ZORU57YGv5I7KP4+rwOvUN3ZhJbQ7QPf8gKtFUCYAPRMegaXCKF/ADPtDZBAmM+zZ9g==", "dependencies": { - "@aws/language-server-runtimes-types": "^0.1.43", - "@opentelemetry/api": "^1.9.0", - "@opentelemetry/api-logs": "^0.200.0", - "@opentelemetry/core": "^2.0.0", - "@opentelemetry/exporter-logs-otlp-http": "^0.200.0", - "@opentelemetry/exporter-metrics-otlp-http": "^0.200.0", - "@opentelemetry/resources": "^2.0.1", - "@opentelemetry/sdk-logs": "^0.200.0", - "@opentelemetry/sdk-metrics": "^2.0.1", - "@smithy/node-http-handler": "^4.0.4", - "ajv": "^8.17.1", - "aws-sdk": "^2.1692.0", - "hpagent": "^1.2.0", - "jose": "^5.9.6", - "mac-ca": "^3.1.1", - "os-proxy-config": "^1.1.2", - "rxjs": "^7.8.2", - "vscode-languageserver": "^9.0.1", - "vscode-languageserver-protocol": "^3.17.5", - "vscode-uri": "^3.1.0", - "win-ca": "^3.5.1" + "@aws-sdk/types": "3.821.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws/language-server-runtimes-types": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/@aws/language-server-runtimes-types/-/language-server-runtimes-types-0.1.43.tgz", - "integrity": "sha512-qXaAGkiJ1hldF+Ynu6ZBXS18s47UOnbZEHxKiGRrBlBX2L75ih/4yasj8ITgshqS5Kx5JMntu+8vpc0CkGV6jA==", - "license": "Apache-2.0", + "node_modules/@aws-sdk/middleware-expect-continue/node_modules/@smithy/types": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { - "vscode-languageserver-textdocument": "^1.0.12", - "vscode-languageserver-types": "^3.17.5" + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "node_modules/@aws/language-server-runtimes/node_modules/@smithy/abort-controller": { - "version": "4.0.4", - "license": "Apache-2.0", + "node_modules/@aws-sdk/middleware-flexible-checksums": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.839.0.tgz", + "integrity": "sha512-2LEuDUviV3wardiHoHCKx0WUvmiK1gBGmnw12aj5f/KKcWOaqnWI2h1K7nDQC/ZARQ1bbMZZ5kvOv5ueuMg1RA==", "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@aws-crypto/crc32c": "5.2.0", + "@aws-crypto/util": "5.2.0", + "@aws-sdk/core": "3.839.0", + "@aws-sdk/types": "3.821.0", + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/protocol-http": "^5.1.2", "@smithy/types": "^4.3.1", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-stream": "^4.2.2", + "@smithy/util-utf8": "^4.0.0", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws/language-server-runtimes/node_modules/@smithy/node-http-handler": { - "version": "4.0.6", - "license": "Apache-2.0", + "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@aws-sdk/core": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.839.0.tgz", + "integrity": "sha512-KdwL5RaK7eUIlOpdOoZ5u+2t4X1rdX/MTZgz3IV/aBzjVUoGsp+uUnbyqXomLQSUitPHp72EE/NHDsvWW/IHvQ==", "dependencies": { - "@smithy/abort-controller": "^4.0.4", + "@aws-sdk/types": "3.821.0", + "@aws-sdk/xml-builder": "3.821.0", + "@smithy/core": "^3.6.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/property-provider": "^4.0.4", "@smithy/protocol-http": "^5.1.2", - "@smithy/querystring-builder": "^4.0.4", + "@smithy/signature-v4": "^5.1.2", + "@smithy/smithy-client": "^4.4.5", "@smithy/types": "^4.3.1", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-utf8": "^4.0.0", + "fast-xml-parser": "4.4.1", "tslib": "^2.6.2" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@aws/language-server-runtimes/node_modules/@smithy/types": { + "node_modules/@aws-sdk/middleware-flexible-checksums/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -4960,941 +5352,2350 @@ "node": ">=18.0.0" } }, - "node_modules/@aws/lsp-antlr4": { - "resolved": "server/aws-lsp-antlr4", - "link": true - }, - "node_modules/@aws/lsp-antlr4-runtimes": { - "resolved": "app/aws-lsp-antlr4-runtimes", - "link": true - }, - "node_modules/@aws/lsp-buildspec": { - "resolved": "server/aws-lsp-buildspec", - "link": true - }, - "node_modules/@aws/lsp-buildspec-runtimes": { - "resolved": "app/aws-lsp-buildspec-runtimes", - "link": true - }, - "node_modules/@aws/lsp-cloudformation": { - "resolved": "server/aws-lsp-cloudformation", - "link": true - }, - "node_modules/@aws/lsp-cloudformation-runtimes": { - "resolved": "app/aws-lsp-cloudformation-runtimes", - "link": true + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.731.0.tgz", + "integrity": "sha512-ndAJsm5uWPPJRZowLKpB1zuL17qWlWVtCJP4I/ynBkq1PU1DijDXBul2UZaG6Mpvsgms1NXo/h9noHuK7T3v8w==", + "dependencies": { + "@aws-sdk/types": "3.731.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } }, - "node_modules/@aws/lsp-codewhisperer": { - "resolved": "server/aws-lsp-codewhisperer", - "link": true + "node_modules/@aws-sdk/middleware-host-header/node_modules/@aws-sdk/types": { + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.731.0.tgz", + "integrity": "sha512-NrdkJg6oOUbXR2r9WvHP408CLyvST8cJfp1/jP9pemtjvjPoh6NukbCtiSFdOOb1eryP02CnqQWItfJC1p2Y/Q==", + "dependencies": { + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } }, - "node_modules/@aws/lsp-codewhisperer-runtimes": { - "resolved": "app/aws-lsp-codewhisperer-runtimes", - "link": true + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.821.0.tgz", + "integrity": "sha512-sKrm80k0t3R0on8aA/WhWFoMaAl4yvdk+riotmMElLUpcMcRXAd1+600uFVrxJqZdbrKQ0mjX0PjT68DlkYXLg==", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } }, - "node_modules/@aws/lsp-core": { - "resolved": "core/aws-lsp-core", - "link": true + "node_modules/@aws-sdk/middleware-location-constraint/node_modules/@smithy/types": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } }, - "node_modules/@aws/lsp-identity": { - "resolved": "server/aws-lsp-identity", - "link": true + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.731.0.tgz", + "integrity": "sha512-IIZrOdjbY2vKzPJPrwE7FoFQCIPEL6UqURi8LEaiVyCag4p2fvaTN5pgKuQtGC2+iYd/HHcGT4qn2bAqF5Jmmw==", + "dependencies": { + "@aws-sdk/types": "3.731.0", + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } }, - "node_modules/@aws/lsp-identity-runtimes": { - "resolved": "app/aws-lsp-identity-runtimes", - "link": true + "node_modules/@aws-sdk/middleware-logger/node_modules/@aws-sdk/types": { + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.731.0.tgz", + "integrity": "sha512-NrdkJg6oOUbXR2r9WvHP408CLyvST8cJfp1/jP9pemtjvjPoh6NukbCtiSFdOOb1eryP02CnqQWItfJC1p2Y/Q==", + "dependencies": { + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } }, - "node_modules/@aws/lsp-json": { - "resolved": "server/aws-lsp-json", - "link": true + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.731.0.tgz", + "integrity": "sha512-y6FLASB1iKWuR5tUipMyo77bt0lEl3OnCrrd2xw/H24avq1HhJjjPR0HHhJE6QKJzF/FYXeV88tcyPSMe32VDw==", + "dependencies": { + "@aws-sdk/types": "3.731.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } }, - "node_modules/@aws/lsp-json-runtimes": { - "resolved": "app/aws-lsp-json-runtimes", - "link": true + "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/@aws-sdk/types": { + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.731.0.tgz", + "integrity": "sha512-NrdkJg6oOUbXR2r9WvHP408CLyvST8cJfp1/jP9pemtjvjPoh6NukbCtiSFdOOb1eryP02CnqQWItfJC1p2Y/Q==", + "dependencies": { + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } }, - "node_modules/@aws/lsp-notification": { - "resolved": "server/aws-lsp-notification", - "link": true + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.839.0.tgz", + "integrity": "sha512-NwprpzJdkuUnUWxoZwKqAcL1/AsrM1YESVpLeL0pW747Vq6rIiUgkuoyQ1fASV9r5mUoWor7iMu8k5ZCisAh7A==", + "dependencies": { + "@aws-sdk/core": "3.839.0", + "@aws-sdk/types": "3.821.0", + "@aws-sdk/util-arn-parser": "3.804.0", + "@smithy/core": "^3.6.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/protocol-http": "^5.1.2", + "@smithy/signature-v4": "^5.1.2", + "@smithy/smithy-client": "^4.4.5", + "@smithy/types": "^4.3.1", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-stream": "^4.2.2", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } }, - "node_modules/@aws/lsp-notification-runtimes": { + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@aws-sdk/core": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.839.0.tgz", + "integrity": "sha512-KdwL5RaK7eUIlOpdOoZ5u+2t4X1rdX/MTZgz3IV/aBzjVUoGsp+uUnbyqXomLQSUitPHp72EE/NHDsvWW/IHvQ==", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@aws-sdk/xml-builder": "3.821.0", + "@smithy/core": "^3.6.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/property-provider": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/signature-v4": "^5.1.2", + "@smithy/smithy-client": "^4.4.5", + "@smithy/types": "^4.3.1", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-utf8": "^4.0.0", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3/node_modules/@smithy/types": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.821.0.tgz", + "integrity": "sha512-YYi1Hhr2AYiU/24cQc8HIB+SWbQo6FBkMYojVuz/zgrtkFmALxENGF/21OPg7f/QWd+eadZJRxCjmRwh5F2Cxg==", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-ssec/node_modules/@smithy/types": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.731.0.tgz", + "integrity": "sha512-Ngr2Gz0aec/uduoKaO3srN52SYkEHndYtFzkK/gDUyQwQzi4ha2eIisxPiuHEX6RvXT31V9ouqn/YtVkt0R76A==", + "dependencies": { + "@aws-sdk/core": "3.731.0", + "@aws-sdk/types": "3.731.0", + "@aws-sdk/util-endpoints": "3.731.0", + "@smithy/core": "^3.0.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@aws-sdk/types": { + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.731.0.tgz", + "integrity": "sha512-NrdkJg6oOUbXR2r9WvHP408CLyvST8cJfp1/jP9pemtjvjPoh6NukbCtiSFdOOb1eryP02CnqQWItfJC1p2Y/Q==", + "dependencies": { + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent/node_modules/@aws-sdk/util-endpoints": { + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.731.0.tgz", + "integrity": "sha512-riztxTAfncFS9yQWcBJffGgOgLoKSa63ph+rxWJxKl6BHAmWEvHICj1qDcVmnWfIcvJ5cClclY75l9qKaUH7rQ==", + "dependencies": { + "@aws-sdk/types": "3.731.0", + "@smithy/types": "^4.0.0", + "@smithy/util-endpoints": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients": { + "version": "3.731.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.731.1.tgz", + "integrity": "sha512-/L8iVrulnXZl+kgmTn+oxRxNnhcSIbf+r12C06vGUq60w0YMidLvxJZN7vt8H9SnCAGCHqud2MS7ExCEvhc0gA==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.731.0", + "@aws-sdk/middleware-host-header": "3.731.0", + "@aws-sdk/middleware-logger": "3.731.0", + "@aws-sdk/middleware-recursion-detection": "3.731.0", + "@aws-sdk/middleware-user-agent": "3.731.0", + "@aws-sdk/region-config-resolver": "3.731.0", + "@aws-sdk/types": "3.731.0", + "@aws-sdk/util-endpoints": "3.731.0", + "@aws-sdk/util-user-agent-browser": "3.731.0", + "@aws-sdk/util-user-agent-node": "3.731.0", + "@smithy/config-resolver": "^4.0.0", + "@smithy/core": "^3.0.0", + "@smithy/fetch-http-handler": "^5.0.0", + "@smithy/hash-node": "^4.0.0", + "@smithy/invalid-dependency": "^4.0.0", + "@smithy/middleware-content-length": "^4.0.0", + "@smithy/middleware-endpoint": "^4.0.0", + "@smithy/middleware-retry": "^4.0.0", + "@smithy/middleware-serde": "^4.0.0", + "@smithy/middleware-stack": "^4.0.0", + "@smithy/node-config-provider": "^4.0.0", + "@smithy/node-http-handler": "^4.0.0", + "@smithy/protocol-http": "^5.0.0", + "@smithy/smithy-client": "^4.0.0", + "@smithy/types": "^4.0.0", + "@smithy/url-parser": "^4.0.0", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.0", + "@smithy/util-defaults-mode-node": "^4.0.0", + "@smithy/util-endpoints": "^3.0.0", + "@smithy/util-middleware": "^4.0.0", + "@smithy/util-retry": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/types": { + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.731.0.tgz", + "integrity": "sha512-NrdkJg6oOUbXR2r9WvHP408CLyvST8cJfp1/jP9pemtjvjPoh6NukbCtiSFdOOb1eryP02CnqQWItfJC1p2Y/Q==", + "dependencies": { + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients/node_modules/@aws-sdk/util-endpoints": { + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.731.0.tgz", + "integrity": "sha512-riztxTAfncFS9yQWcBJffGgOgLoKSa63ph+rxWJxKl6BHAmWEvHICj1qDcVmnWfIcvJ5cClclY75l9qKaUH7rQ==", + "dependencies": { + "@aws-sdk/types": "3.731.0", + "@smithy/types": "^4.0.0", + "@smithy/util-endpoints": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/abort-controller": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.4.tgz", + "integrity": "sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA==", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.6.tgz", + "integrity": "sha512-NqbmSz7AW2rvw4kXhKGrYTiJVDHnMsFnX4i+/FzcZAfbOBauPYs2ekuECkSbtqaxETLLTu9Rl/ex6+I2BKErPA==", + "dependencies": { + "@smithy/abort-controller": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/querystring-builder": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/types": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.731.0.tgz", + "integrity": "sha512-XlDpRNkDVHF59f07JmkuAidEv//m3hT6/JL85h0l3+zrpaRWhf8n8lVUyAPNq35ZujK8AcorYM+93u7hdWsliQ==", + "dependencies": { + "@aws-sdk/types": "3.731.0", + "@smithy/node-config-provider": "^4.0.0", + "@smithy/types": "^4.0.0", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver/node_modules/@aws-sdk/types": { + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.731.0.tgz", + "integrity": "sha512-NrdkJg6oOUbXR2r9WvHP408CLyvST8cJfp1/jP9pemtjvjPoh6NukbCtiSFdOOb1eryP02CnqQWItfJC1p2Y/Q==", + "dependencies": { + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.839.0.tgz", + "integrity": "sha512-/O+lh6qXKTMWPcip8ccGL7OgTceUTDmy3wBD22+tPHLeOUSMGUQTZcsmHeDB7vSHLpVY9H6GhOsdes7uQQMUwA==", + "dependencies": { + "@aws-sdk/middleware-sdk-s3": "3.839.0", + "@aws-sdk/types": "3.821.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/signature-v4": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4-multi-region/node_modules/@smithy/types": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.839.0.tgz", + "integrity": "sha512-2nlafqdSbet/2WtYIoZ7KEGFowFonPBDYlTjrUvwU2yooE10VhvzhLSCTB2aKIVzo2Z2wL5WGFQsqAY5QwK6Bw==", + "dependencies": { + "@aws-sdk/core": "3.839.0", + "@aws-sdk/nested-clients": "3.839.0", + "@aws-sdk/types": "3.821.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/core": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.839.0.tgz", + "integrity": "sha512-KdwL5RaK7eUIlOpdOoZ5u+2t4X1rdX/MTZgz3IV/aBzjVUoGsp+uUnbyqXomLQSUitPHp72EE/NHDsvWW/IHvQ==", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@aws-sdk/xml-builder": "3.821.0", + "@smithy/core": "^3.6.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/property-provider": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/signature-v4": "^5.1.2", + "@smithy/smithy-client": "^4.4.5", + "@smithy/types": "^4.3.1", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-utf8": "^4.0.0", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/middleware-host-header": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.821.0.tgz", + "integrity": "sha512-xSMR+sopSeWGx5/4pAGhhfMvGBHioVBbqGvDs6pG64xfNwM5vq5s5v6D04e2i+uSTj4qGa71dLUs5I0UzAK3sw==", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/middleware-logger": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.821.0.tgz", + "integrity": "sha512-0cvI0ipf2tGx7fXYEEN5fBeZDz2RnHyb9xftSgUsEq7NBxjV0yTZfLJw6Za5rjE6snC80dRN8+bTNR1tuG89zA==", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.821.0.tgz", + "integrity": "sha512-efmaifbhBoqKG3bAoEfDdcM8hn1psF+4qa7ykWuYmfmah59JBeqHLfz5W9m9JoTwoKPkFcVLWZxnyZzAnVBOIg==", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.839.0.tgz", + "integrity": "sha512-2u74uRM1JWq6Sf7+3YpjejPM9YkomGt4kWhrmooIBEq1k5r2GTbkH7pNCxBQwBueXM21jAGVDxxeClpTx+5hig==", + "dependencies": { + "@aws-sdk/core": "3.839.0", + "@aws-sdk/types": "3.821.0", + "@aws-sdk/util-endpoints": "3.828.0", + "@smithy/core": "^3.6.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/nested-clients": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.839.0.tgz", + "integrity": "sha512-Glic0pg2THYP3aRhJORwJJBe1JLtJoEdWV/MFZNyzCklfMwEzpWtZAyxy+tQyFmMeW50uBAnh2R0jhMMcf257w==", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.839.0", + "@aws-sdk/middleware-host-header": "3.821.0", + "@aws-sdk/middleware-logger": "3.821.0", + "@aws-sdk/middleware-recursion-detection": "3.821.0", + "@aws-sdk/middleware-user-agent": "3.839.0", + "@aws-sdk/region-config-resolver": "3.821.0", + "@aws-sdk/types": "3.821.0", + "@aws-sdk/util-endpoints": "3.828.0", + "@aws-sdk/util-user-agent-browser": "3.821.0", + "@aws-sdk/util-user-agent-node": "3.839.0", + "@smithy/config-resolver": "^4.1.4", + "@smithy/core": "^3.6.0", + "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/hash-node": "^4.0.4", + "@smithy/invalid-dependency": "^4.0.4", + "@smithy/middleware-content-length": "^4.0.4", + "@smithy/middleware-endpoint": "^4.1.13", + "@smithy/middleware-retry": "^4.1.14", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/node-http-handler": "^4.0.6", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.5", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.21", + "@smithy/util-defaults-mode-node": "^4.0.21", + "@smithy/util-endpoints": "^3.0.6", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.6", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/region-config-resolver": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.821.0.tgz", + "integrity": "sha512-t8og+lRCIIy5nlId0bScNpCkif8sc0LhmtaKsbm0ZPm3sCa/WhCbSZibjbZ28FNjVCV+p0D9RYZx0VDDbtWyjw==", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.821.0.tgz", + "integrity": "sha512-irWZHyM0Jr1xhC+38OuZ7JB6OXMLPZlj48thElpsO1ZSLRkLZx5+I7VV6k3sp2yZ7BYbKz/G2ojSv4wdm7XTLw==", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/types": "^4.3.1", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.839.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.839.0.tgz", + "integrity": "sha512-MuunkIG1bJVMtTH7MbjXOrhHleU5wjHz5eCAUc6vj7M9rwol71nqjj9b8RLnkO5gsJcKc29Qk8iV6xQuzKWNMw==", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.839.0", + "@aws-sdk/types": "3.821.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/abort-controller": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.4.tgz", + "integrity": "sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA==", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/node-http-handler": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.6.tgz", + "integrity": "sha512-NqbmSz7AW2rvw4kXhKGrYTiJVDHnMsFnX4i+/FzcZAfbOBauPYs2ekuECkSbtqaxETLLTu9Rl/ex6+I2BKErPA==", + "dependencies": { + "@smithy/abort-controller": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/querystring-builder": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/@smithy/types": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.821.0.tgz", + "integrity": "sha512-Znroqdai1a90TlxGaJ+FK1lwC0fHpo97Xjsp5UKGR5JODYm7f9+/fF17ebO1KdoBr/Rm0UIFiF5VmI8ts9F1eA==", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/types/node_modules/@smithy/types": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.804.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.804.0.tgz", + "integrity": "sha512-wmBJqn1DRXnZu3b4EkE6CWnoWMo1ZMvlfkqU5zPz67xx1GMaXlDCchFvKAXMjk4jn/L1O3tKnoFDNsoLV1kgNQ==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.828.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.828.0.tgz", + "integrity": "sha512-RvKch111SblqdkPzg3oCIdlGxlQs+k+P7Etory9FmxPHyPDvsP1j1c74PmgYqtzzMWmoXTjd+c9naUHh9xG8xg==", + "dependencies": { + "@aws-sdk/types": "3.821.0", + "@smithy/types": "^4.3.1", + "@smithy/util-endpoints": "^3.0.6", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints/node_modules/@smithy/types": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.804.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.804.0.tgz", + "integrity": "sha512-zVoRfpmBVPodYlnMjgVjfGoEZagyRF5IPn3Uo6ZvOZp24chnW/FRstH7ESDHDDRga4z3V+ElUQHKpFDXWyBW5A==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-retry": { + "version": "3.374.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-retry/-/util-retry-3.374.0.tgz", + "integrity": "sha512-0p/trhYU+Ys8j3vMnWCvAkSOL6JRMooV9dVlQ+o7EHbQs9kDtnyucMUHU09ahHSIPTA/n/013hv7bzIt3MyKQg==", + "deprecated": "This package has moved to @smithy/util-retry", + "dependencies": { + "@smithy/util-retry": "^1.0.3", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@aws-sdk/util-retry/node_modules/@smithy/service-error-classification": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-1.1.0.tgz", + "integrity": "sha512-OCTEeJ1igatd5kFrS2VDlYbainNNpf7Lj1siFOxnRWqYOP9oNvC5HOJBd3t+Z8MbrmehBtuDJ2QqeBsfeiNkww==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-retry/node_modules/@smithy/util-retry": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-1.1.0.tgz", + "integrity": "sha512-ygQW5HBqYXpR3ua09UciS0sL7UGJzGiktrKkOuEJwARoUuzz40yaEGU6xd9Gs7KBmAaFC8gMfnghHtwZ2nyBCQ==", + "dependencies": { + "@smithy/service-error-classification": "^1.1.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.731.0.tgz", + "integrity": "sha512-EnYXxTkCNCjTTBjW/pelRPv4Thsi9jepoB6qQjPMA9/ixrZ71BhhQecz9kgqzZLR9BPCwb6hgJ/Yd702jqJ4aQ==", + "dependencies": { + "@aws-sdk/types": "3.731.0", + "@smithy/types": "^4.0.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser/node_modules/@aws-sdk/types": { + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.731.0.tgz", + "integrity": "sha512-NrdkJg6oOUbXR2r9WvHP408CLyvST8cJfp1/jP9pemtjvjPoh6NukbCtiSFdOOb1eryP02CnqQWItfJC1p2Y/Q==", + "dependencies": { + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.731.0.tgz", + "integrity": "sha512-Rze78Ym5Bx7aWMvmZE2iL3JPo2INNCC5N9rLVx98Gg1G0ZaxclVRUvJrh1AojNlOFxU+otkxAe7FA3Foy2iLLQ==", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.731.0", + "@aws-sdk/types": "3.731.0", + "@smithy/node-config-provider": "^4.0.0", + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/util-user-agent-node/node_modules/@aws-sdk/types": { + "version": "3.731.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.731.0.tgz", + "integrity": "sha512-NrdkJg6oOUbXR2r9WvHP408CLyvST8cJfp1/jP9pemtjvjPoh6NukbCtiSFdOOb1eryP02CnqQWItfJC1p2Y/Q==", + "dependencies": { + "@smithy/types": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.821.0.tgz", + "integrity": "sha512-DIIotRnefVL6DiaHtO6/21DhJ4JZnnIwdNbpwiAhdt/AVbttcE4yw925gsjur0OGv5BTYXQXU3YnANBYnZjuQA==", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/xml-builder/node_modules/@smithy/types": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws/chat-client": { + "resolved": "chat-client", + "link": true + }, + "node_modules/@aws/chat-client-ui-types": { + "version": "0.1.51", + "resolved": "https://registry.npmjs.org/@aws/chat-client-ui-types/-/chat-client-ui-types-0.1.51.tgz", + "integrity": "sha512-ILdG6VAu+Of/8Bt2pGhGHksmSC9rg24Vy1JiR2TOm0AdmsEWwYfcZUDlx+PjCYuH5rlEaNHrN31A6oAW9hQPMg==", + "dependencies": { + "@aws/language-server-runtimes-types": "^0.1.45" + } + }, + "node_modules/@aws/hello-world-lsp": { + "resolved": "server/hello-world-lsp", + "link": true + }, + "node_modules/@aws/hello-world-lsp-runtimes": { + "resolved": "app/hello-world-lsp-runtimes", + "link": true + }, + "node_modules/@aws/language-server-runtimes": { + "version": "0.2.112", + "resolved": "https://registry.npmjs.org/@aws/language-server-runtimes/-/language-server-runtimes-0.2.112.tgz", + "integrity": "sha512-BoUF3VwkvVE5AjGtt12tPG/ffP8xexjwr/6kJj6vinntoBgxOqXASKRpVJSsvU14ZN3ac2T/deogNPqAgz0P3Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws/language-server-runtimes-types": "^0.1.48", + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/api-logs": "^0.200.0", + "@opentelemetry/core": "^2.0.0", + "@opentelemetry/exporter-logs-otlp-http": "^0.200.0", + "@opentelemetry/exporter-metrics-otlp-http": "^0.200.0", + "@opentelemetry/resources": "^2.0.1", + "@opentelemetry/sdk-logs": "^0.200.0", + "@opentelemetry/sdk-metrics": "^2.0.1", + "@smithy/node-http-handler": "^4.0.4", + "ajv": "^8.17.1", + "aws-sdk": "^2.1692.0", + "hpagent": "^1.2.0", + "jose": "^5.9.6", + "mac-ca": "^3.1.1", + "os-proxy-config": "^1.1.2", + "rxjs": "^7.8.2", + "vscode-languageserver": "^9.0.1", + "vscode-languageserver-protocol": "^3.17.5", + "vscode-uri": "^3.1.0", + "win-ca": "^3.5.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws/language-server-runtimes-types": { + "version": "0.1.48", + "resolved": "https://registry.npmjs.org/@aws/language-server-runtimes-types/-/language-server-runtimes-types-0.1.48.tgz", + "integrity": "sha512-Z4umzi/i64rOqTnBTuOz/2ERGi33+EiKBWvd3YkG90amCCle13Z9/SuklJjMTA0Vt3tzO9zc07VBv0JI1ZdbJQ==", + "license": "Apache-2.0", + "dependencies": { + "vscode-languageserver-textdocument": "^1.0.12", + "vscode-languageserver-types": "^3.17.5" + } + }, + "node_modules/@aws/language-server-runtimes/node_modules/@smithy/abort-controller": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.4.tgz", + "integrity": "sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA==", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws/language-server-runtimes/node_modules/@smithy/node-http-handler": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.6.tgz", + "integrity": "sha512-NqbmSz7AW2rvw4kXhKGrYTiJVDHnMsFnX4i+/FzcZAfbOBauPYs2ekuECkSbtqaxETLLTu9Rl/ex6+I2BKErPA==", + "dependencies": { + "@smithy/abort-controller": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/querystring-builder": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws/language-server-runtimes/node_modules/@smithy/types": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws/lsp-antlr4": { + "resolved": "server/aws-lsp-antlr4", + "link": true + }, + "node_modules/@aws/lsp-antlr4-runtimes": { + "resolved": "app/aws-lsp-antlr4-runtimes", + "link": true + }, + "node_modules/@aws/lsp-buildspec": { + "resolved": "server/aws-lsp-buildspec", + "link": true + }, + "node_modules/@aws/lsp-buildspec-runtimes": { + "resolved": "app/aws-lsp-buildspec-runtimes", + "link": true + }, + "node_modules/@aws/lsp-cloudformation": { + "resolved": "server/aws-lsp-cloudformation", + "link": true + }, + "node_modules/@aws/lsp-cloudformation-runtimes": { + "resolved": "app/aws-lsp-cloudformation-runtimes", + "link": true + }, + "node_modules/@aws/lsp-codewhisperer": { + "resolved": "server/aws-lsp-codewhisperer", + "link": true + }, + "node_modules/@aws/lsp-codewhisperer-runtimes": { + "resolved": "app/aws-lsp-codewhisperer-runtimes", + "link": true + }, + "node_modules/@aws/lsp-core": { + "resolved": "core/aws-lsp-core", + "link": true + }, + "node_modules/@aws/lsp-identity": { + "resolved": "server/aws-lsp-identity", + "link": true + }, + "node_modules/@aws/lsp-identity-runtimes": { + "resolved": "app/aws-lsp-identity-runtimes", + "link": true + }, + "node_modules/@aws/lsp-json": { + "resolved": "server/aws-lsp-json", + "link": true + }, + "node_modules/@aws/lsp-json-runtimes": { + "resolved": "app/aws-lsp-json-runtimes", + "link": true + }, + "node_modules/@aws/lsp-notification": { + "resolved": "server/aws-lsp-notification", + "link": true + }, + "node_modules/@aws/lsp-notification-runtimes": { "resolved": "app/aws-lsp-notification-runtimes", "link": true }, - "node_modules/@aws/lsp-partiql": { - "resolved": "server/aws-lsp-partiql", - "link": true + "node_modules/@aws/lsp-partiql": { + "resolved": "server/aws-lsp-partiql", + "link": true + }, + "node_modules/@aws/lsp-partiql-runtimes": { + "resolved": "app/aws-lsp-partiql-runtimes", + "link": true + }, + "node_modules/@aws/lsp-s3": { + "resolved": "server/aws-lsp-s3", + "link": true + }, + "node_modules/@aws/lsp-s3-runtimes": { + "resolved": "app/aws-lsp-s3-runtimes", + "link": true + }, + "node_modules/@aws/lsp-yaml": { + "resolved": "server/aws-lsp-yaml", + "link": true + }, + "node_modules/@aws/lsp-yaml-json-webworker": { + "resolved": "app/aws-lsp-yaml-json-webworker", + "link": true + }, + "node_modules/@aws/lsp-yaml-runtimes": { + "resolved": "app/aws-lsp-yaml-runtimes", + "link": true + }, + "node_modules/@aws/mynah-ui": { + "version": "4.35.9", + "resolved": "https://registry.npmjs.org/@aws/mynah-ui/-/mynah-ui-4.35.9.tgz", + "integrity": "sha512-gwMvQm08fYBt11CWjcteY+HfMa295y8KztJpCPTrw/JYC+sOO4FmEF9vom/z8ABFe4nGqrZ6YtIoelCPTCJNFA==", + "hasInstallScript": true, + "dependencies": { + "escape-html": "^1.0.3", + "highlight.js": "^11.11.0", + "just-clone": "^6.2.0", + "marked": "^14.1.0", + "sanitize-html": "^2.12.1", + "unescape-html": "^1.1.0" + }, + "peerDependencies": { + "escape-html": "^1.0.3", + "highlight.js": "^11.11.0", + "just-clone": "^6.2.0", + "marked": "^14.1.0", + "sanitize-html": "^2.12.1", + "unescape-html": "^1.1.0" + } + }, + "node_modules/@aws/q-agentic-chat-server-integration-tests": { + "resolved": "integration-tests/q-agentic-chat-server", + "link": true + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.7.tgz", + "integrity": "sha512-xgu/ySj2mTiUFmdE9yCMfBxLp4DHd5DwmbbD05YAuICfodYT3VvRxbrh81LGQ/8UpSdtMdfKMn3KouYDX59DGQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.7.tgz", + "integrity": "sha512-BU2f9tlKQ5CAthiMIgpzAh4eDTLWo1mqi9jqE2OxMG0E/OM199VJt2q8BztTxpnSW0i1ymdwLXRJnYzvDM5r2w==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.5", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.27.3", + "@babel/helpers": "^7.27.6", + "@babel/parser": "^7.27.7", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.27.7", + "@babel/types": "^7.27.7", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.27.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz", + "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.27.5", + "@babel/types": "^7.27.3", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@aws/lsp-partiql-runtimes": { - "resolved": "app/aws-lsp-partiql-runtimes", - "link": true + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@aws/lsp-s3": { - "resolved": "server/aws-lsp-s3", - "link": true + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@aws/lsp-s3-runtimes": { - "resolved": "app/aws-lsp-s3-runtimes", - "link": true + "node_modules/@babel/helper-module-transforms": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", + "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } }, - "node_modules/@aws/lsp-yaml": { - "resolved": "server/aws-lsp-yaml", - "link": true + "node_modules/@babel/helper-plugin-utils": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@aws/lsp-yaml-json-webworker": { - "resolved": "app/aws-lsp-yaml-json-webworker", - "link": true + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@aws/lsp-yaml-runtimes": { - "resolved": "app/aws-lsp-yaml-runtimes", - "link": true + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@aws/mynah-ui": { - "version": "4.35.7", - "resolved": "https://registry.npmjs.org/@aws/mynah-ui/-/mynah-ui-4.35.7.tgz", - "integrity": "sha512-Bcfb3cVEQkzu0Zsq7938b6GYy6vha/+M6euaPLhjYIvs8FnoCgom9bqLxtUFdnQRUVdd9zUX/Yvz1bAlYebJ4g==", - "hasInstallScript": true, - "license": "Apache License 2.0", + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", + "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", + "dev": true, "dependencies": { - "escape-html": "^1.0.3", - "highlight.js": "^11.11.0", - "just-clone": "^6.2.0", - "marked": "^14.1.0", - "sanitize-html": "^2.12.1", - "unescape-html": "^1.1.0" + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.7.tgz", + "integrity": "sha512-qnzXzDXdr/po3bOTbTIQZ7+TxNKxpkN5IifVLXS+r7qwynkZfPyjZfE7hCXbo7IoO9TNcSyibgONsf2HauUd3Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.27.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", + "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { - "escape-html": "^1.0.3", - "highlight.js": "^11.11.0", - "just-clone": "^6.2.0", - "marked": "^14.1.0", - "sanitize-html": "^2.12.1", - "unescape-html": "^1.1.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/code-frame": { - "version": "7.27.1", + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" + "@babel/helper-plugin-utils": "^7.8.0" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/compat-data": { - "version": "7.27.5", + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/core": { - "version": "7.27.4", + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, - "license": "MIT", "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.3", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.27.3", - "@babel/helpers": "^7.27.4", - "@babel/parser": "^7.27.4", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.27.4", - "@babel/types": "^7.27.3", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" + "@babel/helper-plugin-utils": "^7.8.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/generator": { - "version": "7.27.5", + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/parser": "^7.27.5", - "@babel/types": "^7.27.3", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", - "@babel/helper-validator-option": "^7.27.1", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/helper-module-imports": { + "node_modules/@babel/plugin-syntax-typescript": { "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", + "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.27.3", + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", + "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.3" + "@babel/helper-module-transforms": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", + "node_modules/@babel/runtime": { + "version": "7.27.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz", + "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==", "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dev": true, - "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", + "node_modules/@babel/traverse": { + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.7.tgz", + "integrity": "sha512-X6ZlfR/O/s5EQ/SnUSLzr+6kGnkg8HXGMzpgsMsrJVcfDtH1vIp6ctCN4eZ1LS5c0+te5Cb6Y514fASjMRJ1nw==", "dev": true, - "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.27.5", + "@babel/parser": "^7.27.7", + "@babel/template": "^7.27.2", + "@babel/types": "^7.27.7", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", + "node_modules/@babel/types": { + "version": "7.27.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.7.tgz", + "integrity": "sha512-8OLQgDScAOHXnAz2cV+RfzzNMipuLVBz2biuAJFMV9bfkNf393je3VM8CLkjQodW5+iWsSJdSgSWT6rsZoXHPw==", "dev": true, - "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helpers": { - "version": "7.27.6", + "node_modules/@bcoe/v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", + "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.27.6" - }, "engines": { - "node": ">=6.9.0" + "node": ">=18" } }, - "node_modules/@babel/parser": { - "version": "7.27.5", + "node_modules/@commitlint/cli": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-19.8.1.tgz", + "integrity": "sha512-LXUdNIkspyxrlV6VDHWBmCZRtkEVRpBKxi2Gtw3J54cGWhLCTouVD/Q6ZSaSvd2YaDObWK8mDjrz3TIKtaQMAA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.27.3" + "@commitlint/format": "^19.8.1", + "@commitlint/lint": "^19.8.1", + "@commitlint/load": "^19.8.1", + "@commitlint/read": "^19.8.1", + "@commitlint/types": "^19.8.1", + "tinyexec": "^1.0.0", + "yargs": "^17.0.0" }, "bin": { - "parser": "bin/babel-parser.js" + "commitlint": "cli.js" }, "engines": { - "node": ">=6.0.0" + "node": ">=v18" } }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", + "node_modules/@commitlint/config-conventional": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-19.8.1.tgz", + "integrity": "sha512-/AZHJL6F6B/G959CsMAzrPKKZjeEiAVifRyEwXxcT6qtqbPwGw+iQxmNS+Bu+i09OCtdNRW6pNpBvgPrtMr9EQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@commitlint/types": "^19.8.1", + "conventional-changelog-conventionalcommits": "^7.0.2" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=v18" } }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", + "node_modules/@commitlint/config-conventional/node_modules/conventional-changelog-conventionalcommits": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz", + "integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "compare-func": "^2.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=16" } }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", + "node_modules/@commitlint/config-validator": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-19.8.1.tgz", + "integrity": "sha512-0jvJ4u+eqGPBIzzSdqKNX1rvdbSU1lPNYlfQQRIFnBgLy26BtC0cFnr7c/AyuzExMxWsMOte6MkTi9I3SQ3iGQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@commitlint/types": "^19.8.1", + "ajv": "^8.11.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=v18" } }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", + "node_modules/@commitlint/ensure": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-19.8.1.tgz", + "integrity": "sha512-mXDnlJdvDzSObafjYrOSvZBwkD01cqB4gbnnFuVyNpGUM5ijwU/r/6uqUmBXAAOKRfyEjpkGVZxaDsCVnHAgyw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@commitlint/types": "^19.8.1", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "lodash.snakecase": "^4.1.1", + "lodash.startcase": "^4.4.0", + "lodash.upperfirst": "^4.3.1" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=v18" } }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.27.1", + "node_modules/@commitlint/execute-rule": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-19.8.1.tgz", + "integrity": "sha512-YfJyIqIKWI64Mgvn/sE7FXvVMQER/Cd+s3hZke6cI1xgNT/f6ZAz5heND0QtffH+KbcqAwXDEE1/5niYayYaQA==", + "dev": true, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/format": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-19.8.1.tgz", + "integrity": "sha512-kSJj34Rp10ItP+Eh9oCItiuN/HwGQMXBnIRk69jdOwEW9llW9FlyqcWYbHPSGofmjsqeoxa38UaEA5tsbm2JWw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@commitlint/types": "^19.8.1", + "chalk": "^5.3.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=v18" } }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", + "node_modules/@commitlint/is-ignored": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-19.8.1.tgz", + "integrity": "sha512-AceOhEhekBUQ5dzrVhDDsbMaY5LqtN8s1mqSnT2Kz1ERvVZkNihrs3Sfk1Je/rxRNbXYFzKZSHaPsEJJDJV8dg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@commitlint/types": "^19.8.1", + "semver": "^7.6.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/is-ignored/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", + "node_modules/@commitlint/lint": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.8.1.tgz", + "integrity": "sha512-52PFbsl+1EvMuokZXLRlOsdcLHf10isTPlWwoY1FQIidTsTvjKXVXYb7AvtpWkDzRO2ZsqIgPK7bI98x8LRUEw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@commitlint/is-ignored": "^19.8.1", + "@commitlint/parse": "^19.8.1", + "@commitlint/rules": "^19.8.1", + "@commitlint/types": "^19.8.1" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=v18" } }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.27.1", + "node_modules/@commitlint/load": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-19.8.1.tgz", + "integrity": "sha512-9V99EKG3u7z+FEoe4ikgq7YGRCSukAcvmKQuTtUyiYPnOd9a2/H9Ak1J9nJA1HChRQp9OA/sIKPugGS+FK/k1A==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@commitlint/config-validator": "^19.8.1", + "@commitlint/execute-rule": "^19.8.1", + "@commitlint/resolve-extends": "^19.8.1", + "@commitlint/types": "^19.8.1", + "chalk": "^5.3.0", + "cosmiconfig": "^9.0.0", + "cosmiconfig-typescript-loader": "^6.1.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "lodash.uniq": "^4.5.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=v18" } }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", + "node_modules/@commitlint/message": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-19.8.1.tgz", + "integrity": "sha512-+PMLQvjRXiU+Ae0Wc+p99EoGEutzSXFVwQfa3jRNUZLNW5odZAyseb92OSBTKCu+9gGZiJASt76Cj3dLTtcTdg==", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=v18" } }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", + "node_modules/@commitlint/parse": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-19.8.1.tgz", + "integrity": "sha512-mmAHYcMBmAgJDKWdkjIGq50X4yB0pSGpxyOODwYmoexxxiUCy5JJT99t1+PEMK7KtsCtzuWYIAXYAiKR+k+/Jw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@commitlint/types": "^19.8.1", + "conventional-changelog-angular": "^7.0.0", + "conventional-commits-parser": "^5.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=v18" } }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", + "node_modules/@commitlint/read": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-19.8.1.tgz", + "integrity": "sha512-03Jbjb1MqluaVXKHKRuGhcKWtSgh3Jizqy2lJCRbRrnWpcM06MYm8th59Xcns8EqBYvo0Xqb+2DoZFlga97uXQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@commitlint/top-level": "^19.8.1", + "@commitlint/types": "^19.8.1", + "git-raw-commits": "^4.0.0", + "minimist": "^1.2.8", + "tinyexec": "^1.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=v18" } }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", + "node_modules/@commitlint/resolve-extends": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-19.8.1.tgz", + "integrity": "sha512-GM0mAhFk49I+T/5UCYns5ayGStkTt4XFFrjjf0L4S26xoMTSkdCf9ZRO8en1kuopC4isDFuEm7ZOm/WRVeElVg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@commitlint/config-validator": "^19.8.1", + "@commitlint/types": "^19.8.1", + "global-directory": "^4.0.1", + "import-meta-resolve": "^4.0.0", + "lodash.mergewith": "^4.6.2", + "resolve-from": "^5.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=v18" } }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", + "node_modules/@commitlint/rules": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-19.8.1.tgz", + "integrity": "sha512-Hnlhd9DyvGiGwjfjfToMi1dsnw1EXKGJNLTcsuGORHz6SS9swRgkBsou33MQ2n51/boIDrbsg4tIBbRpEWK2kw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" + "@commitlint/ensure": "^19.8.1", + "@commitlint/message": "^19.8.1", + "@commitlint/to-lines": "^19.8.1", + "@commitlint/types": "^19.8.1" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=v18" } }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", + "node_modules/@commitlint/to-lines": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-19.8.1.tgz", + "integrity": "sha512-98Mm5inzbWTKuZQr2aW4SReY6WUukdWXuZhrqf1QdKPZBCCsXuG87c+iP0bwtD6DBnmVVQjgp4whoHRVixyPBg==", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=v18" } }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", + "node_modules/@commitlint/top-level": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-19.8.1.tgz", + "integrity": "sha512-Ph8IN1IOHPSDhURCSXBz44+CIu+60duFwRsg6HqaISFHQHbmBtxVw4ZrFNIYUzEP7WwrNPxa2/5qJ//NK1FGcw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "find-up": "^7.0.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=v18" } }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", + "node_modules/@commitlint/types": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-19.8.1.tgz", + "integrity": "sha512-/yCrWGCoA1SVKOks25EGadP9Pnj0oAIHGpl2wH2M2Y46dPM2ueb8wyCVOD7O3WCTkaJ0IkKvzhl1JY7+uCT2Dw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@types/conventional-commits-parser": "^5.0.0", + "chalk": "^5.3.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=v18" } }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.27.1", + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@jridgewell/trace-mapping": "0.3.9" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=12" } }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.27.1", + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz", + "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "node": ">=18" } }, - "node_modules/@babel/template": { - "version": "7.27.2", + "node_modules/@csstools/css-calc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" - }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "engines": { - "node": ">=6.9.0" + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@babel/traverse": { - "version": "7.27.4", + "node_modules/@csstools/css-color-parser": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.10.tgz", + "integrity": "sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg==", "dev": true, - "license": "MIT", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.3", - "@babel/parser": "^7.27.4", - "@babel/template": "^7.27.2", - "@babel/types": "^7.27.3", - "debug": "^4.3.1", - "globals": "^11.1.0" + "@csstools/color-helpers": "^5.0.2", + "@csstools/css-calc": "^2.1.4" }, "engines": { - "node": ">=6.9.0" + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@babel/types": { - "version": "7.27.6", + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" - }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "engines": { - "node": ">=6.9.0" + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@bcoe/v8-coverage": { - "version": "1.0.2", + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", "dev": true, - "license": "MIT", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "engines": { "node": ">=18" } }, - "node_modules/@commitlint/cli": { - "version": "19.8.1", + "node_modules/@discoveryjs/json-ext": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", + "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", "dev": true, - "license": "MIT", - "dependencies": { - "@commitlint/format": "^19.8.1", - "@commitlint/lint": "^19.8.1", - "@commitlint/load": "^19.8.1", - "@commitlint/read": "^19.8.1", - "@commitlint/types": "^19.8.1", - "tinyexec": "^1.0.0", - "yargs": "^17.0.0" - }, - "bin": { - "commitlint": "cli.js" - }, "engines": { - "node": ">=v18" + "node": ">=14.17.0" } }, - "node_modules/@commitlint/config-conventional": { - "version": "19.8.1", + "node_modules/@emnapi/core": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.4.tgz", + "integrity": "sha512-A9CnAbC6ARNMKcIcrQwq6HeHCjpcBZ5wSx4U01WXCqEKlrzB9F9315WDNHkrs2xbx7YjjSxbUYxuN6EQzpcY2g==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "@commitlint/types": "^19.8.1", - "conventional-changelog-conventionalcommits": "^7.0.2" - }, - "engines": { - "node": ">=v18" + "@emnapi/wasi-threads": "1.0.3", + "tslib": "^2.4.0" } }, - "node_modules/@commitlint/config-conventional/node_modules/conventional-changelog-conventionalcommits": { - "version": "7.0.2", + "node_modules/@emnapi/runtime": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.4.tgz", + "integrity": "sha512-hHyapA4A3gPaDCNfiqyZUStTMqIkKRshqPIuDOXv1hcBnD4U3l8cP0T1HMCfGRxQ6V64TGCcoswChANyOAwbQg==", "dev": true, - "license": "ISC", + "license": "MIT", + "optional": true, "dependencies": { - "compare-func": "^2.0.0" - }, - "engines": { - "node": ">=16" + "tslib": "^2.4.0" } }, - "node_modules/@commitlint/config-validator": { - "version": "19.8.1", + "node_modules/@emnapi/wasi-threads": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.3.tgz", + "integrity": "sha512-8K5IFFsQqF9wQNJptGbS6FNKgUTsSRYnTqNCG1vPP8jFdjSv18n2mQfJpkt2Oibo9iBEzcDnDxNwKTzC7svlJw==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "@commitlint/types": "^19.8.1", - "ajv": "^8.11.0" - }, - "engines": { - "node": ">=v18" + "tslib": "^2.4.0" } }, - "node_modules/@commitlint/ensure": { - "version": "19.8.1", + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", + "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", + "cpu": [ + "ppc64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@commitlint/types": "^19.8.1", - "lodash.camelcase": "^4.3.0", - "lodash.kebabcase": "^4.1.1", - "lodash.snakecase": "^4.1.1", - "lodash.startcase": "^4.4.0", - "lodash.upperfirst": "^4.3.1" - }, + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">=v18" + "node": ">=18" } }, - "node_modules/@commitlint/execute-rule": { - "version": "19.8.1", + "node_modules/@esbuild/android-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", + "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", + "cpu": [ + "arm" + ], "dev": true, - "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=v18" + "node": ">=18" } }, - "node_modules/@commitlint/format": { - "version": "19.8.1", + "node_modules/@esbuild/android-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", + "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@commitlint/types": "^19.8.1", - "chalk": "^5.3.0" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=v18" + "node": ">=18" } }, - "node_modules/@commitlint/is-ignored": { - "version": "19.8.1", + "node_modules/@esbuild/android-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", + "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@commitlint/types": "^19.8.1", - "semver": "^7.6.0" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=v18" + "node": ">=18" } }, - "node_modules/@commitlint/is-ignored/node_modules/semver": { - "version": "7.7.2", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", + "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=10" + "node": ">=18" } }, - "node_modules/@commitlint/lint": { - "version": "19.8.1", + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", + "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@commitlint/is-ignored": "^19.8.1", - "@commitlint/parse": "^19.8.1", - "@commitlint/rules": "^19.8.1", - "@commitlint/types": "^19.8.1" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=v18" + "node": ">=18" } }, - "node_modules/@commitlint/load": { - "version": "19.8.1", + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", + "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@commitlint/config-validator": "^19.8.1", - "@commitlint/execute-rule": "^19.8.1", - "@commitlint/resolve-extends": "^19.8.1", - "@commitlint/types": "^19.8.1", - "chalk": "^5.3.0", - "cosmiconfig": "^9.0.0", - "cosmiconfig-typescript-loader": "^6.1.0", - "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2", - "lodash.uniq": "^4.5.0" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=v18" + "node": ">=18" } }, - "node_modules/@commitlint/message": { - "version": "19.8.1", + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", + "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=v18" + "node": ">=18" } }, - "node_modules/@commitlint/parse": { - "version": "19.8.1", + "node_modules/@esbuild/linux-arm": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", + "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", + "cpu": [ + "arm" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@commitlint/types": "^19.8.1", - "conventional-changelog-angular": "^7.0.0", - "conventional-commits-parser": "^5.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=v18" + "node": ">=18" } }, - "node_modules/@commitlint/read": { - "version": "19.8.1", + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", + "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@commitlint/top-level": "^19.8.1", - "@commitlint/types": "^19.8.1", - "git-raw-commits": "^4.0.0", - "minimist": "^1.2.8", - "tinyexec": "^1.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=v18" + "node": ">=18" } }, - "node_modules/@commitlint/resolve-extends": { - "version": "19.8.1", + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", + "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", + "cpu": [ + "ia32" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@commitlint/config-validator": "^19.8.1", - "@commitlint/types": "^19.8.1", - "global-directory": "^4.0.1", - "import-meta-resolve": "^4.0.0", - "lodash.mergewith": "^4.6.2", - "resolve-from": "^5.0.0" - }, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", + "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=v18" + "node": ">=18" } }, - "node_modules/@commitlint/rules": { - "version": "19.8.1", + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", + "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", + "cpu": [ + "mips64el" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@commitlint/ensure": "^19.8.1", - "@commitlint/message": "^19.8.1", - "@commitlint/to-lines": "^19.8.1", - "@commitlint/types": "^19.8.1" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=v18" + "node": ">=18" } }, - "node_modules/@commitlint/to-lines": { - "version": "19.8.1", + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", + "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", + "cpu": [ + "ppc64" + ], "dev": true, - "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=v18" + "node": ">=18" } }, - "node_modules/@commitlint/top-level": { - "version": "19.8.1", + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", + "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", + "cpu": [ + "riscv64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^7.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=v18" + "node": ">=18" } }, - "node_modules/@commitlint/types": { - "version": "19.8.1", + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", + "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", + "cpu": [ + "s390x" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@types/conventional-commits-parser": "^5.0.0", - "chalk": "^5.3.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=v18" + "node": ">=18" } }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", + "node_modules/@esbuild/linux-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", + "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", + "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@csstools/color-helpers": { - "version": "5.0.2", + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", + "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", + "cpu": [ + "x64" + ], "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "optional": true, + "os": [ + "netbsd" ], - "license": "MIT-0", "engines": { "node": ">=18" } }, - "node_modules/@csstools/css-calc": { - "version": "2.1.4", + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", + "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", + "cpu": [ + "arm64" + ], "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "optional": true, + "os": [ + "openbsd" ], - "license": "MIT", "engines": { "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@csstools/css-color-parser": { - "version": "3.0.10", + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", + "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", + "cpu": [ + "x64" + ], "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "optional": true, + "os": [ + "openbsd" ], - "license": "MIT", - "dependencies": { - "@csstools/color-helpers": "^5.0.2", - "@csstools/css-calc": "^2.1.4" - }, "engines": { "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@csstools/css-parser-algorithms": { - "version": "3.0.5", + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", + "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", + "cpu": [ + "x64" + ], "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "optional": true, + "os": [ + "sunos" ], - "license": "MIT", "engines": { "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@csstools/css-tokenizer": { - "version": "3.0.4", + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", + "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", + "cpu": [ + "arm64" + ], "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } + "optional": true, + "os": [ + "win32" ], - "license": "MIT", "engines": { "node": ">=18" } }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.6.3", + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", + "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", + "cpu": [ + "ia32" + ], "dev": true, - "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=14.17.0" + "node": ">=18" } }, - "node_modules/@esbuild/darwin-arm64": { + "node_modules/@esbuild/win32-x64": { "version": "0.25.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", + "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", "cpu": [ - "arm64" + "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ - "darwin" + "win32" ], "engines": { "node": ">=18" @@ -5902,8 +7703,9 @@ }, "node_modules/@eslint-community/eslint-utils": { "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", "dev": true, - "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.4.3" }, @@ -5919,16 +7721,18 @@ }, "node_modules/@eslint-community/regexpp": { "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, - "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, - "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -5949,8 +7753,9 @@ }, "node_modules/@eslint/eslintrc/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -5964,8 +7769,9 @@ }, "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5973,8 +7779,9 @@ }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, - "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -5987,21 +7794,24 @@ }, "node_modules/@eslint/eslintrc/node_modules/ignore": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -6011,8 +7821,9 @@ }, "node_modules/@eslint/eslintrc/node_modules/type-fest": { "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -6022,28 +7833,33 @@ }, "node_modules/@eslint/js": { "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, - "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@gerhobbelt/gitignore-parser": { "version": "0.2.0-9", - "license": "Apache License, Version 2.0", + "resolved": "https://registry.npmjs.org/@gerhobbelt/gitignore-parser/-/gitignore-parser-0.2.0-9.tgz", + "integrity": "sha512-leOyCx+xnmioBSPqdkFBi1drkdM+Nm5+MfgffRcdkcVVUjFuAlxqEJ7jkYeXyHLvL9/l7ejPGooE1TPAo7qmmA==", "engines": { "node": ">=10" } }, "node_modules/@hapi/bourne": { "version": "2.1.0", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-2.1.0.tgz", + "integrity": "sha512-i1BpaNDVLJdRBEKeJWkVO6tYX6DMFBuwMhSuWqLsY4ufeTKGVuV5rBsUhxPayXqnnWHgXUAmWK16H/ykO5Wj4Q==", + "dev": true }, "node_modules/@humanwhocodes/config-array": { "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", "dev": true, - "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", @@ -6055,8 +7871,9 @@ }, "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -6064,8 +7881,9 @@ }, "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -6075,8 +7893,9 @@ }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -6087,13 +7906,16 @@ }, "node_modules/@humanwhocodes/object-schema": { "version": "2.0.3", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true }, "node_modules/@inquirer/checkbox": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-3.0.1.tgz", + "integrity": "sha512-0hm2nrToWUdD6/UHnel/UKGdk1//ke5zGUpHIvk5ZWmaKezlGxZkOJXNSWsdxO/rEqTkbB3lNC2J6nBElV2aAQ==", "dev": true, - "license": "MIT", "dependencies": { "@inquirer/core": "^9.2.1", "@inquirer/figures": "^1.0.6", @@ -6107,8 +7929,9 @@ }, "node_modules/@inquirer/confirm": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-4.0.1.tgz", + "integrity": "sha512-46yL28o2NJ9doViqOy0VDcoTzng7rAb6yPQKU7VDLqkmbCaH4JqK4yk4XqlzNWy9PVC5pG1ZUXPBQv+VqnYs2w==", "dev": true, - "license": "MIT", "dependencies": { "@inquirer/core": "^9.2.1", "@inquirer/type": "^2.0.0" @@ -6119,8 +7942,9 @@ }, "node_modules/@inquirer/core": { "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.2.1.tgz", + "integrity": "sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==", "dev": true, - "license": "MIT", "dependencies": { "@inquirer/figures": "^1.0.6", "@inquirer/type": "^2.0.0", @@ -6141,8 +7965,9 @@ }, "node_modules/@inquirer/core/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -6155,13 +7980,15 @@ }, "node_modules/@inquirer/core/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/@inquirer/core/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -6173,8 +8000,9 @@ }, "node_modules/@inquirer/core/node_modules/wrap-ansi": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -6186,8 +8014,9 @@ }, "node_modules/@inquirer/editor": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-3.0.1.tgz", + "integrity": "sha512-VA96GPFaSOVudjKFraokEEmUQg/Lub6OXvbIEZU1SDCmBzRkHGhxoFAVaF30nyiB4m5cEbDgiI2QRacXZ2hw9Q==", "dev": true, - "license": "MIT", "dependencies": { "@inquirer/core": "^9.2.1", "@inquirer/type": "^2.0.0", @@ -6199,8 +8028,9 @@ }, "node_modules/@inquirer/expand": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-3.0.1.tgz", + "integrity": "sha512-ToG8d6RIbnVpbdPdiN7BCxZGiHOTomOX94C2FaT5KOHupV40tKEDozp12res6cMIfRKrXLJyexAZhWVHgbALSQ==", "dev": true, - "license": "MIT", "dependencies": { "@inquirer/core": "^9.2.1", "@inquirer/type": "^2.0.0", @@ -6212,16 +8042,18 @@ }, "node_modules/@inquirer/figures": { "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.12.tgz", + "integrity": "sha512-MJttijd8rMFcKJC8NYmprWr6hD3r9Gd9qUC0XwPNwoEPWSMVJwA2MlXxF+nhZZNMY+HXsWa+o7KY2emWYIn0jQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@inquirer/input": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-3.0.1.tgz", + "integrity": "sha512-BDuPBmpvi8eMCxqC5iacloWqv+5tQSJlUafYWUe31ow1BVXjW2a5qe3dh4X/Z25Wp22RwvcaLCc2siHobEOfzg==", "dev": true, - "license": "MIT", "dependencies": { "@inquirer/core": "^9.2.1", "@inquirer/type": "^2.0.0" @@ -6232,8 +8064,9 @@ }, "node_modules/@inquirer/number": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-2.0.1.tgz", + "integrity": "sha512-QpR8jPhRjSmlr/mD2cw3IR8HRO7lSVOnqUvQa8scv1Lsr3xoAMMworcYW3J13z3ppjBFBD2ef1Ci6AE5Qn8goQ==", "dev": true, - "license": "MIT", "dependencies": { "@inquirer/core": "^9.2.1", "@inquirer/type": "^2.0.0" @@ -6244,8 +8077,9 @@ }, "node_modules/@inquirer/password": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-3.0.1.tgz", + "integrity": "sha512-haoeEPUisD1NeE2IanLOiFr4wcTXGWrBOyAyPZi1FfLJuXOzNmxCJPgUrGYKVh+Y8hfGJenIfz5Wb/DkE9KkMQ==", "dev": true, - "license": "MIT", "dependencies": { "@inquirer/core": "^9.2.1", "@inquirer/type": "^2.0.0", @@ -6257,8 +8091,9 @@ }, "node_modules/@inquirer/prompts": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-6.0.1.tgz", + "integrity": "sha512-yl43JD/86CIj3Mz5mvvLJqAOfIup7ncxfJ0Btnl0/v5TouVUyeEdcpknfgc+yMevS/48oH9WAkkw93m7otLb/A==", "dev": true, - "license": "MIT", "dependencies": { "@inquirer/checkbox": "^3.0.1", "@inquirer/confirm": "^4.0.1", @@ -6277,8 +8112,9 @@ }, "node_modules/@inquirer/rawlist": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-3.0.1.tgz", + "integrity": "sha512-VgRtFIwZInUzTiPLSfDXK5jLrnpkuSOh1ctfaoygKAdPqjcjKYmGh6sCY1pb0aGnCGsmhUxoqLDUAU0ud+lGXQ==", "dev": true, - "license": "MIT", "dependencies": { "@inquirer/core": "^9.2.1", "@inquirer/type": "^2.0.0", @@ -6290,8 +8126,9 @@ }, "node_modules/@inquirer/search": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-2.0.1.tgz", + "integrity": "sha512-r5hBKZk3g5MkIzLVoSgE4evypGqtOannnB3PKTG9NRZxyFRKcfzrdxXXPcoJQsxJPzvdSU2Rn7pB7lw0GCmGAg==", "dev": true, - "license": "MIT", "dependencies": { "@inquirer/core": "^9.2.1", "@inquirer/figures": "^1.0.6", @@ -6304,8 +8141,9 @@ }, "node_modules/@inquirer/select": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-3.0.1.tgz", + "integrity": "sha512-lUDGUxPhdWMkN/fHy1Lk7pF3nK1fh/gqeyWXmctefhxLYxlDsc7vsPBEpxrfVGDsVdyYJsiJoD4bJ1b623cV1Q==", "dev": true, - "license": "MIT", "dependencies": { "@inquirer/core": "^9.2.1", "@inquirer/figures": "^1.0.6", @@ -6319,8 +8157,9 @@ }, "node_modules/@inquirer/type": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-2.0.0.tgz", + "integrity": "sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==", "dev": true, - "license": "MIT", "dependencies": { "mute-stream": "^1.0.0" }, @@ -6330,7 +8169,8 @@ }, "node_modules/@isaacs/cliui": { "version": "8.0.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -6345,7 +8185,8 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "engines": { "node": ">=12" }, @@ -6355,7 +8196,8 @@ }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -6368,8 +8210,9 @@ }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, - "license": "ISC", "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -6383,16 +8226,18 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } }, "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -6403,8 +8248,9 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -6415,8 +8261,9 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -6426,8 +8273,9 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -6440,8 +8288,9 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -6451,24 +8300,27 @@ }, "node_modules/@istanbuljs/load-nyc-config/node_modules/path-exists": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@jest/console": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", "dev": true, - "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -6483,8 +8335,9 @@ }, "node_modules/@jest/console/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -6497,8 +8350,9 @@ }, "node_modules/@jest/console/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -6512,8 +8366,9 @@ }, "node_modules/@jest/core": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", "dev": true, - "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/reporters": "^29.7.0", @@ -6558,8 +8413,9 @@ }, "node_modules/@jest/core/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -6572,8 +8428,9 @@ }, "node_modules/@jest/core/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -6587,16 +8444,18 @@ }, "node_modules/@jest/diff-sequences": { "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz", + "integrity": "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==", "dev": true, - "license": "MIT", "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/environment": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", "dev": true, - "license": "MIT", "dependencies": { "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", @@ -6609,8 +8468,9 @@ }, "node_modules/@jest/expect": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", "dev": true, - "license": "MIT", "dependencies": { "expect": "^29.7.0", "jest-snapshot": "^29.7.0" @@ -6621,8 +8481,9 @@ }, "node_modules/@jest/expect-utils": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", "dev": true, - "license": "MIT", "dependencies": { "jest-get-type": "^29.6.3" }, @@ -6632,8 +8493,9 @@ }, "node_modules/@jest/fake-timers": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", "dev": true, - "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", @@ -6648,16 +8510,18 @@ }, "node_modules/@jest/get-type": { "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.0.1.tgz", + "integrity": "sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw==", "dev": true, - "license": "MIT", "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/globals": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", "dev": true, - "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", @@ -6670,8 +8534,9 @@ }, "node_modules/@jest/pattern": { "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz", + "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*", "jest-regex-util": "30.0.1" @@ -6682,16 +8547,18 @@ }, "node_modules/@jest/pattern/node_modules/jest-regex-util": { "version": "30.0.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz", + "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==", "dev": true, - "license": "MIT", "engines": { "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, "node_modules/@jest/reporters": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", "dev": true, - "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "^29.7.0", @@ -6732,13 +8599,15 @@ }, "node_modules/@jest/reporters/node_modules/@bcoe/v8-coverage": { "version": "0.2.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true }, "node_modules/@jest/reporters/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -6751,8 +8620,9 @@ }, "node_modules/@jest/reporters/node_modules/brace-expansion": { "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -6760,8 +8630,9 @@ }, "node_modules/@jest/reporters/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -6775,8 +8646,10 @@ }, "node_modules/@jest/reporters/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6794,8 +8667,9 @@ }, "node_modules/@jest/reporters/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -6805,8 +8679,9 @@ }, "node_modules/@jest/schemas": { "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, - "license": "MIT", "dependencies": { "@sinclair/typebox": "^0.27.8" }, @@ -6816,8 +8691,9 @@ }, "node_modules/@jest/source-map": { "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", "dev": true, - "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", @@ -6829,8 +8705,9 @@ }, "node_modules/@jest/test-result": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", "dev": true, - "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/types": "^29.6.3", @@ -6843,8 +8720,9 @@ }, "node_modules/@jest/test-sequencer": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", "dev": true, - "license": "MIT", "dependencies": { "@jest/test-result": "^29.7.0", "graceful-fs": "^4.2.9", @@ -6857,8 +8735,9 @@ }, "node_modules/@jest/transform": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@jest/types": "^29.6.3", @@ -6882,8 +8761,9 @@ }, "node_modules/@jest/transform/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -6896,8 +8776,9 @@ }, "node_modules/@jest/transform/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -6911,8 +8792,9 @@ }, "node_modules/@jest/types": { "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, - "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -6927,8 +8809,9 @@ }, "node_modules/@jest/types/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -6941,8 +8824,9 @@ }, "node_modules/@jest/types/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -6955,38 +8839,29 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.9.tgz", + "integrity": "sha512-xpz6C/vXOegF9VEtlMBlkNNIjHrLhKaFBsO4lmQGr00x5BHp7p+oliR6i7LwIcM5cZU2VjLSwm2R+/zj5IjPWg==", "devOptional": true, - "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "devOptional": true, - "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "devOptional": true, - "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" @@ -6994,111 +8869,402 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.0", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "devOptional": true }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "devOptional": true, - "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@jsonjoy.com/base64": { - "version": "1.1.2", - "license": "Apache-2.0", + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.2.0.tgz", + "integrity": "sha512-io1zEbbYcElht3tdlqEOFxZ0dMTYrHz9iMf0gqn1pPjZFTCgM5R4R5IMA20Chb2UPYYsxjzs8CgZ7Nb5n2K2rA==", + "dependencies": { + "@jsonjoy.com/base64": "^1.1.1", + "@jsonjoy.com/util": "^1.1.2", + "hyperdyperid": "^1.2.0", + "thingies": "^1.20.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.6.0.tgz", + "integrity": "sha512-sw/RMbehRhN68WRtcKCpQOPfnH6lLP4GJfqzi3iYej8tnzpZUDr6UkZYJjcjjC0FWEJOJbyM3PTIwxucUmDG2A==", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==" + }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.13.2.tgz", + "integrity": "sha512-Vx7qOcmoKkR3qhaQ9qf3GxiVKCEu+zfJddHv6x3dY/9P6+uIwJnmuAur5aB+4FDXf41rRrDnOEGkviX5oYZ67w==", + "dependencies": { + "ajv": "^6.12.6", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "express": "^5.0.1", + "express-rate-limit": "^7.5.0", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.23.8", + "zod-to-json-schema": "^3.24.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.11.tgz", + "integrity": "sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.9.0" + } + }, + "node_modules/@node-rs/crc32": { + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/@node-rs/crc32/-/crc32-1.10.6.tgz", + "integrity": "sha512-+llXfqt+UzgoDzT9of5vPQPGqTAVCohU74I9zIBkNo5TH6s2P31DFJOGsJQKN207f0GHnYv5pV3wh3BCY/un/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@node-rs/crc32-android-arm-eabi": "1.10.6", + "@node-rs/crc32-android-arm64": "1.10.6", + "@node-rs/crc32-darwin-arm64": "1.10.6", + "@node-rs/crc32-darwin-x64": "1.10.6", + "@node-rs/crc32-freebsd-x64": "1.10.6", + "@node-rs/crc32-linux-arm-gnueabihf": "1.10.6", + "@node-rs/crc32-linux-arm64-gnu": "1.10.6", + "@node-rs/crc32-linux-arm64-musl": "1.10.6", + "@node-rs/crc32-linux-x64-gnu": "1.10.6", + "@node-rs/crc32-linux-x64-musl": "1.10.6", + "@node-rs/crc32-wasm32-wasi": "1.10.6", + "@node-rs/crc32-win32-arm64-msvc": "1.10.6", + "@node-rs/crc32-win32-ia32-msvc": "1.10.6", + "@node-rs/crc32-win32-x64-msvc": "1.10.6" + } + }, + "node_modules/@node-rs/crc32-android-arm-eabi": { + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-android-arm-eabi/-/crc32-android-arm-eabi-1.10.6.tgz", + "integrity": "sha512-vZAMuJXm3TpWPOkkhxdrofWDv+Q+I2oO7ucLRbXyAPmXFNDhHtBxbO1rk9Qzz+M3eep8ieS4/+jCL1Q0zacNMQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@node-rs/crc32-android-arm64": { + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-android-arm64/-/crc32-android-arm64-1.10.6.tgz", + "integrity": "sha512-Vl/JbjCinCw/H9gEpZveWCMjxjcEChDcDBM8S4hKay5yyoRCUHJPuKr4sjVDBeOm+1nwU3oOm6Ca8dyblwp4/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@node-rs/crc32-darwin-arm64": { + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-darwin-arm64/-/crc32-darwin-arm64-1.10.6.tgz", + "integrity": "sha512-kARYANp5GnmsQiViA5Qu74weYQ3phOHSYQf0G+U5wB3NB5JmBHnZcOc46Ig21tTypWtdv7u63TaltJQE41noyg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@node-rs/crc32-darwin-x64": { + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-darwin-x64/-/crc32-darwin-x64-1.10.6.tgz", + "integrity": "sha512-Q99bevJVMfLTISpkpKBlXgtPUItrvTWKFyiqoKH5IvscZmLV++NH4V13Pa17GTBmv9n18OwzgQY4/SRq6PQNVA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@node-rs/crc32-freebsd-x64": { + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-freebsd-x64/-/crc32-freebsd-x64-1.10.6.tgz", + "integrity": "sha512-66hpawbNjrgnS9EDMErta/lpaqOMrL6a6ee+nlI2viduVOmRZWm9Rg9XdGTK/+c4bQLdtC6jOd+Kp4EyGRYkAg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@node-rs/crc32-linux-arm-gnueabihf": { + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-arm-gnueabihf/-/crc32-linux-arm-gnueabihf-1.10.6.tgz", + "integrity": "sha512-E8Z0WChH7X6ankbVm8J/Yym19Cq3otx6l4NFPS6JW/cWdjv7iw+Sps2huSug+TBprjbcEA+s4TvEwfDI1KScjg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@node-rs/crc32-linux-arm64-gnu": { + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-arm64-gnu/-/crc32-linux-arm64-gnu-1.10.6.tgz", + "integrity": "sha512-LmWcfDbqAvypX0bQjQVPmQGazh4dLiVklkgHxpV4P0TcQ1DT86H/SWpMBMs/ncF8DGuCQ05cNyMv1iddUDugoQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@node-rs/crc32-linux-arm64-musl": { + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-arm64-musl/-/crc32-linux-arm64-musl-1.10.6.tgz", + "integrity": "sha512-k8ra/bmg0hwRrIEE8JL1p32WfaN9gDlUUpQRWsbxd1WhjqvXea7kKO6K4DwVxyxlPhBS9Gkb5Urq7Y4mXANzaw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@node-rs/crc32-linux-x64-gnu": { + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-x64-gnu/-/crc32-linux-x64-gnu-1.10.6.tgz", + "integrity": "sha512-IfjtqcuFK7JrSZ9mlAFhb83xgium30PguvRjIMI45C3FJwu18bnLk1oR619IYb/zetQT82MObgmqfKOtgemEKw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@node-rs/crc32-linux-x64-musl": { + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-linux-x64-musl/-/crc32-linux-x64-musl-1.10.6.tgz", + "integrity": "sha512-LbFYsA5M9pNunOweSt6uhxenYQF94v3bHDAQRPTQ3rnjn+mK6IC7YTAYoBjvoJP8lVzcvk9hRj8wp4Jyh6Y80g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": ">= 10" } }, - "node_modules/@jsonjoy.com/json-pack": { - "version": "1.2.0", - "license": "Apache-2.0", + "node_modules/@node-rs/crc32-wasm32-wasi": { + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-wasm32-wasi/-/crc32-wasm32-wasi-1.10.6.tgz", + "integrity": "sha512-KaejdLgHMPsRaxnM+OG9L9XdWL2TabNx80HLdsCOoX9BVhEkfh39OeahBo8lBmidylKbLGMQoGfIKDjq0YMStw==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "@jsonjoy.com/base64": "^1.1.1", - "@jsonjoy.com/util": "^1.1.2", - "hyperdyperid": "^1.2.0", - "thingies": "^1.20.0" + "@napi-rs/wasm-runtime": "^0.2.5" }, "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": ">=14.0.0" } }, - "node_modules/@jsonjoy.com/util": { - "version": "1.6.0", - "license": "Apache-2.0", + "node_modules/@node-rs/crc32-win32-arm64-msvc": { + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-win32-arm64-msvc/-/crc32-win32-arm64-msvc-1.10.6.tgz", + "integrity": "sha512-x50AXiSxn5Ccn+dCjLf1T7ZpdBiV1Sp5aC+H2ijhJO4alwznvXgWbopPRVhbp2nj0i+Gb6kkDUEyU+508KAdGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" + "node": ">= 10" } }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.5", - "license": "MIT" - }, - "node_modules/@modelcontextprotocol/sdk": { - "version": "1.13.1", + "node_modules/@node-rs/crc32-win32-ia32-msvc": { + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-win32-ia32-msvc/-/crc32-win32-ia32-msvc-1.10.6.tgz", + "integrity": "sha512-DpDxQLaErJF9l36aghe1Mx+cOnYLKYo6qVPqPL9ukJ5rAGLtCdU0C+Zoi3gs9ySm8zmbFgazq/LvmsZYU42aBw==", + "cpu": [ + "ia32" + ], + "dev": true, "license": "MIT", - "dependencies": { - "ajv": "^6.12.6", - "content-type": "^1.0.5", - "cors": "^2.8.5", - "cross-spawn": "^7.0.5", - "eventsource": "^3.0.2", - "express": "^5.0.1", - "express-rate-limit": "^7.5.0", - "pkce-challenge": "^5.0.0", - "raw-body": "^3.0.0", - "zod": "^3.23.8", - "zod-to-json-schema": "^3.24.1" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=18" + "node": ">= 10" } }, - "node_modules/@modelcontextprotocol/sdk/node_modules/ajv": { - "version": "6.12.6", + "node_modules/@node-rs/crc32-win32-x64-msvc": { + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/@node-rs/crc32-win32-x64-msvc/-/crc32-win32-x64-msvc-1.10.6.tgz", + "integrity": "sha512-5B1vXosIIBw1m2Rcnw62IIfH7W9s9f7H7Ma0rRuhT8HR4Xh8QCgw6NJSI2S2MCngsGktYnAhyUvs81b7efTyQw==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@modelcontextprotocol/sdk/node_modules/json-schema-traverse": { - "version": "0.4.1", - "license": "MIT" - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -7109,14 +9275,16 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -7127,7 +9295,8 @@ }, "node_modules/@oozcitak/dom": { "version": "1.15.10", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@oozcitak/dom/-/dom-1.15.10.tgz", + "integrity": "sha512-0JT29/LaxVgRcGKvHmSrUTEvZ8BXvZhGl2LASRUgHqDTC1M5g1pLmVv56IYNyt3bG2CUjDkc67wnyZC14pbQrQ==", "dependencies": { "@oozcitak/infra": "1.0.8", "@oozcitak/url": "1.0.4", @@ -7139,7 +9308,8 @@ }, "node_modules/@oozcitak/infra": { "version": "1.0.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@oozcitak/infra/-/infra-1.0.8.tgz", + "integrity": "sha512-JRAUc9VR6IGHOL7OGF+yrvs0LO8SlqGnPAMqyzOuFZPSZSXI7Xf2O9+awQPSMXgIWGtgUf/dA6Hs6X6ySEaWTg==", "dependencies": { "@oozcitak/util": "8.3.8" }, @@ -7149,7 +9319,8 @@ }, "node_modules/@oozcitak/url": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@oozcitak/url/-/url-1.0.4.tgz", + "integrity": "sha512-kDcD8y+y3FCSOvnBI6HJgl00viO/nGbQoCINmQ0h98OhnGITrWR3bOGfwYCthgcrV8AnTJz8MzslTQbC3SOAmw==", "dependencies": { "@oozcitak/infra": "1.0.8", "@oozcitak/util": "8.3.8" @@ -7160,21 +9331,24 @@ }, "node_modules/@oozcitak/util": { "version": "8.3.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@oozcitak/util/-/util-8.3.8.tgz", + "integrity": "sha512-T8TbSnGsxo6TDBJx/Sgv/BlVJL3tshxZP7Aq5R1mSnM5OcHY2dQaxLMu2+E8u3gN0MLOzdjurqN4ZRVuzQycOQ==", "engines": { "node": ">=8.0" } }, "node_modules/@opentelemetry/api": { "version": "1.9.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", "engines": { "node": ">=8.0.0" } }, "node_modules/@opentelemetry/api-logs": { "version": "0.200.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.200.0.tgz", + "integrity": "sha512-IKJBQxh91qJ+3ssRly5hYEJ8NDHu9oY/B1PXVSCWf7zytmYO9RNLB0Ox9XQ/fJ8m6gY6Q6NtBWlmXfaXt5Uc4Q==", "dependencies": { "@opentelemetry/api": "^1.3.0" }, @@ -7184,7 +9358,8 @@ }, "node_modules/@opentelemetry/core": { "version": "2.0.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.0.1.tgz", + "integrity": "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw==", "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, @@ -7197,7 +9372,8 @@ }, "node_modules/@opentelemetry/exporter-logs-otlp-http": { "version": "0.200.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-http/-/exporter-logs-otlp-http-0.200.0.tgz", + "integrity": "sha512-KfWw49htbGGp9s8N4KI8EQ9XuqKJ0VG+yVYVYFiCYSjEV32qpQ5qZ9UZBzOZ6xRb+E16SXOSCT3RkqBVSABZ+g==", "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@opentelemetry/core": "2.0.0", @@ -7214,7 +9390,8 @@ }, "node_modules/@opentelemetry/exporter-logs-otlp-http/node_modules/@opentelemetry/core": { "version": "2.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.0.0.tgz", + "integrity": "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ==", "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, @@ -7227,7 +9404,8 @@ }, "node_modules/@opentelemetry/exporter-metrics-otlp-http": { "version": "0.200.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.200.0.tgz", + "integrity": "sha512-5BiR6i8yHc9+qW7F6LqkuUnIzVNA7lt0qRxIKcKT+gq3eGUPHZ3DY29sfxI3tkvnwMgtnHDMNze5DdxW39HsAw==", "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/otlp-exporter-base": "0.200.0", @@ -7244,7 +9422,8 @@ }, "node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/core": { "version": "2.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.0.0.tgz", + "integrity": "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ==", "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, @@ -7257,7 +9436,8 @@ }, "node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/resources": { "version": "2.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.0.0.tgz", + "integrity": "sha512-rnZr6dML2z4IARI4zPGQV4arDikF/9OXZQzrC01dLmn0CZxU5U5OLd/m1T7YkGRj5UitjeoCtg/zorlgMQcdTg==", "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/semantic-conventions": "^1.29.0" @@ -7271,7 +9451,8 @@ }, "node_modules/@opentelemetry/exporter-metrics-otlp-http/node_modules/@opentelemetry/sdk-metrics": { "version": "2.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-2.0.0.tgz", + "integrity": "sha512-Bvy8QDjO05umd0+j+gDeWcTaVa1/R2lDj/eOvjzpm8VQj1K1vVZJuyjThpV5/lSHyYW2JaHF2IQ7Z8twJFAhjA==", "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/resources": "2.0.0" @@ -7285,7 +9466,8 @@ }, "node_modules/@opentelemetry/otlp-exporter-base": { "version": "0.200.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.200.0.tgz", + "integrity": "sha512-IxJgA3FD7q4V6gGq4bnmQM5nTIyMDkoGFGrBrrDjB6onEiq1pafma55V+bHvGYLWvcqbBbRfezr1GED88lacEQ==", "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/otlp-transformer": "0.200.0" @@ -7299,7 +9481,8 @@ }, "node_modules/@opentelemetry/otlp-exporter-base/node_modules/@opentelemetry/core": { "version": "2.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.0.0.tgz", + "integrity": "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ==", "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, @@ -7312,7 +9495,8 @@ }, "node_modules/@opentelemetry/otlp-transformer": { "version": "0.200.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.200.0.tgz", + "integrity": "sha512-+9YDZbYybOnv7sWzebWOeK6gKyt2XE7iarSyBFkwwnP559pEevKOUD8NyDHhRjCSp13ybh9iVXlMfcj/DwF/yw==", "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@opentelemetry/core": "2.0.0", @@ -7331,7 +9515,8 @@ }, "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/core": { "version": "2.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.0.0.tgz", + "integrity": "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ==", "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, @@ -7344,7 +9529,8 @@ }, "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/resources": { "version": "2.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.0.0.tgz", + "integrity": "sha512-rnZr6dML2z4IARI4zPGQV4arDikF/9OXZQzrC01dLmn0CZxU5U5OLd/m1T7YkGRj5UitjeoCtg/zorlgMQcdTg==", "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/semantic-conventions": "^1.29.0" @@ -7358,7 +9544,8 @@ }, "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/sdk-metrics": { "version": "2.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-2.0.0.tgz", + "integrity": "sha512-Bvy8QDjO05umd0+j+gDeWcTaVa1/R2lDj/eOvjzpm8VQj1K1vVZJuyjThpV5/lSHyYW2JaHF2IQ7Z8twJFAhjA==", "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/resources": "2.0.0" @@ -7372,7 +9559,8 @@ }, "node_modules/@opentelemetry/resources": { "version": "2.0.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.0.1.tgz", + "integrity": "sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw==", "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/semantic-conventions": "^1.29.0" @@ -7386,7 +9574,8 @@ }, "node_modules/@opentelemetry/sdk-logs": { "version": "0.200.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.200.0.tgz", + "integrity": "sha512-VZG870063NLfObmQQNtCVcdXXLzI3vOjjrRENmU37HYiPFa0ZXpXVDsTD02Nh3AT3xYJzQaWKl2X2lQ2l7TWJA==", "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@opentelemetry/core": "2.0.0", @@ -7401,7 +9590,8 @@ }, "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/core": { "version": "2.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.0.0.tgz", + "integrity": "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ==", "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, @@ -7414,7 +9604,8 @@ }, "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/resources": { "version": "2.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.0.0.tgz", + "integrity": "sha512-rnZr6dML2z4IARI4zPGQV4arDikF/9OXZQzrC01dLmn0CZxU5U5OLd/m1T7YkGRj5UitjeoCtg/zorlgMQcdTg==", "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/semantic-conventions": "^1.29.0" @@ -7428,7 +9619,8 @@ }, "node_modules/@opentelemetry/sdk-metrics": { "version": "2.0.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-2.0.1.tgz", + "integrity": "sha512-wf8OaJoSnujMAHWR3g+/hGvNcsC16rf9s1So4JlMiFaFHiE4HpIA3oUh+uWZQ7CNuK8gVW/pQSkgoa5HkkOl0g==", "dependencies": { "@opentelemetry/core": "2.0.1", "@opentelemetry/resources": "2.0.1" @@ -7442,7 +9634,8 @@ }, "node_modules/@opentelemetry/sdk-trace-base": { "version": "2.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.0.0.tgz", + "integrity": "sha512-qQnYdX+ZCkonM7tA5iU4fSRsVxbFGml8jbxOgipRGMFHKaXKHQ30js03rTobYjKjIfnOsZSbHKWF0/0v0OQGfw==", "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/resources": "2.0.0", @@ -7457,7 +9650,8 @@ }, "node_modules/@opentelemetry/sdk-trace-base/node_modules/@opentelemetry/core": { "version": "2.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.0.0.tgz", + "integrity": "sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ==", "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, @@ -7470,7 +9664,8 @@ }, "node_modules/@opentelemetry/sdk-trace-base/node_modules/@opentelemetry/resources": { "version": "2.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.0.0.tgz", + "integrity": "sha512-rnZr6dML2z4IARI4zPGQV4arDikF/9OXZQzrC01dLmn0CZxU5U5OLd/m1T7YkGRj5UitjeoCtg/zorlgMQcdTg==", "dependencies": { "@opentelemetry/core": "2.0.0", "@opentelemetry/semantic-conventions": "^1.29.0" @@ -7484,14 +9679,16 @@ }, "node_modules/@opentelemetry/semantic-conventions": { "version": "1.34.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.34.0.tgz", + "integrity": "sha512-aKcOkyrorBGlajjRdVoJWHTxfxO1vCNHLJVlSDaRHDIdjU+pX8IYQPvPDkYiujKLbRnWU+1TBwEt0QRgSm4SGA==", "engines": { "node": ">=14" } }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "optional": true, "engines": { "node": ">=14" @@ -7499,8 +9696,9 @@ }, "node_modules/@pkgr/core": { "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.7.tgz", + "integrity": "sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg==", "dev": true, - "license": "MIT", "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, @@ -7510,6 +9708,8 @@ }, "node_modules/@promptbook/utils": { "version": "0.69.5", + "resolved": "https://registry.npmjs.org/@promptbook/utils/-/utils-0.69.5.tgz", + "integrity": "sha512-xm5Ti/Hp3o4xHrsK9Yy3MS6KbDxYbq485hDsFvxqaNA7equHLPdo8H8faTitTeb14QCDfLW4iwCxdVYu5sn6YQ==", "dev": true, "funding": [ { @@ -7521,30 +9721,34 @@ "url": "https://github.com/webgptorg/promptbook/blob/main/README.md#%EF%B8%8F-contributing" } ], - "license": "CC-BY-4.0", "dependencies": { "spacetrim": "0.11.59" } }, "node_modules/@protobufjs/aspromise": { "version": "1.1.2", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" }, "node_modules/@protobufjs/base64": { "version": "1.1.2", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" }, "node_modules/@protobufjs/codegen": { "version": "2.0.4", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" }, "node_modules/@protobufjs/eventemitter": { "version": "1.1.0", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" }, "node_modules/@protobufjs/fetch": { "version": "1.1.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", "dependencies": { "@protobufjs/aspromise": "^1.1.1", "@protobufjs/inquire": "^1.1.0" @@ -7552,28 +9756,34 @@ }, "node_modules/@protobufjs/float": { "version": "1.0.2", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" }, "node_modules/@protobufjs/inquire": { "version": "1.1.0", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" }, "node_modules/@protobufjs/path": { "version": "1.1.2", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" }, "node_modules/@protobufjs/pool": { "version": "1.1.0", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" }, "node_modules/@protobufjs/utf8": { "version": "1.1.0", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, "node_modules/@puppeteer/browsers": { "version": "2.10.5", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.10.5.tgz", + "integrity": "sha512-eifa0o+i8dERnngJwKrfp3dEq7ia5XFyoqB17S4gK8GhsQE4/P8nxOfQSE0zQHxzzLo/cmF+7+ywEQ7wK7Fb+w==", "dev": true, - "license": "Apache-2.0", "dependencies": { "debug": "^4.4.1", "extract-zip": "^2.0.1", @@ -7592,8 +9802,9 @@ }, "node_modules/@puppeteer/browsers/node_modules/semver": { "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -7603,8 +9814,9 @@ }, "node_modules/@puppeteer/browsers/node_modules/tar-fs": { "version": "3.0.10", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.10.tgz", + "integrity": "sha512-C1SwlQGNLe/jPNqapK8epDsXME7CAJR5RL3GcE6KWx1d9OUByzoHVcbu1VPI8tevg9H8Alae0AApHHFGzrD5zA==", "dev": true, - "license": "MIT", "dependencies": { "pump": "^3.0.0", "tar-stream": "^3.1.5" @@ -7616,22 +9828,26 @@ }, "node_modules/@rtsao/scc": { "version": "1.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true }, "node_modules/@sec-ant/readable-stream": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "dev": true }, "node_modules/@sinclair/typebox": { "version": "0.27.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true }, "node_modules/@sindresorhus/is": { "version": "4.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "engines": { "node": ">=10" }, @@ -7641,8 +9857,9 @@ }, "node_modules/@sindresorhus/merge-streams": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=18" }, @@ -7652,32 +9869,36 @@ }, "node_modules/@sinonjs/commons": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } }, "node_modules/@sinonjs/commons/node_modules/type-detect": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/@sinonjs/fake-timers": { "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.0" } }, "node_modules/@sinonjs/samsam": { "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.2.tgz", + "integrity": "sha512-v46t/fwnhejRSFTGqbpn9u+LQ9xJDse10gNnPgAcxgdoCDMXj/G2asWAC/8Qs+BAZDicX+MNZouXT1A7c83kVw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1", "lodash.get": "^4.4.2", @@ -7686,12 +9907,14 @@ }, "node_modules/@sinonjs/text-encoding": { "version": "0.7.3", - "dev": true, - "license": "(Unlicense OR Apache-2.0)" + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz", + "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==", + "dev": true }, "node_modules/@smithy/abort-controller": { "version": "3.1.9", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.9.tgz", + "integrity": "sha512-yiW0WI30zj8ZKoSYNx90no7ugVn3khlyH/z5W8qtKBtVE6awRALbhSG+2SAHA1r6bO/6M9utxYKVZ3PCJ1rWxw==", "dependencies": { "@smithy/types": "^3.7.2", "tslib": "^2.6.2" @@ -7702,7 +9925,8 @@ }, "node_modules/@smithy/abort-controller/node_modules/@smithy/types": { "version": "3.7.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.7.2.tgz", + "integrity": "sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg==", "dependencies": { "tslib": "^2.6.2" }, @@ -7712,7 +9936,8 @@ }, "node_modules/@smithy/chunked-blob-reader": { "version": "5.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.0.0.tgz", + "integrity": "sha512-+sKqDBQqb036hh4NPaUiEkYFkTUGYzRsn3EuFhyfQfMy6oGHEUJDurLP9Ufb5dasr/XiAmPNMr6wa9afjQB+Gw==", "dependencies": { "tslib": "^2.6.2" }, @@ -7722,7 +9947,8 @@ }, "node_modules/@smithy/chunked-blob-reader-native": { "version": "4.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.0.0.tgz", + "integrity": "sha512-R9wM2yPmfEMsUmlMlIgSzOyICs0x9uu7UTHoccMyt7BWw8shcGM8HqB355+BZCPBcySvbTYMs62EgEQkNxz2ig==", "dependencies": { "@smithy/util-base64": "^4.0.0", "tslib": "^2.6.2" @@ -7733,7 +9959,8 @@ }, "node_modules/@smithy/config-resolver": { "version": "4.1.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.1.4.tgz", + "integrity": "sha512-prmU+rDddxHOH0oNcwemL+SwnzcG65sBF2yXRO7aeXIn/xTlq2pX7JLVbkBnVLowHLg4/OL4+jBmv9hVrVGS+w==", "dependencies": { "@smithy/node-config-provider": "^4.1.3", "@smithy/types": "^4.3.1", @@ -7747,7 +9974,8 @@ }, "node_modules/@smithy/config-resolver/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -7757,7 +9985,8 @@ }, "node_modules/@smithy/core": { "version": "3.6.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.6.0.tgz", + "integrity": "sha512-Pgvfb+TQ4wUNLyHzvgCP4aYZMh16y7GcfF59oirRHcgGgkH1e/s9C0nv/v3WP+Quymyr5je71HeFQCwh+44XLg==", "dependencies": { "@smithy/middleware-serde": "^4.0.8", "@smithy/protocol-http": "^5.1.2", @@ -7775,7 +10004,8 @@ }, "node_modules/@smithy/core/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -7785,7 +10015,8 @@ }, "node_modules/@smithy/credential-provider-imds": { "version": "4.0.6", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.6.tgz", + "integrity": "sha512-hKMWcANhUiNbCJouYkZ9V3+/Qf9pteR1dnwgdyzR09R4ODEYx8BbUysHwRSyex4rZ9zapddZhLFTnT4ZijR4pw==", "dependencies": { "@smithy/node-config-provider": "^4.1.3", "@smithy/property-provider": "^4.0.4", @@ -7799,7 +10030,8 @@ }, "node_modules/@smithy/credential-provider-imds/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -7809,7 +10041,8 @@ }, "node_modules/@smithy/eventstream-codec": { "version": "4.0.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.0.4.tgz", + "integrity": "sha512-7XoWfZqWb/QoR/rAU4VSi0mWnO2vu9/ltS6JZ5ZSZv0eovLVfDfu0/AX4ub33RsJTOth3TiFWSHS5YdztvFnig==", "dependencies": { "@aws-crypto/crc32": "5.2.0", "@smithy/types": "^4.3.1", @@ -7822,7 +10055,8 @@ }, "node_modules/@smithy/eventstream-codec/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -7832,7 +10066,8 @@ }, "node_modules/@smithy/eventstream-serde-browser": { "version": "4.0.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.0.4.tgz", + "integrity": "sha512-3fb/9SYaYqbpy/z/H3yIi0bYKyAa89y6xPmIqwr2vQiUT2St+avRt8UKwsWt9fEdEasc5d/V+QjrviRaX1JRFA==", "dependencies": { "@smithy/eventstream-serde-universal": "^4.0.4", "@smithy/types": "^4.3.1", @@ -7844,7 +10079,8 @@ }, "node_modules/@smithy/eventstream-serde-browser/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -7854,7 +10090,8 @@ }, "node_modules/@smithy/eventstream-serde-config-resolver": { "version": "4.1.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.1.2.tgz", + "integrity": "sha512-JGtambizrWP50xHgbzZI04IWU7LdI0nh/wGbqH3sJesYToMi2j/DcoElqyOcqEIG/D4tNyxgRuaqBXWE3zOFhQ==", "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -7865,7 +10102,8 @@ }, "node_modules/@smithy/eventstream-serde-config-resolver/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -7875,7 +10113,8 @@ }, "node_modules/@smithy/eventstream-serde-node": { "version": "4.0.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.0.4.tgz", + "integrity": "sha512-RD6UwNZ5zISpOWPuhVgRz60GkSIp0dy1fuZmj4RYmqLVRtejFqQ16WmfYDdoSoAjlp1LX+FnZo+/hkdmyyGZ1w==", "dependencies": { "@smithy/eventstream-serde-universal": "^4.0.4", "@smithy/types": "^4.3.1", @@ -7887,7 +10126,8 @@ }, "node_modules/@smithy/eventstream-serde-node/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -7897,7 +10137,8 @@ }, "node_modules/@smithy/eventstream-serde-universal": { "version": "4.0.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.0.4.tgz", + "integrity": "sha512-UeJpOmLGhq1SLox79QWw/0n2PFX+oPRE1ZyRMxPIaFEfCqWaqpB7BU9C8kpPOGEhLF7AwEqfFbtwNxGy4ReENA==", "dependencies": { "@smithy/eventstream-codec": "^4.0.4", "@smithy/types": "^4.3.1", @@ -7909,7 +10150,8 @@ }, "node_modules/@smithy/eventstream-serde-universal/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -7919,7 +10161,8 @@ }, "node_modules/@smithy/fetch-http-handler": { "version": "5.0.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.4.tgz", + "integrity": "sha512-AMtBR5pHppYMVD7z7G+OlHHAcgAN7v0kVKEpHuTO4Gb199Gowh0taYi9oDStFeUhetkeP55JLSVlTW1n9rFtUw==", "dependencies": { "@smithy/protocol-http": "^5.1.2", "@smithy/querystring-builder": "^4.0.4", @@ -7933,7 +10176,8 @@ }, "node_modules/@smithy/fetch-http-handler/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -7943,7 +10187,8 @@ }, "node_modules/@smithy/hash-blob-browser": { "version": "4.0.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.0.4.tgz", + "integrity": "sha512-WszRiACJiQV3QG6XMV44i5YWlkrlsM5Yxgz4jvsksuu7LDXA6wAtypfPajtNTadzpJy3KyJPoWehYpmZGKUFIQ==", "dependencies": { "@smithy/chunked-blob-reader": "^5.0.0", "@smithy/chunked-blob-reader-native": "^4.0.0", @@ -7956,7 +10201,8 @@ }, "node_modules/@smithy/hash-blob-browser/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -7966,7 +10212,8 @@ }, "node_modules/@smithy/hash-node": { "version": "4.0.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.4.tgz", + "integrity": "sha512-qnbTPUhCVnCgBp4z4BUJUhOEkVwxiEi1cyFM+Zj6o+aY8OFGxUQleKWq8ltgp3dujuhXojIvJWdoqpm6dVO3lQ==", "dependencies": { "@smithy/types": "^4.3.1", "@smithy/util-buffer-from": "^4.0.0", @@ -7979,7 +10226,8 @@ }, "node_modules/@smithy/hash-node/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -7989,7 +10237,8 @@ }, "node_modules/@smithy/hash-stream-node": { "version": "4.0.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.0.4.tgz", + "integrity": "sha512-wHo0d8GXyVmpmMh/qOR0R7Y46/G1y6OR8U+bSTB4ppEzRxd1xVAQ9xOE9hOc0bSjhz0ujCPAbfNLkLrpa6cevg==", "dependencies": { "@smithy/types": "^4.3.1", "@smithy/util-utf8": "^4.0.0", @@ -8001,7 +10250,8 @@ }, "node_modules/@smithy/hash-stream-node/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -8011,7 +10261,8 @@ }, "node_modules/@smithy/invalid-dependency": { "version": "4.0.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.4.tgz", + "integrity": "sha512-bNYMi7WKTJHu0gn26wg8OscncTt1t2b8KcsZxvOv56XA6cyXtOAAAaNP7+m45xfppXfOatXF3Sb1MNsLUgVLTw==", "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -8022,7 +10273,8 @@ }, "node_modules/@smithy/invalid-dependency/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -8032,7 +10284,8 @@ }, "node_modules/@smithy/is-array-buffer": { "version": "4.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz", + "integrity": "sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==", "dependencies": { "tslib": "^2.6.2" }, @@ -8042,7 +10295,8 @@ }, "node_modules/@smithy/md5-js": { "version": "4.0.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.0.4.tgz", + "integrity": "sha512-uGLBVqcOwrLvGh/v/jw423yWHq/ofUGK1W31M2TNspLQbUV1Va0F5kTxtirkoHawODAZcjXTSGi7JwbnPcDPJg==", "dependencies": { "@smithy/types": "^4.3.1", "@smithy/util-utf8": "^4.0.0", @@ -8054,7 +10308,8 @@ }, "node_modules/@smithy/md5-js/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -8064,7 +10319,8 @@ }, "node_modules/@smithy/middleware-content-length": { "version": "4.0.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.4.tgz", + "integrity": "sha512-F7gDyfI2BB1Kc+4M6rpuOLne5LOcEknH1n6UQB69qv+HucXBR1rkzXBnQTB2q46sFy1PM/zuSJOB532yc8bg3w==", "dependencies": { "@smithy/protocol-http": "^5.1.2", "@smithy/types": "^4.3.1", @@ -8076,7 +10332,8 @@ }, "node_modules/@smithy/middleware-content-length/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -8086,7 +10343,8 @@ }, "node_modules/@smithy/middleware-endpoint": { "version": "4.1.13", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.13.tgz", + "integrity": "sha512-xg3EHV/Q5ZdAO5b0UiIMj3RIOCobuS40pBBODguUDVdko6YK6QIzCVRrHTogVuEKglBWqWenRnZ71iZnLL3ZAQ==", "dependencies": { "@smithy/core": "^3.6.0", "@smithy/middleware-serde": "^4.0.8", @@ -8103,7 +10361,8 @@ }, "node_modules/@smithy/middleware-endpoint/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -8113,7 +10372,8 @@ }, "node_modules/@smithy/middleware-retry": { "version": "4.1.14", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.1.14.tgz", + "integrity": "sha512-eoXaLlDGpKvdmvt+YBfRXE7HmIEtFF+DJCbTPwuLunP0YUnrydl+C4tS+vEM0+nyxXrX3PSUFqC+lP1+EHB1Tw==", "dependencies": { "@smithy/node-config-provider": "^4.1.3", "@smithy/protocol-http": "^5.1.2", @@ -8131,7 +10391,8 @@ }, "node_modules/@smithy/middleware-retry/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -8141,18 +10402,20 @@ }, "node_modules/@smithy/middleware-retry/node_modules/uuid": { "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], - "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/@smithy/middleware-serde": { "version": "4.0.8", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.8.tgz", + "integrity": "sha512-iSSl7HJoJaGyMIoNn2B7czghOVwJ9nD7TMvLhMWeSB5vt0TnEYyRRqPJu/TqW76WScaNvYYB8nRoiBHR9S1Ddw==", "dependencies": { "@smithy/protocol-http": "^5.1.2", "@smithy/types": "^4.3.1", @@ -8164,7 +10427,8 @@ }, "node_modules/@smithy/middleware-serde/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -8174,7 +10438,8 @@ }, "node_modules/@smithy/middleware-stack": { "version": "4.0.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.4.tgz", + "integrity": "sha512-kagK5ggDrBUCCzI93ft6DjteNSfY8Ulr83UtySog/h09lTIOAJ/xUSObutanlPT0nhoHAkpmW9V5K8oPyLh+QA==", "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -8185,7 +10450,8 @@ }, "node_modules/@smithy/middleware-stack/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -8195,7 +10461,8 @@ }, "node_modules/@smithy/node-config-provider": { "version": "4.1.3", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.1.3.tgz", + "integrity": "sha512-HGHQr2s59qaU1lrVH6MbLlmOBxadtzTsoO4c+bF5asdgVik3I8o7JIOzoeqWc5MjVa+vD36/LWE0iXKpNqooRw==", "dependencies": { "@smithy/property-provider": "^4.0.4", "@smithy/shared-ini-file-loader": "^4.0.4", @@ -8208,7 +10475,8 @@ }, "node_modules/@smithy/node-config-provider/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -8218,7 +10486,8 @@ }, "node_modules/@smithy/node-http-handler": { "version": "3.3.3", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.3.3.tgz", + "integrity": "sha512-BrpZOaZ4RCbcJ2igiSNG16S+kgAc65l/2hmxWdmhyoGWHTLlzQzr06PXavJp9OBlPEG/sHlqdxjWmjzV66+BSQ==", "dependencies": { "@smithy/abort-controller": "^3.1.9", "@smithy/protocol-http": "^4.1.8", @@ -8232,7 +10501,8 @@ }, "node_modules/@smithy/node-http-handler/node_modules/@smithy/protocol-http": { "version": "4.1.8", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.8.tgz", + "integrity": "sha512-hmgIAVyxw1LySOwkgMIUN0kjN8TG9Nc85LJeEmEE/cNEe2rkHDUWhnJf2gxcSRFLWsyqWsrZGw40ROjUogg+Iw==", "dependencies": { "@smithy/types": "^3.7.2", "tslib": "^2.6.2" @@ -8243,7 +10513,8 @@ }, "node_modules/@smithy/node-http-handler/node_modules/@smithy/querystring-builder": { "version": "3.0.11", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.11.tgz", + "integrity": "sha512-u+5HV/9uJaeLj5XTb6+IEF/dokWWkEqJ0XiaRRogyREmKGUgZnNecLucADLdauWFKUNbQfulHFEZEdjwEBjXRg==", "dependencies": { "@smithy/types": "^3.7.2", "@smithy/util-uri-escape": "^3.0.0", @@ -8255,7 +10526,8 @@ }, "node_modules/@smithy/node-http-handler/node_modules/@smithy/types": { "version": "3.7.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.7.2.tgz", + "integrity": "sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg==", "dependencies": { "tslib": "^2.6.2" }, @@ -8265,7 +10537,8 @@ }, "node_modules/@smithy/node-http-handler/node_modules/@smithy/util-uri-escape": { "version": "3.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", "dependencies": { "tslib": "^2.6.2" }, @@ -8275,7 +10548,8 @@ }, "node_modules/@smithy/property-provider": { "version": "4.0.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.4.tgz", + "integrity": "sha512-qHJ2sSgu4FqF4U/5UUp4DhXNmdTrgmoAai6oQiM+c5RZ/sbDwJ12qxB1M6FnP+Tn/ggkPZf9ccn4jqKSINaquw==", "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -8286,7 +10560,8 @@ }, "node_modules/@smithy/property-provider/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -8296,7 +10571,8 @@ }, "node_modules/@smithy/protocol-http": { "version": "5.1.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.1.2.tgz", + "integrity": "sha512-rOG5cNLBXovxIrICSBm95dLqzfvxjEmuZx4KK3hWwPFHGdW3lxY0fZNXfv2zebfRO7sJZ5pKJYHScsqopeIWtQ==", "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -8307,7 +10583,8 @@ }, "node_modules/@smithy/protocol-http/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -8317,7 +10594,8 @@ }, "node_modules/@smithy/querystring-builder": { "version": "4.0.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.4.tgz", + "integrity": "sha512-SwREZcDnEYoh9tLNgMbpop+UTGq44Hl9tdj3rf+yeLcfH7+J8OXEBaMc2kDxtyRHu8BhSg9ADEx0gFHvpJgU8w==", "dependencies": { "@smithy/types": "^4.3.1", "@smithy/util-uri-escape": "^4.0.0", @@ -8329,7 +10607,8 @@ }, "node_modules/@smithy/querystring-builder/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -8339,7 +10618,8 @@ }, "node_modules/@smithy/querystring-parser": { "version": "4.0.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.4.tgz", + "integrity": "sha512-6yZf53i/qB8gRHH/l2ZwUG5xgkPgQF15/KxH0DdXMDHjesA9MeZje/853ifkSY0x4m5S+dfDZ+c4x439PF0M2w==", "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -8350,7 +10630,8 @@ }, "node_modules/@smithy/querystring-parser/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -8360,7 +10641,8 @@ }, "node_modules/@smithy/service-error-classification": { "version": "4.0.6", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.6.tgz", + "integrity": "sha512-RRoTDL//7xi4tn5FrN2NzH17jbgmnKidUqd4KvquT0954/i6CXXkh1884jBiunq24g9cGtPBEXlU40W6EpNOOg==", "dependencies": { "@smithy/types": "^4.3.1" }, @@ -8370,7 +10652,8 @@ }, "node_modules/@smithy/service-error-classification/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -8380,7 +10663,8 @@ }, "node_modules/@smithy/shared-ini-file-loader": { "version": "4.0.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.4.tgz", + "integrity": "sha512-63X0260LoFBjrHifPDs+nM9tV0VMkOTl4JRMYNuKh/f5PauSjowTfvF3LogfkWdcPoxsA9UjqEOgjeYIbhb7Nw==", "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -8391,7 +10675,8 @@ }, "node_modules/@smithy/shared-ini-file-loader/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -8401,7 +10686,8 @@ }, "node_modules/@smithy/signature-v4": { "version": "5.1.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.1.2.tgz", + "integrity": "sha512-d3+U/VpX7a60seHziWnVZOHuEgJlclufjkS6zhXvxcJgkJq4UWdH5eOBLzHRMx6gXjsdT9h6lfpmLzbrdupHgQ==", "dependencies": { "@smithy/is-array-buffer": "^4.0.0", "@smithy/protocol-http": "^5.1.2", @@ -8418,7 +10704,8 @@ }, "node_modules/@smithy/signature-v4/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -8428,7 +10715,8 @@ }, "node_modules/@smithy/smithy-client": { "version": "4.4.5", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.4.5.tgz", + "integrity": "sha512-+lynZjGuUFJaMdDYSTMnP/uPBBXXukVfrJlP+1U/Dp5SFTEI++w6NMga8DjOENxecOF71V9Z2DllaVDYRnGlkg==", "dependencies": { "@smithy/core": "^3.6.0", "@smithy/middleware-endpoint": "^4.1.13", @@ -8444,7 +10732,8 @@ }, "node_modules/@smithy/smithy-client/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -8454,7 +10743,8 @@ }, "node_modules/@smithy/types": { "version": "4.2.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.2.0.tgz", + "integrity": "sha512-7eMk09zQKCO+E/ivsjQv+fDlOupcFUCSC/L2YUPgwhvowVGWbPQHjEFcmjt7QQ4ra5lyowS92SV53Zc6XD4+fg==", "dependencies": { "tslib": "^2.6.2" }, @@ -8464,7 +10754,8 @@ }, "node_modules/@smithy/url-parser": { "version": "4.0.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.4.tgz", + "integrity": "sha512-eMkc144MuN7B0TDA4U2fKs+BqczVbk3W+qIvcoCY6D1JY3hnAdCuhCZODC+GAeaxj0p6Jroz4+XMUn3PCxQQeQ==", "dependencies": { "@smithy/querystring-parser": "^4.0.4", "@smithy/types": "^4.3.1", @@ -8476,7 +10767,8 @@ }, "node_modules/@smithy/url-parser/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -8486,7 +10778,8 @@ }, "node_modules/@smithy/util-base64": { "version": "4.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.0.0.tgz", + "integrity": "sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==", "dependencies": { "@smithy/util-buffer-from": "^4.0.0", "@smithy/util-utf8": "^4.0.0", @@ -8498,7 +10791,8 @@ }, "node_modules/@smithy/util-body-length-browser": { "version": "4.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz", + "integrity": "sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==", "dependencies": { "tslib": "^2.6.2" }, @@ -8508,7 +10802,8 @@ }, "node_modules/@smithy/util-body-length-node": { "version": "4.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz", + "integrity": "sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==", "dependencies": { "tslib": "^2.6.2" }, @@ -8518,7 +10813,8 @@ }, "node_modules/@smithy/util-buffer-from": { "version": "4.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz", + "integrity": "sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==", "dependencies": { "@smithy/is-array-buffer": "^4.0.0", "tslib": "^2.6.2" @@ -8529,7 +10825,8 @@ }, "node_modules/@smithy/util-config-provider": { "version": "4.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz", + "integrity": "sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==", "dependencies": { "tslib": "^2.6.2" }, @@ -8539,7 +10836,8 @@ }, "node_modules/@smithy/util-defaults-mode-browser": { "version": "4.0.21", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.21.tgz", + "integrity": "sha512-wM0jhTytgXu3wzJoIqpbBAG5U6BwiubZ6QKzSbP7/VbmF1v96xlAbX2Am/mz0Zep0NLvLh84JT0tuZnk3wmYQA==", "dependencies": { "@smithy/property-provider": "^4.0.4", "@smithy/smithy-client": "^4.4.5", @@ -8553,7 +10851,8 @@ }, "node_modules/@smithy/util-defaults-mode-browser/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -8563,7 +10862,8 @@ }, "node_modules/@smithy/util-defaults-mode-node": { "version": "4.0.21", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.21.tgz", + "integrity": "sha512-/F34zkoU0GzpUgLJydHY8Rxu9lBn8xQC/s/0M0U9lLBkYbA1htaAFjWYJzpzsbXPuri5D1H8gjp2jBum05qBrA==", "dependencies": { "@smithy/config-resolver": "^4.1.4", "@smithy/credential-provider-imds": "^4.0.6", @@ -8579,7 +10879,8 @@ }, "node_modules/@smithy/util-defaults-mode-node/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -8589,7 +10890,8 @@ }, "node_modules/@smithy/util-endpoints": { "version": "3.0.6", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.6.tgz", + "integrity": "sha512-YARl3tFL3WgPuLzljRUnrS2ngLiUtkwhQtj8PAL13XZSyUiNLQxwG3fBBq3QXFqGFUXepIN73pINp3y8c2nBmA==", "dependencies": { "@smithy/node-config-provider": "^4.1.3", "@smithy/types": "^4.3.1", @@ -8601,7 +10903,8 @@ }, "node_modules/@smithy/util-endpoints/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -8611,7 +10914,8 @@ }, "node_modules/@smithy/util-hex-encoding": { "version": "4.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz", + "integrity": "sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==", "dependencies": { "tslib": "^2.6.2" }, @@ -8621,7 +10925,8 @@ }, "node_modules/@smithy/util-middleware": { "version": "4.0.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.4.tgz", + "integrity": "sha512-9MLKmkBmf4PRb0ONJikCbCwORACcil6gUWojwARCClT7RmLzF04hUR4WdRprIXal7XVyrddadYNfp2eF3nrvtQ==", "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -8632,7 +10937,8 @@ }, "node_modules/@smithy/util-middleware/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -8642,7 +10948,8 @@ }, "node_modules/@smithy/util-retry": { "version": "4.0.6", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.6.tgz", + "integrity": "sha512-+YekoF2CaSMv6zKrA6iI/N9yva3Gzn4L6n35Luydweu5MMPYpiGZlWqehPHDHyNbnyaYlz/WJyYAZnC+loBDZg==", "dependencies": { "@smithy/service-error-classification": "^4.0.6", "@smithy/types": "^4.3.1", @@ -8654,7 +10961,8 @@ }, "node_modules/@smithy/util-retry/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -8664,7 +10972,8 @@ }, "node_modules/@smithy/util-stream": { "version": "4.2.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.2.2.tgz", + "integrity": "sha512-aI+GLi7MJoVxg24/3J1ipwLoYzgkB4kUfogZfnslcYlynj3xsQ0e7vk4TnTro9hhsS5PvX1mwmkRqqHQjwcU7w==", "dependencies": { "@smithy/fetch-http-handler": "^5.0.4", "@smithy/node-http-handler": "^4.0.6", @@ -8681,7 +10990,8 @@ }, "node_modules/@smithy/util-stream/node_modules/@smithy/abort-controller": { "version": "4.0.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.4.tgz", + "integrity": "sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA==", "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -8692,7 +11002,8 @@ }, "node_modules/@smithy/util-stream/node_modules/@smithy/node-http-handler": { "version": "4.0.6", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.6.tgz", + "integrity": "sha512-NqbmSz7AW2rvw4kXhKGrYTiJVDHnMsFnX4i+/FzcZAfbOBauPYs2ekuECkSbtqaxETLLTu9Rl/ex6+I2BKErPA==", "dependencies": { "@smithy/abort-controller": "^4.0.4", "@smithy/protocol-http": "^5.1.2", @@ -8706,7 +11017,8 @@ }, "node_modules/@smithy/util-stream/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -8716,7 +11028,8 @@ }, "node_modules/@smithy/util-uri-escape": { "version": "4.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz", + "integrity": "sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==", "dependencies": { "tslib": "^2.6.2" }, @@ -8726,7 +11039,8 @@ }, "node_modules/@smithy/util-utf8": { "version": "4.0.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz", + "integrity": "sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==", "dependencies": { "@smithy/util-buffer-from": "^4.0.0", "tslib": "^2.6.2" @@ -8737,7 +11051,8 @@ }, "node_modules/@smithy/util-waiter": { "version": "4.0.6", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.0.6.tgz", + "integrity": "sha512-slcr1wdRbX7NFphXZOxtxRNA7hXAAtJAXJDE/wdoMAos27SIquVCKiSqfB6/28YzQ8FCsB5NKkhdM5gMADbqxg==", "dependencies": { "@smithy/abort-controller": "^4.0.4", "@smithy/types": "^4.3.1", @@ -8749,7 +11064,8 @@ }, "node_modules/@smithy/util-waiter/node_modules/@smithy/abort-controller": { "version": "4.0.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.4.tgz", + "integrity": "sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA==", "dependencies": { "@smithy/types": "^4.3.1", "tslib": "^2.6.2" @@ -8760,7 +11076,8 @@ }, "node_modules/@smithy/util-waiter/node_modules/@smithy/types": { "version": "4.3.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", "dependencies": { "tslib": "^2.6.2" }, @@ -8770,7 +11087,8 @@ }, "node_modules/@szmarczak/http-timer": { "version": "4.0.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", "dependencies": { "defer-to-connect": "^2.0.0" }, @@ -8780,49 +11098,68 @@ }, "node_modules/@tootallnate/quickjs-emscripten": { "version": "0.23.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "dev": true }, "node_modules/@tsconfig/node10": { "version": "1.0.11", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true }, "node_modules/@tsconfig/node12": { "version": "1.0.11", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true }, "node_modules/@tsconfig/node14": { "version": "1.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true }, "node_modules/@tsconfig/node16": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, + "node_modules/@tybys/wasm-util": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", + "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } }, "node_modules/@types/adm-zip": { "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@types/adm-zip/-/adm-zip-0.5.7.tgz", + "integrity": "sha512-DNEs/QvmyRLurdQPChqq0Md4zGvPwHerAJYWk9l2jCbD1VPpnzRJorOdiq4zsw09NFbYnhfsoEhWtxIzXpn2yw==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/archiver": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/archiver/-/archiver-6.0.3.tgz", + "integrity": "sha512-a6wUll6k3zX6qs5KlxIggs1P1JcYJaTCx2gnlr+f0S1yd2DoaEwoIK10HmBaLnZwWneBz+JBm0dwcZu0zECBcQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/readdir-glob": "*" } }, "node_modules/@types/babel__core": { "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", @@ -8833,16 +11170,18 @@ }, "node_modules/@types/babel__generator": { "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, - "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" @@ -8850,15 +11189,17 @@ }, "node_modules/@types/babel__traverse": { "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", + "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.20.7" } }, "node_modules/@types/body-parser": { "version": "1.19.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -8866,14 +11207,16 @@ }, "node_modules/@types/bonjour": { "version": "3.5.13", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/cacheable-request": { "version": "6.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", "dependencies": { "@types/http-cache-semantics": "*", "@types/keyv": "^3.1.4", @@ -8883,27 +11226,31 @@ }, "node_modules/@types/chai": { "version": "4.3.20", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz", + "integrity": "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==", + "dev": true }, "node_modules/@types/chai-as-promised": { "version": "7.1.8", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz", + "integrity": "sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==", "dev": true, - "license": "MIT", "dependencies": { "@types/chai": "*" } }, "node_modules/@types/connect": { "version": "3.4.38", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect-history-api-fallback": { "version": "1.5.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", "dependencies": { "@types/express-serve-static-core": "*", "@types/node": "*" @@ -8911,29 +11258,40 @@ }, "node_modules/@types/conventional-commits-parser": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/conventional-commits-parser/-/conventional-commits-parser-5.0.1.tgz", + "integrity": "sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/cross-spawn": { "version": "6.0.6", + "resolved": "https://registry.npmjs.org/@types/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/diff": { "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/diff/-/diff-7.0.2.tgz", + "integrity": "sha512-JSWRMozjFKsGlEjiiKajUjIJVKuKdE3oVy2DNtK+fUo8q82nhFZ2CPQwicAIkXrofahDXrWJ7mjelvZphMS98Q==", + "dev": true + }, + "node_modules/@types/encoding-japanese": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@types/encoding-japanese/-/encoding-japanese-2.2.1.tgz", + "integrity": "sha512-6jjepuTusvySxMLP7W6usamlbgf0F4sIDvm7EzYePjLHY7zWUv4yz2PLUnu0vuNVtXOTLu2cRdFcDg40J5Owsw==", "dev": true, "license": "MIT" }, "node_modules/@types/eslint": { "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", "devOptional": true, - "license": "MIT", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -8941,8 +11299,9 @@ }, "node_modules/@types/eslint-scope": { "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "devOptional": true, - "license": "MIT", "dependencies": { "@types/eslint": "*", "@types/estree": "*" @@ -8950,12 +11309,14 @@ }, "node_modules/@types/estree": { "version": "1.0.8", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "devOptional": true }, "node_modules/@types/express": { "version": "4.17.23", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz", + "integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -8965,7 +11326,8 @@ }, "node_modules/@types/express-serve-static-core": { "version": "4.19.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", + "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -8975,65 +11337,75 @@ }, "node_modules/@types/graceful-fs": { "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/html-minifier-terser": { "version": "6.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true }, "node_modules/@types/http-cache-semantics": { "version": "4.0.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==" }, "node_modules/@types/http-errors": { "version": "2.0.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==" }, "node_modules/@types/http-proxy": { "version": "1.17.16", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", + "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/ignore-walk": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/ignore-walk/-/ignore-walk-4.0.3.tgz", + "integrity": "sha512-6V7wDsk0nz8LtRC7qeC0GfXadFLT4FdCtVbXhxoIGRdkn2kLr20iMLupRGiBhlZ79WWWqaObIdR3nkXfUrBPdQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, - "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/jest": { "version": "29.5.14", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", + "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", "dev": true, - "license": "MIT", "dependencies": { "expect": "^29.0.0", "pretty-format": "^29.0.0" @@ -9041,8 +11413,9 @@ }, "node_modules/@types/jsdom": { "version": "21.1.7", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-21.1.7.tgz", + "integrity": "sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*", "@types/tough-cookie": "*", @@ -9051,16 +11424,19 @@ }, "node_modules/@types/json-schema": { "version": "7.0.15", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, "node_modules/@types/json5": { "version": "0.0.29", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true }, "node_modules/@types/keyv": { "version": "3.1.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", "dependencies": { "@types/node": "*" } @@ -9073,83 +11449,97 @@ }, "node_modules/@types/lokijs": { "version": "1.5.14", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/lokijs/-/lokijs-1.5.14.tgz", + "integrity": "sha512-4Fic47BX3Qxr8pd12KT6/T1XWU8dOlJBIp1jGoMbaDbiEvdv50rAii+B3z1b/J2pvMywcVP+DBPGP5/lgLOKGA==", + "dev": true }, "node_modules/@types/mime": { "version": "1.3.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" }, "node_modules/@types/mocha": { "version": "10.0.10", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", + "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", + "dev": true }, "node_modules/@types/mock-fs": { "version": "4.13.4", + "resolved": "https://registry.npmjs.org/@types/mock-fs/-/mock-fs-4.13.4.tgz", + "integrity": "sha512-mXmM0o6lULPI8z3XNnQCpL0BGxPwx1Ul1wXYEPBGl4efShyxW2Rln0JOPEWGyZaYZMM6OVXM/15zUuFMY52ljg==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/mute-stream": { "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz", + "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/node": { - "version": "22.15.33", - "license": "MIT", + "version": "22.15.34", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.34.tgz", + "integrity": "sha512-8Y6E5WUupYy1Dd0II32BsWAx5MWdcnRd8L84Oys3veg1YrYtNtzgO4CFhiBg6MDSjk7Ay36HYOnU7/tuOzIzcw==", "dependencies": { "undici-types": "~6.21.0" } }, "node_modules/@types/node-forge": { "version": "1.3.11", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/normalize-package-data": { "version": "2.4.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true }, "node_modules/@types/qs": { "version": "6.14.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==" }, "node_modules/@types/range-parser": { "version": "1.2.7", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" }, "node_modules/@types/readdir-glob": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@types/readdir-glob/-/readdir-glob-1.1.5.tgz", + "integrity": "sha512-raiuEPUYqXu+nvtY2Pe8s8FEmZ3x5yAH4VkLdihcPdalvsHltomrRC9BzuStrJ9yk06470hS0Crw0f1pXqD+Hg==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/responselike": { "version": "1.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/retry": { "version": "0.12.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==" }, "node_modules/@types/send": { "version": "0.17.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", + "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -9157,14 +11547,16 @@ }, "node_modules/@types/serve-index": { "version": "1.9.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", "dependencies": { "@types/express": "*" } }, "node_modules/@types/serve-static": { "version": "1.15.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz", + "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==", "dependencies": { "@types/http-errors": "*", "@types/node": "*", @@ -9173,16 +11565,18 @@ }, "node_modules/@types/sinon": { "version": "17.0.4", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-17.0.4.tgz", + "integrity": "sha512-RHnIrhfPO3+tJT0s7cFaXGZvsL4bbR3/k7z3P312qMS4JaS2Tk+KiwiLx1S0rQ56ERj00u1/BtdyVd0FY+Pdew==", "dev": true, - "license": "MIT", "dependencies": { "@types/sinonjs__fake-timers": "*" } }, "node_modules/@types/sinon-chai": { "version": "3.2.12", + "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-3.2.12.tgz", + "integrity": "sha512-9y0Gflk3b0+NhQZ/oxGtaAJDvRywCa5sIyaVnounqLvmf93yBF4EgIRspePtkMs3Tr844nCclYMlcCNmLCvjuQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/chai": "*", "@types/sinon": "*" @@ -9190,86 +11584,110 @@ }, "node_modules/@types/sinonjs__fake-timers": { "version": "8.1.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz", + "integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==", + "dev": true }, "node_modules/@types/sockjs": { "version": "0.3.36", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/stack-utils": { "version": "2.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true }, "node_modules/@types/tough-cookie": { "version": "4.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "dev": true }, "node_modules/@types/uuid": { "version": "9.0.8", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==" }, "node_modules/@types/vscode": { "version": "1.101.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.101.0.tgz", + "integrity": "sha512-ZWf0IWa+NGegdW3iU42AcDTFHWW7fApLdkdnBqwYEtHVIBGbTu0ZNQKP/kX3Ds/uMJXIMQNAojHR4vexCEEz5Q==", + "dev": true }, "node_modules/@types/which": { "version": "2.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/which/-/which-2.0.2.tgz", + "integrity": "sha512-113D3mDkZDjo+EeUEHCFy0qniNc1ZpecGiAU7WSo7YDoSzolZIQKpYFHrPpjkB2nuyahcKfrmLXeQlh7gqJYdw==", + "dev": true }, "node_modules/@types/wrap-ansi": { "version": "3.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz", + "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==", + "dev": true }, "node_modules/@types/ws": { "version": "8.18.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/xml2js": { "version": "0.4.14", + "resolved": "https://registry.npmjs.org/@types/xml2js/-/xml2js-0.4.14.tgz", + "integrity": "sha512-4YnrRemBShWRO2QjvUin8ESA41rH+9nQGLUGZV/1IDhi3SL9OhdpNC/MrulTWuptXKwhx/aDxE7toV0f/ypIXQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yargs": { "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dev": true, - "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { "version": "21.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true }, "node_modules/@types/yauzl": { "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "@types/node": "*" } }, + "node_modules/@types/yauzl-promise": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/yauzl-promise/-/yauzl-promise-4.0.1.tgz", + "integrity": "sha512-qYEC3rJwqiJpdQ9b+bPNeuSY0c3JUM8vIuDy08qfuVN7xHm3ZDsHn2kGphUIB0ruEXrPGNXZ64nMUcu4fDjViQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "8.35.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.35.0.tgz", + "integrity": "sha512-ijItUYaiWuce0N1SoSMrEd0b6b6lYkYt99pqCPfybd+HKVXtEvYhICfLdwp42MhiI5mp0oq7PKEL+g1cNiz/Eg==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.35.0", @@ -9296,8 +11714,9 @@ }, "node_modules/@typescript-eslint/parser": { "version": "8.35.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.35.0.tgz", + "integrity": "sha512-6sMvZePQrnZH2/cJkwRpkT7DxoAWh+g6+GFRK6bV3YQo7ogi3SX5rgF6099r5Q53Ma5qeT7LGmOmuIutF4t3lA==", "dev": true, - "license": "MIT", "dependencies": { "@typescript-eslint/scope-manager": "8.35.0", "@typescript-eslint/types": "8.35.0", @@ -9319,8 +11738,9 @@ }, "node_modules/@typescript-eslint/project-service": { "version": "8.35.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.35.0.tgz", + "integrity": "sha512-41xatqRwWZuhUMF/aZm2fcUsOFKNcG28xqRSS6ZVr9BVJtGExosLAm5A1OxTjRMagx8nJqva+P5zNIGt8RIgbQ==", "dev": true, - "license": "MIT", "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.35.0", "@typescript-eslint/types": "^8.35.0", @@ -9339,8 +11759,9 @@ }, "node_modules/@typescript-eslint/scope-manager": { "version": "8.35.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.35.0.tgz", + "integrity": "sha512-+AgL5+mcoLxl1vGjwNfiWq5fLDZM1TmTPYs2UkyHfFhgERxBbqHlNjRzhThJqz+ktBqTChRYY6zwbMwy0591AA==", "dev": true, - "license": "MIT", "dependencies": { "@typescript-eslint/types": "8.35.0", "@typescript-eslint/visitor-keys": "8.35.0" @@ -9355,8 +11776,9 @@ }, "node_modules/@typescript-eslint/tsconfig-utils": { "version": "8.35.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.35.0.tgz", + "integrity": "sha512-04k/7247kZzFraweuEirmvUj+W3bJLI9fX6fbo1Qm2YykuBvEhRTPl8tcxlYO8kZZW+HIXfkZNoasVb8EV4jpA==", "dev": true, - "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -9370,8 +11792,9 @@ }, "node_modules/@typescript-eslint/type-utils": { "version": "8.35.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.35.0.tgz", + "integrity": "sha512-ceNNttjfmSEoM9PW87bWLDEIaLAyR+E6BoYJQ5PfaDau37UGca9Nyq3lBk8Bw2ad0AKvYabz6wxc7DMTO2jnNA==", "dev": true, - "license": "MIT", "dependencies": { "@typescript-eslint/typescript-estree": "8.35.0", "@typescript-eslint/utils": "8.35.0", @@ -9392,8 +11815,9 @@ }, "node_modules/@typescript-eslint/types": { "version": "8.35.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.35.0.tgz", + "integrity": "sha512-0mYH3emanku0vHw2aRLNGqe7EXh9WHEhi7kZzscrMDf6IIRUQ5Jk4wp1QrledE/36KtdZrVfKnE32eZCf/vaVQ==", "dev": true, - "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -9404,8 +11828,9 @@ }, "node_modules/@typescript-eslint/typescript-estree": { "version": "8.35.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.35.0.tgz", + "integrity": "sha512-F+BhnaBemgu1Qf8oHrxyw14wq6vbL8xwWKKMwTMwYIRmFFY/1n/9T/jpbobZL8vp7QyEUcC6xGrnAO4ua8Kp7w==", "dev": true, - "license": "MIT", "dependencies": { "@typescript-eslint/project-service": "8.35.0", "@typescript-eslint/tsconfig-utils": "8.35.0", @@ -9431,8 +11856,9 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -9442,8 +11868,9 @@ }, "node_modules/@typescript-eslint/utils": { "version": "8.35.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.35.0.tgz", + "integrity": "sha512-nqoMu7WWM7ki5tPgLVsmPM8CkqtoPUG6xXGeefM5t4x3XumOEKMoUZPdi+7F+/EotukN4R9OWdmDxN80fqoZeg==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", "@typescript-eslint/scope-manager": "8.35.0", @@ -9464,8 +11891,9 @@ }, "node_modules/@typescript-eslint/visitor-keys": { "version": "8.35.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.35.0.tgz", + "integrity": "sha512-zTh2+1Y8ZpmeQaQVIc/ZZxsx8UzgKJyNg1PTvjzC7WMhPSVS8bfDX34k1SrwOf016qd5RU3az2UxUNue3IfQ5g==", "dev": true, - "license": "MIT", "dependencies": { "@typescript-eslint/types": "8.35.0", "eslint-visitor-keys": "^4.2.1" @@ -9480,8 +11908,9 @@ }, "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, - "license": "Apache-2.0", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -9491,13 +11920,15 @@ }, "node_modules/@ungap/structured-clone": { "version": "1.3.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true }, "node_modules/@vitest/pretty-format": { "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.9.tgz", + "integrity": "sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==", "dev": true, - "license": "MIT", "dependencies": { "tinyrainbow": "^1.2.0" }, @@ -9507,8 +11938,9 @@ }, "node_modules/@vitest/snapshot": { "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.9.tgz", + "integrity": "sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==", "dev": true, - "license": "MIT", "dependencies": { "@vitest/pretty-format": "2.1.9", "magic-string": "^0.30.12", @@ -9520,8 +11952,9 @@ }, "node_modules/@wdio/cli": { "version": "9.16.2", + "resolved": "https://registry.npmjs.org/@wdio/cli/-/cli-9.16.2.tgz", + "integrity": "sha512-mb17CsZ+mM5WBSDA3/Nx0snCitqTWyRVzRfTjP1yOMMgVmc6toZ8b7Nfbv30nvn/bZiZ/jQFAL2SyafpJEMYcw==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "^20.1.1", "@vitest/snapshot": "^2.1.1", @@ -9556,17 +11989,19 @@ } }, "node_modules/@wdio/cli/node_modules/@types/node": { - "version": "20.19.1", + "version": "20.19.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.2.tgz", + "integrity": "sha512-9pLGGwdzOUBDYi0GNjM97FIA+f92fqSke6joWeBjWXllfNxZBs7qeMF7tvtOIsbY45xkWkxrdwUfUf3MnQa9gA==", "dev": true, - "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, "node_modules/@wdio/cli/node_modules/execa": { "version": "9.6.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.0.tgz", + "integrity": "sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==", "dev": true, - "license": "MIT", "dependencies": { "@sindresorhus/merge-streams": "^4.0.0", "cross-spawn": "^7.0.6", @@ -9590,8 +12025,9 @@ }, "node_modules/@wdio/cli/node_modules/get-stream": { "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", "dev": true, - "license": "MIT", "dependencies": { "@sec-ant/readable-stream": "^0.4.1", "is-stream": "^4.0.1" @@ -9605,16 +12041,18 @@ }, "node_modules/@wdio/cli/node_modules/human-signals": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", + "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=18.18.0" } }, "node_modules/@wdio/cli/node_modules/is-plain-obj": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -9624,8 +12062,9 @@ }, "node_modules/@wdio/cli/node_modules/is-stream": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", "dev": true, - "license": "MIT", "engines": { "node": ">=18" }, @@ -9635,8 +12074,9 @@ }, "node_modules/@wdio/cli/node_modules/npm-run-path": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", "dev": true, - "license": "MIT", "dependencies": { "path-key": "^4.0.0", "unicorn-magic": "^0.3.0" @@ -9650,8 +12090,9 @@ }, "node_modules/@wdio/cli/node_modules/path-key": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -9661,8 +12102,9 @@ }, "node_modules/@wdio/cli/node_modules/strip-final-newline": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", "dev": true, - "license": "MIT", "engines": { "node": ">=18" }, @@ -9672,8 +12114,9 @@ }, "node_modules/@wdio/cli/node_modules/unicorn-magic": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", "dev": true, - "license": "MIT", "engines": { "node": ">=18" }, @@ -9683,8 +12126,9 @@ }, "node_modules/@wdio/config": { "version": "9.16.2", + "resolved": "https://registry.npmjs.org/@wdio/config/-/config-9.16.2.tgz", + "integrity": "sha512-a7zDSNzpGgkb6mWrg9GWPmvh/sZFzaf86/iBjCv+n2DTY0+8v8NLruRQmWuCaQAlLVhM3XAqmB+fWLqxDhdvOA==", "dev": true, - "license": "MIT", "dependencies": { "@wdio/logger": "9.16.2", "@wdio/types": "9.16.2", @@ -9699,8 +12143,9 @@ }, "node_modules/@wdio/dot-reporter": { "version": "9.16.2", + "resolved": "https://registry.npmjs.org/@wdio/dot-reporter/-/dot-reporter-9.16.2.tgz", + "integrity": "sha512-JzFegviZdpzgvt8w8uwI0pyJguIuJzfzlkkyWz1WUoqtilH4yrf5IYKzObnm3peh7iQ/y2J1SSeAjKr0Hr5xTg==", "dev": true, - "license": "MIT", "dependencies": { "@wdio/reporter": "9.16.2", "@wdio/types": "9.16.2", @@ -9712,8 +12157,9 @@ }, "node_modules/@wdio/globals": { "version": "9.16.2", + "resolved": "https://registry.npmjs.org/@wdio/globals/-/globals-9.16.2.tgz", + "integrity": "sha512-PBPBfNPIVC76g6IXadZQeqo6TwjVnfCW31PBVgYsTuhb1MB2wQi00rkBP8JFndr7C0Lhyce+gdIJl6VXURO0FA==", "dev": true, - "license": "MIT", "engines": { "node": ">=18.20.0" }, @@ -9732,8 +12178,9 @@ }, "node_modules/@wdio/local-runner": { "version": "9.16.2", + "resolved": "https://registry.npmjs.org/@wdio/local-runner/-/local-runner-9.16.2.tgz", + "integrity": "sha512-ChHTXXknq8hDXhyMjjtWiPqsXenyvxrHqqgq3zDI8EXuGNjVfG6/CzcKXyry7LBXq2Bu78LoymKfvoLdZu+7JQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "^20.1.0", "@wdio/logger": "9.16.2", @@ -9750,17 +12197,19 @@ } }, "node_modules/@wdio/local-runner/node_modules/@types/node": { - "version": "20.19.1", + "version": "20.19.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.2.tgz", + "integrity": "sha512-9pLGGwdzOUBDYi0GNjM97FIA+f92fqSke6joWeBjWXllfNxZBs7qeMF7tvtOIsbY45xkWkxrdwUfUf3MnQa9gA==", "dev": true, - "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, "node_modules/@wdio/logger": { "version": "9.16.2", + "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-9.16.2.tgz", + "integrity": "sha512-6A1eVpNPToWupLIo8CXStth4HJGTfxKsAiKtwE0xQFKyDM8uPTm3YO3Nf15vCSHbmsncbYVEo7QrUwRUEB4YUg==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^5.1.2", "loglevel": "^1.6.0", @@ -9773,8 +12222,9 @@ }, "node_modules/@wdio/logger/node_modules/ansi-regex": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -9784,8 +12234,9 @@ }, "node_modules/@wdio/logger/node_modules/strip-ansi": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -9798,8 +12249,9 @@ }, "node_modules/@wdio/mocha-framework": { "version": "9.16.2", + "resolved": "https://registry.npmjs.org/@wdio/mocha-framework/-/mocha-framework-9.16.2.tgz", + "integrity": "sha512-t+SxdS539Gy0iYudmCWV8FSDGQLdTKR8dnYTaPePCGXI3kkeh95h9ODloLOITOi/ndjLe5vsFH/Vd5rBr12rFA==", "dev": true, - "license": "MIT", "dependencies": { "@types/mocha": "^10.0.6", "@types/node": "^20.11.28", @@ -9813,17 +12265,19 @@ } }, "node_modules/@wdio/mocha-framework/node_modules/@types/node": { - "version": "20.19.1", + "version": "20.19.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.2.tgz", + "integrity": "sha512-9pLGGwdzOUBDYi0GNjM97FIA+f92fqSke6joWeBjWXllfNxZBs7qeMF7tvtOIsbY45xkWkxrdwUfUf3MnQa9gA==", "dev": true, - "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, "node_modules/@wdio/mocha-framework/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -9836,8 +12290,9 @@ }, "node_modules/@wdio/mocha-framework/node_modules/chokidar": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, - "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -9859,8 +12314,9 @@ }, "node_modules/@wdio/mocha-framework/node_modules/cliui": { "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -9869,21 +12325,24 @@ }, "node_modules/@wdio/mocha-framework/node_modules/diff": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, "node_modules/@wdio/mocha-framework/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/@wdio/mocha-framework/node_modules/find-up": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -9897,8 +12356,10 @@ }, "node_modules/@wdio/mocha-framework/node_modules/glob": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -9915,8 +12376,9 @@ }, "node_modules/@wdio/mocha-framework/node_modules/glob-parent": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -9926,8 +12388,9 @@ }, "node_modules/@wdio/mocha-framework/node_modules/locate-path": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -9940,8 +12403,9 @@ }, "node_modules/@wdio/mocha-framework/node_modules/minimatch": { "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -9951,8 +12415,9 @@ }, "node_modules/@wdio/mocha-framework/node_modules/mocha": { "version": "10.8.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", + "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", "dev": true, - "license": "MIT", "dependencies": { "ansi-colors": "^4.1.3", "browser-stdout": "^1.3.1", @@ -9985,8 +12450,9 @@ }, "node_modules/@wdio/mocha-framework/node_modules/p-locate": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -9999,16 +12465,18 @@ }, "node_modules/@wdio/mocha-framework/node_modules/path-exists": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@wdio/mocha-framework/node_modules/picomatch": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8.6" }, @@ -10018,8 +12486,9 @@ }, "node_modules/@wdio/mocha-framework/node_modules/readdirp": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -10029,8 +12498,9 @@ }, "node_modules/@wdio/mocha-framework/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -10042,8 +12512,9 @@ }, "node_modules/@wdio/mocha-framework/node_modules/supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -10056,13 +12527,15 @@ }, "node_modules/@wdio/mocha-framework/node_modules/workerpool": { "version": "6.5.1", - "dev": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "dev": true }, "node_modules/@wdio/mocha-framework/node_modules/wrap-ansi": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -10077,8 +12550,9 @@ }, "node_modules/@wdio/mocha-framework/node_modules/yargs": { "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, - "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -10094,21 +12568,24 @@ }, "node_modules/@wdio/mocha-framework/node_modules/yargs-parser": { "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, - "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/@wdio/protocols": { "version": "9.16.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-9.16.2.tgz", + "integrity": "sha512-h3k97/lzmyw5MowqceAuY3HX/wGJojXHkiPXA3WlhGPCaa2h4+GovV2nJtRvknCKsE7UHA1xB5SWeI8MzloBew==", + "dev": true }, "node_modules/@wdio/repl": { "version": "9.16.2", + "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-9.16.2.tgz", + "integrity": "sha512-FLTF0VL6+o5BSTCO7yLSXocm3kUnu31zYwzdsz4n9s5YWt83sCtzGZlZpt7TaTzb3jVUfxuHNQDTb8UMkCu0lQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "^20.1.0" }, @@ -10117,17 +12594,19 @@ } }, "node_modules/@wdio/repl/node_modules/@types/node": { - "version": "20.19.1", + "version": "20.19.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.2.tgz", + "integrity": "sha512-9pLGGwdzOUBDYi0GNjM97FIA+f92fqSke6joWeBjWXllfNxZBs7qeMF7tvtOIsbY45xkWkxrdwUfUf3MnQa9gA==", "dev": true, - "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, "node_modules/@wdio/reporter": { "version": "9.16.2", + "resolved": "https://registry.npmjs.org/@wdio/reporter/-/reporter-9.16.2.tgz", + "integrity": "sha512-th+APMRuK03OzpiJKnfhCwnXoJb57mRmP/NQYGc+k9GEF3Z3yPDD7LxnBlwPANGxt/hdzirQ6OvQyJYLwpmmuQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "^20.1.0", "@wdio/logger": "9.16.2", @@ -10140,17 +12619,19 @@ } }, "node_modules/@wdio/reporter/node_modules/@types/node": { - "version": "20.19.1", + "version": "20.19.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.2.tgz", + "integrity": "sha512-9pLGGwdzOUBDYi0GNjM97FIA+f92fqSke6joWeBjWXllfNxZBs7qeMF7tvtOIsbY45xkWkxrdwUfUf3MnQa9gA==", "dev": true, - "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, "node_modules/@wdio/runner": { "version": "9.16.2", + "resolved": "https://registry.npmjs.org/@wdio/runner/-/runner-9.16.2.tgz", + "integrity": "sha512-cETsJivOD2yzJfzwKi1n7NNXL3zF/yTcA+578fiu48iGVmhOJNhgW9sv4oVH/aDCt09PPUZw6DEBOT3mcKDSGw==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "^20.11.28", "@wdio/config": "9.16.2", @@ -10180,17 +12661,19 @@ } }, "node_modules/@wdio/runner/node_modules/@types/node": { - "version": "20.19.1", + "version": "20.19.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.2.tgz", + "integrity": "sha512-9pLGGwdzOUBDYi0GNjM97FIA+f92fqSke6joWeBjWXllfNxZBs7qeMF7tvtOIsbY45xkWkxrdwUfUf3MnQa9gA==", "dev": true, - "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, "node_modules/@wdio/spec-reporter": { "version": "9.16.2", + "resolved": "https://registry.npmjs.org/@wdio/spec-reporter/-/spec-reporter-9.16.2.tgz", + "integrity": "sha512-14HhLSvc+sHns0v07yL8MTfd9BVQ1VhEsywQFA6RbFvKc5PkyoLcxmQSzcH0FOjHhXAfwBh6YxL1mbJwy6+L+w==", "dev": true, - "license": "MIT", "dependencies": { "@wdio/reporter": "9.16.2", "@wdio/types": "9.16.2", @@ -10204,8 +12687,9 @@ }, "node_modules/@wdio/types": { "version": "9.16.2", + "resolved": "https://registry.npmjs.org/@wdio/types/-/types-9.16.2.tgz", + "integrity": "sha512-P86FvM/4XQGpJKwlC2RKF3I21TglPvPOozJGG9HoL0Jmt6jRF20ggO/nRTxU0XiWkRdqESUTmfA87bdCO4GRkQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "^20.1.0" }, @@ -10214,17 +12698,19 @@ } }, "node_modules/@wdio/types/node_modules/@types/node": { - "version": "20.19.1", + "version": "20.19.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.2.tgz", + "integrity": "sha512-9pLGGwdzOUBDYi0GNjM97FIA+f92fqSke6joWeBjWXllfNxZBs7qeMF7tvtOIsbY45xkWkxrdwUfUf3MnQa9gA==", "dev": true, - "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, "node_modules/@wdio/utils": { "version": "9.16.2", + "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-9.16.2.tgz", + "integrity": "sha512-bsRdEUXUTYvznXH/Z+p6HDzHSjMI6I6bnu8WXWTeDDDyqybWK5D8cbZvs8A/kMmGXoz1GZkSBHxy4Z5NTg8OQg==", "dev": true, - "license": "MIT", "dependencies": { "@puppeteer/browsers": "^2.2.0", "@wdio/logger": "9.16.2", @@ -10246,8 +12732,9 @@ }, "node_modules/@wdio/utils/node_modules/decamelize": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-6.0.0.tgz", + "integrity": "sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==", "dev": true, - "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -10257,8 +12744,9 @@ }, "node_modules/@webassemblyjs/ast": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "devOptional": true, - "license": "MIT", "dependencies": { "@webassemblyjs/helper-numbers": "1.13.2", "@webassemblyjs/helper-wasm-bytecode": "1.13.2" @@ -10266,23 +12754,27 @@ }, "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.13.2", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "devOptional": true }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.13.2", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "devOptional": true }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.14.1", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "devOptional": true }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", "devOptional": true, - "license": "MIT", "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.13.2", "@webassemblyjs/helper-api-error": "1.13.2", @@ -10291,13 +12783,15 @@ }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.13.2", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "devOptional": true }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", "devOptional": true, - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -10307,29 +12801,33 @@ }, "node_modules/@webassemblyjs/ieee754": { "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", "devOptional": true, - "license": "MIT", "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", "devOptional": true, - "license": "Apache-2.0", "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { "version": "1.13.2", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "devOptional": true }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", "devOptional": true, - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -10343,8 +12841,9 @@ }, "node_modules/@webassemblyjs/wasm-gen": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", "devOptional": true, - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-wasm-bytecode": "1.13.2", @@ -10355,8 +12854,9 @@ }, "node_modules/@webassemblyjs/wasm-opt": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", "devOptional": true, - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-buffer": "1.14.1", @@ -10366,8 +12866,9 @@ }, "node_modules/@webassemblyjs/wasm-parser": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", "devOptional": true, - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", "@webassemblyjs/helper-api-error": "1.13.2", @@ -10379,8 +12880,9 @@ }, "node_modules/@webassemblyjs/wast-printer": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", "devOptional": true, - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" @@ -10388,8 +12890,9 @@ }, "node_modules/@webpack-cli/configtest": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-3.0.1.tgz", + "integrity": "sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==", "dev": true, - "license": "MIT", "engines": { "node": ">=18.12.0" }, @@ -10400,8 +12903,9 @@ }, "node_modules/@webpack-cli/info": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-3.0.1.tgz", + "integrity": "sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=18.12.0" }, @@ -10412,8 +12916,9 @@ }, "node_modules/@webpack-cli/serve": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-3.0.1.tgz", + "integrity": "sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==", "dev": true, - "license": "MIT", "engines": { "node": ">=18.12.0" }, @@ -10429,18 +12934,21 @@ }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", - "devOptional": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "devOptional": true }, "node_modules/@xtuc/long": { "version": "4.2.2", - "devOptional": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "devOptional": true }, "node_modules/@zip.js/zip.js": { "version": "2.7.62", + "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.7.62.tgz", + "integrity": "sha512-OaLvZ8j4gCkLn048ypkZu29KX30r8/OfFF2w4Jo5WXFr+J04J+lzJ5TKZBVgFXhlvSkqNFQdfnY1Q8TMTCyBVA==", "dev": true, - "license": "BSD-3-Clause", "engines": { "bun": ">=0.7.0", "deno": ">=1.0.0", @@ -10449,7 +12957,8 @@ }, "node_modules/abort-controller": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "dependencies": { "event-target-shim": "^5.0.0" }, @@ -10459,7 +12968,8 @@ }, "node_modules/accepts": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" @@ -10470,8 +12980,9 @@ }, "node_modules/acorn": { "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "devOptional": true, - "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -10481,16 +12992,18 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/acorn-walk": { "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "dev": true, - "license": "MIT", "dependencies": { "acorn": "^8.11.0" }, @@ -10500,21 +13013,24 @@ }, "node_modules/adm-zip": { "version": "0.5.16", - "license": "MIT", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz", + "integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==", "engines": { "node": ">=12.0" } }, "node_modules/agent-base": { "version": "7.1.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", "engines": { "node": ">= 14" } }, "node_modules/ajv": { "version": "8.17.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -10528,7 +13044,8 @@ }, "node_modules/ajv-formats": { "version": "2.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dependencies": { "ajv": "^8.0.0" }, @@ -10543,7 +13060,8 @@ }, "node_modules/ajv-keywords": { "version": "5.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -10553,16 +13071,18 @@ }, "node_modules/ansi-colors": { "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/ansi-escapes": { "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, - "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -10575,25 +13095,28 @@ }, "node_modules/ansi-html-community": { "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "engines": [ "node >= 0.8.0" ], - "license": "Apache-2.0", "bin": { "ansi-html": "bin/ansi-html" } }, "node_modules/ansi-regex": { "version": "5.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -10603,28 +13126,33 @@ }, "node_modules/antlr4-c3": { "version": "3.4.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/antlr4-c3/-/antlr4-c3-3.4.2.tgz", + "integrity": "sha512-rISIjeelkeun6Y/YrdVqWtJBDg7SRT9d0Cqov8f6vGe5O5w8wY9HE00jcdevcRjwYOSExHjFi/gUqC3BMSvBuQ==", "dependencies": { "antlr4ng": "3.0.14" } }, "node_modules/antlr4ng": { "version": "3.0.14", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/antlr4ng/-/antlr4ng-3.0.14.tgz", + "integrity": "sha512-EVEn3B3zpxgbq/731dhwMYCls9e8mAudBvo479hoXbX/yTL24Do1HNZEU+v1U6GayIFrow5EcHMdyXqqRXTtBw==", "peerDependencies": { "antlr4ng-cli": "^2.0.0" } }, "node_modules/antlr4ng-cli": { "version": "2.0.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/antlr4ng-cli/-/antlr4ng-cli-2.0.0.tgz", + "integrity": "sha512-oAt5OSSYhRQn1PgahtpAP4Vp3BApCoCqlzX7Q8ZUWWls4hX59ryYuu0t7Hwrnfk796OxP/vgIJaqxdltd/oEvQ==", + "deprecated": "This package is deprecated and will no longer be updated. Please use the new antlr-ng package instead: https://github.com/mike-lischke/antlr-ng", "bin": { "antlr4ng": "index.js" } }, "node_modules/anymatch": { "version": "3.1.3", - "license": "ISC", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -10635,7 +13163,8 @@ }, "node_modules/anymatch/node_modules/picomatch": { "version": "2.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "engines": { "node": ">=8.6" }, @@ -10645,11 +13174,14 @@ }, "node_modules/aproba": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "license": "ISC" }, "node_modules/archiver": { "version": "7.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz", + "integrity": "sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==", "dependencies": { "archiver-utils": "^5.0.2", "async": "^3.2.4", @@ -10665,7 +13197,8 @@ }, "node_modules/archiver-utils": { "version": "5.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-5.0.2.tgz", + "integrity": "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==", "dependencies": { "glob": "^10.0.0", "graceful-fs": "^4.2.0", @@ -10681,6 +13214,9 @@ }, "node_modules/are-we-there-yet": { "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "deprecated": "This package is no longer supported.", "license": "ISC", "dependencies": { "delegates": "^1.0.0", @@ -10689,6 +13225,8 @@ }, "node_modules/are-we-there-yet/node_modules/readable-stream": { "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", @@ -10702,10 +13240,14 @@ }, "node_modules/are-we-there-yet/node_modules/safe-buffer": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "license": "MIT" }, "node_modules/are-we-there-yet/node_modules/string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" @@ -10713,18 +13255,21 @@ }, "node_modules/arg": { "version": "4.1.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true }, "node_modules/argparse": { "version": "2.0.1", - "dev": true, - "license": "Python-2.0" + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "node_modules/args": { "version": "5.0.3", + "resolved": "https://registry.npmjs.org/args/-/args-5.0.3.tgz", + "integrity": "sha512-h6k/zfFgusnv3i5TU08KQkVKuCPBtL/PWQbWkHUxvJrZ2nAyeaUupneemcrgn1xmqxPQsPIzwkUhOpoqPDRZuA==", "dev": true, - "license": "MIT", "dependencies": { "camelcase": "5.0.0", "chalk": "2.4.2", @@ -10737,8 +13282,9 @@ }, "node_modules/args/node_modules/ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -10748,16 +13294,18 @@ }, "node_modules/args/node_modules/camelcase": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/args/node_modules/chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -10769,53 +13317,60 @@ }, "node_modules/args/node_modules/color-convert": { "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, "node_modules/args/node_modules/color-name": { "version": "1.1.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "node_modules/args/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/args/node_modules/has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/args/node_modules/leven": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", + "integrity": "sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/args/node_modules/mri": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz", + "integrity": "sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/args/node_modules/supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -10825,16 +13380,18 @@ }, "node_modules/aria-query": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">= 0.4" } }, "node_modules/array-buffer-byte-length": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "is-array-buffer": "^3.0.5" @@ -10848,17 +13405,20 @@ }, "node_modules/array-flatten": { "version": "1.1.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, "node_modules/array-ify": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true }, "node_modules/array-includes": { "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", @@ -10878,8 +13438,9 @@ }, "node_modules/array.prototype.findlastindex": { "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", @@ -10898,8 +13459,9 @@ }, "node_modules/array.prototype.flat": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", @@ -10915,8 +13477,9 @@ }, "node_modules/array.prototype.flatmap": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", @@ -10932,8 +13495,9 @@ }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, - "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.8", @@ -10952,7 +13516,8 @@ }, "node_modules/asn1.js": { "version": "4.10.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", @@ -10961,12 +13526,14 @@ }, "node_modules/asn1.js/node_modules/bn.js": { "version": "4.12.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==" }, "node_modules/assert": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", + "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "is-nan": "^1.3.2", @@ -10977,16 +13544,18 @@ }, "node_modules/assertion-error": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/ast-types": { "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^2.0.1" }, @@ -10996,46 +13565,53 @@ }, "node_modules/async": { "version": "3.2.6", - "license": "MIT" + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" }, "node_modules/async-exit-hook": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/async-function": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/async-mutex": { "version": "0.5.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.5.0.tgz", + "integrity": "sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==", "dependencies": { "tslib": "^2.4.0" } }, "node_modules/asynckit": { "version": "0.4.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/atomic-sleep": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8.0.0" } }, "node_modules/available-typed-arrays": { "version": "1.0.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -11048,8 +13624,9 @@ }, "node_modules/aws-sdk": { "version": "2.1692.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1692.0.tgz", + "integrity": "sha512-x511uiJ/57FIsbgUe5csJ13k3uzu25uWQE+XqfBis/sB0SFoiElJWXRkgEAUh0U6n40eT3ay5Ue4oPkRMu1LYw==", "hasInstallScript": true, - "license": "Apache-2.0", "dependencies": { "buffer": "4.9.2", "events": "1.1.1", @@ -11068,7 +13645,8 @@ }, "node_modules/aws-sdk/node_modules/uuid": { "version": "8.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", + "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", "bin": { "uuid": "dist/bin/uuid" } @@ -11079,7 +13657,8 @@ }, "node_modules/axios": { "version": "1.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.10.0.tgz", + "integrity": "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -11088,12 +13667,14 @@ }, "node_modules/b4a": { "version": "1.6.7", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", + "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==" }, "node_modules/babel-jest": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", "dev": true, - "license": "MIT", "dependencies": { "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", @@ -11112,8 +13693,9 @@ }, "node_modules/babel-jest/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -11126,8 +13708,9 @@ }, "node_modules/babel-jest/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -11141,8 +13724,9 @@ }, "node_modules/babel-plugin-istanbul": { "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -11156,8 +13740,9 @@ }, "node_modules/babel-plugin-istanbul/node_modules/brace-expansion": { "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -11165,8 +13750,10 @@ }, "node_modules/babel-plugin-istanbul/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -11184,8 +13771,9 @@ }, "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -11199,8 +13787,9 @@ }, "node_modules/babel-plugin-istanbul/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -11210,8 +13799,9 @@ }, "node_modules/babel-plugin-istanbul/node_modules/test-exclude": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, - "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -11223,8 +13813,9 @@ }, "node_modules/babel-plugin-jest-hoist": { "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -11237,8 +13828,9 @@ }, "node_modules/babel-plugin-transform-import-meta": { "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-import-meta/-/babel-plugin-transform-import-meta-2.3.3.tgz", + "integrity": "sha512-bbh30qz1m6ZU1ybJoNOhA2zaDvmeXMnGNBMVMDOJ1Fni4+wMBoy/j7MTRVmqAUCIcy54/rEnr9VEBsfcgbpm3Q==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@babel/template": "^7.25.9", "tslib": "^2.8.1" @@ -11249,8 +13841,9 @@ }, "node_modules/babel-preset-current-node-syntax": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", + "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", @@ -11274,8 +13867,9 @@ }, "node_modules/babel-preset-jest": { "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", "dev": true, - "license": "MIT", "dependencies": { "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" @@ -11289,17 +13883,20 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/bare-events": { "version": "2.5.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz", + "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==", "optional": true }, "node_modules/bare-fs": { "version": "4.1.5", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.1.5.tgz", + "integrity": "sha512-1zccWBMypln0jEE05LzZt+V/8y8AQsQQqxtklqaIyg5nu6OAYFhZxPXinJTSG+kU5qyNmeLgcn9AW7eHiCHVLA==", "dev": true, - "license": "Apache-2.0", "optional": true, "dependencies": { "bare-events": "^2.5.4", @@ -11320,8 +13917,9 @@ }, "node_modules/bare-os": { "version": "3.6.1", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.1.tgz", + "integrity": "sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==", "dev": true, - "license": "Apache-2.0", "optional": true, "engines": { "bare": ">=1.14.0" @@ -11329,8 +13927,9 @@ }, "node_modules/bare-path": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", + "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", "dev": true, - "license": "Apache-2.0", "optional": true, "dependencies": { "bare-os": "^3.0.1" @@ -11338,8 +13937,9 @@ }, "node_modules/bare-stream": { "version": "2.6.5", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.6.5.tgz", + "integrity": "sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==", "dev": true, - "license": "Apache-2.0", "optional": true, "dependencies": { "streamx": "^2.21.0" @@ -11359,6 +13959,8 @@ }, "node_modules/base64-js": { "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "funding": [ { "type": "github", @@ -11372,32 +13974,35 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/basic-ftp": { "version": "5.0.5", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", + "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.0.0" } }, "node_modules/batch": { "version": "0.6.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" }, "node_modules/big.js": { "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/binary-extensions": { "version": "2.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "engines": { "node": ">=8" }, @@ -11407,6 +14012,8 @@ }, "node_modules/bl": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "license": "MIT", "dependencies": { "buffer": "^5.5.0", @@ -11416,6 +14023,8 @@ }, "node_modules/bl/node_modules/buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "funding": [ { "type": "github", @@ -11438,6 +14047,8 @@ }, "node_modules/bl/node_modules/readable-stream": { "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -11450,11 +14061,13 @@ }, "node_modules/bn.js": { "version": "5.2.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", + "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==" }, "node_modules/body-parser": { "version": "2.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", @@ -11472,7 +14085,8 @@ }, "node_modules/bonjour-service": { "version": "1.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", "dependencies": { "fast-deep-equal": "^3.1.3", "multicast-dns": "^7.2.5" @@ -11480,23 +14094,27 @@ }, "node_modules/boolbase": { "version": "1.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true }, "node_modules/bowser": { "version": "2.11.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==" }, "node_modules/brace-expansion": { "version": "2.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/braces": { "version": "3.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dependencies": { "fill-range": "^7.1.1" }, @@ -11506,16 +14124,19 @@ }, "node_modules/brorand": { "version": "1.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" }, "node_modules/browser-stdout": { "version": "1.3.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true }, "node_modules/browserify-aes": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dependencies": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", @@ -11527,7 +14148,8 @@ }, "node_modules/browserify-cipher": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dependencies": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", @@ -11536,7 +14158,8 @@ }, "node_modules/browserify-des": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dependencies": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", @@ -11546,7 +14169,8 @@ }, "node_modules/browserify-rsa": { "version": "4.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz", + "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", "dependencies": { "bn.js": "^5.2.1", "randombytes": "^2.1.0", @@ -11558,7 +14182,8 @@ }, "node_modules/browserify-sign": { "version": "4.2.3", - "license": "ISC", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", + "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", "dependencies": { "bn.js": "^5.2.1", "browserify-rsa": "^4.1.0", @@ -11577,7 +14202,8 @@ }, "node_modules/browserify-sign/node_modules/readable-stream": { "version": "2.3.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -11590,21 +14216,26 @@ }, "node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer": { "version": "5.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/browserify-sign/node_modules/string_decoder": { "version": "1.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer": { "version": "5.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/browserslist": { "version": "4.25.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", + "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", "devOptional": true, "funding": [ { @@ -11620,7 +14251,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "caniuse-lite": "^1.0.30001726", "electron-to-chromium": "^1.5.173", @@ -11636,8 +14266,9 @@ }, "node_modules/bs-logger": { "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", "dev": true, - "license": "MIT", "dependencies": { "fast-json-stable-stringify": "2.x" }, @@ -11647,15 +14278,17 @@ }, "node_modules/bser": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "node-int64": "^0.4.0" } }, "node_modules/buffer": { "version": "4.9.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", "dependencies": { "base64-js": "^1.0.2", "ieee754": "^1.1.4", @@ -11664,27 +14297,32 @@ }, "node_modules/buffer-crc32": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz", + "integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==", "engines": { "node": ">=8.0.0" } }, "node_modules/buffer-from": { "version": "1.1.2", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "devOptional": true }, "node_modules/buffer-xor": { "version": "1.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" }, "node_modules/builtin-status-codes": { "version": "3.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==" }, "node_modules/bundle-name": { "version": "4.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", "dependencies": { "run-applescript": "^7.0.0" }, @@ -11697,15 +14335,17 @@ }, "node_modules/bytes": { "version": "3.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "engines": { "node": ">= 0.8" } }, "node_modules/c8": { "version": "10.1.3", + "resolved": "https://registry.npmjs.org/c8/-/c8-10.1.3.tgz", + "integrity": "sha512-LvcyrOAaOnrrlMpW22n690PUvxiq4Uf9WMhQwNJ9vgagkL/ph1+D4uvjvDA5XCbykrc0sx+ay6pVi9YZ1GnhyA==", "dev": true, - "license": "ISC", "dependencies": { "@bcoe/v8-coverage": "^1.0.1", "@istanbuljs/schema": "^0.1.3", @@ -11736,8 +14376,9 @@ }, "node_modules/c8/node_modules/find-up": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -11751,8 +14392,9 @@ }, "node_modules/c8/node_modules/locate-path": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -11765,8 +14407,9 @@ }, "node_modules/c8/node_modules/p-locate": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -11779,22 +14422,25 @@ }, "node_modules/c8/node_modules/path-exists": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/cacheable-lookup": { "version": "5.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", "engines": { "node": ">=10.6.0" } }, "node_modules/cacheable-request": { "version": "7.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -11810,7 +14456,8 @@ }, "node_modules/call-bind": { "version": "1.0.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", @@ -11826,7 +14473,8 @@ }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" @@ -11837,7 +14485,8 @@ }, "node_modules/call-bound": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" @@ -11851,16 +14500,18 @@ }, "node_modules/callsites": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/camel-case": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "dev": true, - "license": "MIT", "dependencies": { "pascal-case": "^3.1.2", "tslib": "^2.0.3" @@ -11868,14 +14519,17 @@ }, "node_modules/camelcase": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/caniuse-lite": { "version": "1.0.30001726", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001726.tgz", + "integrity": "sha512-VQAUIUzBiZ/UnlM28fSp2CRF3ivUn1BWEvxMcVTNwpw91Py1pGbPIyIKtd+tzct9C3ouceCVdGAXxZOpZAsgdw==", "devOptional": true, "funding": [ { @@ -11890,13 +14544,13 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ], - "license": "CC-BY-4.0" + ] }, "node_modules/chai": { "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", "dev": true, - "license": "MIT", "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.3", @@ -11912,8 +14566,9 @@ }, "node_modules/chai-as-promised": { "version": "7.1.2", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.2.tgz", + "integrity": "sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw==", "dev": true, - "license": "WTFPL", "dependencies": { "check-error": "^1.0.2" }, @@ -11923,8 +14578,9 @@ }, "node_modules/chalk": { "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", "dev": true, - "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -11934,21 +14590,24 @@ }, "node_modules/char-regex": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/chardet": { "version": "0.7.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true }, "node_modules/check-error": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, - "license": "MIT", "dependencies": { "get-func-name": "^2.0.2" }, @@ -11958,8 +14617,9 @@ }, "node_modules/cheerio": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.1.0.tgz", + "integrity": "sha512-+0hMx9eYhJvWbgpKV9hN7jg0JcwydpopZE4hgi+KvQtByZXPp04NiCWU0LzcAbP63abZckIHkTQaXVF52mX3xQ==", "dev": true, - "license": "MIT", "dependencies": { "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", @@ -11982,8 +14642,9 @@ }, "node_modules/cheerio-select": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-select": "^5.1.0", @@ -11997,9 +14658,10 @@ } }, "node_modules/cheerio-select/node_modules/css-select": { - "version": "5.1.0", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", @@ -12013,8 +14675,9 @@ }, "node_modules/cheerio-select/node_modules/dom-serializer": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dev": true, - "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", @@ -12026,8 +14689,9 @@ }, "node_modules/cheerio-select/node_modules/domhandler": { "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.3.0" }, @@ -12040,8 +14704,9 @@ }, "node_modules/cheerio-select/node_modules/domutils": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", @@ -12053,8 +14718,9 @@ }, "node_modules/cheerio/node_modules/dom-serializer": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dev": true, - "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", @@ -12066,8 +14732,9 @@ }, "node_modules/cheerio/node_modules/domhandler": { "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.3.0" }, @@ -12080,8 +14747,9 @@ }, "node_modules/cheerio/node_modules/domutils": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", @@ -12093,6 +14761,8 @@ }, "node_modules/cheerio/node_modules/htmlparser2": { "version": "10.0.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz", + "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==", "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", @@ -12101,7 +14771,6 @@ "url": "https://github.com/sponsors/fb55" } ], - "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", @@ -12111,8 +14780,9 @@ }, "node_modules/cheerio/node_modules/htmlparser2/node_modules/entities": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -12121,16 +14791,18 @@ } }, "node_modules/cheerio/node_modules/undici": { - "version": "7.10.0", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.11.0.tgz", + "integrity": "sha512-heTSIac3iLhsmZhUCjyS3JQEkZELateufzZuBaVM5RHXdSBMb1LPMQf5x+FH7qjsZYDP0ttAc3nnVpUB+wYbOg==", "dev": true, - "license": "MIT", "engines": { "node": ">=20.18.1" } }, "node_modules/chokidar": { "version": "4.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "dependencies": { "readdirp": "^4.0.1" }, @@ -12143,18 +14815,23 @@ }, "node_modules/chownr": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "license": "ISC" }, "node_modules/chrome-trace-event": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "devOptional": true, - "license": "MIT", "engines": { "node": ">=6.0" } }, "node_modules/ci-info": { "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, "funding": [ { @@ -12162,14 +14839,14 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/cipher-base": { "version": "1.0.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", + "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", "dependencies": { "inherits": "^2.0.4", "safe-buffer": "^5.2.1" @@ -12180,13 +14857,26 @@ }, "node_modules/cjs-module-lexer": { "version": "1.4.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "dev": true + }, + "node_modules/clean": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/clean/-/clean-4.0.2.tgz", + "integrity": "sha512-2LGVh4dNtI16L4UzqDHO6Hbl74YjG1vWvEUU78dgLO4kuyqJZFMNMPBx+EGtYKTFb14e24p+gWXgkabqxc1EUw==", + "dependencies": { + "async": "^0.9.0", + "minimist": "^1.1.0", + "mix2": "^1.0.0", + "skema": "^1.0.0" + } }, "node_modules/clean-css": { "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", "dev": true, - "license": "MIT", "dependencies": { "source-map": "~0.6.0" }, @@ -12194,18 +14884,25 @@ "node": ">= 10.0" } }, + "node_modules/clean/node_modules/async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha512-l6ToIJIotphWahxxHyzK9bnLR6kM4jJIIgLShZeqLY7iboHoGkdgFl7W2/Ivi4SkMJYGKqW8vSuk0uKUj6qsSw==" + }, "node_modules/cli-width": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", "dev": true, - "license": "ISC", "engines": { "node": ">= 12" } }, "node_modules/cliui": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -12217,8 +14914,9 @@ }, "node_modules/cliui/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -12231,13 +14929,15 @@ }, "node_modules/cliui/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/cliui/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -12249,8 +14949,9 @@ }, "node_modules/cliui/node_modules/wrap-ansi": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -12265,8 +14966,9 @@ }, "node_modules/clone": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, - "license": "MIT", "optional": true, "engines": { "node": ">=0.8" @@ -12274,8 +14976,9 @@ }, "node_modules/clone-deep": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, - "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", @@ -12287,7 +14990,8 @@ }, "node_modules/clone-response": { "version": "1.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "dependencies": { "mimic-response": "^1.0.0" }, @@ -12297,8 +15001,9 @@ }, "node_modules/co": { "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, - "license": "MIT", "engines": { "iojs": ">= 1.0.0", "node": ">= 0.12.0" @@ -12306,6 +15011,8 @@ }, "node_modules/code-point-at": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -12313,12 +15020,14 @@ }, "node_modules/collect-v8-coverage": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true }, "node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -12328,15 +15037,18 @@ }, "node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/colorette": { "version": "2.0.20", - "license": "MIT" + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" }, "node_modules/combined-stream": { "version": "1.0.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -12346,13 +15058,15 @@ }, "node_modules/commander": { "version": "2.20.3", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "devOptional": true }, "node_modules/compare-func": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, - "license": "MIT", "dependencies": { "array-ify": "^1.0.0", "dot-prop": "^5.1.0" @@ -12360,7 +15074,8 @@ }, "node_modules/compress-commons": { "version": "6.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz", + "integrity": "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==", "dependencies": { "crc-32": "^1.2.0", "crc32-stream": "^6.0.0", @@ -12374,7 +15089,8 @@ }, "node_modules/compressible": { "version": "2.0.18", - "license": "MIT", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dependencies": { "mime-db": ">= 1.43.0 < 2" }, @@ -12384,7 +15100,8 @@ }, "node_modules/compression": { "version": "1.8.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz", + "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==", "dependencies": { "bytes": "3.1.2", "compressible": "~2.0.18", @@ -12400,40 +15117,48 @@ }, "node_modules/compression/node_modules/debug": { "version": "2.6.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { "ms": "2.0.0" } }, "node_modules/compression/node_modules/ms": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/compression/node_modules/negotiator": { "version": "0.6.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", "engines": { "node": ">= 0.6" } }, "node_modules/concat-map": { "version": "0.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/connect-history-api-fallback": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", "engines": { "node": ">=0.8" } }, "node_modules/console-control-strings": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "license": "ISC" }, "node_modules/content-disposition": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", "dependencies": { "safe-buffer": "5.2.1" }, @@ -12443,15 +15168,17 @@ }, "node_modules/content-type": { "version": "1.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "engines": { "node": ">= 0.6" } }, "node_modules/conventional-changelog-angular": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", + "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", "dev": true, - "license": "ISC", "dependencies": { "compare-func": "^2.0.0" }, @@ -12461,8 +15188,9 @@ }, "node_modules/conventional-changelog-conventionalcommits": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-8.0.0.tgz", + "integrity": "sha512-eOvlTO6OcySPyyyk8pKz2dP4jjElYunj9hn9/s0OB+gapTO8zwS9UQWrZ1pmF2hFs3vw1xhonOLGcGjy/zgsuA==", "dev": true, - "license": "ISC", "dependencies": { "compare-func": "^2.0.0" }, @@ -12472,8 +15200,9 @@ }, "node_modules/conventional-commits-parser": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-5.0.0.tgz", + "integrity": "sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==", "dev": true, - "license": "MIT", "dependencies": { "is-text-path": "^2.0.0", "JSONStream": "^1.3.5", @@ -12488,27 +15217,31 @@ } }, "node_modules/convert-source-map": { - "version": "2.0.0", - "dev": true, - "license": "MIT" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true }, "node_modules/cookie": { "version": "0.7.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "engines": { "node": ">= 0.6" } }, "node_modules/cookie-signature": { "version": "1.2.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", "engines": { "node": ">=6.6.0" } }, "node_modules/copyfiles": { "version": "2.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/copyfiles/-/copyfiles-2.4.1.tgz", + "integrity": "sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==", "dependencies": { "glob": "^7.0.5", "minimatch": "^3.0.3", @@ -12525,7 +15258,8 @@ }, "node_modules/copyfiles/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -12538,7 +15272,8 @@ }, "node_modules/copyfiles/node_modules/brace-expansion": { "version": "1.1.12", - "license": "MIT", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -12546,7 +15281,8 @@ }, "node_modules/copyfiles/node_modules/cliui": { "version": "7.0.4", - "license": "ISC", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -12555,11 +15291,14 @@ }, "node_modules/copyfiles/node_modules/emoji-regex": { "version": "8.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/copyfiles/node_modules/glob": { "version": "7.2.3", - "license": "ISC", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -12577,7 +15316,8 @@ }, "node_modules/copyfiles/node_modules/minimatch": { "version": "3.1.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -12587,7 +15327,8 @@ }, "node_modules/copyfiles/node_modules/string-width": { "version": "4.2.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -12599,7 +15340,8 @@ }, "node_modules/copyfiles/node_modules/wrap-ansi": { "version": "7.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -12614,7 +15356,8 @@ }, "node_modules/copyfiles/node_modules/yargs": { "version": "16.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -12630,18 +15373,21 @@ }, "node_modules/copyfiles/node_modules/yargs-parser": { "version": "20.2.9", - "license": "ISC", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "engines": { "node": ">=10" } }, "node_modules/core-util-is": { "version": "1.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "node_modules/cors": { "version": "2.8.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "dependencies": { "object-assign": "^4", "vary": "^1" @@ -12652,8 +15398,9 @@ }, "node_modules/cosmiconfig": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, - "license": "MIT", "dependencies": { "env-paths": "^2.2.1", "import-fresh": "^3.3.0", @@ -12677,8 +15424,9 @@ }, "node_modules/cosmiconfig-typescript-loader": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-6.1.0.tgz", + "integrity": "sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==", "dev": true, - "license": "MIT", "dependencies": { "jiti": "^2.4.1" }, @@ -12693,7 +15441,8 @@ }, "node_modules/crc-32": { "version": "1.2.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", "bin": { "crc32": "bin/crc32.njs" }, @@ -12703,7 +15452,8 @@ }, "node_modules/crc32-stream": { "version": "6.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz", + "integrity": "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==", "dependencies": { "crc-32": "^1.2.0", "readable-stream": "^4.0.0" @@ -12714,7 +15464,8 @@ }, "node_modules/create-ecdh": { "version": "4.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dependencies": { "bn.js": "^4.1.0", "elliptic": "^6.5.3" @@ -12722,11 +15473,13 @@ }, "node_modules/create-ecdh/node_modules/bn.js": { "version": "4.12.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==" }, "node_modules/create-hash": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -12737,7 +15490,8 @@ }, "node_modules/create-hmac": { "version": "1.1.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -12749,8 +15503,9 @@ }, "node_modules/create-jest": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", "dev": true, - "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -12769,8 +15524,9 @@ }, "node_modules/create-jest/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -12783,8 +15539,9 @@ }, "node_modules/create-jest/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -12798,12 +15555,14 @@ }, "node_modules/create-require": { "version": "1.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true }, "node_modules/cross-env": { "version": "7.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", "dependencies": { "cross-spawn": "^7.0.1" }, @@ -12819,7 +15578,8 @@ }, "node_modules/cross-spawn": { "version": "7.0.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -12831,7 +15591,8 @@ }, "node_modules/crypto-browserify": { "version": "3.12.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.1.tgz", + "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==", "dependencies": { "browserify-cipher": "^1.0.1", "browserify-sign": "^4.2.3", @@ -12855,8 +15616,9 @@ }, "node_modules/css-select": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.0.1", @@ -12870,17 +15632,21 @@ }, "node_modules/css-shorthand-properties": { "version": "1.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/css-shorthand-properties/-/css-shorthand-properties-1.1.2.tgz", + "integrity": "sha512-C2AugXIpRGQTxaCW0N7n5jD/p5irUmCrwl03TrnMFBHDbdq44CFWR2zO7rK9xPN4Eo3pUxC4vQzQgbIpzrD1PQ==", + "dev": true }, "node_modules/css-value": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/css-value/-/css-value-0.0.1.tgz", + "integrity": "sha512-FUV3xaJ63buRLgHrLQVlVgQnQdR4yqdLGaDu7g8CQcWjInDfM9plBTPI9FRfpahju1UBSaMckeb2/46ApS/V1Q==", "dev": true }, "node_modules/css-what": { - "version": "6.1.0", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">= 6" }, @@ -12890,8 +15656,9 @@ }, "node_modules/cssstyle": { "version": "4.6.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", + "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", "dev": true, - "license": "MIT", "dependencies": { "@asamuzakjp/css-color": "^3.2.0", "rrweb-cssom": "^0.8.0" @@ -12902,13 +15669,15 @@ }, "node_modules/cssstyle/node_modules/rrweb-cssom": { "version": "0.8.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "dev": true }, "node_modules/dargs": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz", + "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -12918,16 +15687,18 @@ }, "node_modules/data-uri-to-buffer": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", "dev": true, - "license": "MIT", "engines": { "node": ">= 12" } }, "node_modules/data-urls": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", "dev": true, - "license": "MIT", "dependencies": { "whatwg-mimetype": "^4.0.0", "whatwg-url": "^14.0.0" @@ -12938,8 +15709,9 @@ }, "node_modules/data-view-buffer": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", @@ -12954,8 +15726,9 @@ }, "node_modules/data-view-byte-length": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", @@ -12970,8 +15743,9 @@ }, "node_modules/data-view-byte-offset": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -12986,15 +15760,17 @@ }, "node_modules/dateformat": { "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/debug": { "version": "4.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dependencies": { "ms": "^2.1.3" }, @@ -13009,8 +15785,9 @@ }, "node_modules/decamelize": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -13020,12 +15797,14 @@ }, "node_modules/decimal.js": { "version": "10.5.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz", + "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==", + "dev": true }, "node_modules/decompress-response": { "version": "6.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dependencies": { "mimic-response": "^3.1.0" }, @@ -13038,7 +15817,8 @@ }, "node_modules/decompress-response/node_modules/mimic-response": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "engines": { "node": ">=10" }, @@ -13048,8 +15828,9 @@ }, "node_modules/dedent": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", + "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", "dev": true, - "license": "MIT", "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, @@ -13061,8 +15842,9 @@ }, "node_modules/deep-eql": { "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", "dev": true, - "license": "MIT", "dependencies": { "type-detect": "^4.0.0" }, @@ -13072,6 +15854,8 @@ }, "node_modules/deep-extend": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "license": "MIT", "engines": { "node": ">=4.0.0" @@ -13079,27 +15863,31 @@ }, "node_modules/deep-is": { "version": "0.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true }, "node_modules/deepmerge": { "version": "4.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "engines": { "node": ">=0.10.0" } }, "node_modules/deepmerge-ts": { "version": "7.1.5", + "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-7.1.5.tgz", + "integrity": "sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=16.0.0" } }, "node_modules/default-browser": { "version": "5.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", "dependencies": { "bundle-name": "^4.1.0", "default-browser-id": "^5.0.0" @@ -13113,7 +15901,8 @@ }, "node_modules/default-browser-id": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", "engines": { "node": ">=18" }, @@ -13123,8 +15912,9 @@ }, "node_modules/defaults": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "clone": "^1.0.2" @@ -13135,14 +15925,16 @@ }, "node_modules/defer-to-connect": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "engines": { "node": ">=10" } }, "node_modules/define-data-property": { "version": "1.1.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -13157,7 +15949,8 @@ }, "node_modules/define-lazy-prop": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", "engines": { "node": ">=12" }, @@ -13167,8 +15960,9 @@ }, "node_modules/define-properties": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, - "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -13183,8 +15977,9 @@ }, "node_modules/degenerator": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", "dev": true, - "license": "MIT", "dependencies": { "ast-types": "^0.13.4", "escodegen": "^2.1.0", @@ -13196,25 +15991,30 @@ }, "node_modules/delayed-stream": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "engines": { "node": ">=0.4.0" } }, "node_modules/delegates": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "license": "MIT" }, "node_modules/depd": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "engines": { "node": ">= 0.8" } }, "node_modules/des.js": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", "dependencies": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" @@ -13222,7 +16022,8 @@ }, "node_modules/destroy": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -13230,6 +16031,8 @@ }, "node_modules/detect-libc": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", "license": "Apache-2.0", "bin": { "detect-libc": "bin/detect-libc.js" @@ -13240,34 +16043,39 @@ }, "node_modules/detect-newline": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/detect-node": { "version": "2.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" }, "node_modules/diff": { "version": "7.0.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", "engines": { "node": ">=0.3.1" } }, "node_modules/diff-sequences": { "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, - "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/diffie-hellman": { "version": "5.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dependencies": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", @@ -13276,11 +16084,13 @@ }, "node_modules/diffie-hellman/node_modules/bn.js": { "version": "4.12.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==" }, "node_modules/dns-packet": { "version": "5.6.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" }, @@ -13290,8 +16100,9 @@ }, "node_modules/doctrine": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -13301,16 +16112,18 @@ }, "node_modules/dom-converter": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", "dev": true, - "license": "MIT", "dependencies": { "utila": "~0.4" } }, "node_modules/dom-serializer": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dev": true, - "license": "MIT", "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", @@ -13322,26 +16135,29 @@ }, "node_modules/dom-serializer/node_modules/entities": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, - "license": "BSD-2-Clause", "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/domelementtype": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/fb55" } - ], - "license": "BSD-2-Clause" + ] }, "node_modules/domhandler": { "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.2.0" }, @@ -13354,8 +16170,9 @@ }, "node_modules/domutils": { "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", @@ -13367,8 +16184,9 @@ }, "node_modules/dot-case": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", "dev": true, - "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" @@ -13376,8 +16194,9 @@ }, "node_modules/dot-prop": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, - "license": "MIT", "dependencies": { "is-obj": "^2.0.0" }, @@ -13386,9 +16205,10 @@ } }, "node_modules/dotenv": { - "version": "16.5.0", + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=12" }, @@ -13398,7 +16218,8 @@ }, "node_modules/dunder-proto": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", @@ -13410,8 +16231,9 @@ }, "node_modules/duplexify": { "version": "4.1.3", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz", + "integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==", "dev": true, - "license": "MIT", "dependencies": { "end-of-stream": "^1.4.1", "inherits": "^2.0.3", @@ -13421,8 +16243,9 @@ }, "node_modules/duplexify/node_modules/readable-stream": { "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -13434,12 +16257,14 @@ }, "node_modules/eastasianwidth": { "version": "0.2.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "node_modules/easy-table": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz", + "integrity": "sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -13449,8 +16274,9 @@ }, "node_modules/edge-paths": { "version": "3.0.5", + "resolved": "https://registry.npmjs.org/edge-paths/-/edge-paths-3.0.5.tgz", + "integrity": "sha512-sB7vSrDnFa4ezWQk9nZ/n0FdpdUuC6R1EOrlU3DL+bovcNFK28rqu2emmAUjujYEJTWIgQGqgVVWUZXMnc8iWg==", "dev": true, - "license": "MIT", "dependencies": { "@types/which": "^2.0.1", "which": "^2.0.2" @@ -13464,9 +16290,10 @@ }, "node_modules/edgedriver": { "version": "6.1.1", + "resolved": "https://registry.npmjs.org/edgedriver/-/edgedriver-6.1.1.tgz", + "integrity": "sha512-/dM/PoBf22Xg3yypMWkmRQrBKEnSyNaZ7wHGCT9+qqT14izwtFT+QvdR89rjNkMfXwW+bSFoqOfbcvM+2Cyc7w==", "dev": true, "hasInstallScript": true, - "license": "MIT", "dependencies": { "@wdio/logger": "^9.1.3", "@zip.js/zip.js": "^2.7.53", @@ -13487,8 +16314,9 @@ }, "node_modules/edgedriver/node_modules/decamelize": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-6.0.0.tgz", + "integrity": "sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==", "dev": true, - "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -13498,6 +16326,8 @@ }, "node_modules/edgedriver/node_modules/fast-xml-parser": { "version": "4.5.3", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz", + "integrity": "sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==", "dev": true, "funding": [ { @@ -13505,7 +16335,6 @@ "url": "https://github.com/sponsors/NaturalIntelligence" } ], - "license": "MIT", "dependencies": { "strnum": "^1.1.1" }, @@ -13515,16 +16344,18 @@ }, "node_modules/edgedriver/node_modules/isexe": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, - "license": "ISC", "engines": { "node": ">=16" } }, "node_modules/edgedriver/node_modules/which": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", "dev": true, - "license": "ISC", "dependencies": { "isexe": "^3.1.1" }, @@ -13537,12 +16368,14 @@ }, "node_modules/ee-first": { "version": "1.1.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/ejs": { "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "jake": "^10.8.5" }, @@ -13554,13 +16387,15 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.174", - "devOptional": true, - "license": "ISC" + "version": "1.5.177", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.177.tgz", + "integrity": "sha512-7EH2G59nLsEMj97fpDuvVcYi6lwTcM1xuWw3PssD8xzboAW7zj7iB3COEEEATUfjLHrs5uKBLQT03V/8URx06g==", + "devOptional": true }, "node_modules/elliptic": { "version": "6.6.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -13573,12 +16408,14 @@ }, "node_modules/elliptic/node_modules/bn.js": { "version": "4.12.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==" }, "node_modules/emittery": { "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -13588,27 +16425,40 @@ }, "node_modules/emoji-regex": { "version": "9.2.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, "node_modules/emojis-list": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/encodeurl": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "engines": { "node": ">= 0.8" } }, + "node_modules/encoding-japanese": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/encoding-japanese/-/encoding-japanese-2.2.0.tgz", + "integrity": "sha512-EuJWwlHPZ1LbADuKTClvHtwbaFn4rOD+dRAbWysqEOXRc2Uui0hJInNJrsdH0c+OhJA4nrCBdSkW4DD5YxAo6A==", + "license": "MIT", + "engines": { + "node": ">=8.10.0" + } + }, "node_modules/encoding-sniffer": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz", + "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==", "dev": true, - "license": "MIT", "dependencies": { "iconv-lite": "^0.6.3", "whatwg-encoding": "^3.1.1" @@ -13619,15 +16469,17 @@ }, "node_modules/end-of-stream": { "version": "1.4.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "dependencies": { "once": "^1.4.0" } }, "node_modules/enhanced-resolve": { "version": "5.18.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz", + "integrity": "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==", "devOptional": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -13638,7 +16490,8 @@ }, "node_modules/entities": { "version": "4.5.0", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "engines": { "node": ">=0.12" }, @@ -13648,16 +16501,18 @@ }, "node_modules/env-paths": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/envinfo": { "version": "7.14.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", + "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", "dev": true, - "license": "MIT", "bin": { "envinfo": "dist/cli.js" }, @@ -13667,16 +16522,18 @@ }, "node_modules/error-ex": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/es-abstract": { "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", "dev": true, - "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", @@ -13742,26 +16599,30 @@ }, "node_modules/es-define-property": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "engines": { "node": ">= 0.4" } }, "node_modules/es-errors": { "version": "1.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "engines": { "node": ">= 0.4" } }, "node_modules/es-module-lexer": { "version": "1.7.0", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "devOptional": true }, "node_modules/es-object-atoms": { "version": "1.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "dependencies": { "es-errors": "^1.3.0" }, @@ -13771,7 +16632,8 @@ }, "node_modules/es-set-tostringtag": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", @@ -13784,8 +16646,9 @@ }, "node_modules/es-shim-unscopables": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", "dev": true, - "license": "MIT", "dependencies": { "hasown": "^2.0.2" }, @@ -13795,8 +16658,9 @@ }, "node_modules/es-to-primitive": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, - "license": "MIT", "dependencies": { "is-callable": "^1.2.7", "is-date-object": "^1.0.5", @@ -13811,9 +16675,10 @@ }, "node_modules/esbuild": { "version": "0.25.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", + "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", "dev": true, "hasInstallScript": true, - "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -13850,18 +16715,21 @@ }, "node_modules/escalade": { "version": "3.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "engines": { "node": ">=6" } }, "node_modules/escape-html": { "version": "1.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "node_modules/escape-string-regexp": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "engines": { "node": ">=10" }, @@ -13871,8 +16739,9 @@ }, "node_modules/escodegen": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -13891,8 +16760,10 @@ }, "node_modules/eslint": { "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -13945,8 +16816,9 @@ }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", @@ -13955,16 +16827,18 @@ }, "node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-module-utils": { "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^3.2.7" }, @@ -13979,16 +16853,18 @@ }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import": { "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, - "license": "MIT", "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -14019,8 +16895,9 @@ }, "node_modules/eslint-plugin-import/node_modules/brace-expansion": { "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -14028,16 +16905,18 @@ }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import/node_modules/doctrine": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -14047,8 +16926,9 @@ }, "node_modules/eslint-plugin-import/node_modules/json5": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, - "license": "MIT", "dependencies": { "minimist": "^1.2.0" }, @@ -14058,8 +16938,9 @@ }, "node_modules/eslint-plugin-import/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -14069,16 +16950,18 @@ }, "node_modules/eslint-plugin-import/node_modules/strip-bom": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/eslint-plugin-import/node_modules/tsconfig-paths": { "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, - "license": "MIT", "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", @@ -14088,8 +16971,9 @@ }, "node_modules/eslint-plugin-unused-imports": { "version": "4.1.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.1.4.tgz", + "integrity": "sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ==", "dev": true, - "license": "MIT", "peerDependencies": { "@typescript-eslint/eslint-plugin": "^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0", "eslint": "^9.0.0 || ^8.0.0" @@ -14102,8 +16986,9 @@ }, "node_modules/eslint-scope": { "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -14117,8 +17002,9 @@ }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -14128,8 +17014,9 @@ }, "node_modules/eslint/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -14143,8 +17030,9 @@ }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -14157,8 +17045,9 @@ }, "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -14166,8 +17055,9 @@ }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -14181,8 +17071,9 @@ }, "node_modules/eslint/node_modules/find-up": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -14196,8 +17087,9 @@ }, "node_modules/eslint/node_modules/globals": { "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, - "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -14210,21 +17102,24 @@ }, "node_modules/eslint/node_modules/ignore": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "node_modules/eslint/node_modules/locate-path": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -14237,8 +17132,9 @@ }, "node_modules/eslint/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -14248,8 +17144,9 @@ }, "node_modules/eslint/node_modules/p-locate": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -14262,16 +17159,18 @@ }, "node_modules/eslint/node_modules/path-exists": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/eslint/node_modules/type-fest": { "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -14281,8 +17180,9 @@ }, "node_modules/espree": { "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -14297,7 +17197,8 @@ }, "node_modules/esprima": { "version": "4.0.1", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -14308,8 +17209,9 @@ }, "node_modules/esquery": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -14319,8 +17221,9 @@ }, "node_modules/esrecurse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "devOptional": true, - "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -14330,48 +17233,55 @@ }, "node_modules/estraverse": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "devOptional": true, - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/esutils": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/etag": { "version": "1.8.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "engines": { "node": ">= 0.6" } }, "node_modules/event-target-shim": { "version": "5.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", "engines": { "node": ">=6" } }, "node_modules/eventemitter3": { "version": "4.0.7", - "license": "MIT" + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, "node_modules/events": { "version": "1.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", "engines": { "node": ">=0.4.x" } }, "node_modules/eventsource": { "version": "3.0.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", "dependencies": { "eventsource-parser": "^3.0.1" }, @@ -14381,14 +17291,16 @@ }, "node_modules/eventsource-parser": { "version": "3.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.3.tgz", + "integrity": "sha512-nVpZkTMM9rF6AQ9gPJpFsNAMt48wIzB5TQgiTLdHiuO8XEDhUgZEhqKlZWXbIzo9VmJ/HvysHqEaVeD5v9TPvA==", "engines": { "node": ">=20.0.0" } }, "node_modules/evp_bytestokey": { "version": "1.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dependencies": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" @@ -14396,8 +17308,9 @@ }, "node_modules/execa": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, - "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -14418,8 +17331,9 @@ }, "node_modules/execa/node_modules/get-stream": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -14429,11 +17343,14 @@ }, "node_modules/execa/node_modules/signal-exit": { "version": "3.0.7", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, "node_modules/exit": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true, "engines": { "node": ">= 0.8.0" @@ -14441,8 +17358,9 @@ }, "node_modules/exit-hook": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-4.0.0.tgz", + "integrity": "sha512-Fqs7ChZm72y40wKjOFXBKg7nJZvQJmewP5/7LtePDdnah/+FH9Hp5sgMujSCMPXlxOAW2//1jrW9pnsY7o20vQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=18" }, @@ -14452,6 +17370,8 @@ }, "node_modules/expand-template": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", "license": "(MIT OR WTFPL)", "engines": { "node": ">=6" @@ -14459,8 +17379,9 @@ }, "node_modules/expect": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", "dev": true, - "license": "MIT", "dependencies": { "@jest/expect-utils": "^29.7.0", "jest-get-type": "^29.6.3", @@ -14474,8 +17395,9 @@ }, "node_modules/expect-webdriverio": { "version": "5.3.4", + "resolved": "https://registry.npmjs.org/expect-webdriverio/-/expect-webdriverio-5.3.4.tgz", + "integrity": "sha512-FU+96C0nqeYTXrJcGLUDB6hPKKaSm1/tVHjFDE4EDHGCYvajAHCC2MBQJ5MomjCmp6lGMz36lDHeZj52LHylyA==", "dev": true, - "license": "MIT", "dependencies": { "@vitest/snapshot": "^3.2.4", "expect": "^30.0.0", @@ -14504,8 +17426,9 @@ }, "node_modules/expect-webdriverio/node_modules/@jest/expect-utils": { "version": "30.0.3", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.0.3.tgz", + "integrity": "sha512-SMtBvf2sfX2agcT0dA9pXwcUrKvOSDqBY4e4iRfT+Hya33XzV35YVg+98YQFErVGA/VR1Gto5Y2+A6G9LSQ3Yg==", "dev": true, - "license": "MIT", "dependencies": { "@jest/get-type": "30.0.1" }, @@ -14515,8 +17438,9 @@ }, "node_modules/expect-webdriverio/node_modules/@jest/schemas": { "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz", + "integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==", "dev": true, - "license": "MIT", "dependencies": { "@sinclair/typebox": "^0.34.0" }, @@ -14526,8 +17450,9 @@ }, "node_modules/expect-webdriverio/node_modules/@jest/types": { "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz", + "integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==", "dev": true, - "license": "MIT", "dependencies": { "@jest/pattern": "30.0.1", "@jest/schemas": "30.0.1", @@ -14543,13 +17468,15 @@ }, "node_modules/expect-webdriverio/node_modules/@sinclair/typebox": { "version": "0.34.37", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.37.tgz", + "integrity": "sha512-2TRuQVgQYfy+EzHRTIvkhv2ADEouJ2xNS/Vq+W5EuuewBdOrvATvljZTxHWZSTYr2sTjTHpGvucaGAt67S2akw==", + "dev": true }, "node_modules/expect-webdriverio/node_modules/@vitest/pretty-format": { "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", + "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==", "dev": true, - "license": "MIT", "dependencies": { "tinyrainbow": "^2.0.0" }, @@ -14559,8 +17486,9 @@ }, "node_modules/expect-webdriverio/node_modules/@vitest/snapshot": { "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz", + "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==", "dev": true, - "license": "MIT", "dependencies": { "@vitest/pretty-format": "3.2.4", "magic-string": "^0.30.17", @@ -14572,8 +17500,9 @@ }, "node_modules/expect-webdriverio/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -14587,8 +17516,9 @@ }, "node_modules/expect-webdriverio/node_modules/chalk/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -14601,6 +17531,8 @@ }, "node_modules/expect-webdriverio/node_modules/ci-info": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", + "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", "dev": true, "funding": [ { @@ -14608,15 +17540,15 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/expect-webdriverio/node_modules/expect": { "version": "30.0.3", + "resolved": "https://registry.npmjs.org/expect/-/expect-30.0.3.tgz", + "integrity": "sha512-HXg6NvK35/cSYZCUKAtmlgCFyqKM4frEPbzrav5hRqb0GMz0E0lS5hfzYjSaiaE5ysnp/qI2aeZkeyeIAOeXzQ==", "dev": true, - "license": "MIT", "dependencies": { "@jest/expect-utils": "30.0.3", "@jest/get-type": "30.0.1", @@ -14631,8 +17563,9 @@ }, "node_modules/expect-webdriverio/node_modules/jest-diff": { "version": "30.0.3", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.0.3.tgz", + "integrity": "sha512-Q1TAV0cUcBTic57SVnk/mug0/ASyAqtSIOkr7RAlxx97llRYsM74+E8N5WdGJUlwCKwgxPAkVjKh653h1+HA9A==", "dev": true, - "license": "MIT", "dependencies": { "@jest/diff-sequences": "30.0.1", "@jest/get-type": "30.0.1", @@ -14645,8 +17578,9 @@ }, "node_modules/expect-webdriverio/node_modules/jest-matcher-utils": { "version": "30.0.3", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.0.3.tgz", + "integrity": "sha512-hMpVFGFOhYmIIRGJ0HgM9htC5qUiJ00famcc9sRFchJJiLZbbVKrAztcgE6VnXLRxA3XZ0bvNA7hQWh3oHXo/A==", "dev": true, - "license": "MIT", "dependencies": { "@jest/get-type": "30.0.1", "chalk": "^4.1.2", @@ -14659,8 +17593,9 @@ }, "node_modules/expect-webdriverio/node_modules/jest-message-util": { "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz", + "integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", "@jest/types": "30.0.1", @@ -14678,8 +17613,9 @@ }, "node_modules/expect-webdriverio/node_modules/jest-mock": { "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.0.2.tgz", + "integrity": "sha512-PnZOHmqup/9cT/y+pXIVbbi8ID6U1XHRmbvR7MvUy4SLqhCbwpkmXhLbsWbGewHrV5x/1bF7YDjs+x24/QSvFA==", "dev": true, - "license": "MIT", "dependencies": { "@jest/types": "30.0.1", "@types/node": "*", @@ -14691,8 +17627,9 @@ }, "node_modules/expect-webdriverio/node_modules/jest-util": { "version": "30.0.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz", + "integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==", "dev": true, - "license": "MIT", "dependencies": { "@jest/types": "30.0.1", "@types/node": "*", @@ -14707,13 +17644,15 @@ }, "node_modules/expect-webdriverio/node_modules/pathe": { "version": "2.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true }, "node_modules/expect-webdriverio/node_modules/pretty-format": { "version": "30.0.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz", + "integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==", "dev": true, - "license": "MIT", "dependencies": { "@jest/schemas": "30.0.1", "ansi-styles": "^5.2.0", @@ -14725,15 +17664,17 @@ }, "node_modules/expect-webdriverio/node_modules/tinyrainbow": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", "dev": true, - "license": "MIT", "engines": { "node": ">=14.0.0" } }, "node_modules/express": { "version": "5.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.0", @@ -14773,7 +17714,8 @@ }, "node_modules/express-rate-limit": { "version": "7.5.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.1.tgz", + "integrity": "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==", "engines": { "node": ">= 16" }, @@ -14786,8 +17728,9 @@ }, "node_modules/external-editor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, - "license": "MIT", "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -14799,8 +17742,9 @@ }, "node_modules/external-editor/node_modules/iconv-lite": { "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, - "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -14810,8 +17754,9 @@ }, "node_modules/extract-zip": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -14829,15 +17774,18 @@ }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-fifo": { "version": "1.3.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" }, "node_modules/fast-glob": { "version": "3.3.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -14851,7 +17799,8 @@ }, "node_modules/fast-glob/node_modules/glob-parent": { "version": "5.1.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dependencies": { "is-glob": "^4.0.1" }, @@ -14861,28 +17810,34 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true }, "node_modules/fast-redact": { "version": "3.5.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", + "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/fast-safe-stringify": { "version": "2.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true }, "node_modules/fast-uri": { "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", "funding": [ { "type": "github", @@ -14892,11 +17847,12 @@ "type": "opencollective", "url": "https://opencollective.com/fastify" } - ], - "license": "BSD-3-Clause" + ] }, "node_modules/fast-xml-parser": { "version": "4.4.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", + "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", "funding": [ { "type": "github", @@ -14907,7 +17863,6 @@ "url": "https://paypal.me/naturalintelligence" } ], - "license": "MIT", "dependencies": { "strnum": "^1.0.5" }, @@ -14917,21 +17872,24 @@ }, "node_modules/fastest-levenshtein": { "version": "1.0.16", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "engines": { "node": ">= 4.9.1" } }, "node_modules/fastq": { "version": "1.19.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/faye-websocket": { "version": "0.11.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dependencies": { "websocket-driver": ">=0.5.1" }, @@ -14941,23 +17899,26 @@ }, "node_modules/fb-watchman": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "bser": "2.1.1" } }, "node_modules/fd-slicer": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, - "license": "MIT", "dependencies": { "pend": "~1.2.0" } }, "node_modules/fdir": { "version": "6.4.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -14969,6 +17930,8 @@ }, "node_modules/fetch-blob": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", "dev": true, "funding": [ { @@ -14980,7 +17943,6 @@ "url": "https://paypal.me/jimmywarting" } ], - "license": "MIT", "dependencies": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" @@ -14991,8 +17953,9 @@ }, "node_modules/figures": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", "dev": true, - "license": "MIT", "dependencies": { "is-unicode-supported": "^2.0.0" }, @@ -15005,8 +17968,9 @@ }, "node_modules/figures/node_modules/is-unicode-supported": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=18" }, @@ -15016,8 +17980,9 @@ }, "node_modules/file-entry-cache": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, - "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -15027,16 +17992,18 @@ }, "node_modules/filelist": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, - "license": "Apache-2.0", "dependencies": { "minimatch": "^5.0.1" } }, "node_modules/filelist/node_modules/minimatch": { "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -15046,7 +18013,8 @@ }, "node_modules/fill-range": { "version": "7.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -15056,7 +18024,8 @@ }, "node_modules/finalhandler": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", "dependencies": { "debug": "^4.4.0", "encodeurl": "^2.0.0", @@ -15071,8 +18040,9 @@ }, "node_modules/find-up": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-7.0.0.tgz", + "integrity": "sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^7.2.0", "path-exists": "^5.0.0", @@ -15087,16 +18057,18 @@ }, "node_modules/flat": { "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, - "license": "BSD-3-Clause", "bin": { "flat": "cli.js" } }, "node_modules/flat-cache": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, - "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", @@ -15108,18 +18080,20 @@ }, "node_modules/flatted": { "version": "3.3.3", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true }, "node_modules/follow-redirects": { "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", "funding": [ { "type": "individual", "url": "https://github.com/sponsors/RubenVerborgh" } ], - "license": "MIT", "engines": { "node": ">=4.0" }, @@ -15131,7 +18105,8 @@ }, "node_modules/for-each": { "version": "0.3.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dependencies": { "is-callable": "^1.2.7" }, @@ -15144,7 +18119,8 @@ }, "node_modules/foreground-child": { "version": "3.3.1", - "license": "ISC", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" @@ -15158,7 +18134,8 @@ }, "node_modules/form-data": { "version": "4.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.3.tgz", + "integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -15172,14 +18149,16 @@ }, "node_modules/form-data/node_modules/mime-db": { "version": "1.52.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "engines": { "node": ">= 0.6" } }, "node_modules/form-data/node_modules/mime-types": { "version": "2.1.35", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dependencies": { "mime-db": "1.52.0" }, @@ -15189,8 +18168,9 @@ }, "node_modules/formdata-polyfill": { "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", "dev": true, - "license": "MIT", "dependencies": { "fetch-blob": "^3.1.2" }, @@ -15200,29 +18180,36 @@ }, "node_modules/forwarded": { "version": "0.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "engines": { "node": ">= 0.6" } }, "node_modules/fresh": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", "engines": { "node": ">= 0.8" } }, "node_modules/fs-constants": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "license": "MIT" }, "node_modules/fs.realpath": { "version": "1.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/fsevents": { "version": "2.3.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, "optional": true, "os": [ "darwin" @@ -15233,15 +18220,17 @@ }, "node_modules/function-bind": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/function.prototype.name": { "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", @@ -15259,21 +18248,26 @@ }, "node_modules/functions-have-names": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/fuse.js": { "version": "7.1.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.1.0.tgz", + "integrity": "sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ==", "engines": { "node": ">=10" } }, "node_modules/gauge": { "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", + "deprecated": "This package is no longer supported.", "license": "ISC", "dependencies": { "aproba": "^1.0.3", @@ -15288,6 +18282,8 @@ }, "node_modules/gauge/node_modules/ansi-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -15295,6 +18291,8 @@ }, "node_modules/gauge/node_modules/is-fullwidth-code-point": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", "license": "MIT", "dependencies": { "number-is-nan": "^1.0.0" @@ -15305,10 +18303,14 @@ }, "node_modules/gauge/node_modules/signal-exit": { "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "license": "ISC" }, "node_modules/gauge/node_modules/string-width": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", "license": "MIT", "dependencies": { "code-point-at": "^1.0.0", @@ -15321,6 +18323,8 @@ }, "node_modules/gauge/node_modules/strip-ansi": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "license": "MIT", "dependencies": { "ansi-regex": "^2.0.0" @@ -15331,9 +18335,10 @@ }, "node_modules/geckodriver": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-5.0.0.tgz", + "integrity": "sha512-vn7TtQ3b9VMJtVXsyWtQQl1fyBVFhQy7UvJF96kPuuJ0or5THH496AD3eUyaDD11+EqCxH9t6V+EP9soZQk4YQ==", "dev": true, "hasInstallScript": true, - "license": "MIT", "dependencies": { "@wdio/logger": "^9.1.3", "@zip.js/zip.js": "^2.7.53", @@ -15353,8 +18358,9 @@ }, "node_modules/geckodriver/node_modules/decamelize": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-6.0.0.tgz", + "integrity": "sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==", "dev": true, - "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -15364,16 +18370,18 @@ }, "node_modules/geckodriver/node_modules/isexe": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, - "license": "ISC", "engines": { "node": ">=16" } }, "node_modules/geckodriver/node_modules/tar-fs": { "version": "3.0.10", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.10.tgz", + "integrity": "sha512-C1SwlQGNLe/jPNqapK8epDsXME7CAJR5RL3GcE6KWx1d9OUByzoHVcbu1VPI8tevg9H8Alae0AApHHFGzrD5zA==", "dev": true, - "license": "MIT", "dependencies": { "pump": "^3.0.0", "tar-stream": "^3.1.5" @@ -15385,8 +18393,9 @@ }, "node_modules/geckodriver/node_modules/which": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", "dev": true, - "license": "ISC", "dependencies": { "isexe": "^3.1.1" }, @@ -15399,30 +18408,34 @@ }, "node_modules/gensync": { "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/get-caller-file": { "version": "2.0.5", - "license": "ISC", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-func-name": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/get-intrinsic": { "version": "1.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", @@ -15444,16 +18457,18 @@ }, "node_modules/get-package-type": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8.0.0" } }, "node_modules/get-port": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-7.1.0.tgz", + "integrity": "sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==", "dev": true, - "license": "MIT", "engines": { "node": ">=16" }, @@ -15463,7 +18478,8 @@ }, "node_modules/get-proto": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" @@ -15474,7 +18490,8 @@ }, "node_modules/get-stream": { "version": "5.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dependencies": { "pump": "^3.0.0" }, @@ -15487,8 +18504,9 @@ }, "node_modules/get-symbol-description": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", @@ -15503,8 +18521,9 @@ }, "node_modules/get-tsconfig": { "version": "4.10.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz", + "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==", "dev": true, - "license": "MIT", "dependencies": { "resolve-pkg-maps": "^1.0.0" }, @@ -15514,8 +18533,9 @@ }, "node_modules/get-uri": { "version": "6.0.4", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.4.tgz", + "integrity": "sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==", "dev": true, - "license": "MIT", "dependencies": { "basic-ftp": "^5.0.2", "data-uri-to-buffer": "^6.0.2", @@ -15527,16 +18547,18 @@ }, "node_modules/get-uri/node_modules/data-uri-to-buffer": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 14" } }, "node_modules/git-raw-commits": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz", + "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==", "dev": true, - "license": "MIT", "dependencies": { "dargs": "^8.0.0", "meow": "^12.0.1", @@ -15551,11 +18573,14 @@ }, "node_modules/github-from-package": { "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", "license": "MIT" }, "node_modules/glob": { "version": "10.4.5", - "license": "ISC", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -15573,8 +18598,9 @@ }, "node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -15584,13 +18610,15 @@ }, "node_modules/glob-to-regexp": { "version": "0.4.1", - "devOptional": true, - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "devOptional": true }, "node_modules/global-directory": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", + "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", "dev": true, - "license": "MIT", "dependencies": { "ini": "4.1.1" }, @@ -15603,16 +18631,18 @@ }, "node_modules/globals": { "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/globalthis": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, - "license": "MIT", "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" @@ -15626,7 +18656,8 @@ }, "node_modules/gopd": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "engines": { "node": ">= 0.4" }, @@ -15636,7 +18667,8 @@ }, "node_modules/got": { "version": "11.8.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", "dependencies": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", @@ -15659,26 +18691,31 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "license": "ISC" + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "node_modules/grapheme-splitter": { "version": "1.0.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true }, "node_modules/graphemer": { "version": "1.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true }, "node_modules/handle-thing": { "version": "2.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" }, "node_modules/has-bigints": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -15688,14 +18725,16 @@ }, "node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/has-property-descriptors": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dependencies": { "es-define-property": "^1.0.0" }, @@ -15705,8 +18744,9 @@ }, "node_modules/has-proto": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, - "license": "MIT", "dependencies": { "dunder-proto": "^1.0.0" }, @@ -15719,7 +18759,8 @@ }, "node_modules/has-symbols": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "engines": { "node": ">= 0.4" }, @@ -15729,7 +18770,8 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dependencies": { "has-symbols": "^1.0.3" }, @@ -15742,11 +18784,14 @@ }, "node_modules/has-unicode": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "license": "ISC" }, "node_modules/hash-base": { "version": "3.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz", + "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", "dependencies": { "inherits": "^2.0.4", "safe-buffer": "^5.2.1" @@ -15757,7 +18802,8 @@ }, "node_modules/hash.js": { "version": "1.1.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" @@ -15765,7 +18811,8 @@ }, "node_modules/hasown": { "version": "2.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dependencies": { "function-bind": "^1.1.2" }, @@ -15775,22 +18822,25 @@ }, "node_modules/he": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, - "license": "MIT", "bin": { "he": "bin/he" } }, "node_modules/highlight.js": { "version": "11.11.1", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz", + "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==", "engines": { "node": ">=12.0.0" } }, "node_modules/hmac-drbg": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -15799,8 +18849,9 @@ }, "node_modules/hosted-git-info": { "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", "dev": true, - "license": "ISC", "dependencies": { "lru-cache": "^10.0.1" }, @@ -15810,12 +18861,14 @@ }, "node_modules/hosted-git-info/node_modules/lru-cache": { "version": "10.4.3", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true }, "node_modules/hpack.js": { "version": "2.1.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", "dependencies": { "inherits": "^2.0.1", "obuf": "^1.0.0", @@ -15825,7 +18878,8 @@ }, "node_modules/hpack.js/node_modules/readable-stream": { "version": "2.3.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -15838,26 +18892,30 @@ }, "node_modules/hpack.js/node_modules/safe-buffer": { "version": "5.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/hpack.js/node_modules/string_decoder": { "version": "1.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/hpagent": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-1.2.0.tgz", + "integrity": "sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==", "engines": { "node": ">=14" } }, "node_modules/html-encoding-sniffer": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", "dev": true, - "license": "MIT", "dependencies": { "whatwg-encoding": "^3.1.1" }, @@ -15867,13 +18925,15 @@ }, "node_modules/html-escaper": { "version": "2.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true }, "node_modules/html-loader": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-5.1.0.tgz", + "integrity": "sha512-Jb3xwDbsm0W3qlXrCZwcYqYGnYz55hb6aoKQTlzyZPXsPpi6tHXzAfqalecglMQgNvtEfxrCQPaKT90Irt5XDA==", "dev": true, - "license": "MIT", "dependencies": { "html-minifier-terser": "^7.2.0", "parse5": "^7.1.2" @@ -15891,8 +18951,9 @@ }, "node_modules/html-minifier-terser": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", + "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", "dev": true, - "license": "MIT", "dependencies": { "camel-case": "^4.1.2", "clean-css": "~5.3.2", @@ -15911,16 +18972,18 @@ }, "node_modules/html-minifier-terser/node_modules/commander": { "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, - "license": "MIT", "engines": { "node": ">=14" } }, "node_modules/html-webpack-plugin": { "version": "5.6.3", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz", + "integrity": "sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==", "dev": true, - "license": "MIT", "dependencies": { "@types/html-minifier-terser": "^6.0.0", "html-minifier-terser": "^6.0.2", @@ -15950,16 +19013,18 @@ }, "node_modules/html-webpack-plugin/node_modules/commander": { "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true, - "license": "MIT", "engines": { "node": ">= 12" } }, "node_modules/html-webpack-plugin/node_modules/html-minifier-terser": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", "dev": true, - "license": "MIT", "dependencies": { "camel-case": "^4.1.2", "clean-css": "^5.2.2", @@ -15978,11 +19043,14 @@ }, "node_modules/htmlfy": { "version": "0.6.7", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/htmlfy/-/htmlfy-0.6.7.tgz", + "integrity": "sha512-r8hRd+oIM10lufovN+zr3VKPTYEIvIwqXGucidh2XQufmiw6sbUXFUFjWlfjo3AnefIDTyzykVzQ8IUVuT1peQ==", + "dev": true }, "node_modules/htmlparser2": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", @@ -15991,7 +19059,6 @@ "url": "https://github.com/sponsors/fb55" } ], - "license": "MIT", "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.0.0", @@ -16001,23 +19068,27 @@ }, "node_modules/htmlparser2/node_modules/entities": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, - "license": "BSD-2-Clause", "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/http-cache-semantics": { "version": "4.2.0", - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==" }, "node_modules/http-deceiver": { "version": "1.2.7", - "license": "MIT" + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" }, "node_modules/http-errors": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -16031,18 +19102,21 @@ }, "node_modules/http-errors/node_modules/statuses": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "engines": { "node": ">= 0.8" } }, "node_modules/http-parser-js": { "version": "0.5.10", - "license": "MIT" + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==" }, "node_modules/http-proxy": { "version": "1.18.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dependencies": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", @@ -16054,8 +19128,9 @@ }, "node_modules/http-proxy-agent": { "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, - "license": "MIT", "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -16066,7 +19141,8 @@ }, "node_modules/http-proxy-middleware": { "version": "2.0.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", "dependencies": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", @@ -16088,7 +19164,8 @@ }, "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "engines": { "node": ">=10" }, @@ -16098,7 +19175,8 @@ }, "node_modules/http2-wrapper": { "version": "1.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.0.0" @@ -16109,11 +19187,13 @@ }, "node_modules/https-browserify": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==" }, "node_modules/https-proxy-agent": { "version": "7.0.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dependencies": { "agent-base": "^7.1.2", "debug": "4" @@ -16124,16 +19204,18 @@ }, "node_modules/human-signals": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } }, "node_modules/husky": { "version": "9.1.7", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", + "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", "dev": true, - "license": "MIT", "bin": { "husky": "bin.js" }, @@ -16146,14 +19228,16 @@ }, "node_modules/hyperdyperid": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", "engines": { "node": ">=10.18" } }, "node_modules/iconv-lite": { "version": "0.6.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -16163,19 +19247,22 @@ }, "node_modules/ieee754": { "version": "1.1.13", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" }, "node_modules/ignore": { "version": "7.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "engines": { "node": ">= 4" } }, "node_modules/ignore-walk": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-7.0.0.tgz", + "integrity": "sha512-T4gbf83A4NH95zvhVYZc+qWocBBGlpzUXLPGurJggw/WIOwicfXJChLDP/iBZnN5WqROSu5Bm3hhle4z8a8YGQ==", "dev": true, - "license": "ISC", "dependencies": { "minimatch": "^9.0.0" }, @@ -16187,7 +19274,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/image-size/-/image-size-2.0.2.tgz", "integrity": "sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==", - "license": "MIT", "bin": { "image-size": "bin/image-size.js" }, @@ -16197,12 +19283,14 @@ }, "node_modules/immediate": { "version": "3.0.6", - "license": "MIT" + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" }, "node_modules/import-fresh": { "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, - "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -16216,16 +19304,18 @@ }, "node_modules/import-fresh/node_modules/resolve-from": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/import-local": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, - "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -16242,8 +19332,9 @@ }, "node_modules/import-meta-resolve": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", "dev": true, - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -16251,15 +19342,18 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.19" } }, "node_modules/inflight": { "version": "1.0.6", - "license": "ISC", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -16267,20 +19361,23 @@ }, "node_modules/inherits": { "version": "2.0.4", - "license": "ISC" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", "dev": true, - "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/inquirer": { "version": "11.1.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-11.1.0.tgz", + "integrity": "sha512-CmLAZT65GG/v30c+D2Fk8+ceP6pxD6RL+hIUOWAltCmeyEqWYwqu9v76q03OvjyZ3AB0C1Ala2stn1z/rMqGEw==", "dev": true, - "license": "MIT", "dependencies": { "@inquirer/core": "^9.2.1", "@inquirer/prompts": "^6.0.1", @@ -16297,8 +19394,9 @@ }, "node_modules/internal-slot": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, - "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", @@ -16310,16 +19408,18 @@ }, "node_modules/interpret": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/ip-address": { "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", "dev": true, - "license": "MIT", "dependencies": { "jsbn": "1.1.0", "sprintf-js": "^1.1.3" @@ -16330,19 +19430,22 @@ }, "node_modules/ip-address/node_modules/sprintf-js": { "version": "1.1.3", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true }, "node_modules/ipaddr.js": { "version": "1.9.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "engines": { "node": ">= 0.10" } }, "node_modules/is-arguments": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" @@ -16356,8 +19459,9 @@ }, "node_modules/is-array-buffer": { "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", @@ -16372,13 +19476,15 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true }, "node_modules/is-async-function": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", "dev": true, - "license": "MIT", "dependencies": { "async-function": "^1.0.0", "call-bound": "^1.0.3", @@ -16395,8 +19501,9 @@ }, "node_modules/is-bigint": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, - "license": "MIT", "dependencies": { "has-bigints": "^1.0.2" }, @@ -16409,7 +19516,8 @@ }, "node_modules/is-binary-path": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -16419,8 +19527,9 @@ }, "node_modules/is-boolean-object": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" @@ -16434,7 +19543,8 @@ }, "node_modules/is-callable": { "version": "1.2.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "engines": { "node": ">= 0.4" }, @@ -16444,8 +19554,9 @@ }, "node_modules/is-core-module": { "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, - "license": "MIT", "dependencies": { "hasown": "^2.0.2" }, @@ -16458,8 +19569,9 @@ }, "node_modules/is-data-view": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", @@ -16474,8 +19586,9 @@ }, "node_modules/is-date-object": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" @@ -16489,7 +19602,8 @@ }, "node_modules/is-docker": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", "bin": { "is-docker": "cli.js" }, @@ -16502,19 +19616,22 @@ }, "node_modules/is-electron": { "version": "2.2.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-electron/-/is-electron-2.2.2.tgz", + "integrity": "sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==" }, "node_modules/is-extglob": { "version": "2.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "engines": { "node": ">=0.10.0" } }, "node_modules/is-finalizationregistry": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.3" }, @@ -16527,22 +19644,25 @@ }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "engines": { "node": ">=8" } }, "node_modules/is-generator-fn": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/is-generator-function": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", "dependencies": { "call-bound": "^1.0.3", "get-proto": "^1.0.0", @@ -16558,7 +19678,8 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dependencies": { "is-extglob": "^2.1.1" }, @@ -16568,7 +19689,8 @@ }, "node_modules/is-inside-container": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", "dependencies": { "is-docker": "^3.0.0" }, @@ -16582,10 +19704,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-it-type": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/is-it-type/-/is-it-type-5.1.2.tgz", + "integrity": "sha512-q/gOZQTNYABAxaXWnBKZjTFH4yACvWEFtgVOj+LbgxYIgAJG1xVmUZOsECSrZPIemYUQvaQWVilSFVbh4Eyt8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.16.7", + "globalthis": "^1.0.2" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/is-map": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -16595,8 +19732,9 @@ }, "node_modules/is-nan": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.0", "define-properties": "^1.1.3" @@ -16610,8 +19748,9 @@ }, "node_modules/is-negative-zero": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -16621,7 +19760,8 @@ }, "node_modules/is-network-error": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", + "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", "engines": { "node": ">=16" }, @@ -16631,15 +19771,17 @@ }, "node_modules/is-number": { "version": "7.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "engines": { "node": ">=0.12.0" } }, "node_modules/is-number-object": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" @@ -16653,32 +19795,36 @@ }, "node_modules/is-obj": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-path-inside": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-plain-obj": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-plain-object": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, - "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -16688,16 +19834,19 @@ }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true }, "node_modules/is-promise": { "version": "4.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" }, "node_modules/is-regex": { "version": "1.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", @@ -16713,8 +19862,9 @@ }, "node_modules/is-set": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -16724,8 +19874,9 @@ }, "node_modules/is-shared-array-buffer": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.3" }, @@ -16738,7 +19889,8 @@ }, "node_modules/is-stream": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "engines": { "node": ">=8" }, @@ -16748,8 +19900,9 @@ }, "node_modules/is-string": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" @@ -16763,8 +19916,9 @@ }, "node_modules/is-symbol": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "has-symbols": "^1.1.0", @@ -16779,8 +19933,9 @@ }, "node_modules/is-text-path": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-2.0.0.tgz", + "integrity": "sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==", "dev": true, - "license": "MIT", "dependencies": { "text-extensions": "^2.0.0" }, @@ -16790,7 +19945,8 @@ }, "node_modules/is-typed-array": { "version": "1.1.15", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dependencies": { "which-typed-array": "^1.1.16" }, @@ -16803,8 +19959,9 @@ }, "node_modules/is-unicode-supported": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -16814,8 +19971,9 @@ }, "node_modules/is-weakmap": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -16825,8 +19983,9 @@ }, "node_modules/is-weakref": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.3" }, @@ -16839,8 +19998,9 @@ }, "node_modules/is-weakset": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" @@ -16854,7 +20014,8 @@ }, "node_modules/is-wsl": { "version": "3.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", "dependencies": { "is-inside-container": "^1.0.0" }, @@ -16867,32 +20028,37 @@ }, "node_modules/isarray": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "node_modules/isexe": { "version": "2.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/isobject": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-instrument": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.23.9", "@babel/parser": "^7.23.9", @@ -16906,8 +20072,9 @@ }, "node_modules/istanbul-lib-instrument/node_modules/semver": { "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -16917,8 +20084,9 @@ }, "node_modules/istanbul-lib-report": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", @@ -16930,8 +20098,9 @@ }, "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^3.0.0", @@ -16943,8 +20112,9 @@ }, "node_modules/istanbul-reports": { "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -16955,7 +20125,8 @@ }, "node_modules/jackspeak": { "version": "3.4.3", - "license": "BlueOak-1.0.0", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -16968,8 +20139,9 @@ }, "node_modules/jake": { "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "async": "^3.2.3", "chalk": "^4.0.2", @@ -16985,8 +20157,9 @@ }, "node_modules/jake/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -16999,8 +20172,9 @@ }, "node_modules/jake/node_modules/brace-expansion": { "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -17008,8 +20182,9 @@ }, "node_modules/jake/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -17023,8 +20198,9 @@ }, "node_modules/jake/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -17034,8 +20210,9 @@ }, "node_modules/jest": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", "dev": true, - "license": "MIT", "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", @@ -17059,8 +20236,9 @@ }, "node_modules/jest-changed-files": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", "dev": true, - "license": "MIT", "dependencies": { "execa": "^5.0.0", "jest-util": "^29.7.0", @@ -17072,8 +20250,9 @@ }, "node_modules/jest-circus": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", "dev": true, - "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", @@ -17102,8 +20281,9 @@ }, "node_modules/jest-circus/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -17116,8 +20296,9 @@ }, "node_modules/jest-circus/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -17131,8 +20312,9 @@ }, "node_modules/jest-cli": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", "dev": true, - "license": "MIT", "dependencies": { "@jest/core": "^29.7.0", "@jest/test-result": "^29.7.0", @@ -17163,8 +20345,9 @@ }, "node_modules/jest-cli/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -17177,8 +20360,9 @@ }, "node_modules/jest-cli/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -17192,8 +20376,9 @@ }, "node_modules/jest-config": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@jest/test-sequencer": "^29.7.0", @@ -17236,8 +20421,9 @@ }, "node_modules/jest-config/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -17250,8 +20436,9 @@ }, "node_modules/jest-config/node_modules/brace-expansion": { "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -17259,8 +20446,9 @@ }, "node_modules/jest-config/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -17274,8 +20462,10 @@ }, "node_modules/jest-config/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -17293,8 +20483,9 @@ }, "node_modules/jest-config/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -17304,8 +20495,9 @@ }, "node_modules/jest-diff": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", @@ -17318,8 +20510,9 @@ }, "node_modules/jest-diff/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -17332,8 +20525,9 @@ }, "node_modules/jest-diff/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -17347,8 +20541,9 @@ }, "node_modules/jest-docblock": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, - "license": "MIT", "dependencies": { "detect-newline": "^3.0.0" }, @@ -17358,8 +20553,9 @@ }, "node_modules/jest-each": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", "dev": true, - "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -17373,8 +20569,9 @@ }, "node_modules/jest-each/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -17387,8 +20584,9 @@ }, "node_modules/jest-each/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -17402,8 +20600,9 @@ }, "node_modules/jest-environment-node": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, - "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -17418,16 +20617,18 @@ }, "node_modules/jest-get-type": { "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, - "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-haste-map": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, - "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -17450,8 +20651,9 @@ }, "node_modules/jest-leak-detector": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, - "license": "MIT", "dependencies": { "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" @@ -17462,8 +20664,9 @@ }, "node_modules/jest-matcher-utils": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.0.0", "jest-diff": "^29.7.0", @@ -17476,8 +20679,9 @@ }, "node_modules/jest-matcher-utils/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -17490,8 +20694,9 @@ }, "node_modules/jest-matcher-utils/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -17505,8 +20710,9 @@ }, "node_modules/jest-message-util": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", "dev": true, - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^29.6.3", @@ -17524,8 +20730,9 @@ }, "node_modules/jest-message-util/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -17538,8 +20745,9 @@ }, "node_modules/jest-message-util/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -17553,8 +20761,9 @@ }, "node_modules/jest-mock": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, - "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -17566,8 +20775,9 @@ }, "node_modules/jest-pnp-resolver": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" }, @@ -17582,16 +20792,18 @@ }, "node_modules/jest-regex-util": { "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, - "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-resolve": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", @@ -17609,8 +20821,9 @@ }, "node_modules/jest-resolve-dependencies": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", "dev": true, - "license": "MIT", "dependencies": { "jest-regex-util": "^29.6.3", "jest-snapshot": "^29.7.0" @@ -17621,8 +20834,9 @@ }, "node_modules/jest-resolve/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -17635,8 +20849,9 @@ }, "node_modules/jest-resolve/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -17650,8 +20865,9 @@ }, "node_modules/jest-runner": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, - "license": "MIT", "dependencies": { "@jest/console": "^29.7.0", "@jest/environment": "^29.7.0", @@ -17681,8 +20897,9 @@ }, "node_modules/jest-runner/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -17695,8 +20912,9 @@ }, "node_modules/jest-runner/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -17710,8 +20928,9 @@ }, "node_modules/jest-runtime": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", "dev": true, - "license": "MIT", "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -17742,8 +20961,9 @@ }, "node_modules/jest-runtime/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -17756,8 +20976,9 @@ }, "node_modules/jest-runtime/node_modules/brace-expansion": { "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -17765,8 +20986,9 @@ }, "node_modules/jest-runtime/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -17780,8 +21002,10 @@ }, "node_modules/jest-runtime/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -17799,8 +21023,9 @@ }, "node_modules/jest-runtime/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -17810,8 +21035,9 @@ }, "node_modules/jest-snapshot": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", @@ -17840,8 +21066,9 @@ }, "node_modules/jest-snapshot/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -17854,8 +21081,9 @@ }, "node_modules/jest-snapshot/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -17869,8 +21097,9 @@ }, "node_modules/jest-snapshot/node_modules/semver": { "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -17880,8 +21109,9 @@ }, "node_modules/jest-util": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, - "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -17896,8 +21126,9 @@ }, "node_modules/jest-util/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -17910,8 +21141,9 @@ }, "node_modules/jest-util/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -17925,8 +21157,9 @@ }, "node_modules/jest-util/node_modules/picomatch": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8.6" }, @@ -17936,8 +21169,9 @@ }, "node_modules/jest-validate": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", "dev": true, - "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", "camelcase": "^6.2.0", @@ -17952,8 +21186,9 @@ }, "node_modules/jest-validate/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -17966,8 +21201,9 @@ }, "node_modules/jest-validate/node_modules/camelcase": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -17977,8 +21213,9 @@ }, "node_modules/jest-validate/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -17992,8 +21229,9 @@ }, "node_modules/jest-watcher": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, - "license": "MIT", "dependencies": { "@jest/test-result": "^29.7.0", "@jest/types": "^29.6.3", @@ -18010,8 +21248,9 @@ }, "node_modules/jest-watcher/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -18024,8 +21263,9 @@ }, "node_modules/jest-watcher/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -18039,8 +21279,9 @@ }, "node_modules/jest-worker": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -18053,8 +21294,9 @@ }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -18067,21 +21309,25 @@ }, "node_modules/jiti": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", + "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", "dev": true, - "license": "MIT", "bin": { "jiti": "lib/jiti-cli.mjs" } }, "node_modules/jmespath": { "version": "0.16.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", "engines": { "node": ">= 0.6.0" } }, "node_modules/jose": { "version": "5.10.0", + "resolved": "https://registry.npmjs.org/jose/-/jose-5.10.0.tgz", + "integrity": "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/panva" @@ -18089,25 +21335,29 @@ }, "node_modules/joycon": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/js-md5": { "version": "0.8.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/js-md5/-/js-md5-0.8.3.tgz", + "integrity": "sha512-qR0HB5uP6wCuRMrWPTrkMaev7MJZwJuuw4fnwAzRgP4J4/F8RwtodOKpGp4XpqsLBFzzgqIO42efFAyz2Et6KQ==" }, "node_modules/js-tokens": { "version": "4.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true }, "node_modules/js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -18117,13 +21367,15 @@ }, "node_modules/jsbn": { "version": "1.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true }, "node_modules/jsdom": { "version": "24.1.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.3.tgz", + "integrity": "sha512-MyL55p3Ut3cXbeBEG7Hcv0mVM8pp8PBNWxRqchZnSfAiES1v1mRnMeFfaHWIPULpwsYfvO+ZmMZz5tGCnjzDUQ==", "dev": true, - "license": "MIT", "dependencies": { "cssstyle": "^4.0.1", "data-urls": "^5.0.0", @@ -18161,8 +21413,9 @@ }, "node_modules/jsesc": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, - "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -18172,31 +21425,37 @@ }, "node_modules/json-buffer": { "version": "3.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "devOptional": true }, "node_modules/json-rpc-2.0": { "version": "1.7.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-rpc-2.0/-/json-rpc-2.0-1.7.0.tgz", + "integrity": "sha512-asnLgC1qD5ytP+fvBP8uL0rvj+l8P6iYICbzZ8dVxCpESffVjzA7KkYkbKCIbavs7cllwH1ZUaNtJwphdeRqpg==", + "dev": true }, "node_modules/json-schema-traverse": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true }, "node_modules/json5": { "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, - "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -18206,20 +21465,23 @@ }, "node_modules/jsonc-parser": { "version": "3.3.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==" }, "node_modules/jsonparse": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true, "engines": [ "node >= 0.2.0" - ], - "license": "MIT" + ] }, "node_modules/JSONStream": { "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, - "license": "(MIT OR Apache-2.0)", "dependencies": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" @@ -18233,7 +21495,8 @@ }, "node_modules/jszip": { "version": "3.10.1", - "license": "(MIT OR GPL-3.0-or-later)", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", "dependencies": { "lie": "~3.3.0", "pako": "~1.0.2", @@ -18243,7 +21506,8 @@ }, "node_modules/jszip/node_modules/readable-stream": { "version": "2.3.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -18256,50 +21520,58 @@ }, "node_modules/jszip/node_modules/safe-buffer": { "version": "5.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/jszip/node_modules/string_decoder": { "version": "1.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/just-clone": { "version": "6.2.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/just-clone/-/just-clone-6.2.0.tgz", + "integrity": "sha512-1IynUYEc/HAwxhi3WDpIpxJbZpMCvvrrmZVqvj9EhpvbH8lls7HhdhiByjL7DkAaWlLIzpC0Xc/VPvy/UxLNjA==" }, "node_modules/just-extend": { "version": "6.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", + "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", + "dev": true }, "node_modules/keyv": { "version": "4.5.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dependencies": { "json-buffer": "3.0.1" } }, "node_modules/kind-of": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/kleur": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/launch-editor": { "version": "2.10.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.10.0.tgz", + "integrity": "sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==", "dependencies": { "picocolors": "^1.0.0", "shell-quote": "^1.8.1" @@ -18307,7 +21579,8 @@ }, "node_modules/lazystream": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "dependencies": { "readable-stream": "^2.0.5" }, @@ -18317,7 +21590,8 @@ }, "node_modules/lazystream/node_modules/readable-stream": { "version": "2.3.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -18330,27 +21604,31 @@ }, "node_modules/lazystream/node_modules/safe-buffer": { "version": "5.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/lazystream/node_modules/string_decoder": { "version": "1.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/leven": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/levn": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -18361,28 +21639,32 @@ }, "node_modules/lie": { "version": "3.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", "dependencies": { "immediate": "~3.0.5" } }, "node_modules/lines-and-columns": { "version": "1.2.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true }, "node_modules/loader-runner": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "devOptional": true, - "license": "MIT", "engines": { "node": ">=6.11.5" } }, "node_modules/loader-utils": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dev": true, - "license": "MIT", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -18394,6 +21676,8 @@ }, "node_modules/locate-app": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/locate-app/-/locate-app-2.5.0.tgz", + "integrity": "sha512-xIqbzPMBYArJRmPGUZD9CzV9wOqmVtQnaAn3wrj3s6WYW0bQvPI7x+sPYUGmDTYMHefVK//zc6HEYZ1qnxIK+Q==", "dev": true, "funding": [ { @@ -18405,7 +21689,6 @@ "url": "https://github.com/hejny/locate-app/blob/main/README.md#%EF%B8%8F-contributing" } ], - "license": "Apache-2.0", "dependencies": { "@promptbook/utils": "0.69.5", "type-fest": "4.26.0", @@ -18414,8 +21697,9 @@ }, "node_modules/locate-app/node_modules/type-fest": { "version": "4.26.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.26.0.tgz", + "integrity": "sha512-OduNjVJsFbifKb57UqZ2EMP1i4u64Xwow3NYXUtBbD4vIwJdQd4+xl8YDou1dlm4DVrtwT/7Ky8z8WyCULVfxw==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=16" }, @@ -18425,8 +21709,9 @@ }, "node_modules/locate-path": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^6.0.0" }, @@ -18439,97 +21724,118 @@ }, "node_modules/lodash": { "version": "4.17.21", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash.camelcase": { "version": "4.3.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true }, "node_modules/lodash.clonedeep": { "version": "4.5.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "dev": true }, "node_modules/lodash.flattendeep": { "version": "4.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", + "dev": true }, "node_modules/lodash.get": { "version": "4.4.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", + "dev": true }, "node_modules/lodash.isequal": { "version": "4.5.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "dev": true }, "node_modules/lodash.isplainobject": { "version": "4.0.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true }, "node_modules/lodash.kebabcase": { "version": "4.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", + "dev": true }, "node_modules/lodash.memoize": { "version": "4.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true }, "node_modules/lodash.merge": { "version": "4.6.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true }, "node_modules/lodash.mergewith": { "version": "4.6.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", + "dev": true }, "node_modules/lodash.pickby": { "version": "4.6.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.pickby/-/lodash.pickby-4.6.0.tgz", + "integrity": "sha512-AZV+GsS/6ckvPOVQPXSiFFacKvKB4kOQu6ynt9wz0F3LO4R9Ij4K1ddYsIytDpSgLz88JHd9P+oaLeej5/Sl7Q==", + "dev": true }, "node_modules/lodash.snakecase": { "version": "4.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", + "dev": true }, "node_modules/lodash.startcase": { "version": "4.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", + "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", + "dev": true }, "node_modules/lodash.union": { "version": "4.6.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", + "dev": true }, "node_modules/lodash.uniq": { "version": "4.5.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true }, "node_modules/lodash.upperfirst": { "version": "4.3.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", + "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", + "dev": true }, "node_modules/lodash.zip": { "version": "4.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", + "integrity": "sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==", + "dev": true }, "node_modules/log-symbols": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -18543,8 +21849,9 @@ }, "node_modules/log-symbols/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -18557,8 +21864,9 @@ }, "node_modules/log-symbols/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -18572,8 +21880,9 @@ }, "node_modules/loglevel": { "version": "1.9.2", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.2.tgz", + "integrity": "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6.0" }, @@ -18584,51 +21893,59 @@ }, "node_modules/loglevel-plugin-prefix": { "version": "0.8.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", + "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", + "dev": true }, "node_modules/lokijs": { "version": "1.5.12", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lokijs/-/lokijs-1.5.12.tgz", + "integrity": "sha512-Q5ALD6JiS6xAUWCwX3taQmgwxyveCtIIuL08+ml0nHwT3k0S/GIFJN+Hd38b1qYIMaE5X++iqsqWVksz7SYW+Q==" }, "node_modules/long": { "version": "5.3.2", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==" }, "node_modules/loupe": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, - "license": "MIT", "dependencies": { "get-func-name": "^2.0.1" } }, "node_modules/lower-case": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^2.0.3" } }, "node_modules/lowercase-keys": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "engines": { "node": ">=8" } }, "node_modules/lru-cache": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, - "license": "ISC", "dependencies": { "yallist": "^3.0.2" } }, "node_modules/mac-ca": { "version": "3.1.3", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/mac-ca/-/mac-ca-3.1.3.tgz", + "integrity": "sha512-yAdth+3TAfAyYYxNlnIJxKJbNOVvn9ZiQ1C9XJAj8ThKBBd5hu581sFjld3wr4DSrHcQwn7rt+t6dLiB+vFEFQ==", "dependencies": { "node-forge": "^1.3.1", "undici": "^6.16.1" @@ -18636,20 +21953,32 @@ }, "node_modules/mac-system-proxy": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mac-system-proxy/-/mac-system-proxy-1.0.4.tgz", + "integrity": "sha512-IAkNLxXZrYuM99A2OhPrvUoAxohsxQciJh2D2xnD+R6vypn/AVyOYLsbZsMVCS/fEbLIe67nQ8krEAfqP12BVg==", "license": "Apache-2.0" }, "node_modules/magic-string": { "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", "dev": true, - "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } }, + "node_modules/make-array": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/make-array/-/make-array-0.1.2.tgz", + "integrity": "sha512-bcFmxgZ+OTaMYJp/w6eifElKTcfum7Gi5H7vQ8KzAf9X6swdxkVuilCaG3ZjXr/qJsQT4JJ2Rq9SDYScWEdu9Q==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/make-dir": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -18662,8 +21991,9 @@ }, "node_modules/make-dir/node_modules/semver": { "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -18673,20 +22003,23 @@ }, "node_modules/make-error": { "version": "1.3.6", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true }, "node_modules/makeerror": { "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "tmpl": "1.0.5" } }, "node_modules/marked": { "version": "14.1.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/marked/-/marked-14.1.4.tgz", + "integrity": "sha512-vkVZ8ONmUdPnjCKc5uTRvmkRbx4EAi2OkTOXmfTDhZz3OFqMNBM1oTTWwTr4HY4uAEojhzPf+Fy8F1DWa3Sndg==", "bin": { "marked": "bin/marked.js" }, @@ -18696,14 +22029,16 @@ }, "node_modules/math-intrinsics": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "engines": { "node": ">= 0.4" } }, "node_modules/md5.js": { "version": "1.3.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1", @@ -18712,14 +22047,16 @@ }, "node_modules/media-typer": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", "engines": { "node": ">= 0.8" } }, "node_modules/memfs": { "version": "4.17.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.17.2.tgz", + "integrity": "sha512-NgYhCOWgovOXSzvYgUW0LQ7Qy72rWQMGGFJDoWg4G30RHd3z77VbYdtJ4fembJXBy8pMIUA31XNAupobOQlwdg==", "dependencies": { "@jsonjoy.com/json-pack": "^1.0.3", "@jsonjoy.com/util": "^1.3.0", @@ -18736,8 +22073,9 @@ }, "node_modules/meow": { "version": "12.1.1", + "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", + "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", "dev": true, - "license": "MIT", "engines": { "node": ">=16.10" }, @@ -18747,7 +22085,8 @@ }, "node_modules/merge-descriptors": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", "engines": { "node": ">=18" }, @@ -18757,26 +22096,30 @@ }, "node_modules/merge-stream": { "version": "2.0.0", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "devOptional": true }, "node_modules/merge2": { "version": "1.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "engines": { "node": ">= 8" } }, "node_modules/methods": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "engines": { "node": ">= 0.6" } }, "node_modules/micromatch": { "version": "4.0.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -18787,7 +22130,8 @@ }, "node_modules/micromatch/node_modules/picomatch": { "version": "2.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "engines": { "node": ">=8.6" }, @@ -18797,7 +22141,8 @@ }, "node_modules/miller-rabin": { "version": "4.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dependencies": { "bn.js": "^4.0.0", "brorand": "^1.0.1" @@ -18808,11 +22153,13 @@ }, "node_modules/miller-rabin/node_modules/bn.js": { "version": "4.12.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==" }, "node_modules/mime": { "version": "1.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "bin": { "mime": "cli.js" }, @@ -18822,14 +22169,16 @@ }, "node_modules/mime-db": { "version": "1.54.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { "version": "3.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", "dependencies": { "mime-db": "^1.54.0" }, @@ -18839,30 +22188,35 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/mimic-response": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "engines": { "node": ">=4" } }, "node_modules/minimalistic-assert": { "version": "1.0.1", - "license": "ISC" + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" }, "node_modules/minimatch": { "version": "9.0.5", - "license": "ISC", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -18875,21 +22229,32 @@ }, "node_modules/minimist": { "version": "1.2.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/minipass": { "version": "7.1.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "engines": { "node": ">=16 || 14 >=14.17" } }, + "node_modules/mix2": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/mix2/-/mix2-1.0.5.tgz", + "integrity": "sha512-ybWz7nY+WHBBIyliND5eYaJKzkoa+qXRYNTmVqAxSLlFtL/umT2iv+pmyTu1oU7WNkrirwheqR8d9EaKVz0e5g==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/mkdirp": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "bin": { "mkdirp": "bin/cmd.js" }, @@ -18899,12 +22264,15 @@ }, "node_modules/mkdirp-classic": { "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "license": "MIT" }, "node_modules/mocha": { "version": "11.7.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.7.1.tgz", + "integrity": "sha512-5EK+Cty6KheMS/YLPPMJC64g5V61gIR25KsRItHw6x4hEKT6Njp1n9LOlH4gpevuwMVS66SXaBBpg+RWZkza4A==", "dev": true, - "license": "MIT", "dependencies": { "browser-stdout": "^1.3.1", "chokidar": "^4.0.1", @@ -18937,8 +22305,9 @@ }, "node_modules/mocha/node_modules/find-up": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -18952,8 +22321,9 @@ }, "node_modules/mocha/node_modules/locate-path": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -18966,8 +22336,9 @@ }, "node_modules/mocha/node_modules/p-locate": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -18980,16 +22351,18 @@ }, "node_modules/mocha/node_modules/path-exists": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -19002,27 +22375,31 @@ }, "node_modules/mock-fs": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-5.5.0.tgz", + "integrity": "sha512-d/P1M/RacgM3dB0sJ8rjeRNXxtapkPCUnMGmIN0ixJ16F/E4GUZCvWcSGfWGz8eaXYvn1s9baUwNjI4LOPEjiA==", "dev": true, - "license": "MIT", "engines": { "node": ">=12.0.0" } }, "node_modules/mri": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/ms": { "version": "2.1.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/multicast-dns": { "version": "7.2.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "dependencies": { "dns-packet": "^5.2.2", "thunky": "^1.0.2" @@ -19033,21 +22410,23 @@ }, "node_modules/mute-stream": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", "dev": true, - "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/nanoid": { "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -19057,37 +22436,44 @@ }, "node_modules/napi-build-utils": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", "license": "MIT" }, "node_modules/natural-compare": { "version": "1.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true }, "node_modules/negotiator": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "engines": { "node": ">= 0.6" } }, "node_modules/neo-async": { "version": "2.6.2", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "devOptional": true }, "node_modules/netmask": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4.0" } }, "node_modules/nise": { "version": "6.1.1", + "resolved": "https://registry.npmjs.org/nise/-/nise-6.1.1.tgz", + "integrity": "sha512-aMSAzLVY7LyeM60gvBS423nBmIPP+Wy7St7hsb+8/fc1HmeoHJfLO8CKse4u3BtOZvQLJghYPI2i/1WZrEj5/g==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1", "@sinonjs/fake-timers": "^13.0.1", @@ -19098,16 +22484,18 @@ }, "node_modules/nise/node_modules/@sinonjs/fake-timers": { "version": "13.0.5", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", + "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1" } }, "node_modules/no-case": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dev": true, - "license": "MIT", "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" @@ -19115,6 +22503,8 @@ }, "node_modules/node-abi": { "version": "2.30.1", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", + "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", "license": "MIT", "dependencies": { "semver": "^5.4.1" @@ -19122,6 +22512,8 @@ }, "node_modules/node-abi/node_modules/semver": { "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "license": "ISC", "bin": { "semver": "bin/semver" @@ -19129,10 +22521,15 @@ }, "node_modules/node-addon-api": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", "license": "MIT" }, "node_modules/node-domexception": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", "dev": true, "funding": [ { @@ -19144,15 +22541,15 @@ "url": "https://paypal.me/jimmywarting" } ], - "license": "MIT", "engines": { "node": ">=10.5.0" } }, "node_modules/node-fetch": { "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", "dev": true, - "license": "MIT", "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", @@ -19168,20 +22565,23 @@ }, "node_modules/node-forge": { "version": "1.3.1", - "license": "(BSD-3-Clause OR GPL-2.0)", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "engines": { "node": ">= 6.13.0" } }, "node_modules/node-int64": { "version": "0.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true }, "node_modules/node-loader": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/node-loader/-/node-loader-2.1.0.tgz", + "integrity": "sha512-OwjPkyh8+7jW8DMd/iq71uU1Sspufr/C2+c3t0p08J3CrM9ApZ4U53xuisNrDXOHyGi5OYHgtfmmh+aK9zJA6g==", "dev": true, - "license": "MIT", "dependencies": { "loader-utils": "^2.0.3" }, @@ -19198,12 +22598,14 @@ }, "node_modules/node-releases": { "version": "2.0.19", - "devOptional": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "devOptional": true }, "node_modules/noms": { "version": "0.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz", + "integrity": "sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==", "dependencies": { "inherits": "^2.0.1", "readable-stream": "~1.0.31" @@ -19211,11 +22613,13 @@ }, "node_modules/noms/node_modules/isarray": { "version": "0.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" }, "node_modules/noms/node_modules/readable-stream": { "version": "1.0.34", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", @@ -19225,16 +22629,20 @@ }, "node_modules/noms/node_modules/string_decoder": { "version": "0.10.31", - "license": "MIT" + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" }, "node_modules/noop-logger": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", + "integrity": "sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ==", "license": "MIT" }, "node_modules/normalize-package-data": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^7.0.0", "semver": "^7.3.5", @@ -19246,8 +22654,9 @@ }, "node_modules/normalize-package-data/node_modules/semver": { "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -19257,14 +22666,16 @@ }, "node_modules/normalize-path": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "engines": { "node": ">=0.10.0" } }, "node_modules/normalize-url": { "version": "6.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "engines": { "node": ">=10" }, @@ -19274,8 +22685,9 @@ }, "node_modules/npm-run-path": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, - "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -19285,6 +22697,9 @@ }, "node_modules/npmlog": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "deprecated": "This package is no longer supported.", "license": "ISC", "dependencies": { "are-we-there-yet": "~1.1.2", @@ -19295,8 +22710,9 @@ }, "node_modules/nth-check": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0" }, @@ -19306,6 +22722,8 @@ }, "node_modules/number-is-nan": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -19313,19 +22731,22 @@ }, "node_modules/nwsapi": { "version": "2.2.20", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz", + "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==", + "dev": true }, "node_modules/object-assign": { "version": "4.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "engines": { "node": ">=0.10.0" } }, "node_modules/object-inspect": { "version": "1.13.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "engines": { "node": ">= 0.4" }, @@ -19335,8 +22756,9 @@ }, "node_modules/object-is": { "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1" @@ -19350,16 +22772,18 @@ }, "node_modules/object-keys": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", @@ -19377,8 +22801,9 @@ }, "node_modules/object.fromentries": { "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -19394,8 +22819,9 @@ }, "node_modules/object.groupby": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -19407,8 +22833,9 @@ }, "node_modules/object.values": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", @@ -19424,16 +22851,19 @@ }, "node_modules/obuf": { "version": "1.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" }, "node_modules/on-exit-leak-free": { "version": "0.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz", + "integrity": "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==", + "dev": true }, "node_modules/on-finished": { "version": "2.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dependencies": { "ee-first": "1.1.1" }, @@ -19443,22 +22873,25 @@ }, "node_modules/on-headers": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "engines": { "node": ">= 0.8" } }, "node_modules/once": { "version": "1.4.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dependencies": { "wrappy": "1" } }, "node_modules/onetime": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, - "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -19471,7 +22904,8 @@ }, "node_modules/open": { "version": "10.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.2.tgz", + "integrity": "sha512-cxN6aIDPz6rm8hbebcP7vrQNhvRcveZoJU72Y7vskh4oIm+BZwBECnx5nTmrlres1Qapvx27Qo1Auukpf8PKXw==", "dependencies": { "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", @@ -19487,8 +22921,9 @@ }, "node_modules/optionator": { "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, - "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -19503,10 +22938,13 @@ }, "node_modules/os-browserify": { "version": "0.3.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==" }, "node_modules/os-proxy-config": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/os-proxy-config/-/os-proxy-config-1.1.2.tgz", + "integrity": "sha512-sV7htE8y6NQORU0oKOUGTwQYe1gSFK3a3Z1i4h6YaqdrA9C0JIsUPQAqEkO8ejjYbRrQ+jsnks5qjtisr7042Q==", "license": "Apache-2.0", "dependencies": { "mac-system-proxy": "^1.0.0", @@ -19515,16 +22953,18 @@ }, "node_modules/os-tmpdir": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/own-keys": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", "dev": true, - "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.6", "object-keys": "^1.1.1", @@ -19539,15 +22979,17 @@ }, "node_modules/p-cancelable": { "version": "2.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", "engines": { "node": ">=8" } }, "node_modules/p-limit": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -19560,8 +23002,9 @@ }, "node_modules/p-locate": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^4.0.0" }, @@ -19574,8 +23017,9 @@ }, "node_modules/p-locate/node_modules/p-limit": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "dev": true, - "license": "MIT", "dependencies": { "yocto-queue": "^1.0.0" }, @@ -19588,8 +23032,9 @@ }, "node_modules/p-locate/node_modules/yocto-queue": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", + "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", "dev": true, - "license": "MIT", "engines": { "node": ">=12.20" }, @@ -19599,7 +23044,8 @@ }, "node_modules/p-retry": { "version": "6.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", + "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", "dependencies": { "@types/retry": "0.12.2", "is-network-error": "^1.0.0", @@ -19614,16 +23060,18 @@ }, "node_modules/p-try": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/pac-proxy-agent": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", + "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", "dev": true, - "license": "MIT", "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", "agent-base": "^7.1.2", @@ -19640,8 +23088,9 @@ }, "node_modules/pac-resolver": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", "dev": true, - "license": "MIT", "dependencies": { "degenerator": "^5.0.0", "netmask": "^2.0.2" @@ -19652,16 +23101,19 @@ }, "node_modules/package-json-from-dist": { "version": "1.0.1", - "license": "BlueOak-1.0.0" + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" }, "node_modules/pako": { "version": "1.0.11", - "license": "(MIT AND Zlib)" + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" }, "node_modules/param-case": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", "dev": true, - "license": "MIT", "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" @@ -19669,8 +23121,9 @@ }, "node_modules/parent-module": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -19680,7 +23133,8 @@ }, "node_modules/parse-asn1": { "version": "5.1.7", - "license": "ISC", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", + "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", "dependencies": { "asn1.js": "^4.10.1", "browserify-aes": "^1.2.0", @@ -19695,8 +23149,9 @@ }, "node_modules/parse-json": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -19712,8 +23167,9 @@ }, "node_modules/parse-ms": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", "dev": true, - "license": "MIT", "engines": { "node": ">=18" }, @@ -19723,12 +23179,14 @@ }, "node_modules/parse-srcset": { "version": "1.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", + "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==" }, "node_modules/parse5": { "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", "dev": true, - "license": "MIT", "dependencies": { "entities": "^6.0.0" }, @@ -19738,8 +23196,9 @@ }, "node_modules/parse5-htmlparser2-tree-adapter": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", + "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", "dev": true, - "license": "MIT", "dependencies": { "domhandler": "^5.0.3", "parse5": "^7.0.0" @@ -19750,8 +23209,9 @@ }, "node_modules/parse5-htmlparser2-tree-adapter/node_modules/domhandler": { "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.3.0" }, @@ -19764,8 +23224,9 @@ }, "node_modules/parse5-parser-stream": { "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", + "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", "dev": true, - "license": "MIT", "dependencies": { "parse5": "^7.0.0" }, @@ -19775,8 +23236,9 @@ }, "node_modules/parse5/node_modules/entities": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -19786,15 +23248,17 @@ }, "node_modules/parseurl": { "version": "1.3.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "engines": { "node": ">= 0.8" } }, "node_modules/pascal-case": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "dev": true, - "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" @@ -19802,8 +23266,9 @@ }, "node_modules/path": { "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", "dev": true, - "license": "MIT", "dependencies": { "process": "^0.11.1", "util": "^0.10.3" @@ -19811,38 +23276,44 @@ }, "node_modules/path-browserify": { "version": "1.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" }, "node_modules/path-exists": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "dev": true, - "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/path-is-absolute": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { "version": "3.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "engines": { "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "node_modules/path-scurry": { "version": "1.11.1", - "license": "BlueOak-1.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -19856,44 +23327,51 @@ }, "node_modules/path-scurry/node_modules/lru-cache": { "version": "10.4.3", - "license": "ISC" + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" }, "node_modules/path-to-regexp": { "version": "8.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", + "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", "engines": { "node": ">=16" } }, "node_modules/path/node_modules/inherits": { "version": "2.0.3", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true }, "node_modules/path/node_modules/util": { "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "2.0.3" } }, "node_modules/pathe": { "version": "1.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true }, "node_modules/pathval": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/pbkdf2": { "version": "3.1.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.3.tgz", + "integrity": "sha512-wfRLBZ0feWRhCIkoMB6ete7czJcnNnqRpcoWQBLqatqXXmelSRqfdDK4F3u9T2s2cXas/hQJcryI/4lAL+XTlA==", "dependencies": { "create-hash": "~1.1.3", "create-hmac": "^1.1.7", @@ -19908,7 +23386,8 @@ }, "node_modules/pbkdf2/node_modules/create-hash": { "version": "1.1.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha512-snRpch/kwQhcdlnZKYanNF1m0RDlrCdSKQaH87w1FCFPVPNCQ/Il9QJKAX2jVBZddRdaHBMC+zXa9Gw9tmkNUA==", "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -19918,14 +23397,16 @@ }, "node_modules/pbkdf2/node_modules/hash-base": { "version": "2.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha512-0TROgQ1/SxE6KmxWSvXHvRj90/Xo1JvZShofnYF+f6ZsGtR4eES7WfrQzPalmyagfKZCXpVnitiRebZulWsbiw==", "dependencies": { "inherits": "^2.0.1" } }, "node_modules/pbkdf2/node_modules/ripemd160": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha512-J7f4wutN8mdbV08MJnXibYpCOPHR+yzy+iQ/AsjMv2j8cLavQ8VGagDFUwwTAdF8FmRKVeNpbTTEwNHCW1g94w==", "dependencies": { "hash-base": "^2.0.0", "inherits": "^2.0.1" @@ -19933,16 +23414,19 @@ }, "node_modules/pend": { "version": "1.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true }, "node_modules/picocolors": { "version": "1.1.1", - "license": "ISC" + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "node_modules/picomatch": { "version": "4.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "engines": { "node": ">=12" }, @@ -19952,15 +23436,17 @@ }, "node_modules/pify": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "engines": { "node": ">=4" } }, "node_modules/pino": { "version": "7.11.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-7.11.0.tgz", + "integrity": "sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==", "dev": true, - "license": "MIT", "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.0.0", @@ -19980,8 +23466,9 @@ }, "node_modules/pino-abstract-transport": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz", + "integrity": "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==", "dev": true, - "license": "MIT", "dependencies": { "duplexify": "^4.1.2", "split2": "^4.0.0" @@ -19989,8 +23476,9 @@ }, "node_modules/pino-pretty": { "version": "5.1.3", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-5.1.3.tgz", + "integrity": "sha512-Zj+0TVdYKkAAIx9EUCL5e4TttwgsaFvJh2ceIMQeFCY8ak9tseEZQGSgpvyjEj1/iIVGIh5tdhkGEQWSMILKHA==", "dev": true, - "license": "MIT", "dependencies": { "@hapi/bourne": "^2.0.0", "args": "^5.0.1", @@ -20011,8 +23499,9 @@ }, "node_modules/pino-pretty/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -20025,8 +23514,9 @@ }, "node_modules/pino-pretty/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -20040,6 +23530,8 @@ }, "node_modules/pino-pretty/node_modules/jmespath": { "version": "0.15.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", + "integrity": "sha512-+kHj8HXArPfpPEKGLZ+kB5ONRTCiGQXo8RQYL0hH8t6pWXUBBK5KkkQmTNOwKK4LEsd0yTsgtjJVm4UBSZea4w==", "dev": true, "engines": { "node": ">= 0.6.0" @@ -20047,8 +23539,9 @@ }, "node_modules/pino-pretty/node_modules/readable-stream": { "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -20060,36 +23553,41 @@ }, "node_modules/pino-pretty/node_modules/split2": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, - "license": "ISC", "dependencies": { "readable-stream": "^3.0.0" } }, "node_modules/pino-std-serializers": { "version": "4.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz", + "integrity": "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==", + "dev": true }, "node_modules/pirates": { "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 6" } }, "node_modules/pkce-challenge": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", + "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", "engines": { "node": ">=16.20.0" } }, "node_modules/pkg-dir": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, - "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -20099,8 +23597,9 @@ }, "node_modules/pkg-dir/node_modules/find-up": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -20111,8 +23610,9 @@ }, "node_modules/pkg-dir/node_modules/locate-path": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -20122,8 +23622,9 @@ }, "node_modules/pkg-dir/node_modules/p-limit": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -20136,8 +23637,9 @@ }, "node_modules/pkg-dir/node_modules/p-locate": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -20147,21 +23649,25 @@ }, "node_modules/pkg-dir/node_modules/path-exists": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/possible-typed-array-names": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "engines": { "node": ">= 0.4" } }, "node_modules/postcss": { "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "funding": [ { "type": "opencollective", @@ -20176,7 +23682,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -20188,6 +23693,8 @@ }, "node_modules/prebuild-install": { "version": "5.3.6", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz", + "integrity": "sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg==", "license": "MIT", "dependencies": { "detect-libc": "^1.0.3", @@ -20215,16 +23722,18 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/prettier": { - "version": "3.6.1", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, - "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -20237,8 +23746,9 @@ }, "node_modules/pretty-error": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", "dev": true, - "license": "MIT", "dependencies": { "lodash": "^4.17.20", "renderkid": "^3.0.0" @@ -20246,8 +23756,9 @@ }, "node_modules/pretty-format": { "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, - "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -20259,8 +23770,9 @@ }, "node_modules/pretty-ms": { "version": "9.2.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.2.0.tgz", + "integrity": "sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==", "dev": true, - "license": "MIT", "dependencies": { "parse-ms": "^4.0.0" }, @@ -20273,8 +23785,9 @@ }, "node_modules/pretty-quick": { "version": "4.2.2", + "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-4.2.2.tgz", + "integrity": "sha512-uAh96tBW1SsD34VhhDmWuEmqbpfYc/B3j++5MC/6b3Cb8Ow7NJsvKFhg0eoGu2xXX+o9RkahkTK6sUdd8E7g5w==", "dev": true, - "license": "MIT", "dependencies": { "@pkgr/core": "^0.2.7", "ignore": "^7.0.5", @@ -20299,45 +23812,52 @@ }, "node_modules/pretty-quick/node_modules/tinyexec": { "version": "0.3.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true }, "node_modules/private": { "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/process": { "version": "0.11.10", - "license": "MIT", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "engines": { "node": ">= 0.6.0" } }, "node_modules/process-nextick-args": { "version": "2.0.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "node_modules/process-warning": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz", + "integrity": "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==", + "dev": true }, "node_modules/progress": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/prompts": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, - "license": "MIT", "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -20348,8 +23868,9 @@ }, "node_modules/protobufjs": { "version": "7.5.3", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.3.tgz", + "integrity": "sha512-sildjKwVqOI2kmFDiXQ6aEB0fjYTafpEvIBs8tOR8qI4spuL9OPROLVu2qZqi/xgCfsHIwVqlaF8JBjWFHnKbw==", "hasInstallScript": true, - "license": "BSD-3-Clause", "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -20370,7 +23891,8 @@ }, "node_modules/proxy-addr": { "version": "2.0.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -20381,8 +23903,9 @@ }, "node_modules/proxy-agent": { "version": "6.5.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.5.0.tgz", + "integrity": "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==", "dev": true, - "license": "MIT", "dependencies": { "agent-base": "^7.1.2", "debug": "^4.3.4", @@ -20399,20 +23922,23 @@ }, "node_modules/proxy-agent/node_modules/lru-cache": { "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, - "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/proxy-from-env": { "version": "1.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, "node_modules/psl": { "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", "dev": true, - "license": "MIT", "dependencies": { "punycode": "^2.3.1" }, @@ -20422,15 +23948,17 @@ }, "node_modules/psl/node_modules/punycode": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/public-encrypt": { "version": "4.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dependencies": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", @@ -20442,11 +23970,13 @@ }, "node_modules/public-encrypt/node_modules/bn.js": { "version": "4.12.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==" }, "node_modules/pump": { "version": "3.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -20454,10 +23984,13 @@ }, "node_modules/punycode": { "version": "1.3.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" }, "node_modules/pure-rand": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", "dev": true, "funding": [ { @@ -20468,12 +24001,12 @@ "type": "opencollective", "url": "https://opencollective.com/fast-check" } - ], - "license": "MIT" + ] }, "node_modules/qs": { "version": "6.14.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", "dependencies": { "side-channel": "^1.1.0" }, @@ -20486,22 +24019,29 @@ }, "node_modules/query-selector-shadow-dom": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/query-selector-shadow-dom/-/query-selector-shadow-dom-1.0.1.tgz", + "integrity": "sha512-lT5yCqEBgfoMYpf3F2xQRK7zEr1rhIIZuceDK6+xRkJQ4NMbHTwXqk4NkwDwQMNqXgG9r9fyHnzwNVs6zV5KRw==", + "dev": true }, "node_modules/querystring": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", "engines": { "node": ">=0.4.x" } }, "node_modules/querystringify": { "version": "2.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true }, "node_modules/queue-microtask": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "funding": [ { "type": "github", @@ -20515,17 +24055,18 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/quick-format-unescaped": { "version": "4.0.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "dev": true }, "node_modules/quick-lru": { "version": "5.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "engines": { "node": ">=10" }, @@ -20535,14 +24076,16 @@ }, "node_modules/randombytes": { "version": "2.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dependencies": { "safe-buffer": "^5.1.0" } }, "node_modules/randomfill": { "version": "1.0.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dependencies": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" @@ -20550,14 +24093,16 @@ }, "node_modules/range-parser": { "version": "1.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "engines": { "node": ">= 0.6" } }, "node_modules/raw-body": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", + "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -20570,6 +24115,8 @@ }, "node_modules/rc": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { "deep-extend": "^0.6.0", @@ -20583,10 +24130,14 @@ }, "node_modules/rc/node_modules/ini": { "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "license": "ISC" }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -20594,13 +24145,15 @@ }, "node_modules/react-is": { "version": "18.3.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true }, "node_modules/read-pkg": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-8.1.0.tgz", + "integrity": "sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/normalize-package-data": "^2.4.1", "normalize-package-data": "^6.0.0", @@ -20616,8 +24169,9 @@ }, "node_modules/read-pkg-up": { "version": "10.1.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-10.1.0.tgz", + "integrity": "sha512-aNtBq4jR8NawpKJQldrQcSW9y/d+KWH4v24HWkHljOZ7H0av+YTGANBzRh9A5pw7v/bLVsLVPpOhJ7gHNVy8lA==", "dev": true, - "license": "MIT", "dependencies": { "find-up": "^6.3.0", "read-pkg": "^8.1.0", @@ -20632,8 +24186,9 @@ }, "node_modules/read-pkg-up/node_modules/find-up": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", "dev": true, - "license": "MIT", "dependencies": { "locate-path": "^7.1.0", "path-exists": "^5.0.0" @@ -20647,8 +24202,9 @@ }, "node_modules/read-pkg-up/node_modules/type-fest": { "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=16" }, @@ -20658,24 +24214,27 @@ }, "node_modules/read-pkg/node_modules/json-parse-even-better-errors": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", "dev": true, - "license": "MIT", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/read-pkg/node_modules/lines-and-columns": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz", + "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", "dev": true, - "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/read-pkg/node_modules/parse-json": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.1.1.tgz", + "integrity": "sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.21.4", "error-ex": "^1.3.2", @@ -20692,8 +24251,9 @@ }, "node_modules/read-pkg/node_modules/parse-json/node_modules/type-fest": { "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=14.16" }, @@ -20703,8 +24263,9 @@ }, "node_modules/read-pkg/node_modules/type-fest": { "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=16" }, @@ -20714,7 +24275,8 @@ }, "node_modules/readable-stream": { "version": "4.7.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -20728,6 +24290,8 @@ }, "node_modules/readable-stream/node_modules/buffer": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "funding": [ { "type": "github", @@ -20742,7 +24306,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -20750,13 +24313,16 @@ }, "node_modules/readable-stream/node_modules/events": { "version": "3.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "engines": { "node": ">=0.8.x" } }, "node_modules/readable-stream/node_modules/ieee754": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "funding": [ { "type": "github", @@ -20770,19 +24336,20 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "BSD-3-Clause" + ] }, "node_modules/readdir-glob": { "version": "1.1.3", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", "dependencies": { "minimatch": "^5.1.0" } }, "node_modules/readdir-glob/node_modules/minimatch": { "version": "5.1.6", - "license": "ISC", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -20792,7 +24359,8 @@ }, "node_modules/readdirp": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "engines": { "node": ">= 14.18.0" }, @@ -20803,16 +24371,18 @@ }, "node_modules/real-require": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.1.0.tgz", + "integrity": "sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 12.13.0" } }, "node_modules/recast": { "version": "0.11.23", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", + "integrity": "sha512-+nixG+3NugceyR8O1bLU45qs84JgI3+8EauyRZafLgC9XbdAOIVgwV1Pe2da0YzGo62KzWoZwUpVEQf6qNAXWA==", "dev": true, - "license": "MIT", "dependencies": { "ast-types": "0.9.6", "esprima": "~3.1.0", @@ -20825,16 +24395,18 @@ }, "node_modules/recast/node_modules/ast-types": { "version": "0.9.6", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", + "integrity": "sha512-qEdtR2UH78yyHX/AUNfXmJTlM48XoFZKBdwi1nzkI1mJL21cmbu0cvjxjpkXJ5NENMq42H+hNs8VLJcqXLerBQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/recast/node_modules/esprima": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==", "dev": true, - "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -20845,14 +24417,17 @@ }, "node_modules/recast/node_modules/source-map": { "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/rechoir": { "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", "dev": true, "dependencies": { "resolve": "^1.1.6" @@ -20863,8 +24438,9 @@ }, "node_modules/recursive-readdir": { "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", "dev": true, - "license": "MIT", "dependencies": { "minimatch": "^3.0.5" }, @@ -20874,8 +24450,9 @@ }, "node_modules/recursive-readdir/node_modules/brace-expansion": { "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -20883,8 +24460,9 @@ }, "node_modules/recursive-readdir/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -20894,8 +24472,9 @@ }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", @@ -20915,8 +24494,9 @@ }, "node_modules/regexp.prototype.flags": { "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", @@ -20934,6 +24514,8 @@ }, "node_modules/registry-js": { "version": "1.16.1", + "resolved": "https://registry.npmjs.org/registry-js/-/registry-js-1.16.1.tgz", + "integrity": "sha512-pQ2kD36lh+YNtpaXm6HCCb0QZtV/zQEeKnkfEIj5FDSpF/oFts7pwizEUkWSvP8IbGb4A4a5iBhhS9eUearMmQ==", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -20943,16 +24525,18 @@ }, "node_modules/relateurl": { "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/renderkid": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", "dev": true, - "license": "MIT", "dependencies": { "css-select": "^4.1.3", "dom-converter": "^0.2.0", @@ -20963,30 +24547,35 @@ }, "node_modules/request-light": { "version": "0.8.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.8.0.tgz", + "integrity": "sha512-bH6E4PMmsEXYrLX6Kr1vu+xI3HproB1vECAwaPSJeroLE1kpWE3HR27uB4icx+6YORu1ajqBJXxuedv8ZQg5Lw==" }, "node_modules/require-directory": { "version": "2.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "engines": { "node": ">=0.10.0" } }, "node_modules/require-from-string": { "version": "2.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "engines": { "node": ">=0.10.0" } }, "node_modules/requires-port": { "version": "1.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "node_modules/resolve": { "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dev": true, - "license": "MIT", "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", @@ -21004,12 +24593,14 @@ }, "node_modules/resolve-alpn": { "version": "1.2.1", - "license": "MIT" + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" }, "node_modules/resolve-cwd": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, - "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" }, @@ -21019,31 +24610,35 @@ }, "node_modules/resolve-from": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/resolve-pkg-maps": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, "node_modules/resolve.exports": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/responselike": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", "dependencies": { "lowercase-keys": "^2.0.0" }, @@ -21053,27 +24648,31 @@ }, "node_modules/resq": { "version": "1.11.0", + "resolved": "https://registry.npmjs.org/resq/-/resq-1.11.0.tgz", + "integrity": "sha512-G10EBz+zAAy3zUd/CDoBbXRL6ia9kOo3xRHrMDsHljI0GDkhYlyjwoCx5+3eCC4swi1uCoZQhskuJkj7Gp57Bw==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^2.0.1" } }, "node_modules/resq/node_modules/fast-deep-equal": { "version": "2.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==", + "dev": true }, "node_modules/retry": { "version": "0.13.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "engines": { "node": ">= 4" } }, "node_modules/reusify": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -21081,18 +24680,22 @@ }, "node_modules/rfdc": { "version": "1.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true }, "node_modules/rgb2hex": { "version": "0.2.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/rgb2hex/-/rgb2hex-0.2.5.tgz", + "integrity": "sha512-22MOP1Rh7sAo1BZpDG6R5RFYzR2lYEgwq7HEmyW2qcsOqR2lQKmn+O//xV3YG/0rrhMC6KVX2hU+ZXuaw9a5bw==", + "dev": true }, "node_modules/rimraf": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, - "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -21105,8 +24708,9 @@ }, "node_modules/rimraf/node_modules/brace-expansion": { "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -21114,8 +24718,10 @@ }, "node_modules/rimraf/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -21133,8 +24739,9 @@ }, "node_modules/rimraf/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -21144,7 +24751,8 @@ }, "node_modules/ripemd160": { "version": "2.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" @@ -21152,7 +24760,8 @@ }, "node_modules/router": { "version": "2.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", "dependencies": { "debug": "^4.4.0", "depd": "^2.0.0", @@ -21166,12 +24775,14 @@ }, "node_modules/rrweb-cssom": { "version": "0.7.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", + "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", + "dev": true }, "node_modules/run-applescript": { "version": "7.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", "engines": { "node": ">=18" }, @@ -21181,14 +24792,17 @@ }, "node_modules/run-async": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", + "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/run-parallel": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "funding": [ { "type": "github", @@ -21203,30 +24817,32 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/rxjs": { "version": "7.8.2", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/safaridriver": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safaridriver/-/safaridriver-1.0.0.tgz", + "integrity": "sha512-J92IFbskyo7OYB3Dt4aTdyhag1GlInrfbPCmMteb7aBK7PwlnGz1HI0+oyNN97j7pV9DqUAVoVgkNRMrfY47mQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=18.0.0" } }, "node_modules/safe-array-concat": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", @@ -21243,11 +24859,14 @@ }, "node_modules/safe-array-concat/node_modules/isarray": { "version": "2.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true }, "node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", @@ -21261,13 +24880,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/safe-push-apply": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", "dev": true, - "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "isarray": "^2.0.5" @@ -21281,12 +24900,14 @@ }, "node_modules/safe-push-apply/node_modules/isarray": { "version": "2.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true }, "node_modules/safe-regex-test": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -21301,19 +24922,22 @@ }, "node_modules/safe-stable-stringify": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/safer-buffer": { "version": "2.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sanitize-html": { "version": "2.17.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.17.0.tgz", + "integrity": "sha512-dLAADUSS8rBwhaevT12yCezvioCA+bmUTPH/u57xKPT8d++voeYE6HeluA/bPbQ15TwDBG2ii+QZIEmYx8VdxA==", "dependencies": { "deepmerge": "^4.2.2", "escape-string-regexp": "^4.0.0", @@ -21325,7 +24949,8 @@ }, "node_modules/sanitize-html/node_modules/dom-serializer": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", @@ -21337,7 +24962,8 @@ }, "node_modules/sanitize-html/node_modules/domhandler": { "version": "5.0.3", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dependencies": { "domelementtype": "^2.3.0" }, @@ -21350,7 +24976,8 @@ }, "node_modules/sanitize-html/node_modules/domutils": { "version": "3.2.2", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", @@ -21362,6 +24989,8 @@ }, "node_modules/sanitize-html/node_modules/htmlparser2": { "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { @@ -21369,7 +24998,6 @@ "url": "https://github.com/sponsors/fb55" } ], - "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", @@ -21379,19 +25007,22 @@ }, "node_modules/sanitize-html/node_modules/is-plain-object": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "engines": { "node": ">=0.10.0" } }, "node_modules/sax": { "version": "1.2.1", - "license": "ISC" + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==" }, "node_modules/saxes": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", "dev": true, - "license": "ISC", "dependencies": { "xmlchars": "^2.2.0" }, @@ -21401,7 +25032,8 @@ }, "node_modules/schema-utils": { "version": "4.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", + "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -21418,11 +25050,13 @@ }, "node_modules/select-hose": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" }, "node_modules/selfsigned": { "version": "2.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", "dependencies": { "@types/node-forge": "^1.3.0", "node-forge": "^1" @@ -21433,15 +25067,17 @@ }, "node_modules/semver": { "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/send": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", "dependencies": { "debug": "^4.3.5", "encodeurl": "^2.0.0", @@ -21461,8 +25097,9 @@ }, "node_modules/serialize-error": { "version": "11.0.3", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-11.0.3.tgz", + "integrity": "sha512-2G2y++21dhj2R7iHAdd0FIzjGwuKZld+7Pl/bTU6YIkrC2ZMbVUjm+luj6A6V34Rv9XfKJDKpTWu9W4Gse1D9g==", "dev": true, - "license": "MIT", "dependencies": { "type-fest": "^2.12.2" }, @@ -21475,8 +25112,9 @@ }, "node_modules/serialize-error/node_modules/type-fest": { "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=12.20" }, @@ -21486,15 +25124,17 @@ }, "node_modules/serialize-javascript": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "devOptional": true, - "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } }, "node_modules/serve-index": { "version": "1.9.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "dependencies": { "accepts": "~1.3.4", "batch": "0.6.1", @@ -21510,7 +25150,8 @@ }, "node_modules/serve-index/node_modules/accepts": { "version": "1.3.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -21521,21 +25162,24 @@ }, "node_modules/serve-index/node_modules/debug": { "version": "2.6.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { "ms": "2.0.0" } }, "node_modules/serve-index/node_modules/depd": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "engines": { "node": ">= 0.6" } }, "node_modules/serve-index/node_modules/http-errors": { "version": "1.6.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -21548,18 +25192,21 @@ }, "node_modules/serve-index/node_modules/inherits": { "version": "2.0.3", - "license": "ISC" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" }, "node_modules/serve-index/node_modules/mime-db": { "version": "1.52.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "engines": { "node": ">= 0.6" } }, "node_modules/serve-index/node_modules/mime-types": { "version": "2.1.35", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dependencies": { "mime-db": "1.52.0" }, @@ -21569,29 +25216,34 @@ }, "node_modules/serve-index/node_modules/ms": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/serve-index/node_modules/negotiator": { "version": "0.6.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "engines": { "node": ">= 0.6" } }, "node_modules/serve-index/node_modules/setprototypeof": { "version": "1.1.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, "node_modules/serve-index/node_modules/statuses": { "version": "1.5.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "engines": { "node": ">= 0.6" } }, "node_modules/serve-static": { "version": "2.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", "dependencies": { "encodeurl": "^2.0.0", "escape-html": "^1.0.3", @@ -21604,11 +25256,14 @@ }, "node_modules/set-blocking": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "license": "ISC" }, "node_modules/set-function-length": { "version": "1.2.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -21623,8 +25278,9 @@ }, "node_modules/set-function-name": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, - "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -21637,8 +25293,9 @@ }, "node_modules/set-proto": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", "dev": true, - "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", "es-errors": "^1.3.0", @@ -21650,15 +25307,18 @@ }, "node_modules/setimmediate": { "version": "1.0.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, "node_modules/setprototypeof": { "version": "1.2.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, "node_modules/sha.js": { "version": "2.4.11", - "license": "(MIT AND BSD-3-Clause)", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -21669,8 +25329,9 @@ }, "node_modules/shallow-clone": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^6.0.2" }, @@ -21680,7 +25341,8 @@ }, "node_modules/shebang-command": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -21690,14 +25352,16 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "engines": { "node": ">=8" } }, "node_modules/shell-quote": { "version": "1.8.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", "engines": { "node": ">= 0.4" }, @@ -21707,8 +25371,9 @@ }, "node_modules/shelljs": { "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "glob": "^7.0.0", "interpret": "^1.0.0", @@ -21723,8 +25388,9 @@ }, "node_modules/shelljs/node_modules/brace-expansion": { "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -21732,8 +25398,10 @@ }, "node_modules/shelljs/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -21751,8 +25419,9 @@ }, "node_modules/shelljs/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -21762,12 +25431,14 @@ }, "node_modules/shlex": { "version": "2.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/shlex/-/shlex-2.1.2.tgz", + "integrity": "sha512-Nz6gtibMVgYeMEhUjp2KuwAgqaJA1K155dU/HuDaEJUGgnmYfVtVZah+uerVWdH8UGnyahhDCgABbYTbs254+w==" }, "node_modules/shx": { "version": "0.3.4", + "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.4.tgz", + "integrity": "sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==", "dev": true, - "license": "MIT", "dependencies": { "minimist": "^1.2.3", "shelljs": "^0.8.5" @@ -21781,7 +25452,8 @@ }, "node_modules/side-channel": { "version": "1.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", @@ -21798,7 +25470,8 @@ }, "node_modules/side-channel-list": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" @@ -21812,7 +25485,8 @@ }, "node_modules/side-channel-map": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -21828,7 +25502,8 @@ }, "node_modules/side-channel-weakmap": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -21845,7 +25520,8 @@ }, "node_modules/signal-exit": { "version": "4.1.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "engines": { "node": ">=14" }, @@ -21855,6 +25531,8 @@ }, "node_modules/simple-concat": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", "funding": [ { "type": "github", @@ -21873,6 +25551,8 @@ }, "node_modules/simple-get": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", "license": "MIT", "dependencies": { "decompress-response": "^4.2.0", @@ -21882,6 +25562,8 @@ }, "node_modules/simple-get/node_modules/decompress-response": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", "license": "MIT", "dependencies": { "mimic-response": "^2.0.0" @@ -21892,6 +25574,8 @@ }, "node_modules/simple-get/node_modules/mimic-response": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", "license": "MIT", "engines": { "node": ">=8" @@ -21900,10 +25584,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/simple-invariant": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/simple-invariant/-/simple-invariant-2.0.1.tgz", + "integrity": "sha512-1sbhsxqI+I2tqlmjbz99GXNmZtr6tKIyEgGGnJw/MKGblalqk/XoOYYFJlBzTKZCxx8kLaD3FD5s9BEEjx5Pyg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/sinon": { "version": "19.0.5", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-19.0.5.tgz", + "integrity": "sha512-r15s9/s+ub/d4bxNXqIUmwp6imVSdTorIRaxoecYjqTVLZ8RuoXr/4EDGwIBo6Waxn7f2gnURX9zuhAfCwaF6Q==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1", "@sinonjs/fake-timers": "^13.0.5", @@ -21919,29 +25614,48 @@ }, "node_modules/sinon/node_modules/@sinonjs/fake-timers": { "version": "13.0.5", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", + "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1" } }, "node_modules/sisteransi": { "version": "1.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/skema": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/skema/-/skema-1.0.2.tgz", + "integrity": "sha512-5LWfF2RSW2B3xfOaY6j49X8aNwsnj9cRVrM5QMF7it+cZvpv5ufiOUT13ps2U52sIbAzs11bdRP6mi5qyg75VQ==", + "dependencies": { + "async": "^0.9.0", + "make-array": "^0.1.2", + "mix2": "^1.0.0" + } + }, + "node_modules/skema/node_modules/async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha512-l6ToIJIotphWahxxHyzK9bnLR6kM4jJIIgLShZeqLY7iboHoGkdgFl7W2/Ivi4SkMJYGKqW8vSuk0uKUj6qsSw==" }, "node_modules/slash": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/smart-buffer": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" @@ -21949,7 +25663,8 @@ }, "node_modules/sockjs": { "version": "0.3.24", - "license": "MIT", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dependencies": { "faye-websocket": "^0.11.3", "uuid": "^8.3.2", @@ -21958,15 +25673,17 @@ }, "node_modules/sockjs/node_modules/uuid": { "version": "8.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/socks": { "version": "2.8.5", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.5.tgz", + "integrity": "sha512-iF+tNDQla22geJdTyJB1wM/qrX9DMRwWrciEPwWLPRWAUEM8sQiyxgckLxWT1f7+9VabJS0jTGGr4QgBuvi6Ww==", "dev": true, - "license": "MIT", "dependencies": { "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" @@ -21978,8 +25695,9 @@ }, "node_modules/socks-proxy-agent": { "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", "dev": true, - "license": "MIT", "dependencies": { "agent-base": "^7.1.2", "debug": "^4.3.4", @@ -21991,31 +25709,35 @@ }, "node_modules/sonic-boom": { "version": "2.8.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.8.0.tgz", + "integrity": "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==", "dev": true, - "license": "MIT", "dependencies": { "atomic-sleep": "^1.0.0" } }, "node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "devOptional": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-js": { "version": "1.2.1", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-support": { "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, - "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -22023,6 +25745,8 @@ }, "node_modules/spacetrim": { "version": "0.11.59", + "resolved": "https://registry.npmjs.org/spacetrim/-/spacetrim-0.11.59.tgz", + "integrity": "sha512-lLYsktklSRKprreOm7NXReW8YiX2VBjbgmXYEziOoGf/qsJqAEACaDvoTtUOycwjpaSh+bT8eu0KrJn7UNxiCg==", "dev": true, "funding": [ { @@ -22033,13 +25757,13 @@ "type": "github", "url": "https://github.com/hejny/spacetrim/blob/main/README.md#%EF%B8%8F-contributing" } - ], - "license": "Apache-2.0" + ] }, "node_modules/spdx-correct": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -22047,13 +25771,15 @@ }, "node_modules/spdx-exceptions": { "version": "2.5.0", - "dev": true, - "license": "CC-BY-3.0" + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true }, "node_modules/spdx-expression-parse": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, - "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -22061,12 +25787,14 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.21", - "dev": true, - "license": "CC0-1.0" + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", + "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", + "dev": true }, "node_modules/spdy": { "version": "4.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dependencies": { "debug": "^4.1.0", "handle-thing": "^2.0.0", @@ -22080,7 +25808,8 @@ }, "node_modules/spdy-transport": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dependencies": { "debug": "^4.1.0", "detect-node": "^2.0.4", @@ -22092,7 +25821,8 @@ }, "node_modules/spdy-transport/node_modules/readable-stream": { "version": "3.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -22104,7 +25834,8 @@ }, "node_modules/split": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "dependencies": { "through": "2" }, @@ -22114,20 +25845,23 @@ }, "node_modules/split2": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", "dev": true, - "license": "ISC", "engines": { "node": ">= 10.x" } }, "node_modules/sprintf-js": { "version": "1.0.3", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "node_modules/stack-utils": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", "dev": true, - "license": "MIT", "dependencies": { "escape-string-regexp": "^2.0.0" }, @@ -22137,23 +25871,26 @@ }, "node_modules/stack-utils/node_modules/escape-string-regexp": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/statuses": { "version": "2.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "engines": { "node": ">= 0.8" } }, "node_modules/stop-iteration-iterator": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", "dev": true, - "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "internal-slot": "^1.1.0" @@ -22164,7 +25901,8 @@ }, "node_modules/stream-browserify": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", "dependencies": { "inherits": "~2.0.4", "readable-stream": "^3.5.0" @@ -22172,7 +25910,8 @@ }, "node_modules/stream-browserify/node_modules/readable-stream": { "version": "3.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -22184,15 +25923,17 @@ }, "node_modules/stream-buffers": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.3.tgz", + "integrity": "sha512-pqMqwQCso0PBJt2PQmDO0cFj0lyqmiwOMiMSkVtRokl7e+ZTRYgDHKnuZNbqjiJXgsg4nuqtD/zxuo9KqTp0Yw==", "dev": true, - "license": "Unlicense", "engines": { "node": ">= 0.10.0" } }, "node_modules/stream-http": { "version": "3.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", + "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", "dependencies": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.4", @@ -22202,7 +25943,8 @@ }, "node_modules/stream-http/node_modules/readable-stream": { "version": "3.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -22214,12 +25956,14 @@ }, "node_modules/stream-shift": { "version": "1.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", + "dev": true }, "node_modules/streamx": { "version": "2.22.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.1.tgz", + "integrity": "sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==", "dependencies": { "fast-fifo": "^1.3.2", "text-decoder": "^1.1.0" @@ -22230,15 +25974,17 @@ }, "node_modules/string_decoder": { "version": "1.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dependencies": { "safe-buffer": "~5.2.0" } }, "node_modules/string-length": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, - "license": "MIT", "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" @@ -22249,7 +25995,8 @@ }, "node_modules/string-width": { "version": "5.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -22265,7 +26012,8 @@ "node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -22277,11 +26025,13 @@ }, "node_modules/string-width-cjs/node_modules/emoji-regex": { "version": "8.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/string-width/node_modules/ansi-regex": { "version": "6.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "engines": { "node": ">=12" }, @@ -22291,7 +26041,8 @@ }, "node_modules/string-width/node_modules/strip-ansi": { "version": "7.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -22304,8 +26055,9 @@ }, "node_modules/string.prototype.trim": { "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", @@ -22324,8 +26076,9 @@ }, "node_modules/string.prototype.trimend": { "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", @@ -22341,8 +26094,9 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -22357,7 +26111,8 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -22368,7 +26123,8 @@ "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -22378,24 +26134,27 @@ }, "node_modules/strip-bom": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/strip-final-newline": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/strip-json-comments": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -22405,17 +26164,19 @@ }, "node_modules/strnum": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", + "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/NaturalIntelligence" } - ], - "license": "MIT" + ] }, "node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -22425,8 +26186,9 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -22436,19 +26198,23 @@ }, "node_modules/symbol-tree": { "version": "3.2.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true }, "node_modules/tapable": { "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", + "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", "devOptional": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/tar-fs": { "version": "2.1.3", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.3.tgz", + "integrity": "sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==", "license": "MIT", "dependencies": { "chownr": "^1.1.1", @@ -22459,6 +26225,8 @@ }, "node_modules/tar-fs/node_modules/readable-stream": { "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -22471,6 +26239,8 @@ }, "node_modules/tar-fs/node_modules/tar-stream": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "license": "MIT", "dependencies": { "bl": "^4.0.3", @@ -22485,7 +26255,8 @@ }, "node_modules/tar-stream": { "version": "3.1.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", "dependencies": { "b4a": "^1.6.4", "fast-fifo": "^1.2.0", @@ -22494,8 +26265,9 @@ }, "node_modules/terser": { "version": "5.43.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz", + "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", "devOptional": true, - "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.14.0", @@ -22511,8 +26283,9 @@ }, "node_modules/terser-webpack-plugin": { "version": "5.3.14", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", "devOptional": true, - "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", @@ -22544,8 +26317,9 @@ }, "node_modules/terser-webpack-plugin/node_modules/jest-worker": { "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "devOptional": true, - "license": "MIT", "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -22557,8 +26331,9 @@ }, "node_modules/terser-webpack-plugin/node_modules/supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "devOptional": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -22571,8 +26346,9 @@ }, "node_modules/terser/node_modules/source-map-support": { "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "devOptional": true, - "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -22580,8 +26356,9 @@ }, "node_modules/test-exclude": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", + "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", "dev": true, - "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^10.4.1", @@ -22593,15 +26370,17 @@ }, "node_modules/text-decoder": { "version": "1.2.3", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", + "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", "dependencies": { "b4a": "^1.6.4" } }, "node_modules/text-extensions": { "version": "2.4.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz", + "integrity": "sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -22611,12 +26390,14 @@ }, "node_modules/text-table": { "version": "0.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true }, "node_modules/thingies": { "version": "1.21.0", - "license": "Unlicense", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", + "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==", "engines": { "node": ">=10.18" }, @@ -22626,19 +26407,22 @@ }, "node_modules/thread-stream": { "version": "0.15.2", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-0.15.2.tgz", + "integrity": "sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==", "dev": true, - "license": "MIT", "dependencies": { "real-require": "^0.1.0" } }, "node_modules/through": { "version": "2.3.8", - "license": "MIT" + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, "node_modules/through2": { "version": "2.0.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -22646,7 +26430,8 @@ }, "node_modules/through2/node_modules/readable-stream": { "version": "2.3.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -22659,36 +26444,42 @@ }, "node_modules/through2/node_modules/safe-buffer": { "version": "5.1.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/through2/node_modules/string_decoder": { "version": "1.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/thunky": { "version": "1.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" }, "node_modules/tinyexec": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz", + "integrity": "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==", + "dev": true }, "node_modules/tinyrainbow": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", + "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=14.0.0" } }, "node_modules/tmp": { "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, - "license": "MIT", "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -22698,12 +26489,14 @@ }, "node_modules/tmpl": { "version": "1.0.5", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true }, "node_modules/to-buffer": { "version": "1.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.1.tgz", + "integrity": "sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==", "dependencies": { "isarray": "^2.0.5", "safe-buffer": "^5.2.1", @@ -22715,11 +26508,13 @@ }, "node_modules/to-buffer/node_modules/isarray": { "version": "2.0.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" }, "node_modules/to-regex-range": { "version": "5.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dependencies": { "is-number": "^7.0.0" }, @@ -22729,15 +26524,17 @@ }, "node_modules/toidentifier": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "engines": { "node": ">=0.6" } }, "node_modules/tough-cookie": { "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", @@ -22750,16 +26547,18 @@ }, "node_modules/tough-cookie/node_modules/punycode": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/tr46": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", "dev": true, - "license": "MIT", "dependencies": { "punycode": "^2.3.1" }, @@ -22769,15 +26568,17 @@ }, "node_modules/tr46/node_modules/punycode": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/tree-dump": { "version": "1.0.3", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.3.tgz", + "integrity": "sha512-il+Cv80yVHFBwokQSfd4bldvr1Md951DpgAGfmhydt04L+YzHgubm2tQ7zueWDcGENKHq0ZvGFR/hjvNXilHEg==", "engines": { "node": ">=10.0" }, @@ -22791,8 +26592,9 @@ }, "node_modules/ts-api-utils": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=18.12" }, @@ -22802,8 +26604,9 @@ }, "node_modules/ts-jest": { "version": "29.4.0", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.0.tgz", + "integrity": "sha512-d423TJMnJGu80/eSgfQ5w/R+0zFJvdtTxwtF9KzFFunOpSeD+79lHJQIiAhluJoyGRbvj9NZJsl9WjCUo0ND7Q==", "dev": true, - "license": "MIT", "dependencies": { "bs-logger": "^0.2.6", "ejs": "^3.1.10", @@ -22853,8 +26656,9 @@ }, "node_modules/ts-jest/node_modules/semver": { "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -22864,8 +26668,9 @@ }, "node_modules/ts-jest/node_modules/type-fest": { "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=16" }, @@ -22875,8 +26680,9 @@ }, "node_modules/ts-loader": { "version": "9.5.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.2.tgz", + "integrity": "sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.1.0", "enhanced-resolve": "^5.0.0", @@ -22894,8 +26700,9 @@ }, "node_modules/ts-loader/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -22908,8 +26715,9 @@ }, "node_modules/ts-loader/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -22923,8 +26731,9 @@ }, "node_modules/ts-loader/node_modules/semver": { "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -22934,16 +26743,18 @@ }, "node_modules/ts-loader/node_modules/source-map": { "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">= 8" } }, "node_modules/ts-lsp-client": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ts-lsp-client/-/ts-lsp-client-1.0.3.tgz", + "integrity": "sha512-0ItrsqvNUM9KNFGbeT1N8jSi9gvasGOvxJUXjGf4P2TX0w250AUWLeRStaSrQbYcFDshDtE5d4BshUmYwodDgw==", "dev": true, - "license": "MIT", "dependencies": { "json-rpc-2.0": "^1.7.0", "pino": "^7.0.5", @@ -22957,13 +26768,15 @@ }, "node_modules/ts-lsp-client/node_modules/tslib": { "version": "2.6.3", - "dev": true, - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true }, "node_modules/ts-mocha": { "version": "11.1.0", + "resolved": "https://registry.npmjs.org/ts-mocha/-/ts-mocha-11.1.0.tgz", + "integrity": "sha512-yT7FfzNRCu8ZKkYvAOiH01xNma/vLq6Vit7yINKYFNVP8e5UyrYXSOMIipERTpzVKJQ4Qcos5bQo1tNERNZevQ==", "dev": true, - "license": "MIT", "bin": { "ts-mocha": "bin/ts-mocha" }, @@ -22983,8 +26796,9 @@ }, "node_modules/ts-node": { "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, - "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -23025,16 +26839,18 @@ }, "node_modules/ts-node/node_modules/diff": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, "node_modules/ts-sinon": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ts-sinon/-/ts-sinon-2.0.2.tgz", + "integrity": "sha512-Eh6rXPQruACHPn+/e5HsIMaHZa17tGP/scGjUeW5eJ/Levn8hBV6zSP/6QkEDUP7wLkTyY0yeYikjpTzgC9Gew==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "^14.6.1", "@types/sinon": "^9.0.5", @@ -23044,24 +26860,27 @@ }, "node_modules/ts-sinon/node_modules/@sinonjs/commons": { "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } }, "node_modules/ts-sinon/node_modules/@sinonjs/fake-timers": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", + "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^1.7.0" } }, "node_modules/ts-sinon/node_modules/@sinonjs/samsam": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-5.3.1.tgz", + "integrity": "sha512-1Hc0b1TtyfBu8ixF/tpfSHTVWKwCBLY4QJbkgnE7HcwyvT2xArDxb4K7dMgqRm3szI+LJbzmW/s4xxEhv6hwDg==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^1.6.0", "lodash.get": "^4.4.2", @@ -23070,39 +26889,45 @@ }, "node_modules/ts-sinon/node_modules/@types/node": { "version": "14.18.63", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", + "dev": true }, "node_modules/ts-sinon/node_modules/@types/sinon": { "version": "9.0.11", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-9.0.11.tgz", + "integrity": "sha512-PwP4UY33SeeVKodNE37ZlOsR9cReypbMJOhZ7BVE0lB+Hix3efCOxiJWiE5Ia+yL9Cn2Ch72EjFTRze8RZsNtg==", "dev": true, - "license": "MIT", "dependencies": { "@types/sinonjs__fake-timers": "*" } }, "node_modules/ts-sinon/node_modules/diff": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, "node_modules/ts-sinon/node_modules/isarray": { "version": "0.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true }, "node_modules/ts-sinon/node_modules/just-extend": { "version": "4.2.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", + "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", + "dev": true }, "node_modules/ts-sinon/node_modules/nise": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/nise/-/nise-4.1.0.tgz", + "integrity": "sha512-eQMEmGN/8arp0xsvGoQ+B1qvSkR73B1nWSCh7nOt5neMCtwcQVYQGdzQMhcNscktTsWB54xnlSQFzOAPJD8nXA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^1.7.0", "@sinonjs/fake-timers": "^6.0.0", @@ -23113,16 +26938,19 @@ }, "node_modules/ts-sinon/node_modules/path-to-regexp": { "version": "1.9.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", + "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", "dev": true, - "license": "MIT", "dependencies": { "isarray": "0.0.1" } }, "node_modules/ts-sinon/node_modules/sinon": { "version": "9.2.4", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-9.2.4.tgz", + "integrity": "sha512-zljcULZQsJxVra28qIAL6ow1Z9tpattkCTEJR4RBP3TGc00FcttsP5pK284Nas5WjMZU5Yzy3kAIp3B3KRf5Yg==", + "deprecated": "16.1.1", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^1.8.1", "@sinonjs/fake-timers": "^6.0.1", @@ -23138,16 +26966,18 @@ }, "node_modules/ts-sinon/node_modules/type-detect": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/tsconfig-paths": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", "dev": true, - "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -23161,8 +26991,9 @@ }, "node_modules/tsconfig-paths/node_modules/strip-bom": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "license": "MIT", "optional": true, "peer": true, "engines": { @@ -23171,12 +27002,14 @@ }, "node_modules/tslib": { "version": "2.8.1", - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" }, "node_modules/tsx": { "version": "4.20.3", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.3.tgz", + "integrity": "sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ==", "dev": true, - "license": "MIT", "dependencies": { "esbuild": "~0.25.0", "get-tsconfig": "^4.7.5" @@ -23193,6 +27026,8 @@ }, "node_modules/tunnel-agent": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" @@ -23203,8 +27038,9 @@ }, "node_modules/type-check": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -23214,16 +27050,18 @@ }, "node_modules/type-detect": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/type-fest": { "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -23233,7 +27071,8 @@ }, "node_modules/type-is": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", "dependencies": { "content-type": "^1.0.5", "media-typer": "^1.1.0", @@ -23245,7 +27084,8 @@ }, "node_modules/typed-array-buffer": { "version": "1.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", @@ -23257,8 +27097,9 @@ }, "node_modules/typed-array-byte-length": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "for-each": "^0.3.3", @@ -23275,8 +27116,9 @@ }, "node_modules/typed-array-byte-offset": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, - "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", @@ -23295,8 +27137,9 @@ }, "node_modules/typed-array-length": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -23314,7 +27157,8 @@ }, "node_modules/typescript": { "version": "5.8.3", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -23325,12 +27169,14 @@ }, "node_modules/typescript-collections": { "version": "1.3.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/typescript-collections/-/typescript-collections-1.3.3.tgz", + "integrity": "sha512-7sI4e/bZijOzyURng88oOFZCISQPTHozfE2sUu5AviFYk5QV7fYGb6YiDl+vKjF/pICA354JImBImL9XJWUvdQ==" }, "node_modules/umd-compat-loader": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/umd-compat-loader/-/umd-compat-loader-2.1.2.tgz", + "integrity": "sha512-RkTlsfrCxUISWqiTtYFFJank7b2Hhl4V2pc29nl0xOEGvvuVkpy1xnufhXfTituxgpW0HSrDk0JHlvPYZxEXKQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "ast-types": "^0.9.2", "loader-utils": "^1.0.3", @@ -23339,16 +27185,18 @@ }, "node_modules/umd-compat-loader/node_modules/ast-types": { "version": "0.9.14", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.14.tgz", + "integrity": "sha512-Ebvx7/0lLboCdyEmAw/4GqwBeKIijPveXNiVGhCGCNxc7z26T5he7DC6ARxu8ByKuzUZZcLog+VP8GMyZrBzJw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/umd-compat-loader/node_modules/json5": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, - "license": "MIT", "dependencies": { "minimist": "^1.2.0" }, @@ -23358,8 +27206,9 @@ }, "node_modules/umd-compat-loader/node_modules/loader-utils": { "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", "dev": true, - "license": "MIT", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -23371,8 +27220,9 @@ }, "node_modules/unbox-primitive": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", @@ -23388,23 +27238,27 @@ }, "node_modules/undici": { "version": "6.21.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.3.tgz", + "integrity": "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==", "engines": { "node": ">=18.17" } }, "node_modules/undici-types": { "version": "6.21.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==" }, "node_modules/unescape-html": { "version": "1.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/unescape-html/-/unescape-html-1.1.0.tgz", + "integrity": "sha512-O9/yBNqIkArjS597iHez5hAaAdn7b8/230SX8IncgXAX5tWI9XlEQYaz6Qbou0Sloa9n6lx9G5s6hg5qhJyzGg==" }, "node_modules/unicorn-magic": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=18" }, @@ -23414,28 +27268,33 @@ }, "node_modules/universalify": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4.0.0" } }, "node_modules/unpipe": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "engines": { "node": ">= 0.8" } }, "node_modules/untildify": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", "engines": { "node": ">=8" } }, "node_modules/update-browserslist-db": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "devOptional": true, "funding": [ { @@ -23451,7 +27310,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" @@ -23465,21 +27323,24 @@ }, "node_modules/uri-js": { "version": "4.4.1", - "license": "BSD-2-Clause", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dependencies": { "punycode": "^2.1.0" } }, "node_modules/uri-js/node_modules/punycode": { "version": "2.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "engines": { "node": ">=6" } }, "node_modules/url": { "version": "0.10.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", "dependencies": { "punycode": "1.3.2", "querystring": "0.2.0" @@ -23487,8 +27348,9 @@ }, "node_modules/url-parse": { "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dev": true, - "license": "MIT", "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -23496,20 +27358,23 @@ }, "node_modules/urlpattern-polyfill": { "version": "10.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.1.0.tgz", + "integrity": "sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==", + "dev": true }, "node_modules/userhome": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/userhome/-/userhome-1.0.1.tgz", + "integrity": "sha512-5cnLm4gseXjAclKowC4IjByaGsjtAoV6PrOQOljplNB54ReUYJP8HdAFq2muHinSDAh09PPX/uXDPfdxRHvuSA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/util": { "version": "0.12.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", @@ -23520,40 +27385,46 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/utila": { "version": "0.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "dev": true }, "node_modules/utils-merge": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "engines": { "node": ">= 0.4.0" } }, "node_modules/uuid": { "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], - "license": "MIT", "bin": { "uuid": "dist/esm/bin/uuid" } }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true }, "node_modules/v8-to-istanbul": { "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, - "license": "ISC", "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -23565,8 +27436,9 @@ }, "node_modules/validate-npm-package-license": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -23574,14 +27446,16 @@ }, "node_modules/vary": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "engines": { "node": ">= 0.8" } }, "node_modules/vscode-json-languageservice": { "version": "4.1.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/vscode-json-languageservice/-/vscode-json-languageservice-4.1.8.tgz", + "integrity": "sha512-0vSpg6Xd9hfV+eZAaYN63xVVMOTmJ4GgHxXnkLCh+9RsQBkWKIghzLhW2B9ebfG+LQQg8uLtsQ2aUKjTgE+QOg==", "dependencies": { "jsonc-parser": "^3.0.0", "vscode-languageserver-textdocument": "^1.0.1", @@ -23595,15 +27469,17 @@ }, "node_modules/vscode-jsonrpc": { "version": "8.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", + "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", "engines": { "node": ">=14.0.0" } }, "node_modules/vscode-languageclient": { "version": "9.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-9.0.1.tgz", + "integrity": "sha512-JZiimVdvimEuHh5olxhxkht09m3JzUGwggb5eRUkzzJhZ2KjCN0nh55VfiED9oez9DyF8/fz1g1iBV3h+0Z2EA==", "dev": true, - "license": "MIT", "dependencies": { "minimatch": "^5.1.0", "semver": "^7.3.7", @@ -23615,8 +27491,9 @@ }, "node_modules/vscode-languageclient/node_modules/minimatch": { "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -23626,8 +27503,9 @@ }, "node_modules/vscode-languageclient/node_modules/semver": { "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -23637,7 +27515,8 @@ }, "node_modules/vscode-languageserver": { "version": "9.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz", + "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==", "dependencies": { "vscode-languageserver-protocol": "3.17.5" }, @@ -23647,7 +27526,8 @@ }, "node_modules/vscode-languageserver-protocol": { "version": "3.17.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", + "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", "dependencies": { "vscode-jsonrpc": "8.2.0", "vscode-languageserver-types": "3.17.5" @@ -23655,24 +27535,29 @@ }, "node_modules/vscode-languageserver-textdocument": { "version": "1.0.12", - "license": "MIT" + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", + "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==" }, "node_modules/vscode-languageserver-types": { "version": "3.17.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==" }, "node_modules/vscode-nls": { "version": "5.2.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/vscode-nls/-/vscode-nls-5.2.0.tgz", + "integrity": "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==" }, "node_modules/vscode-uri": { "version": "3.1.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==" }, "node_modules/w3c-xmlserializer": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", "dev": true, - "license": "MIT", "dependencies": { "xml-name-validator": "^5.0.0" }, @@ -23682,8 +27567,9 @@ }, "node_modules/wait-port": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/wait-port/-/wait-port-1.1.0.tgz", + "integrity": "sha512-3e04qkoN3LxTMLakdqeWth8nih8usyg+sf1Bgdf9wwUkp05iuK1eSY/QpLvscT/+F/gA89+LpUmmgBtesbqI2Q==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.1.2", "commander": "^9.3.0", @@ -23698,8 +27584,9 @@ }, "node_modules/wait-port/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -23712,8 +27599,9 @@ }, "node_modules/wait-port/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -23727,24 +27615,27 @@ }, "node_modules/wait-port/node_modules/commander": { "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, - "license": "MIT", "engines": { "node": "^12.20.0 || >=14" } }, "node_modules/walker": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "makeerror": "1.0.12" } }, "node_modules/watchpack": { "version": "2.4.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", + "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", "devOptional": true, - "license": "MIT", "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -23755,15 +27646,17 @@ }, "node_modules/wbuf": { "version": "1.7.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dependencies": { "minimalistic-assert": "^1.0.0" } }, "node_modules/wcwidth": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "defaults": "^1.0.3" @@ -23771,7 +27664,9 @@ }, "node_modules/wdio": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/wdio/-/wdio-6.0.1.tgz", + "integrity": "sha512-mH5/Emi+F9gI7IQTuWA8/TRjS1oBg/gQonV0sSucgUMGEVU+e3Ng/wm9v86/OAHo4HAz/B5GA0+WW7cVHVo3eA==", + "deprecated": "This package got deprecated. Please use the 'create-wdio' starter toolkit via: 'npm init wdio ./path/to/project' or 'yarn create wdio ./path/to/project'.", "dependencies": { "chalk": "^4.1.2", "commander": "^8.2.0", @@ -23784,7 +27679,8 @@ }, "node_modules/wdio/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -23797,7 +27693,8 @@ }, "node_modules/wdio/node_modules/chalk": { "version": "4.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -23811,14 +27708,16 @@ }, "node_modules/wdio/node_modules/commander": { "version": "8.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "engines": { "node": ">= 12" } }, "node_modules/wdio/node_modules/semver": { "version": "7.7.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "bin": { "semver": "bin/semver.js" }, @@ -23828,20 +27727,23 @@ }, "node_modules/web-streams-polyfill": { "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/web-tree-sitter": { "version": "0.22.6", - "license": "MIT" + "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.22.6.tgz", + "integrity": "sha512-hS87TH71Zd6mGAmYCvlgxeGDjqd9GTeqXNqTT+u0Gs51uIozNIaaq/kUAbV/Zf56jb2ZOyG8BxZs2GG9wbLi6Q==" }, "node_modules/webdriver": { "version": "9.16.2", + "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-9.16.2.tgz", + "integrity": "sha512-T7QKqD+N0hfvrxq/am5wqdOuyOy7F2tGS7X2f/7jyhrxSPG6Q0cNkSt4gCwla+q3nDMivCP0QIPc7mAVSx5AYQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "^20.1.0", "@types/ws": "^8.5.3", @@ -23859,17 +27761,19 @@ } }, "node_modules/webdriver/node_modules/@types/node": { - "version": "20.19.1", + "version": "20.19.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.2.tgz", + "integrity": "sha512-9pLGGwdzOUBDYi0GNjM97FIA+f92fqSke6joWeBjWXllfNxZBs7qeMF7tvtOIsbY45xkWkxrdwUfUf3MnQa9gA==", "dev": true, - "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, "node_modules/webdriverio": { "version": "9.16.2", + "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-9.16.2.tgz", + "integrity": "sha512-aRcfBZyY+OFqz2DI0ZYmMahGlH3h/clAXXOQSFN5QfrHG4Cjuo5xy3lq4tVfszjEJ813+wwC4HJLbgDmMrPXkA==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "^20.11.30", "@types/sinonjs__fake-timers": "^8.1.5", @@ -23910,17 +27814,19 @@ } }, "node_modules/webdriverio/node_modules/@types/node": { - "version": "20.19.1", + "version": "20.19.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.2.tgz", + "integrity": "sha512-9pLGGwdzOUBDYi0GNjM97FIA+f92fqSke6joWeBjWXllfNxZBs7qeMF7tvtOIsbY45xkWkxrdwUfUf3MnQa9gA==", "dev": true, - "license": "MIT", "dependencies": { "undici-types": "~6.21.0" } }, "node_modules/webdriverio/node_modules/is-plain-obj": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -23930,16 +27836,18 @@ }, "node_modules/webidl-conversions": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=12" } }, "node_modules/webpack": { "version": "5.99.9", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.9.tgz", + "integrity": "sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==", "devOptional": true, - "license": "MIT", "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.6", @@ -23984,8 +27892,9 @@ }, "node_modules/webpack-cli": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-6.0.1.tgz", + "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", "dev": true, - "license": "MIT", "dependencies": { "@discoveryjs/json-ext": "^0.6.1", "@webpack-cli/configtest": "^3.0.1", @@ -24025,24 +27934,27 @@ }, "node_modules/webpack-cli/node_modules/commander": { "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, - "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/webpack-cli/node_modules/interpret": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.13.0" } }, "node_modules/webpack-cli/node_modules/rechoir": { "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", "dev": true, - "license": "MIT", "dependencies": { "resolve": "^1.20.0" }, @@ -24052,7 +27964,8 @@ }, "node_modules/webpack-dev-middleware": { "version": "7.4.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz", + "integrity": "sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==", "dependencies": { "colorette": "^2.0.10", "memfs": "^4.6.0", @@ -24079,14 +27992,16 @@ }, "node_modules/webpack-dev-middleware/node_modules/mime-db": { "version": "1.52.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "engines": { "node": ">= 0.6" } }, "node_modules/webpack-dev-middleware/node_modules/mime-types": { "version": "2.1.35", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dependencies": { "mime-db": "1.52.0" }, @@ -24096,7 +28011,8 @@ }, "node_modules/webpack-dev-server": { "version": "5.2.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz", + "integrity": "sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==", "dependencies": { "@types/bonjour": "^3.5.13", "@types/connect-history-api-fallback": "^1.5.4", @@ -24151,7 +28067,8 @@ }, "node_modules/webpack-dev-server/node_modules/accepts": { "version": "1.3.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -24162,7 +28079,8 @@ }, "node_modules/webpack-dev-server/node_modules/body-parser": { "version": "1.20.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -24184,7 +28102,8 @@ }, "node_modules/webpack-dev-server/node_modules/chokidar": { "version": "3.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -24206,7 +28125,8 @@ }, "node_modules/webpack-dev-server/node_modules/content-disposition": { "version": "0.5.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dependencies": { "safe-buffer": "5.2.1" }, @@ -24216,29 +28136,34 @@ }, "node_modules/webpack-dev-server/node_modules/cookie": { "version": "0.7.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "engines": { "node": ">= 0.6" } }, "node_modules/webpack-dev-server/node_modules/cookie-signature": { "version": "1.0.6", - "license": "MIT" + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "node_modules/webpack-dev-server/node_modules/debug": { "version": "2.6.9", - "license": "MIT", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { "ms": "2.0.0" } }, "node_modules/webpack-dev-server/node_modules/debug/node_modules/ms": { "version": "2.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/webpack-dev-server/node_modules/express": { "version": "4.21.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -24282,7 +28207,8 @@ }, "node_modules/webpack-dev-server/node_modules/finalhandler": { "version": "1.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", @@ -24298,14 +28224,16 @@ }, "node_modules/webpack-dev-server/node_modules/fresh": { "version": "0.5.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "engines": { "node": ">= 0.6" } }, "node_modules/webpack-dev-server/node_modules/glob-parent": { "version": "5.1.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dependencies": { "is-glob": "^4.0.1" }, @@ -24315,7 +28243,8 @@ }, "node_modules/webpack-dev-server/node_modules/iconv-lite": { "version": "0.4.24", - "license": "MIT", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -24325,35 +28254,40 @@ }, "node_modules/webpack-dev-server/node_modules/ipaddr.js": { "version": "2.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", "engines": { "node": ">= 10" } }, "node_modules/webpack-dev-server/node_modules/media-typer": { "version": "0.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "engines": { "node": ">= 0.6" } }, "node_modules/webpack-dev-server/node_modules/merge-descriptors": { "version": "1.0.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/webpack-dev-server/node_modules/mime-db": { "version": "1.52.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "engines": { "node": ">= 0.6" } }, "node_modules/webpack-dev-server/node_modules/mime-types": { "version": "2.1.35", - "license": "MIT", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dependencies": { "mime-db": "1.52.0" }, @@ -24363,18 +28297,21 @@ }, "node_modules/webpack-dev-server/node_modules/negotiator": { "version": "0.6.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "engines": { "node": ">= 0.6" } }, "node_modules/webpack-dev-server/node_modules/path-to-regexp": { "version": "0.1.12", - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" }, "node_modules/webpack-dev-server/node_modules/picomatch": { "version": "2.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "engines": { "node": ">=8.6" }, @@ -24384,7 +28321,8 @@ }, "node_modules/webpack-dev-server/node_modules/qs": { "version": "6.13.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dependencies": { "side-channel": "^1.0.6" }, @@ -24397,7 +28335,8 @@ }, "node_modules/webpack-dev-server/node_modules/raw-body": { "version": "2.5.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -24410,7 +28349,8 @@ }, "node_modules/webpack-dev-server/node_modules/readdirp": { "version": "3.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dependencies": { "picomatch": "^2.2.1" }, @@ -24420,7 +28360,8 @@ }, "node_modules/webpack-dev-server/node_modules/send": { "version": "0.19.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -24442,14 +28383,16 @@ }, "node_modules/webpack-dev-server/node_modules/send/node_modules/encodeurl": { "version": "1.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "engines": { "node": ">= 0.8" } }, "node_modules/webpack-dev-server/node_modules/serve-static": { "version": "1.16.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", @@ -24462,14 +28405,16 @@ }, "node_modules/webpack-dev-server/node_modules/statuses": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "engines": { "node": ">= 0.8" } }, "node_modules/webpack-dev-server/node_modules/type-is": { "version": "1.6.18", - "license": "MIT", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -24480,8 +28425,9 @@ }, "node_modules/webpack-merge": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", + "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", "dev": true, - "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", "flat": "^5.0.2", @@ -24493,16 +28439,18 @@ }, "node_modules/webpack-sources": { "version": "3.3.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", + "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", "devOptional": true, - "license": "MIT", "engines": { "node": ">=10.13.0" } }, "node_modules/webpack/node_modules/eslint-scope": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "devOptional": true, - "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -24513,32 +28461,36 @@ }, "node_modules/webpack/node_modules/estraverse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "devOptional": true, - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/webpack/node_modules/events": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "devOptional": true, - "license": "MIT", "engines": { "node": ">=0.8.x" } }, "node_modules/webpack/node_modules/mime-db": { "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "devOptional": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/webpack/node_modules/mime-types": { "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "devOptional": true, - "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -24548,7 +28500,8 @@ }, "node_modules/websocket-driver": { "version": "0.7.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dependencies": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", @@ -24560,15 +28513,17 @@ }, "node_modules/websocket-extensions": { "version": "0.1.4", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "engines": { "node": ">=0.8.0" } }, "node_modules/whatwg-encoding": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", "dev": true, - "license": "MIT", "dependencies": { "iconv-lite": "0.6.3" }, @@ -24578,16 +28533,18 @@ }, "node_modules/whatwg-mimetype": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", "dev": true, - "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/whatwg-url": { "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", "dev": true, - "license": "MIT", "dependencies": { "tr46": "^5.1.0", "webidl-conversions": "^7.0.0" @@ -24598,7 +28555,8 @@ }, "node_modules/which": { "version": "2.0.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dependencies": { "isexe": "^2.0.0" }, @@ -24611,8 +28569,9 @@ }, "node_modules/which-boxed-primitive": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, - "license": "MIT", "dependencies": { "is-bigint": "^1.1.0", "is-boolean-object": "^1.2.1", @@ -24629,8 +28588,9 @@ }, "node_modules/which-builtin-type": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, - "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", @@ -24655,13 +28615,15 @@ }, "node_modules/which-builtin-type/node_modules/isarray": { "version": "2.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true }, "node_modules/which-collection": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, - "license": "MIT", "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", @@ -24677,6 +28639,8 @@ }, "node_modules/which-pm-runs": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.1.0.tgz", + "integrity": "sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==", "license": "MIT", "engines": { "node": ">=4" @@ -24684,7 +28648,8 @@ }, "node_modules/which-typed-array": { "version": "1.1.19", - "license": "MIT", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", @@ -24703,6 +28668,8 @@ }, "node_modules/wide-align": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "license": "ISC", "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" @@ -24710,10 +28677,14 @@ }, "node_modules/wide-align/node_modules/emoji-regex": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "license": "MIT" }, "node_modules/wide-align/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -24726,13 +28697,15 @@ }, "node_modules/wildcard": { "version": "2.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true }, "node_modules/win-ca": { "version": "3.5.1", + "resolved": "https://registry.npmjs.org/win-ca/-/win-ca-3.5.1.tgz", + "integrity": "sha512-RNy9gpBS6cxWHjfbqwBA7odaHyT+YQNhtdpJZwYCFoxB/Dq22oeOZ9YCXMwjhLytKpo7JJMnKdJ/ve7N12zzfQ==", "hasInstallScript": true, - "license": "MIT", "dependencies": { "is-electron": "^2.2.0", "make-dir": "^1.3.0", @@ -24742,7 +28715,8 @@ }, "node_modules/win-ca/node_modules/make-dir": { "version": "1.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dependencies": { "pify": "^3.0.0" }, @@ -24752,6 +28726,8 @@ }, "node_modules/windows-system-proxy": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/windows-system-proxy/-/windows-system-proxy-1.0.0.tgz", + "integrity": "sha512-qd1WfyX9gjAqI36RHt95di2+FBr74DhvELd1EASgklCGScjwReHnWnXfUyabp/CJWl/IdnkUzG0Ub6Cv2R4KJQ==", "license": "Apache-2.0", "dependencies": { "registry-js": "^1.15.1" @@ -24759,20 +28735,23 @@ }, "node_modules/word-wrap": { "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/workerpool": { - "version": "9.3.2", - "dev": true, - "license": "Apache-2.0" + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.3.tgz", + "integrity": "sha512-slxCaKbYjEdFT/o2rH9xS1hf4uRDch1w7Uo+apxhZ+sf/1d9e0ZVkn42kPNGP2dgjIx6YFvSevj0zHvbWe2jdw==", + "dev": true }, "node_modules/wrap-ansi": { "version": "8.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -24788,7 +28767,8 @@ "node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -24803,7 +28783,8 @@ }, "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -24816,11 +28797,13 @@ }, "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { "version": "8.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/wrap-ansi-cjs/node_modules/string-width": { "version": "4.2.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -24832,7 +28815,8 @@ }, "node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "6.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "engines": { "node": ">=12" }, @@ -24842,7 +28826,8 @@ }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "6.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "engines": { "node": ">=12" }, @@ -24852,7 +28837,8 @@ }, "node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "7.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -24865,12 +28851,14 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "license": "ISC" + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/write-file-atomic": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", "dev": true, - "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -24881,12 +28869,14 @@ }, "node_modules/write-file-atomic/node_modules/signal-exit": { "version": "3.0.7", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, "node_modules/ws": { - "version": "8.18.2", - "license": "MIT", + "version": "8.18.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", + "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "engines": { "node": ">=10.0.0" }, @@ -24905,15 +28895,17 @@ }, "node_modules/xml-name-validator": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=18" } }, "node_modules/xml2js": { "version": "0.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", + "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" @@ -24924,14 +28916,16 @@ }, "node_modules/xmlbuilder": { "version": "11.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "engines": { "node": ">=4.0" } }, "node_modules/xmlbuilder2": { "version": "3.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/xmlbuilder2/-/xmlbuilder2-3.1.1.tgz", + "integrity": "sha512-WCSfbfZnQDdLQLiMdGUQpMxxckeQ4oZNMNhLVkcekTu7xhD4tuUDyAPoY8CwXvBYE6LwBHd6QW2WZXlOWr1vCw==", "dependencies": { "@oozcitak/dom": "1.15.10", "@oozcitak/infra": "1.0.8", @@ -24944,14 +28938,16 @@ }, "node_modules/xmlbuilder2/node_modules/argparse": { "version": "1.0.10", - "license": "MIT", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dependencies": { "sprintf-js": "~1.0.2" } }, "node_modules/xmlbuilder2/node_modules/js-yaml": { "version": "3.14.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -24962,38 +28958,44 @@ }, "node_modules/xmlchars": { "version": "2.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true }, "node_modules/xtend": { "version": "4.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "engines": { "node": ">=0.4" } }, "node_modules/y18n": { "version": "5.0.8", - "license": "ISC", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "engines": { "node": ">=10" } }, "node_modules/yallist": { "version": "3.1.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true }, "node_modules/yaml": { "version": "2.2.2", - "license": "ISC", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz", + "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==", "engines": { "node": ">= 14" } }, "node_modules/yaml-language-server": { "version": "1.13.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/yaml-language-server/-/yaml-language-server-1.13.0.tgz", + "integrity": "sha512-CzekVjFOUkiXI6tg3BPuSkxE60keDT4/+LjPLXwnt4gCRzaaWMCjT92NxOHv1derbBLHWoecay48tse/De181Q==", "dependencies": { "ajv": "^8.11.0", "lodash": "4.17.21", @@ -25015,7 +29017,8 @@ }, "node_modules/yaml-language-server/node_modules/prettier": { "version": "2.8.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", + "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", "optional": true, "bin": { "prettier": "bin-prettier.js" @@ -25029,18 +29032,21 @@ }, "node_modules/yaml-language-server/node_modules/request-light": { "version": "0.5.8", - "license": "MIT" + "resolved": "https://registry.npmjs.org/request-light/-/request-light-0.5.8.tgz", + "integrity": "sha512-3Zjgh+8b5fhRJBQZoy+zbVKpAQGLyka0MPgW3zruTF4dFFJ8Fqcfu9YsAvi/rvdcaTeWG3MkbZv4WKxAn/84Lg==" }, "node_modules/yaml-language-server/node_modules/vscode-jsonrpc": { "version": "6.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", + "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==", "engines": { "node": ">=8.0.0 || >=10.0.0" } }, "node_modules/yaml-language-server/node_modules/vscode-languageserver": { "version": "7.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", + "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", "dependencies": { "vscode-languageserver-protocol": "3.16.0" }, @@ -25050,7 +29056,8 @@ }, "node_modules/yaml-language-server/node_modules/vscode-languageserver-protocol": { "version": "3.16.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", + "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", "dependencies": { "vscode-jsonrpc": "6.0.0", "vscode-languageserver-types": "3.16.0" @@ -25058,12 +29065,14 @@ }, "node_modules/yaml-language-server/node_modules/vscode-languageserver-types": { "version": "3.16.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", + "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" }, "node_modules/yargs": { "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, - "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -25079,16 +29088,18 @@ }, "node_modules/yargs-parser": { "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/yargs-unparser": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, - "license": "MIT", "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", @@ -25101,8 +29112,9 @@ }, "node_modules/yargs-unparser/node_modules/camelcase": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -25112,13 +29124,15 @@ }, "node_modules/yargs/node_modules/emoji-regex": { "version": "8.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/yargs/node_modules/string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -25130,33 +29144,52 @@ }, "node_modules/yauzl": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, - "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, + "node_modules/yauzl-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yauzl-promise/-/yauzl-promise-4.0.0.tgz", + "integrity": "sha512-/HCXpyHXJQQHvFq9noqrjfa/WpQC2XYs3vI7tBiAi4QiIU1knvYhZGaO1QPjwIVMdqflxbmwgMXtYeaRiAE0CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@node-rs/crc32": "^1.7.0", + "is-it-type": "^5.1.2", + "simple-invariant": "^2.0.1" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/yauzl/node_modules/buffer-crc32": { "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/yn": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/yocto-queue": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -25166,8 +29199,9 @@ }, "node_modules/yoctocolors": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.1.tgz", + "integrity": "sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=18" }, @@ -25177,8 +29211,9 @@ }, "node_modules/yoctocolors-cjs": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", + "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", "dev": true, - "license": "MIT", "engines": { "node": ">=18" }, @@ -25188,7 +29223,8 @@ }, "node_modules/zip-stream": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz", + "integrity": "sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==", "dependencies": { "archiver-utils": "^5.0.0", "compress-commons": "^6.0.2", @@ -25200,22 +29236,25 @@ }, "node_modules/zod": { "version": "3.25.67", - "license": "MIT", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.67.tgz", + "integrity": "sha512-idA2YXwpCdqUSKRCACDE6ItZD9TZzy3OZMtpfLoh6oPR47lipysRrJfjzMqFxQ3uJuUPyUeWe1r9vLH33xO/Qw==", "funding": { "url": "https://github.com/sponsors/colinhacks" } }, "node_modules/zod-to-json-schema": { "version": "3.24.6", - "license": "ISC", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz", + "integrity": "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==", "peerDependencies": { "zod": "^3.24.1" } }, "node_modules/zx": { "version": "8.6.0", + "resolved": "https://registry.npmjs.org/zx/-/zx-8.6.0.tgz", + "integrity": "sha512-CpOskNj7nNW19z5DkOTHX24Yh1qnnx1oANn8EnD3QbCUBnZpuennJaYkb4zea5GJCxT6/IdxeiA5nweQ1S2YtA==", "dev": true, - "license": "Apache-2.0", "bin": { "zx": "build/cli.js" }, @@ -25225,11 +29264,11 @@ }, "server/aws-lsp-antlr4": { "name": "@aws/lsp-antlr4", - "version": "0.1.15", + "version": "0.1.16", "license": "Apache-2.0", "dependencies": { - "@aws/language-server-runtimes": "^0.2.102", - "@aws/lsp-core": "^0.0.11" + "@aws/language-server-runtimes": "^0.2.112", + "@aws/lsp-core": "^0.0.12" }, "devDependencies": { "@babel/plugin-transform-modules-commonjs": "^7.24.1", @@ -25253,8 +29292,9 @@ }, "server/aws-lsp-antlr4/node_modules/prettier": { "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, - "license": "MIT", "bin": { "prettier": "bin-prettier.js" }, @@ -25269,6 +29309,7 @@ "name": "@aws/lsp-buildspec", "version": "0.0.1", "dependencies": { + "@aws/language-server-runtimes": "^0.2.112", "@aws/lsp-json": "*", "@aws/lsp-yaml": "*", "vscode-languageserver": "^9.0.1", @@ -25279,6 +29320,7 @@ "name": "@aws/lsp-cloudformation", "version": "0.0.1", "dependencies": { + "@aws/language-server-runtimes": "^0.2.112", "@aws/lsp-core": "*", "@aws/lsp-json": "*", "vscode-languageserver": "^9.0.1", @@ -25287,7 +29329,7 @@ }, "server/aws-lsp-codewhisperer": { "name": "@aws/lsp-codewhisperer", - "version": "0.0.62", + "version": "0.0.66", "bundleDependencies": [ "@amzn/codewhisperer-streaming", "@amzn/amazon-q-developer-streaming-client" @@ -25300,8 +29342,8 @@ "@aws-sdk/util-arn-parser": "^3.723.0", "@aws-sdk/util-retry": "^3.374.0", "@aws/chat-client-ui-types": "^0.1.40", - "@aws/language-server-runtimes": "^0.2.102", - "@aws/lsp-core": "^0.0.11", + "@aws/language-server-runtimes": "^0.2.112", + "@aws/lsp-core": "^0.0.12", "@modelcontextprotocol/sdk": "^1.9.0", "@smithy/node-http-handler": "^2.5.0", "adm-zip": "^0.5.10", @@ -25312,6 +29354,7 @@ "chokidar": "^4.0.3", "deepmerge": "^4.3.1", "diff": "^7.0.0", + "encoding-japanese": "^2.2.0", "fast-glob": "^3.3.3", "fastest-levenshtein": "^1.0.16", "fdir": "^6.4.3", @@ -25336,6 +29379,7 @@ "@types/adm-zip": "^0.5.5", "@types/archiver": "^6.0.2", "@types/diff": "^7.0.2", + "@types/encoding-japanese": "^2.2.1", "@types/ignore-walk": "^4.0.3", "@types/local-indexing": "file:./types/types-local-indexing-1.1.0.tgz", "@types/lokijs": "^1.5.14", @@ -25360,7 +29404,8 @@ }, "server/aws-lsp-codewhisperer/node_modules/@smithy/abort-controller": { "version": "2.2.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.2.0.tgz", + "integrity": "sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw==", "dependencies": { "@smithy/types": "^2.12.0", "tslib": "^2.6.2" @@ -25371,7 +29416,8 @@ }, "server/aws-lsp-codewhisperer/node_modules/@smithy/node-http-handler": { "version": "2.5.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz", + "integrity": "sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA==", "dependencies": { "@smithy/abort-controller": "^2.2.0", "@smithy/protocol-http": "^3.3.0", @@ -25385,7 +29431,8 @@ }, "server/aws-lsp-codewhisperer/node_modules/@smithy/protocol-http": { "version": "3.3.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz", + "integrity": "sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==", "dependencies": { "@smithy/types": "^2.12.0", "tslib": "^2.6.2" @@ -25396,7 +29443,8 @@ }, "server/aws-lsp-codewhisperer/node_modules/@smithy/querystring-builder": { "version": "2.2.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz", + "integrity": "sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A==", "dependencies": { "@smithy/types": "^2.12.0", "@smithy/util-uri-escape": "^2.2.0", @@ -25408,7 +29456,8 @@ }, "server/aws-lsp-codewhisperer/node_modules/@smithy/types": { "version": "2.12.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", + "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", "dependencies": { "tslib": "^2.6.2" }, @@ -25418,7 +29467,8 @@ }, "server/aws-lsp-codewhisperer/node_modules/@smithy/util-uri-escape": { "version": "2.2.0", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz", + "integrity": "sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==", "dependencies": { "tslib": "^2.6.2" }, @@ -25433,8 +29483,8 @@ "dependencies": { "@aws-sdk/client-sso-oidc": "^3.616.0", "@aws-sdk/token-providers": "^3.744.0", - "@aws/language-server-runtimes": "^0.2.102", - "@aws/lsp-core": "^0.0.11", + "@aws/language-server-runtimes": "^0.2.112", + "@aws/lsp-core": "^0.0.12", "@smithy/node-http-handler": "^3.2.5", "@smithy/shared-ini-file-loader": "^4.0.1", "https-proxy-agent": "^7.0.5", @@ -25464,8 +29514,9 @@ }, "server/aws-lsp-identity/node_modules/@smithy/types": { "version": "3.7.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.7.2.tgz", + "integrity": "sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -25475,11 +29526,11 @@ }, "server/aws-lsp-json": { "name": "@aws/lsp-json", - "version": "0.1.15", + "version": "0.1.16", "license": "Apache-2.0", "dependencies": { - "@aws/language-server-runtimes": "^0.2.102", - "@aws/lsp-core": "^0.0.11", + "@aws/language-server-runtimes": "^0.2.112", + "@aws/lsp-core": "^0.0.12", "vscode-languageserver": "^9.0.1", "vscode-languageserver-textdocument": "^1.0.8" }, @@ -25495,8 +29546,8 @@ "version": "0.0.1", "license": "Apache-2.0", "dependencies": { - "@aws/language-server-runtimes": "^0.2.102", - "@aws/lsp-core": "^0.0.11", + "@aws/language-server-runtimes": "^0.2.112", + "@aws/lsp-core": "^0.0.12", "vscode-languageserver": "^9.0.1" }, "devDependencies": { @@ -25522,8 +29573,9 @@ }, "server/aws-lsp-notification/node_modules/@smithy/types": { "version": "3.7.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.7.2.tgz", + "integrity": "sha512-bNwBYYmN8Eh9RyjS1p2gW6MIhSO2rl7X9QeLM8iTdcGRP+eDiIWDt66c9IysCc22gefKszZv+ubV9qZc7hdESg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" }, @@ -25533,10 +29585,10 @@ }, "server/aws-lsp-partiql": { "name": "@aws/lsp-partiql", - "version": "0.0.14", + "version": "0.0.15", "license": "Apache-2.0", "dependencies": { - "@aws/language-server-runtimes": "^0.2.102", + "@aws/language-server-runtimes": "^0.2.112", "antlr4-c3": "3.4.2", "antlr4ng": "3.0.14", "web-tree-sitter": "0.22.6" @@ -25558,19 +29610,20 @@ "dependencies": { "@aws-sdk/client-s3": "^3.623.0", "@aws-sdk/types": "^3.734.0", - "@aws/lsp-core": "^0.0.11", + "@aws/language-server-runtimes": "^0.2.112", + "@aws/lsp-core": "^0.0.12", "vscode-languageserver": "^9.0.1", "vscode-languageserver-textdocument": "^1.0.8" } }, "server/aws-lsp-yaml": { "name": "@aws/lsp-yaml", - "version": "0.1.15", + "version": "0.1.16", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@aws/language-server-runtimes": "^0.2.102", - "@aws/lsp-core": "^0.0.11", + "@aws/language-server-runtimes": "^0.2.112", + "@aws/lsp-core": "^0.0.12", "vscode-languageserver": "^9.0.1", "vscode-languageserver-textdocument": "^1.0.8", "yaml-language-server": "1.13.0" @@ -25583,7 +29636,7 @@ "name": "@amzn/device-sso-auth-lsp", "version": "0.0.1", "dependencies": { - "@aws/language-server-runtimes": "^0.2.102", + "@aws/language-server-runtimes": "^0.2.112", "vscode-languageserver": "^9.0.1" }, "devDependencies": { @@ -25594,7 +29647,7 @@ "name": "@aws/hello-world-lsp", "version": "0.0.1", "dependencies": { - "@aws/language-server-runtimes": "^0.2.102", + "@aws/language-server-runtimes": "^0.2.112", "vscode-languageserver": "^9.0.1" }, "devDependencies": { diff --git a/package.json b/package.json index 4518919aeb..f9c1952c1c 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,8 @@ "chat-client", "core/*", "server/*", - "server/**" + "server/**", + "integration-tests/*" ], "scripts": { "prepare": "husky .husky", @@ -29,13 +30,14 @@ "test-integ": "npm run compile && npm run test-integ --workspaces --if-present", "test-unit": "npm run compile && npm run test-unit --workspaces --if-present", "test:coverage": "npm run compile && npm run test:coverage --workspaces --if-present", - "coverage:report": "c8 report --reporter=html --reporter=text", - "coverage:check": "c8 check-coverage --lines 70 --functions 70 --branches 70 --statements 70", + "coverage:report": "npm run coverage:report --workspaces --if-present", + "coverage:check": "npm run coverage:check --workspaces --if-present", "package": "npm run compile && npm run package --workspaces --if-present" }, "dependencies": { - "@aws/language-server-runtimes": "^0.2.102", + "@aws/language-server-runtimes": "^0.2.112", "@smithy/types": "4.2.0", + "clean": "^4.0.2", "typescript": "^5.8.2" }, "devDependencies": { diff --git a/server/aws-lsp-antlr4/CHANGELOG.md b/server/aws-lsp-antlr4/CHANGELOG.md index e95d3ab122..d3d1442ed6 100644 --- a/server/aws-lsp-antlr4/CHANGELOG.md +++ b/server/aws-lsp-antlr4/CHANGELOG.md @@ -1,5 +1,19 @@ # Changelog +## [0.1.16](https://github.com/aws/language-servers/compare/lsp-antlr4/v0.1.15...lsp-antlr4/v0.1.16) (2025-07-17) + + +### Bug Fixes + +* use document change events for auto trigger classifier input ([#1912](https://github.com/aws/language-servers/issues/1912)) ([2204da6](https://github.com/aws/language-servers/commit/2204da6193f2030ee546f61c969b1a664d8025e3)) + + +### Dependencies + +* The following workspace dependencies were updated + * dependencies + * @aws/lsp-core bumped from ^0.0.11 to ^0.0.12 + ## [0.1.15](https://github.com/aws/language-servers/compare/lsp-antlr4/v0.1.14...lsp-antlr4/v0.1.15) (2025-07-02) diff --git a/server/aws-lsp-antlr4/package.json b/server/aws-lsp-antlr4/package.json index dd4dcc9b19..521ab5f784 100644 --- a/server/aws-lsp-antlr4/package.json +++ b/server/aws-lsp-antlr4/package.json @@ -1,6 +1,6 @@ { "name": "@aws/lsp-antlr4", - "version": "0.1.15", + "version": "0.1.16", "description": "ANTLR4 language server", "main": "out/index.js", "repository": { @@ -28,8 +28,8 @@ "clean": "rm -rf node_modules" }, "dependencies": { - "@aws/language-server-runtimes": "^0.2.102", - "@aws/lsp-core": "^0.0.11" + "@aws/language-server-runtimes": "^0.2.112", + "@aws/lsp-core": "^0.0.12" }, "peerDependencies": { "antlr4-c3": ">=3.4 < 4", diff --git a/server/aws-lsp-buildspec/package.json b/server/aws-lsp-buildspec/package.json index c36113d855..cda2641124 100644 --- a/server/aws-lsp-buildspec/package.json +++ b/server/aws-lsp-buildspec/package.json @@ -7,8 +7,9 @@ "compile": "tsc --build" }, "dependencies": { - "@aws/lsp-yaml": "*", + "@aws/language-server-runtimes": "^0.2.112", "@aws/lsp-json": "*", + "@aws/lsp-yaml": "*", "vscode-languageserver": "^9.0.1", "vscode-languageserver-textdocument": "^1.0.8" } diff --git a/server/aws-lsp-cloudformation/package.json b/server/aws-lsp-cloudformation/package.json index 70bf4e56ae..6f588655eb 100644 --- a/server/aws-lsp-cloudformation/package.json +++ b/server/aws-lsp-cloudformation/package.json @@ -7,6 +7,7 @@ "compile": "tsc --build" }, "dependencies": { + "@aws/language-server-runtimes": "^0.2.112", "@aws/lsp-core": "*", "@aws/lsp-json": "*", "vscode-languageserver": "^9.0.1", diff --git a/server/aws-lsp-codewhisperer/CHANGELOG.md b/server/aws-lsp-codewhisperer/CHANGELOG.md index 1517ebfb2a..049bf557b8 100644 --- a/server/aws-lsp-codewhisperer/CHANGELOG.md +++ b/server/aws-lsp-codewhisperer/CHANGELOG.md @@ -1,5 +1,109 @@ # Changelog +## [0.0.66](https://github.com/aws/language-servers/compare/lsp-codewhisperer/v0.0.65...lsp-codewhisperer/v0.0.66) (2025-07-17) + + +### Features + +* add active user tracking with state persistence ([#1892](https://github.com/aws/language-servers/issues/1892)) ([a5587c5](https://github.com/aws/language-servers/commit/a5587c59e4a07074ad8afba930c6596dc28c693b)) +* add conversation compaction ([#1895](https://github.com/aws/language-servers/issues/1895)) ([8bb7144](https://github.com/aws/language-servers/commit/8bb7144e45cfce6cc9337fd49de7edbee61105b8)) +* adding streakLength back to UTDE telemetry ([#1902](https://github.com/aws/language-servers/issues/1902)) ([152f1c5](https://github.com/aws/language-servers/commit/152f1c5f23698f8c574120bcf4f2214e4540e7e6)) + + +### Bug Fixes + +* add proper encoding support for shell output ([#1903](https://github.com/aws/language-servers/issues/1903)) ([44a6d62](https://github.com/aws/language-servers/commit/44a6d629af7702662a02f384a6a542c0d72ccc39)) +* align auto trigger classifier with documentChangeEvent ([#1914](https://github.com/aws/language-servers/issues/1914)) ([f308e17](https://github.com/aws/language-servers/commit/f308e17912df0b8f03f4e655cc34f2f875f4e65c)) +* **amazonq:** replacing image's large binary in log ([#1905](https://github.com/aws/language-servers/issues/1905)) ([a06ed62](https://github.com/aws/language-servers/commit/a06ed626e118c5f846e494630ef0577ce1ace628)) +* editor state does not use the same language id as file context ([#1924](https://github.com/aws/language-servers/issues/1924)) ([c10866d](https://github.com/aws/language-servers/commit/c10866d70070173aba63be1c78945a4da6129018)) +* pinned `@Code` symbols do not persist between IDE sessions ([#1887](https://github.com/aws/language-servers/issues/1887)) ([b5c715f](https://github.com/aws/language-servers/commit/b5c715ff5ee303c2d48ffb9c1c6c98a9d985e2f1)) +* replace thinking with working and replace stop with cancel ([#1922](https://github.com/aws/language-servers/issues/1922)) ([371e731](https://github.com/aws/language-servers/commit/371e731545f7572d3356d061cd8b94db35e4c333)) +* should trigger edits if one of the following lines is non-empty ([#1915](https://github.com/aws/language-servers/issues/1915)) ([b298602](https://github.com/aws/language-servers/commit/b2986026293e26bff0cacbaf1554999c12fb429c)) +* treat `echo`/`find`/`grep` as mutating ([#1921](https://github.com/aws/language-servers/issues/1921)) ([ef801a3](https://github.com/aws/language-servers/commit/ef801a3b9c435c25899eaa3712cabf6d5c4b9922)) +* use document change events for auto trigger classifier input ([#1912](https://github.com/aws/language-servers/issues/1912)) ([2204da6](https://github.com/aws/language-servers/commit/2204da6193f2030ee546f61c969b1a664d8025e3)) + + +### Dependencies + +* The following workspace dependencies were updated + * dependencies + * @aws/lsp-core bumped from ^0.0.11 to ^0.0.12 + +## [0.0.65](https://github.com/aws/language-servers/compare/lsp-codewhisperer/v0.0.64...lsp-codewhisperer/v0.0.65) (2025-07-15) + + +### Features + +* **amazonq:** add a/b testing info into agenticChat toolkit metrics ([#1898](https://github.com/aws/language-servers/issues/1898)) ([6ab9b2c](https://github.com/aws/language-servers/commit/6ab9b2cef0125846c2f20fd8554f591808b59cd0)) +* **amazonq:** added full system information to the logs ([#1875](https://github.com/aws/language-servers/issues/1875)) ([7795c6b](https://github.com/aws/language-servers/commit/7795c6b43274211731aa9bb295b41ec89db41a6d)) +* **amazonq:** Adding QCodeReview tool to amazonQ ([#1882](https://github.com/aws/language-servers/issues/1882)) ([07e343b](https://github.com/aws/language-servers/commit/07e343b9fcef319bdbec80c48388e44b4b19269a)) +* **amazonq:** allow opt-out for workspace context server ([#1867](https://github.com/aws/language-servers/issues/1867)) ([72b6d76](https://github.com/aws/language-servers/commit/72b6d76c5ed8e240aad6be80f65eab3497caaacf)) +* **chat-client:** add built-in tool permission and enable auto-approve ([#1890](https://github.com/aws/language-servers/issues/1890)) ([03b59c8](https://github.com/aws/language-servers/commit/03b59c8fba58db0f6b6c387cf5d53227c3f54673)) +* **chat-client:** handle keyboard shortcut for run/reject/stop shell commands and tooltips ([#1885](https://github.com/aws/language-servers/issues/1885)) ([f8e9461](https://github.com/aws/language-servers/commit/f8e94615b5ce8a3f4bf8837627fa4816a09cbef2)) +* update UserTriggerDecisionEventStreakLengthInteger min value ([#1878](https://github.com/aws/language-servers/issues/1878)) ([e06f180](https://github.com/aws/language-servers/commit/e06f18017864ea33e316059a708cb87aa6d8c562)) + + +### Bug Fixes + +* **amazonq:** additional checks for binary and credential files ([#1866](https://github.com/aws/language-servers/issues/1866)) ([76656c9](https://github.com/aws/language-servers/commit/76656c9b2bb5080f64f581bb3b39cd55a3015bdf)) +* **amazonq:** catch mcp initialization errors ([#1873](https://github.com/aws/language-servers/issues/1873)) ([afdd6a4](https://github.com/aws/language-servers/commit/afdd6a4bd1db7c3990a7a279ebbbfbe0640e27c3)) +* **chat-client:** revert for add built-in tool permission and enable auto-approve ([#1890](https://github.com/aws/language-servers/issues/1890)) ([#1900](https://github.com/aws/language-servers/issues/1900)) ([34b41b8](https://github.com/aws/language-servers/commit/34b41b8f87c21d2ee6b98643339dbdfa71efcb77)) +* **chat-client:** revert for amazon q keyboard shortcuts feature ([#1901](https://github.com/aws/language-servers/issues/1901)) ([522f8de](https://github.com/aws/language-servers/commit/522f8de6dba8dfa9b4363934cd7fcea905add1ce)) +* Disable Concurrent inline completion handler ([#1880](https://github.com/aws/language-servers/issues/1880)) ([61eeb8c](https://github.com/aws/language-servers/commit/61eeb8c93b5454c5a99ebb79b5593007d08007e5)) +* Forward slash shown in rules list in multi-root workspaces on windows ([#1855](https://github.com/aws/language-servers/issues/1855)) ([061caa6](https://github.com/aws/language-servers/commit/061caa6450946e20cd1630b92f9b6dada8058edd)) + + +### Reverts + +* adding streakLength back for UserTriggerDecisionEvent ([#1877](https://github.com/aws/language-servers/issues/1877)) ([b199100](https://github.com/aws/language-servers/commit/b199100153aa0629890c49e12a56efbb9c627154)) + +## [0.0.64](https://github.com/aws/language-servers/compare/lsp-codewhisperer/v0.0.63...lsp-codewhisperer/v0.0.64) (2025-07-11) + + +### Bug Fixes + +* **amazonq:** add files created by fsWrite tool to @Files list ([#1784](https://github.com/aws/language-servers/issues/1784)) ([cfeb3be](https://github.com/aws/language-servers/commit/cfeb3be43e425fae89d795cacad62031cc1ee029)) +* **amazonq:** remove the deep copy logic in updateRequestInputWithToolResults ([#1870](https://github.com/aws/language-servers/issues/1870)) ([f209a15](https://github.com/aws/language-servers/commit/f209a15785106af43fd97bfa99b393a13d9a9bab)) +* use absolute file path for shell ([#1871](https://github.com/aws/language-servers/issues/1871)) ([f863735](https://github.com/aws/language-servers/commit/f863735c8dc734a1af4b26fbe8b9c436a32c21ca)) + + +### Reverts + +* adding files on VSC windows properly triggers reindexing ([#1820](https://github.com/aws/language-servers/issues/1820))" ([#1860](https://github.com/aws/language-servers/issues/1860)) ([423cdbc](https://github.com/aws/language-servers/commit/423cdbc48d9439e29ba69c37dc289a739f83475f)) +* revert: adding files on VSC windows properly triggers reindexing ([#18](https://github.com/aws/language-servers/issues/18)…" ([#1862](https://github.com/aws/language-servers/issues/1862)) ([8e0c88b](https://github.com/aws/language-servers/commit/8e0c88b91d4f04e3209bbe35ee5678793c94b0f1)) + +## [0.0.63](https://github.com/aws/language-servers/compare/lsp-codewhisperer/v0.0.62...lsp-codewhisperer/v0.0.63) (2025-07-08) + + +### Features + +* added file watchers to listen to mcp and persona config ([#1714](https://github.com/aws/language-servers/issues/1714)) ([4c5a7f8](https://github.com/aws/language-servers/commit/4c5a7f893bad37bea1946d37d06f57197c3ef04b)) +* adding streakLength back for UserTriggerDecisionEvent ([#1841](https://github.com/aws/language-servers/issues/1841)) ([7052132](https://github.com/aws/language-servers/commit/7052132a5198944ef05ddbf857d622ba518e71da)) +* **amazonq:** add transformation preferences functionality to input gen ([#1792](https://github.com/aws/language-servers/issues/1792)) ([095f737](https://github.com/aws/language-servers/commit/095f737b86e6234b2568c6d4deafbbb90967bdbc)) +* **amazonq:** update workspace context server A/B testing filter ([#1830](https://github.com/aws/language-servers/issues/1830)) ([faeeee3](https://github.com/aws/language-servers/commit/faeeee3da7a8712f3501055ba8d485528185cdb6)) +* **flags:** change flag name to enablewebformtransform([#1804](https://github.com/aws/language-servers/issues/1804)) ([3b6c3be](https://github.com/aws/language-servers/commit/3b6c3be7630248cd00c19c16637f016d799ef8d1)) +* passing partialResultToken to onInlineCompletionHandler result for EDITS ([#1840](https://github.com/aws/language-servers/issues/1840)) ([270d5a3](https://github.com/aws/language-servers/commit/270d5a3c5adba6b49d938f310ac89ae9b7fbc401)) +* support listAvailableModels server request ([#1808](https://github.com/aws/language-servers/issues/1808)) ([9f1ddb3](https://github.com/aws/language-servers/commit/9f1ddb327778dba6da49337b79c5fef19023b52d)) + + +### Bug Fixes + +* adding agenticcoding field to amazonqaddMessage metric([#1849](https://github.com/aws/language-servers/issues/1849)) ([d677c52](https://github.com/aws/language-servers/commit/d677c52c6139859bc0f2dd8e7ffe6a85b87db3f6)) +* adding files on VSC windows properly triggers reindexing ([#1820](https://github.com/aws/language-servers/issues/1820)) ([0c2d8eb](https://github.com/aws/language-servers/commit/0c2d8eb7dd875dfe86d1b2d094ec53a2a1221b97)) +* **amazonq:** allow taking .jpg file as image context, add image cont… ([#1814](https://github.com/aws/language-servers/issues/1814)) ([4d36fa4](https://github.com/aws/language-servers/commit/4d36fa4a0a04692dba720bc0288c6cee7f45a1fc)) +* **amazonq:** change the customer UI message to out of the workspace ([#1822](https://github.com/aws/language-servers/issues/1822)) ([624def5](https://github.com/aws/language-servers/commit/624def51e4d9e21ee8d045ffe528455b69cdfecb)) +* **amazonq:** change the image filter used in open file dialog ([#1838](https://github.com/aws/language-servers/issues/1838)) ([d9da4cb](https://github.com/aws/language-servers/commit/d9da4cbb7b1995ef43aaba1b7e67d26fd61a3c57)) +* **amazonq:** fix to add upper limit validation for tool description ([#1760](https://github.com/aws/language-servers/issues/1760)) ([2d18a3b](https://github.com/aws/language-servers/commit/2d18a3ba69d22b26dea5170656d79b9eacc202b1)) +* **amazonq:** fix typo in image context list ([#1836](https://github.com/aws/language-servers/issues/1836)) ([179b553](https://github.com/aws/language-servers/commit/179b553a1444201e696fd52e7705dc0c05154eab)) +* **amazonq:** handle undefined paths gracefully and retry ([#1825](https://github.com/aws/language-servers/issues/1825)) ([c52b017](https://github.com/aws/language-servers/commit/c52b017eef0666433cbb0b6d8086254dc1af5fee)) +* **amazonq:** include tsx and jsx files in workspace context server ([#1790](https://github.com/aws/language-servers/issues/1790)) ([79691ef](https://github.com/aws/language-servers/commit/79691ef607d9bc98032fe2e59a5031601a4dba9a)) +* **amazonq:** make workspace context server upload dependency chunks sequentially ([#1769](https://github.com/aws/language-servers/issues/1769)) ([c8329e6](https://github.com/aws/language-servers/commit/c8329e6b90be2c24d72a4525b8903384746de2ab)) +* **amazonq:** prevent WCS matching workspaceFolder with only prefix ([#1782](https://github.com/aws/language-servers/issues/1782)) ([988d952](https://github.com/aws/language-servers/commit/988d952485b0f026200a19d17cacd323cd9e359e)) +* **amazonq:** shouldn't exit inline flow before we're sure there is no Edit/Completion trigger ([#1819](https://github.com/aws/language-servers/issues/1819)) ([dc8d89b](https://github.com/aws/language-servers/commit/dc8d89b39ee230aba6cfb032f81bda3476a5cc84)) +* imagecontext image name bug, mutliple images in pinned context ([#1834](https://github.com/aws/language-servers/issues/1834)) ([27d60ab](https://github.com/aws/language-servers/commit/27d60ab5f5249635a9e73be1ee96ecb820133f9a)) +* remove redundent thinking... for file operations ([#1839](https://github.com/aws/language-servers/issues/1839)) ([0078602](https://github.com/aws/language-servers/commit/00786023c9c257c9bb8066c36715864b32b4e069)) +* should always trigger EDIT suggestion if triggering via acceptance ([#1826](https://github.com/aws/language-servers/issues/1826)) ([6c9e522](https://github.com/aws/language-servers/commit/6c9e5225a58d7cf43931d84e7ae63275d6f9c066)) + ## [0.0.62](https://github.com/aws/language-servers/compare/lsp-codewhisperer/v0.0.61...lsp-codewhisperer/v0.0.62) (2025-07-02) diff --git a/server/aws-lsp-codewhisperer/package.json b/server/aws-lsp-codewhisperer/package.json index 7b882739b4..603950d492 100644 --- a/server/aws-lsp-codewhisperer/package.json +++ b/server/aws-lsp-codewhisperer/package.json @@ -1,6 +1,6 @@ { "name": "@aws/lsp-codewhisperer", - "version": "0.0.62", + "version": "0.0.66", "description": "CodeWhisperer Language Server", "main": "out/index.js", "repository": { @@ -36,8 +36,8 @@ "@aws-sdk/util-arn-parser": "^3.723.0", "@aws-sdk/util-retry": "^3.374.0", "@aws/chat-client-ui-types": "^0.1.40", - "@aws/language-server-runtimes": "^0.2.102", - "@aws/lsp-core": "^0.0.11", + "@aws/language-server-runtimes": "^0.2.112", + "@aws/lsp-core": "^0.0.12", "@modelcontextprotocol/sdk": "^1.9.0", "@smithy/node-http-handler": "^2.5.0", "adm-zip": "^0.5.10", @@ -48,6 +48,7 @@ "chokidar": "^4.0.3", "deepmerge": "^4.3.1", "diff": "^7.0.0", + "encoding-japanese": "^2.2.0", "fast-glob": "^3.3.3", "fastest-levenshtein": "^1.0.16", "fdir": "^6.4.3", @@ -55,6 +56,7 @@ "got": "^11.8.5", "hpagent": "^1.2.0", "ignore": "^7.0.3", + "image-size": "^2.0.2", "js-md5": "^0.8.3", "jszip": "^3.10.1", "lokijs": "^1.5.12", @@ -65,15 +67,14 @@ "vscode-uri": "^3.1.0", "ws": "^8.18.0", "xml2js": "^0.6.2", - "xmlbuilder2": "^3.1.1", - "image-size": "^2.0.2" + "xmlbuilder2": "^3.1.1" }, "devDependencies": { "@types/adm-zip": "^0.5.5", "@types/archiver": "^6.0.2", "@types/diff": "^7.0.2", + "@types/encoding-japanese": "^2.2.1", "@types/ignore-walk": "^4.0.3", - "ignore-walk": "^7.0.0", "@types/local-indexing": "file:./types/types-local-indexing-1.1.0.tgz", "@types/lokijs": "^1.5.14", "@types/uuid": "^9.0.8", @@ -81,6 +82,7 @@ "assert": "^2.1.0", "c8": "^10.1.2", "copyfiles": "^2.4.1", + "ignore-walk": "^7.0.0", "mock-fs": "^5.2.0", "sinon": "^19.0.2", "ts-loader": "^9.4.4", diff --git a/server/aws-lsp-codewhisperer/src/client/token/bearer-token-service.json b/server/aws-lsp-codewhisperer/src/client/token/bearer-token-service.json index 64cf0cdb68..2120382d25 100644 --- a/server/aws-lsp-codewhisperer/src/client/token/bearer-token-service.json +++ b/server/aws-lsp-codewhisperer/src/client/token/bearer-token-service.json @@ -6453,7 +6453,7 @@ }, "UserTriggerDecisionEventStreakLengthInteger": { "type": "integer", - "min": 0 + "min": -1 }, "ValidationException": { "type": "structure", diff --git a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/agenticChatController.test.ts b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/agenticChatController.test.ts index b9433fd133..4169675bdc 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/agenticChatController.test.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/agenticChatController.test.ts @@ -55,8 +55,8 @@ import { ChatDatabase } from './tools/chatDb/chatDb' import { LocalProjectContextController } from '../../shared/localProjectContextController' import { CancellationError } from '@aws/lsp-core' import { ToolApprovalException } from './tools/toolShared' -import * as constants from './constants' -import { generateAssistantResponseInputLimit, genericErrorMsg } from './constants' +import * as constants from './constants/constants' +import { GENERATE_ASSISTANT_RESPONSE_INPUT_LIMIT, GENERIC_ERROR_MS } from './constants/constants' import { MISSING_BEARER_TOKEN_ERROR } from '../../shared/constants' import { AmazonQError, @@ -183,7 +183,7 @@ describe('AgenticChatController', () => { beforeEach(() => { // Override the response timeout for tests to avoid long waits - sinon.stub(constants, 'responseTimeoutMs').value(100) + sinon.stub(constants, 'RESPONSE_TIMEOUT_MS').value(100) sinon.stub(chokidar, 'watch').returns({ on: sinon.stub(), @@ -524,6 +524,59 @@ describe('AgenticChatController', () => { assert.deepStrictEqual(requestInput.conversationState?.history, expectedRequestHistory) }) + it('includes chat history from the database in the compaction request input', async () => { + // Mock chat history + const mockHistory = [ + { + type: 'prompt', + body: 'Previous question', + userInputMessageContext: { + toolResults: [], + }, + }, + { type: 'answer', body: 'Previous answer' }, + ] + const expectedRequestHistory = [ + { + userInputMessage: { + content: 'Previous question', + origin: 'IDE', + userInputMessageContext: { toolResults: [] }, + userIntent: undefined, + }, + }, + { + assistantResponseMessage: { + content: 'Previous answer', + messageId: undefined, + toolUses: [], + }, + }, + ] + + chatDbInitializedStub.returns(true) + getMessagesStub.returns(mockHistory) + + // Make the request + const result = await chatController.onChatPrompt( + { tabId: mockTabId, prompt: { prompt: '', command: '/compact' } }, + mockCancellationToken + ) + + // Verify that history was requested from the db + sinon.assert.calledWith(getMessagesStub, mockTabId) + + assert.ok(generateAssistantResponseStub.calledOnce) + + // Verify that the history was passed to the request + const requestInput: GenerateAssistantResponseCommandInput = generateAssistantResponseStub.firstCall.firstArg + assert.deepStrictEqual(requestInput.conversationState?.history, expectedRequestHistory) + assert.deepStrictEqual( + requestInput.conversationState?.currentMessage?.userInputMessage?.content, + constants.COMPACTION_PROMPT + ) + }) + it('skips adding user message to history when token is cancelled', async () => { // Create a cancellation token that is already cancelled const cancelledToken = { @@ -1129,7 +1182,7 @@ describe('AgenticChatController', () => { }) it('truncate input to 500k character ', async function () { - const input = 'X'.repeat(generateAssistantResponseInputLimit + 10) + const input = 'X'.repeat(GENERATE_ASSISTANT_RESPONSE_INPUT_LIMIT + 10) generateAssistantResponseStub.restore() generateAssistantResponseStub = sinon.stub(CodeWhispererStreaming.prototype, 'generateAssistantResponse') generateAssistantResponseStub.callsFake(() => {}) @@ -1139,7 +1192,7 @@ describe('AgenticChatController', () => { generateAssistantResponseStub.firstCall.firstArg assert.deepStrictEqual( calledRequestInput.conversationState?.currentMessage?.userInputMessage?.content?.length, - generateAssistantResponseInputLimit + GENERATE_ASSISTANT_RESPONSE_INPUT_LIMIT ) }) it('shows generic errorMsg on internal errors', async function () { @@ -1149,7 +1202,7 @@ describe('AgenticChatController', () => { ) const typedChatResult = chatResult as ResponseError - assert.strictEqual(typedChatResult.data?.body, genericErrorMsg) + assert.strictEqual(typedChatResult.data?.body, GENERIC_ERROR_MS) }) const authFollowUpTestCases = [ @@ -1209,7 +1262,7 @@ describe('AgenticChatController', () => { ) const typedChatResult = chatResult as ResponseError - assert.strictEqual(typedChatResult.data?.body, genericErrorMsg) + assert.strictEqual(typedChatResult.data?.body, GENERIC_ERROR_MS) assert.strictEqual(typedChatResult.message, 'some error') }) @@ -1235,7 +1288,7 @@ describe('AgenticChatController', () => { ) const typedChatResult = chatResult as ResponseError - assert.strictEqual(typedChatResult.data?.body, genericErrorMsg) + assert.strictEqual(typedChatResult.data?.body, GENERIC_ERROR_MS) assert.strictEqual(typedChatResult.message, 'invalid state') }) diff --git a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/agenticChatController.ts b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/agenticChatController.ts index d951bba132..08f2680c4c 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/agenticChatController.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/agenticChatController.ts @@ -5,6 +5,7 @@ import * as crypto from 'crypto' import * as path from 'path' +import * as os from 'os' import { ChatTriggerType, Origin, @@ -15,6 +16,28 @@ import { ToolUseEvent, ImageBlock, } from '@amzn/codewhisperer-streaming' +import { + FS_READ, + FS_WRITE, + FS_REPLACE, + LIST_DIRECTORY, + GREP_SEARCH, + FILE_SEARCH, + EXECUTE_BASH, + Q_CODE_REVIEW, + BUTTON_RUN_SHELL_COMMAND, + BUTTON_REJECT_SHELL_COMMAND, + BUTTON_REJECT_MCP_TOOL, + BUTTON_ALLOW_TOOLS, + BUTTON_UNDO_CHANGES, + BUTTON_UNDO_ALL_CHANGES, + BUTTON_STOP_SHELL_COMMAND, + BUTTON_PAIDTIER_UPGRADE_Q_LEARNMORE, + BUTTON_PAIDTIER_UPGRADE_Q, + SUFFIX_PERMISSION, + SUFFIX_UNDOALL, + SUFFIX_EXPLANATION, +} from './constants/toolConstants' import { SendMessageCommandInput, SendMessageCommandOutput, @@ -42,7 +65,6 @@ import { FollowUpClickParams, ListAvailableModelsParams, ListAvailableModelsResult, - Model, OpenFileDialogParams, OpenFileDialogResult, } from '@aws/language-server-runtimes/protocol' @@ -58,7 +80,6 @@ import { ListConversationsParams, ListMcpServersParams, McpServerClickParams, - McpServerClickResult, TabBarActionParams, CreatePromptParams, FileClickParams, @@ -101,7 +122,6 @@ import { getSsoConnectionType, isUsageLimitError, isNullish, - enabledModelSelection, getOriginFromClientInfo, } from '../../shared/utils' import { HELP_MESSAGE, loadingMessage } from '../chat/constants' @@ -111,7 +131,6 @@ import { AmazonQServicePendingProfileError, AmazonQServicePendingSigninError, } from '../../shared/amazonQServiceManager/errors' -import { AmazonQIAMServiceManager } from '../../shared/amazonQServiceManager/AmazonQIAMServiceManager' import { AmazonQBaseServiceManager } from '../../shared/amazonQServiceManager/BaseAmazonQServiceManager' import { AmazonQTokenServiceManager } from '../../shared/amazonQServiceManager/AmazonQTokenServiceManager' import { AmazonQWorkspaceConfig } from '../../shared/amazonQServiceManager/configurationUtils' @@ -123,7 +142,7 @@ import { } from './agenticChatEventParser' import { ChatSessionService } from '../chat/chatSessionService' import { AgenticChatResultStream, progressPrefix, ResultStreamWriter } from './agenticChatResultStream' -import { executeToolMessage, toolResultMessage } from './textFormatting' +import { toolResultMessage } from './textFormatting' import { AdditionalContentEntryAddition, AgenticChatTriggerContext, @@ -143,7 +162,7 @@ import { FsRead, FsReadParams } from './tools/fsRead' import { ListDirectory, ListDirectoryParams } from './tools/listDirectory' import { FsWrite, FsWriteParams } from './tools/fsWrite' import { ExecuteBash, ExecuteBashParams } from './tools/executeBash' -import { ExplanatoryParams, ToolApprovalException } from './tools/toolShared' +import { ExplanatoryParams, InvokeOutput, ToolApprovalException } from './tools/toolShared' import { validatePathBasic, validatePathExists, validatePaths as validatePathsSync } from './utils/pathValidation' import { GrepSearch, SanitizedRipgrepOutput } from './tools/grepSearch' import { FileSearch, FileSearchParams } from './tools/fileSearch' @@ -151,14 +170,22 @@ import { FsReplace, FsReplaceParams } from './tools/fsReplace' import { loggingUtils, timeoutUtils } from '@aws/lsp-core' import { diffLines } from 'diff' import { - genericErrorMsg, - loadingThresholdMs, - generateAssistantResponseInputLimit, - outputLimitExceedsPartialMsg, - responseTimeoutMs, - responseTimeoutPartialMsg, - defaultModelId, -} from './constants' + GENERIC_ERROR_MS, + LOADING_THRESHOLD_MS, + GENERATE_ASSISTANT_RESPONSE_INPUT_LIMIT, + OUTPUT_LIMIT_EXCEEDS_PARTIAL_MSG, + RESPONSE_TIMEOUT_MS, + RESPONSE_TIMEOUT_PARTIAL_MSG, + DEFAULT_MODEL_ID, + COMPACTION_BODY, + COMPACTION_HEADER_BODY, + DEFAULT_MACOS_RUN_SHORTCUT, + DEFAULT_WINDOW_RUN_SHORTCUT, + DEFAULT_MACOS_REJECT_SHORTCUT, + DEFAULT_WINDOW_REJECT_SHORTCUT, + DEFAULT_MACOS_STOP_SHORTCUT, + DEFAULT_WINDOW_STOP_SHORTCUT, +} from './constants/constants' import { AgenticChatError, customerFacingErrorCodes, @@ -170,6 +197,8 @@ import { import { URI } from 'vscode-uri' import { CommandCategory } from './tools/executeBash' import { UserWrittenCodeTracker } from '../../shared/userWrittenCodeTracker' +import { QCodeReview } from './tools/qCodeAnalysis/qCodeReview' +import { FINDINGS_MESSAGE_SUFFIX } from './tools/qCodeAnalysis/qCodeReviewConstants' import { McpEventHandler } from './tools/mcp/mcpEventHandler' import { enabledMCP, createNamespacedToolName } from './tools/mcp/mcpUtils' import { McpManager } from './tools/mcp/mcpManager' @@ -177,15 +206,18 @@ import { McpTool } from './tools/mcp/mcpTool' import { freeTierLimitUserMsg, onPaidTierLearnMore, - paidTierLearnMoreUrl, paidTierManageSubscription, PaidTierMode, qProName, } from '../paidTier/paidTier' import { Message as DbMessage, messageToStreamingMessage } from './tools/chatDb/util' -import { modelOptions, modelOptionsForRegion } from './modelSelection' +import { MODEL_OPTIONS, MODEL_OPTIONS_FOR_REGION } from './constants/modelSelection' import { DEFAULT_IMAGE_VERIFICATION_OPTIONS, verifyServerImage } from '../../shared/imageVerification' import { sanitize } from '@aws/lsp-core/out/util/path' +import { getLatestAvailableModel } from './utils/agenticChatControllerHelper' +import { ActiveUserTracker } from '../../shared/activeUserTracker' +import { UserContext } from '../../client/token/codewhispererbearertokenclient' +import { CodeWhispererServiceToken } from '../../shared/codeWhispererService' type ChatHandlers = Omit< LspHandlers, @@ -227,6 +259,7 @@ export class AgenticChatController implements ChatHandlers { #mcpEventHandler: McpEventHandler #paidTierMode: PaidTierMode | undefined #origin: Origin + #activeUserTracker: ActiveUserTracker // latency metrics #llmRequestStartTime: number = 0 @@ -236,6 +269,15 @@ export class AgenticChatController implements ChatHandlers { #timeBetweenChunks: number[] = [] #lastChunkTime: number = 0 + // A/B testing allocation + #abTestingFetchingTimeout: NodeJS.Timeout | undefined + #abTestingAllocation: + | { + experimentName: string + userVariation: string + } + | undefined + /** * Determines the appropriate message ID for a tool use based on tool type and name * @param toolType The type of tool being used @@ -245,7 +287,38 @@ export class AgenticChatController implements ChatHandlers { #getMessageIdForToolUse(toolType: string | undefined, toolUse: ToolUse): string { const toolUseId = toolUse.toolUseId! // Return plain toolUseId for executeBash, add "_permission" suffix for all other tools - return toolUse.name === 'executeBash' || toolType === 'executeBash' ? toolUseId : `${toolUseId}_permission` + return toolUse.name === EXECUTE_BASH || toolType === EXECUTE_BASH + ? toolUseId + : `${toolUseId}${SUFFIX_PERMISSION}` + } + + /** + * Logs system information that can be helpful for debugging customer issues + */ + private logSystemInformation(): void { + const clientInfo = this.#features.lsp.getClientInitializeParams()?.clientInfo + const systemInfo = { + languageServerVersion: this.#features.runtime.serverInfo.version ?? 'unknown', + clientName: clientInfo?.name ?? 'unknown', + clientVersion: clientInfo?.version ?? 'unknown', + OS: os.platform(), + OSVersion: os.release(), + ComputeEnv: process.env.COMPUTE_ENV ?? 'unknown', + extensionVersion: + this.#features.lsp.getClientInitializeParams()?.initializationOptions?.aws?.clientInfo?.extension + ?.version, + } + + this.#features.logging.info(`System Information: ${JSON.stringify(systemInfo)}`) + } + + /** + * Determines the appropriate message ID for a compaction confirmation + * @param messageId The original messageId + * @returns The message ID to use + */ + #getMessageIdForCompact(messageId: string): string { + return `${messageId}_compact` } constructor( @@ -281,6 +354,7 @@ export class AgenticChatController implements ChatHandlers { ) this.#mcpEventHandler = new McpEventHandler(features, telemetryService) this.#origin = getOriginFromClientInfo(this.#features.lsp.getClientInitializeParams()?.clientInfo?.name) + this.#activeUserTracker = ActiveUserTracker.getInstance(this.#features) } async onExecuteCommand(params: ExecuteCommandParams, _token: CancellationToken): Promise { @@ -300,18 +374,18 @@ export class AgenticChatController implements ChatHandlers { this.#log(`onButtonClick event with params: ${JSON.stringify(params)}`) const session = this.#chatSessionManagementService.getSession(params.tabId) if ( - params.buttonId === 'run-shell-command' || - params.buttonId === 'reject-shell-command' || - params.buttonId === 'reject-mcp-tool' || - params.buttonId === 'allow-tools' + params.buttonId === BUTTON_RUN_SHELL_COMMAND || + params.buttonId === BUTTON_REJECT_SHELL_COMMAND || + params.buttonId === BUTTON_REJECT_MCP_TOOL || + params.buttonId === BUTTON_ALLOW_TOOLS ) { if (!session.data) { return { success: false, failureReason: `could not find chat session for tab: ${params.tabId} ` } } // For 'allow-tools', remove suffix as permission card needs to be seperate from file list card const messageId = - params.buttonId === 'allow-tools' && params.messageId.endsWith('_permission') - ? params.messageId.replace('_permission', '') + params.buttonId === BUTTON_ALLOW_TOOLS && params.messageId.endsWith(SUFFIX_PERMISSION) + ? params.messageId.replace(SUFFIX_PERMISSION, '') : params.messageId const handler = session.data.getDeferredToolExecution(messageId) @@ -321,7 +395,7 @@ export class AgenticChatController implements ChatHandlers { failureReason: `could not find deferred tool execution for message: ${messageId} `, } } - params.buttonId === 'reject-shell-command' || params.buttonId === 'reject-mcp-tool' + params.buttonId === BUTTON_REJECT_SHELL_COMMAND || params.buttonId === BUTTON_REJECT_MCP_TOOL ? (() => { handler.reject(new ToolApprovalException('Command was rejected.', true)) this.#stoppedToolUses.add(messageId) @@ -330,7 +404,7 @@ export class AgenticChatController implements ChatHandlers { return { success: true, } - } else if (params.buttonId === 'undo-changes') { + } else if (params.buttonId === BUTTON_UNDO_CHANGES) { const toolUseId = params.messageId try { await this.#undoFileChange(toolUseId, session.data) @@ -339,7 +413,9 @@ export class AgenticChatController implements ChatHandlers { 'RejectDiff', params.tabId, session.data?.pairProgrammingMode, - session.data?.getConversationType() + session.data?.getConversationType(), + this.#abTestingAllocation?.experimentName, + this.#abTestingAllocation?.userVariation ) } catch (err: any) { return { success: false, failureReason: err.message } @@ -347,21 +423,21 @@ export class AgenticChatController implements ChatHandlers { return { success: true, } - } else if (params.buttonId === 'undo-all-changes') { - const toolUseId = params.messageId.replace('_undoall', '') + } else if (params.buttonId === BUTTON_UNDO_ALL_CHANGES) { + const toolUseId = params.messageId.replace(SUFFIX_UNDOALL, '') await this.#undoAllFileChanges(params.tabId, toolUseId, session.data) return { success: true, } - } else if (params.buttonId === 'stop-shell-command') { + } else if (params.buttonId === BUTTON_STOP_SHELL_COMMAND) { this.#stoppedToolUses.add(params.messageId) await this.#renderStoppedShellCommand(params.tabId, params.messageId) return { success: true } - } else if (params.buttonId === 'paidtier-upgrade-q-learnmore') { + } else if (params.buttonId === BUTTON_PAIDTIER_UPGRADE_Q_LEARNMORE) { onPaidTierLearnMore(this.#features.lsp, this.#features.logging) return { success: true } - } else if (params.buttonId === 'paidtier-upgrade-q') { + } else if (params.buttonId === BUTTON_PAIDTIER_UPGRADE_Q) { await this.onManageSubscription(params.tabId) return { success: true } @@ -382,6 +458,10 @@ export class AgenticChatController implements ChatHandlers { await this.#features.workspace.fs.writeFile(input.path, toolUse.fileChange.before) } else { await this.#features.workspace.fs.rm(input.path) + void LocalProjectContextController.getInstance().then(controller => { + const filePath = URI.file(input.path).fsPath + return controller.updateIndexAndContextCommand([filePath], false) + }) } } @@ -391,7 +471,7 @@ export class AgenticChatController implements ChatHandlers { return } const fileList = cachedToolUse.chatResult?.header?.fileList - const button = cachedToolUse.chatResult?.header?.buttons?.filter(button => button.id !== 'undo-changes') + const button = cachedToolUse.chatResult?.header?.buttons?.filter(button => button.id !== BUTTON_UNDO_CHANGES) const updatedHeader = { ...cachedToolUse.chatResult?.header, @@ -446,7 +526,7 @@ export class AgenticChatController implements ChatHandlers { return } for (const messageId of [...toUndo].reverse()) { - await this.onButtonClick({ buttonId: 'undo-changes', messageId, tabId }) + await this.onButtonClick({ buttonId: BUTTON_UNDO_CHANGES, messageId, tabId }) } } @@ -454,7 +534,7 @@ export class AgenticChatController implements ChatHandlers { if (params.fileType === 'image') { // 1. Prompt user for file selection const supportedExtensions = DEFAULT_IMAGE_VERIFICATION_OPTIONS.supportedExtensions - const filters = { 'Image Files': supportedExtensions.map(ext => `*.${ext}`) } + const filters = { 'Image Files': supportedExtensions } const result = await this.#features.lsp.window.showOpenDialog({ canSelectFiles: true, canSelectFolders: false, @@ -476,7 +556,7 @@ export class AgenticChatController implements ChatHandlers { let errorMessage: string | undefined for (const filePath of result.uris) { // Extract filename from the URI for error messages - const fileName = filePath.split('/').pop() || '' + const fileName = path.basename(filePath) || '' const sanitizedPath = sanitize(filePath) // Get file size and content for verification @@ -558,6 +638,8 @@ export class AgenticChatController implements ChatHandlers { this.#contextCommandsProvider?.dispose() this.#userWrittenCodeTracker?.dispose() this.#mcpEventHandler.dispose() + this.#activeUserTracker.dispose() + clearInterval(this.#abTestingFetchingTimeout) } async onListConversations(params: ListConversationsParams) { @@ -586,7 +668,7 @@ export class AgenticChatController implements ChatHandlers { async onListAvailableModels(params: ListAvailableModelsParams): Promise { const region = AmazonQTokenServiceManager.getInstance().getRegion() - const models = region && modelOptionsForRegion[region] ? modelOptionsForRegion[region] : modelOptions + const models = region && MODEL_OPTIONS_FOR_REGION[region] ? MODEL_OPTIONS_FOR_REGION[region] : MODEL_OPTIONS const sessionResult = this.#chatSessionManagementService.getSession(params.tabId) const { data: session, success } = sessionResult @@ -601,7 +683,7 @@ export class AgenticChatController implements ChatHandlers { const selectedModelId = savedModelId && models.some(model => model.id === savedModelId) ? savedModelId - : this.#getLatestAvailableModel(region).id + : getLatestAvailableModel(region).id session.modelId = selectedModelId return { tabId: params.tabId, @@ -610,11 +692,6 @@ export class AgenticChatController implements ChatHandlers { } } - #getLatestAvailableModel(region: string | undefined, exclude?: string): Model { - const models = region && modelOptionsForRegion[region] ? modelOptionsForRegion[region] : modelOptions - return models.reverse().find(model => model.id !== exclude) ?? models[models.length - 1] - } - async #sendProgressToClient(chunk: ChatResult | string, partialResultToken?: string | number) { if (!isNullish(partialResultToken)) { await this.#features.lsp.sendProgress(chatRequestType, partialResultToken, chunk) @@ -642,13 +719,22 @@ export class AgenticChatController implements ChatHandlers { return new ResponseError(ErrorCodes.InternalError, sessionResult.error) } + const compactIds = session.getAllDeferredCompactMessageIds() + await this.#invalidateCompactCommand(params.tabId, compactIds) session.rejectAllDeferredToolExecutions(new ToolApprovalException('Command ignored: new prompt', false)) await this.#invalidateAllShellCommands(params.tabId, session) const metric = new Metric({ cwsprChatConversationType: 'AgenticChat', + experimentName: this.#abTestingAllocation?.experimentName, + userVariation: this.#abTestingAllocation?.userVariation, }) + const isNewActiveUser = this.#activeUserTracker.isNewActiveUser() + if (isNewActiveUser) { + this.#telemetryController.emitActiveUser() + } + try { const triggerContext = await this.#getTriggerContext(params, metric) if (triggerContext.programmingLanguage?.languageName) { @@ -668,6 +754,8 @@ export class AgenticChatController implements ChatHandlers { // Abort all operations immediately session.abortRequest() + const compactIds = session.getAllDeferredCompactMessageIds() + await this.#invalidateCompactCommand(params.tabId, compactIds) void this.#invalidateAllShellCommands(params.tabId, session) session.rejectAllDeferredToolExecutions(new CancellationError('user')) @@ -680,8 +768,13 @@ export class AgenticChatController implements ChatHandlers { 'StopChat', params.tabId, session.pairProgrammingMode, - session.getConversationType() + session.getConversationType(), + this.#abTestingAllocation?.experimentName, + this.#abTestingAllocation?.userVariation ) + metric.setDimension('languageServerVersion', this.#features.runtime.serverInfo.version) + metric.setDimension('codewhispererCustomizationArn', this.#customizationArn) + metric.setDimension('enabled', session.pairProgrammingMode) await this.#telemetryController.emitAddMessageMetric(params.tabId, metric.metric, 'Cancelled') }) session.setConversationType('AgenticChat') @@ -691,9 +784,12 @@ export class AgenticChatController implements ChatHandlers { params.tabId, params.context ) - // Add active file to context list if it exists + // Add active file to context list if it's not already there const activeFile = - triggerContext.text && triggerContext.relativeFilePath && triggerContext.activeFilePath + triggerContext.text && + triggerContext.relativeFilePath && + triggerContext.activeFilePath && + !additionalContext.some(item => item.path === triggerContext.activeFilePath) ? [ { name: path.basename(triggerContext.relativeFilePath), @@ -715,40 +811,68 @@ export class AgenticChatController implements ChatHandlers { params.context, params.tabId ) - - // Get the initial request input - const initialRequestInput = await this.#prepareRequestInput( - params, - session, + // Add image context to triggerContext.documentReference for transparency + await this.#additionalContextProvider.appendCustomContextToTriggerContext( triggerContext, - additionalContext, - chatResultStream, - customContext + params.context, + params.tabId ) - // Generate a unique ID for this prompt - const promptId = crypto.randomUUID() - session.setCurrentPromptId(promptId) + let finalResult + if (params.prompt.command === QuickAction.Compact) { + // Get the compaction request input + const compactionRequestInput = this.#getCompactionRequestInput(session) + // Generate a unique ID for this prompt + const promptId = crypto.randomUUID() + session.setCurrentPromptId(promptId) + + // Start the compaction call + finalResult = await this.#runCompaction( + compactionRequestInput, + session, + metric, + chatResultStream, + params.tabId, + promptId, + session.conversationId, + token, + triggerContext.documentReference + ) + } else { + // Get the initial request input + const initialRequestInput = await this.#prepareRequestInput( + params, + session, + triggerContext, + additionalContext, + chatResultStream, + customContext + ) - // Start the agent loop - const finalResult = await this.#runAgentLoop( - initialRequestInput, - session, - metric, - chatResultStream, - params.tabId, - promptId, - session.conversationId, - token, - triggerContext.documentReference, - additionalContext.filter(item => item.pinned) - ) + // Generate a unique ID for this prompt + const promptId = crypto.randomUUID() + session.setCurrentPromptId(promptId) - // Phase 5: Result Handling - This happens only once + // Start the agent loop + finalResult = await this.#runAgentLoop( + initialRequestInput, + session, + metric, + chatResultStream, + params.tabId, + promptId, + session.conversationId, + token, + triggerContext.documentReference, + additionalContext.filter(item => item.pinned) + ) + } + + // Result Handling - This happens only once return await this.#handleFinalResult( finalResult, session, - params, + params.tabId, metric, triggerContext, isNewConversation, @@ -756,7 +880,7 @@ export class AgenticChatController implements ChatHandlers { ) } catch (err) { // HACK: the chat-client needs to have a partial event with the associated messageId sent before it can accept the final result. - // Without this, the `thinking` indicator never goes away. + // Without this, the `working` indicator never goes away. // Note: buttons being explicitly empty is required for this hack to work. const errorMessageId = `error-message-id-${uuid()}` await this.#sendProgressToClient( @@ -813,7 +937,6 @@ export class AgenticChatController implements ChatHandlers { this.#customizationArn, chatResultStream, profileArn, - [], this.#getTools(session), additionalContext, session.modelId, @@ -823,6 +946,186 @@ export class AgenticChatController implements ChatHandlers { return requestInput } + /** + * Prepares the initial request input for the chat prompt + */ + #getCompactionRequestInput(session: ChatSessionService): ChatCommandInput { + this.#debug('Preparing compaction request input') + // Get profileArn from the service manager if available + const profileArn = this.#serviceManager?.getActiveProfileArn() + const requestInput = this.#triggerContext.getCompactionChatCommandInput( + profileArn, + this.#getTools(session), + session.modelId, + this.#origin + ) + return requestInput + } + + /** + * Runs the compaction, making requests and processing tool uses until completion + */ + #shouldCompact(currentRequestCount: number): boolean { + // 80% of 570K limit + if (currentRequestCount > 456_000) { + this.#debug(`Current request total character count is: ${currentRequestCount}, prompting user to compact`) + return true + } else { + return false + } + } + + /** + * Runs the compaction to compact history into a single summary + */ + async #runCompaction( + compactionRequestInput: ChatCommandInput, + session: ChatSessionService, + metric: Metric, + chatResultStream: AgenticChatResultStream, + tabId: string, + promptId: string, + conversationIdentifier?: string, + token?: CancellationToken, + documentReference?: FileList + ): Promise> { + let currentRequestInput = { ...compactionRequestInput } + let finalResult: Result | null = null + metric.recordStart() + + this.#debug(`Running compaction for conversation id:`, conversationIdentifier || '') + + this.#timeToFirstChunk = -1 + this.#timeBetweenChunks = [] + + // Check for cancellation + if (this.#isPromptCanceled(token, session, promptId)) { + this.#debug('Stopping compaction loop - cancelled by user') + throw new CancellationError('user') + } + + const currentMessage = currentRequestInput.conversationState?.currentMessage + let messages: DbMessage[] = [] + let characterCount = 0 + if (currentMessage) { + // Get and process the messages from history DB to maintain invariants for service requests + try { + const { messages: historyMessages, count: historyCharCount } = this.#chatHistoryDb.fixAndGetHistory( + tabId, + currentMessage, + [] + ) + messages = historyMessages + characterCount = historyCharCount + } catch (err) { + if (err instanceof ToolResultValidationError) { + this.#features.logging.error(`Tool validation error: ${err.message}`) + return ( + finalResult || { + success: false, + error: 'Compaction loop failed to produce a final result', + data: { chatResult: {}, toolUses: {} }, + } + ) + } + } + } + + currentRequestInput.conversationState!.history = messages.map(msg => messageToStreamingMessage(msg)) + + const resultStreamWriter = chatResultStream.getResultStreamWriter() + + if (currentRequestInput.conversationState!.history.length == 0) { + // early terminate + await resultStreamWriter.write({ + type: 'answer', + body: 'History is empty, there is nothing to compact.', + messageId: uuid(), + }) + return { + success: true, + data: { + chatResult: {}, + toolUses: {}, + }, + } + } else { + await resultStreamWriter.write({ + type: 'answer', + body: 'Compacting your chat history, this may take a moment.', + messageId: uuid(), + }) + } + await resultStreamWriter.close() + + // Add loading message before making the request + const loadingMessageId = `loading-${uuid()}` + await chatResultStream.writeResultBlock({ ...loadingMessage, messageId: loadingMessageId }) + + this.#debug(`Compacting history with ${characterCount} characters`) + this.#llmRequestStartTime = Date.now() + // Phase 3: Request Execution + // Note: these logs are very noisy, but contain information redacted on the backend. + this.#debug( + `generateAssistantResponse/SendMessage Request: ${JSON.stringify(currentRequestInput, undefined, 2)}` + ) + const response = await session.getChatResponse(currentRequestInput) + if (response.$metadata.requestId) { + metric.mergeWith({ + requestIds: [response.$metadata.requestId], + }) + } + this.#features.logging.info( + `generateAssistantResponse/SendMessage ResponseMetadata: ${loggingUtils.formatObj(response.$metadata)}` + ) + await chatResultStream.removeResultBlock(loadingMessageId) + + // Phase 4: Response Processing + const result = await this.#processAgenticChatResponseWithTimeout( + response, + metric.mergeWith({ + cwsprChatResponseCode: response.$metadata.httpStatusCode, + cwsprChatMessageId: response.$metadata.requestId, + }), + chatResultStream, + session, + documentReference, + true + ) + + const llmLatency = Date.now() - this.#llmRequestStartTime + this.#debug(`LLM Response Latency for compaction: ${llmLatency}`) + this.#telemetryController.emitAgencticLoop_InvokeLLM( + response.$metadata.requestId!, + conversationIdentifier ?? '', + 'AgenticChatWithCompaction', + undefined, + undefined, + 'Succeeded', + this.#features.runtime.serverInfo.version ?? '', + session.modelId, + llmLatency, + [], + this.#timeToFirstChunk, + this.#timeBetweenChunks, + session.pairProgrammingMode + ) + + // replace the history with summary in history DB + if (result.data?.chatResult.body !== undefined) { + this.#chatHistoryDb.replaceWithSummary(tabId, 'cwc', conversationIdentifier ?? '', { + body: result.data?.chatResult.body, + type: 'prompt' as any, + shouldDisplayMessage: true, + timestamp: new Date(), + }) + } else { + this.#features.logging.warn('No ChatResult body in response, skipping adding to history') + } + + return result + } + /** * Runs the agent loop, making requests and processing tool uses until completion */ @@ -842,8 +1145,9 @@ export class AgenticChatController implements ChatHandlers { let finalResult: Result | null = null let iterationCount = 0 let shouldDisplayMessage = true + let currentRequestCount = 0 metric.recordStart() - + this.logSystemInformation() while (true) { iterationCount++ this.#debug(`Agent loop iteration ${iterationCount} for conversation id:`, conversationIdentifier || '') @@ -877,7 +1181,20 @@ export class AgenticChatController implements ChatHandlers { if (currentMessage) { // Get and process the messages from history DB to maintain invariants for service requests try { - messages = this.#chatHistoryDb.fixAndGetHistory(tabId, currentMessage, pinnedContextMessages) + const newUserInputCount = this.#chatHistoryDb.calculateNewMessageCharacterCount( + currentMessage, + pinnedContextMessages + ) + const { messages: historyMessages, count: historyCharacterCount } = + this.#chatHistoryDb.fixAndGetHistory( + tabId, + currentMessage, + pinnedContextMessages, + newUserInputCount + ) + messages = historyMessages + currentRequestCount = newUserInputCount + historyCharacterCount + this.#debug(`Request total character count: ${currentRequestCount}`) } catch (err) { if (err instanceof ToolResultValidationError) { this.#features.logging.warn(`Tool validation error: ${err.message}`) @@ -886,7 +1203,7 @@ export class AgenticChatController implements ChatHandlers { } } - // Do not include chatHistory for requests going to Mynah Backend + // Do not include chatHistory for requests going to Mynah Backend currentRequestInput.conversationState!.history = currentRequestInput.conversationState?.currentMessage ?.userInputMessage?.userIntent ? [] @@ -900,7 +1217,7 @@ export class AgenticChatController implements ChatHandlers { // Phase 3: Request Execution // Note: these logs are very noisy, but contain information redacted on the backend. this.#debug( - `generateAssistantResponse/SendMessage Request: ${JSON.stringify(currentRequestInput, undefined, 2)}` + `generateAssistantResponse/SendMessage Request: ${JSON.stringify(currentRequestInput, this.#imageReplacer, 2)}` ) const response = await session.getChatResponse(currentRequestInput) if (response.$metadata.requestId) { @@ -933,7 +1250,6 @@ export class AgenticChatController implements ChatHandlers { } } shouldDisplayMessage = true - // Phase 4: Response Processing const result = await this.#processAgenticChatResponseWithTimeout( response, @@ -949,7 +1265,7 @@ export class AgenticChatController implements ChatHandlers { this.#debug(`LLM Response Latency: ${llmLatency}`) // This is needed to handle the case where the response stream times out // and we want to auto-retry - if (!result.success && result.error.startsWith(responseTimeoutPartialMsg)) { + if (!result.success && result.error.startsWith(RESPONSE_TIMEOUT_PARTIAL_MSG)) { const content = 'You took too long to respond - try to split up the work into smaller steps. Do not apologize.' if (this.#isPromptCanceled(token, session, promptId)) { @@ -1019,7 +1335,9 @@ export class AgenticChatController implements ChatHandlers { this.#toolCallLatencies, this.#timeToFirstChunk, this.#timeBetweenChunks, - session.pairProgrammingMode + session.pairProgrammingMode, + this.#abTestingAllocation?.experimentName, + this.#abTestingAllocation?.userVariation ) finalResult = result break @@ -1055,7 +1373,9 @@ export class AgenticChatController implements ChatHandlers { this.#toolCallLatencies, this.#timeToFirstChunk, this.#timeBetweenChunks, - session.pairProgrammingMode + session.pairProgrammingMode, + this.#abTestingAllocation?.experimentName, + this.#abTestingAllocation?.userVariation ) } else { // Send an error card to UI? @@ -1077,7 +1397,9 @@ export class AgenticChatController implements ChatHandlers { this.#toolCallLatencies, this.#timeToFirstChunk, this.#timeBetweenChunks, - session.pairProgrammingMode + session.pairProgrammingMode, + this.#abTestingAllocation?.experimentName, + this.#abTestingAllocation?.userVariation ) if (result.error.startsWith('ToolUse input is invalid JSON:')) { content = @@ -1094,6 +1416,27 @@ export class AgenticChatController implements ChatHandlers { currentRequestInput = this.#updateRequestInputWithToolResults(currentRequestInput, toolResults, content) } + if (this.#shouldCompact(currentRequestCount)) { + const messageId = this.#getMessageIdForCompact(uuid()) + const confirmationResult = this.#processCompactConfirmation(messageId) + const cachedButtonBlockId = await chatResultStream.writeResultBlock(confirmationResult) + await this.waitForCompactApproval(messageId, chatResultStream, cachedButtonBlockId, session) + // Get the compaction request input + const compactionRequestInput = this.#getCompactionRequestInput(session) + // Start the compaction call + return await this.#runCompaction( + compactionRequestInput, + session, + metric, + chatResultStream, + tabId, + promptId, + session.conversationId, + token, + documentReference + ) + } + return ( finalResult || { success: false, @@ -1130,7 +1473,7 @@ export class AgenticChatController implements ChatHandlers { */ truncateRequest(request: ChatCommandInput, pinnedContext?: AdditionalContentEntryAddition[]): number { // TODO: Confirm if this limit applies to SendMessage and rename this constant - let remainingCharacterBudget = generateAssistantResponseInputLimit + let remainingCharacterBudget = GENERATE_ASSISTANT_RESPONSE_INPUT_LIMIT if (!request?.conversationState?.currentMessage?.userInputMessage) { return remainingCharacterBudget } @@ -1139,9 +1482,9 @@ export class AgenticChatController implements ChatHandlers { // 1. prioritize user input message let truncatedUserInputMessage = '' if (message) { - if (message.length > generateAssistantResponseInputLimit) { - this.#debug(`Truncating userInputMessage to ${generateAssistantResponseInputLimit} characters}`) - truncatedUserInputMessage = message.substring(0, generateAssistantResponseInputLimit) + if (message.length > GENERATE_ASSISTANT_RESPONSE_INPUT_LIMIT) { + this.#debug(`Truncating userInputMessage to ${GENERATE_ASSISTANT_RESPONSE_INPUT_LIMIT} characters}`) + truncatedUserInputMessage = message.substring(0, GENERATE_ASSISTANT_RESPONSE_INPUT_LIMIT) remainingCharacterBudget = remainingCharacterBudget - truncatedUserInputMessage.length request.conversationState.currentMessage.userInputMessage.content = truncatedUserInputMessage } else { @@ -1196,6 +1539,7 @@ export class AgenticChatController implements ChatHandlers { #getPendingToolUses(toolUses: Record): Array { return Object.values(toolUses).filter(toolUse => toolUse.stop) } + /** * Creates a promise that does not resolve until the user accepts or rejects the tool usage. * @param toolUseId @@ -1259,36 +1603,36 @@ export class AgenticChatController implements ChatHandlers { await chatResultStream.removeResultBlockAndUpdateUI(progressPrefix + toolUse.toolUseId) // fsRead and listDirectory write to an existing card and could show nothing in the current position - if (!['fsWrite', 'fsReplace', 'fsRead', 'listDirectory'].includes(toolUse.name)) { + if (![FS_WRITE, FS_REPLACE, FS_READ, LIST_DIRECTORY].includes(toolUse.name)) { await this.#showUndoAllIfRequired(chatResultStream, session) } // fsWrite can take a long time, so we render fsWrite Explanatory upon partial streaming responses. - if (toolUse.name !== 'fsWrite' && toolUse.name !== 'fsReplace') { + if (toolUse.name !== FS_WRITE && toolUse.name !== FS_REPLACE) { const { explanation } = toolUse.input as unknown as ExplanatoryParams if (explanation) { await chatResultStream.writeResultBlock({ type: 'directive', - messageId: toolUse.toolUseId + '_explanation', + messageId: toolUse.toolUseId + SUFFIX_EXPLANATION, body: explanation, }) } } switch (toolUse.name) { - case 'fsRead': - case 'listDirectory': - case 'grepSearch': - case 'fileSearch': - case 'fsWrite': - case 'fsReplace': - case 'executeBash': { + case FS_READ: + case LIST_DIRECTORY: + case GREP_SEARCH: + case FILE_SEARCH: + case FS_WRITE: + case FS_REPLACE: + case EXECUTE_BASH: { const toolMap = { - fsRead: { Tool: FsRead }, - listDirectory: { Tool: ListDirectory }, - fsWrite: { Tool: FsWrite }, - fsReplace: { Tool: FsReplace }, - executeBash: { Tool: ExecuteBash }, - grepSearch: { Tool: GrepSearch }, - fileSearch: { Tool: FileSearch }, + [FS_READ]: { Tool: FsRead }, + [LIST_DIRECTORY]: { Tool: ListDirectory }, + [FS_WRITE]: { Tool: FsWrite }, + [FS_REPLACE]: { Tool: FsReplace }, + [EXECUTE_BASH]: { Tool: ExecuteBash }, + [GREP_SEARCH]: { Tool: GrepSearch }, + [FILE_SEARCH]: { Tool: FileSearch }, } const { Tool } = toolMap[toolUse.name as keyof typeof toolMap] @@ -1311,7 +1655,7 @@ export class AgenticChatController implements ChatHandlers { // Honor built-in permission if available, otherwise use tool's requiresAcceptance // const requiresAcceptance = builtInPermission || toolRequiresAcceptance - if (requiresAcceptance || toolUse.name === 'executeBash') { + if (requiresAcceptance || toolUse.name === EXECUTE_BASH) { // for executeBash, we till send the confirmation message without action buttons const confirmationResult = this.#processToolConfirmation( toolUse, @@ -1320,13 +1664,15 @@ export class AgenticChatController implements ChatHandlers { commandCategory ) cachedButtonBlockId = await chatResultStream.writeResultBlock(confirmationResult) - const isExecuteBash = toolUse.name === 'executeBash' + const isExecuteBash = toolUse.name === EXECUTE_BASH if (isExecuteBash) { this.#telemetryController.emitInteractWithAgenticChat( 'GeneratedCommand', tabId, session.pairProgrammingMode, - session.getConversationType() + session.getConversationType(), + this.#abTestingAllocation?.experimentName, + this.#abTestingAllocation?.userVariation ) } if (requiresAcceptance) { @@ -1343,12 +1689,17 @@ export class AgenticChatController implements ChatHandlers { 'RunCommand', tabId, session.pairProgrammingMode, - session.getConversationType() + session.getConversationType(), + this.#abTestingAllocation?.experimentName, + this.#abTestingAllocation?.userVariation ) } } break } + case QCodeReview.toolName: + // no need to write tool message for code review + break // — DEFAULT ⇒ Only MCP tools, but can also handle generic tool execution messages default: // Get original server and tool names from the mapping @@ -1411,7 +1762,7 @@ export class AgenticChatController implements ChatHandlers { break } - if (toolUse.name === 'fsWrite' || toolUse.name === 'fsReplace') { + if (toolUse.name === FS_WRITE || toolUse.name === FS_REPLACE) { const input = toolUse.input as unknown as FsWriteParams | FsReplaceParams const document = await this.#triggerContext.getTextDocumentFromPath(input.path, true, true) @@ -1421,6 +1772,22 @@ export class AgenticChatController implements ChatHandlers { }) } + if (toolUse.name === QCodeReview.toolName) { + try { + let initialInput = JSON.parse(JSON.stringify(toolUse.input)) + let ruleArtifacts = await this.#additionalContextProvider.collectWorkspaceRules(tabId) + if (ruleArtifacts !== undefined || ruleArtifacts !== null) { + this.#features.logging.info(`RuleArtifacts: ${JSON.stringify(ruleArtifacts)}`) + let pathsToRulesMap = ruleArtifacts.map(ruleArtifact => ({ path: ruleArtifact.id })) + this.#features.logging.info(`PathsToRules: ${JSON.stringify(pathsToRulesMap)}`) + initialInput['ruleArtifacts'] = pathsToRulesMap + } + toolUse.input = initialInput + } catch (e) { + this.#features.logging.warn(`could not parse QCodeReview tool input: ${e}`) + } + } + // After approval, add the path to the approved paths in the session const inputPath = (toolUse.input as any)?.path || (toolUse.input as any)?.cwd if (inputPath) { @@ -1448,27 +1815,27 @@ export class AgenticChatController implements ChatHandlers { }) switch (toolUse.name) { - case 'fsRead': - case 'listDirectory': - case 'fileSearch': + case FS_READ: + case LIST_DIRECTORY: + case FILE_SEARCH: const initialListDirResult = this.#processReadOrListOrSearch(toolUse, chatResultStream) if (initialListDirResult) { await chatResultStream.writeResultBlock(initialListDirResult) } break // no need to write tool result for listDir,fsRead,fileSearch into chat stream - case 'executeBash': + case EXECUTE_BASH: // no need to write tool result for listDir and fsRead into chat stream // executeBash will stream the output instead of waiting until the end break - case 'grepSearch': + case GREP_SEARCH: const grepSearchResult = this.#processGrepSearchResult(toolUse, result, chatResultStream) if (grepSearchResult) { await chatResultStream.writeResultBlock(grepSearchResult) } break - case 'fsReplace': - case 'fsWrite': + case FS_REPLACE: + case FS_WRITE: const input = toolUse.input as unknown as FsWriteParams | FsReplaceParams // Load from the filesystem instead of workspace. // Workspace is likely out of date - when files @@ -1490,10 +1857,28 @@ export class AgenticChatController implements ChatHandlers { 'GeneratedDiff', tabId, session.pairProgrammingMode, - session.getConversationType() + session.getConversationType(), + this.#abTestingAllocation?.experimentName, + this.#abTestingAllocation?.userVariation ) await chatResultStream.writeResultBlock(chatResult) break + case QCodeReview.toolName: + // no need to write tool result for code review, this is handled by model via chat + // Push result in message so that it is picked by IDE plugin to show in issues panel + const qCodeReviewResult = result as InvokeOutput + if ( + qCodeReviewResult?.output?.kind === 'json' && + qCodeReviewResult.output.success && + (qCodeReviewResult.output.content as any)?.findingsByFile + ) { + await chatResultStream.writeResultBlock({ + type: 'tool', + messageId: toolUse.toolUseId + FINDINGS_MESSAGE_SUFFIX, + body: (qCodeReviewResult.output.content as any).findingsByFile, + }) + } + break // — DEFAULT ⇒ MCP tools default: await this.#handleMcpToolResult(toolUse, result, session, chatResultStream) @@ -1522,7 +1907,9 @@ export class AgenticChatController implements ChatHandlers { session.conversationId ?? '', this.#features.runtime.serverInfo.version ?? '', latency, - session.pairProgrammingMode + session.pairProgrammingMode, + this.#abTestingAllocation?.experimentName, + this.#abTestingAllocation?.userVariation ) } } catch (err) { @@ -1556,13 +1943,13 @@ export class AgenticChatController implements ChatHandlers { } // Rethrow error for executeBash or any named tool - if (toolUse.name === 'executeBash' || toolUse.name) { + if (toolUse.name === EXECUTE_BASH || toolUse.name) { throw err } } // display fs write failure status in the UX of that file card - if ((toolUse.name === 'fsWrite' || toolUse.name === 'fsReplace') && toolUse.toolUseId) { + if ((toolUse.name === FS_WRITE || toolUse.name === FS_REPLACE) && toolUse.toolUseId) { const existingCard = chatResultStream.getMessageBlockId(toolUse.toolUseId) const fsParam = toolUse.input as unknown as FsWriteParams | FsReplaceParams if (fsParam.path) { @@ -1595,7 +1982,7 @@ export class AgenticChatController implements ChatHandlers { await chatResultStream.writeResultBlock(errorResult) } } - } else if (toolUse.name === 'executeBash' && toolUse.toolUseId) { + } else if (toolUse.name === EXECUTE_BASH && toolUse.toolUseId) { const existingCard = chatResultStream.getMessageBlockId(toolUse.toolUseId) const command = (toolUse.input as unknown as ExecuteBashParams).command const completedErrorResult = { @@ -1642,7 +2029,7 @@ export class AgenticChatController implements ChatHandlers { #shouldSendBackErrorContent(toolResult: ToolResult) { if (toolResult.status === ToolResultStatus.ERROR) { for (const content of toolResult.content ?? []) { - if (content.json && JSON.stringify(content.json).includes(outputLimitExceedsPartialMsg)) { + if (content.json && JSON.stringify(content.json).includes(OUTPUT_LIMIT_EXCEEDS_PARTIAL_MSG)) { // do not send the content response back for this case to avoid unnecessary messages return false } @@ -1656,10 +2043,10 @@ export class AgenticChatController implements ChatHandlers { * Updates the currentUndoAllId state in the session */ #updateUndoAllState(toolUse: ToolUse, session: ChatSessionService) { - if (toolUse.name === 'fsRead' || toolUse.name === 'listDirectory') { + if (toolUse.name === FS_READ || toolUse.name === LIST_DIRECTORY) { return } - if (toolUse.name === 'fsWrite' || toolUse.name === 'fsReplace') { + if (toolUse.name === FS_WRITE || toolUse.name === FS_REPLACE) { if (session.currentUndoAllId === undefined) { session.currentUndoAllId = toolUse.toolUseId } @@ -1697,10 +2084,10 @@ export class AgenticChatController implements ChatHandlers { await chatResultStream.writeResultBlock({ type: 'answer', - messageId: `${session.currentUndoAllId}_undoall`, + messageId: `${session.currentUndoAllId}${SUFFIX_UNDOALL}`, buttons: [ { - id: 'undo-all-changes', + id: BUTTON_UNDO_ALL_CHANGES, text: 'Undo all changes', icon: 'undo', status: 'clear', @@ -1733,11 +2120,11 @@ export class AgenticChatController implements ChatHandlers { #validateToolResult(toolUse: ToolUse, result: ToolResultContentBlock) { let maxToolResponseSize switch (toolUse.name) { - case 'fsRead': - case 'executeBash': + case FS_READ: + case EXECUTE_BASH: // fsRead and executeBash already have truncation logic return - case 'listDirectory': + case LIST_DIRECTORY: maxToolResponseSize = 50_000 break default: @@ -1748,7 +2135,7 @@ export class AgenticChatController implements ChatHandlers { (result.text && result.text.length > maxToolResponseSize) || (result.json && JSON.stringify(result.json).length > maxToolResponseSize) ) { - throw Error(`${toolUse.name} ${outputLimitExceedsPartialMsg} ${maxToolResponseSize}`) + throw Error(`${toolUse.name} ${OUTPUT_LIMIT_EXCEEDS_PARTIAL_MSG} ${maxToolResponseSize}`) } } @@ -1768,8 +2155,39 @@ export class AgenticChatController implements ChatHandlers { } } + #getToolOverWritableStream( + chatResultStream: AgenticChatResultStream, + toolUse: ToolUse + ): WritableStream | undefined { + const toolMsgId = toolUse.toolUseId! + + return new WritableStream({ + write: async chunk => { + if (this.#stoppedToolUses.has(toolMsgId)) return + + await chatResultStream.removeResultBlockAndUpdateUI(toolMsgId) + + await chatResultStream.writeResultBlock({ + type: 'tool', + messageId: toolMsgId, + body: chunk, + }) + }, + close: async () => { + if (this.#stoppedToolUses.has(toolMsgId)) return + + await chatResultStream.removeResultBlockAndUpdateUI(toolMsgId) + + this.#stoppedToolUses.add(toolMsgId) + }, + }) + } + #getWritableStream(chatResultStream: AgenticChatResultStream, toolUse: ToolUse): WritableStream | undefined { - if (toolUse.name !== 'executeBash') { + if (toolUse.name === QCodeReview.toolName) { + return this.#getToolOverWritableStream(chatResultStream, toolUse) + } + if (toolUse.name !== EXECUTE_BASH) { return } @@ -1779,7 +2197,7 @@ export class AgenticChatController implements ChatHandlers { const initialHeader: ChatMessage['header'] = { body: 'shell', - buttons: [{ id: 'stop-shell-command', text: 'Stop', icon: 'stop' }], + buttons: [{ id: BUTTON_STOP_SHELL_COMMAND, text: 'Cancel', icon: 'stop' }], } const completedHeader: ChatMessage['header'] = { @@ -1840,7 +2258,7 @@ export class AgenticChatController implements ChatHandlers { const toolName = originalToolName ?? (toolType || toolUse.name) // Handle bash commands with special formatting - if (toolName === 'executeBash') { + if (toolName === EXECUTE_BASH) { return { messageId: toolUse.toolUseId, type: 'tool', @@ -1856,7 +2274,7 @@ export class AgenticChatController implements ChatHandlers { text: 'Rejected', }, }), - buttons: isAccept ? [{ id: 'stop-shell-command', text: 'Stop', icon: 'stop' }] : [], + buttons: isAccept ? [{ id: BUTTON_STOP_SHELL_COMMAND, text: 'Cancel', icon: 'stop' }] : [], }, } } @@ -1869,10 +2287,10 @@ export class AgenticChatController implements ChatHandlers { let body: string | undefined switch (toolName) { - case 'fsReplace': - case 'fsWrite': - case 'fsRead': - case 'listDirectory': + case FS_REPLACE: + case FS_WRITE: + case FS_READ: + case LIST_DIRECTORY: header = { body: undefined, status: { @@ -1883,7 +2301,7 @@ export class AgenticChatController implements ChatHandlers { } break - case 'fileSearch': + case FILE_SEARCH: const searchPath = (toolUse.input as unknown as FileSearchParams).path header = { body: 'File Search', @@ -1953,7 +2371,7 @@ export class AgenticChatController implements ChatHandlers { status: { status: 'error', icon: 'stop', - text: 'Stopped', + text: 'Canceled', }, buttons: [], }, @@ -1963,6 +2381,117 @@ export class AgenticChatController implements ChatHandlers { }) } + #processCompactConfirmation(messageId: string): ChatResult { + const buttons = [{ id: 'allow-tools', text: 'Allow', icon: 'ok', status: 'clear' }] + const header = { + icon: 'warning', + iconForegroundStatus: 'warning', + body: COMPACTION_HEADER_BODY, + buttons, + } as any + const body = COMPACTION_BODY + return { + type: 'tool', + messageId, + header, + body, + } + } + + /** + * Creates a promise that does not resolve until the user accepts or rejects the compaction usage. + * @param messageId + * @param resultStream + * @param promptBlockId id of approval block. This allows us to overwrite the buttons with 'accepted' or 'rejected' text. + */ + async waitForCompactApproval( + messageId: string, + resultStream: AgenticChatResultStream, + promptBlockId: number, + session: ChatSessionService + ) { + const deferred = this.#createDeferred() + session.setDeferredToolExecution(messageId, deferred.resolve, deferred.reject) + this.#log(`Prompting for compaction approval for messageId: ${messageId}`) + await deferred.promise + // Note: we want to overwrite the button block because it already exists in the stream. + await resultStream.overwriteResultBlock(this.#getUpdateCompactConfirmResult(messageId), promptBlockId) + } + + /** + * Creates an updated ChatResult for compaction confirmation + * @param messageId The messageId + * @returns ChatResult with appropriate confirmation UI + */ + #getUpdateCompactConfirmResult(messageId: string): ChatResult { + let header: { + body: string | undefined + status: { status: 'info' | 'success' | 'warning' | 'error'; icon: string; text: string } + } + let body: string | undefined + + header = { + body: undefined, + status: { + status: 'success', + icon: 'ok', + text: 'Allowed', + }, + } + + return { + messageId, + type: 'tool', + body, + header, + } + } + + #renderStopShellCommandButton() { + const stopKey = this.#getKeyBinding('aws.amazonq.stopCmdExecution') + return { + id: 'stop-shell-command', + text: 'Cancel', + icon: 'stop', + ...(stopKey ? { description: `Stop: ${stopKey}` } : {}), + } + } + + #getKeyBinding(commandId: string): string | null { + // Check for feature flag + const shortcut = + this.#features.lsp.getClientInitializeParams()?.initializationOptions?.aws?.awsClientCapabilities?.q + ?.shortcut + if (!shortcut) { + return null + } + let defaultKey = '' + const OS = os.platform() + + switch (commandId) { + case 'aws.amazonq.runCmdExecution': + defaultKey = OS === 'darwin' ? DEFAULT_MACOS_RUN_SHORTCUT : DEFAULT_WINDOW_RUN_SHORTCUT + break + case 'aws.amazonq.rejectCmdExecution': + defaultKey = OS === 'darwin' ? DEFAULT_MACOS_REJECT_SHORTCUT : DEFAULT_WINDOW_REJECT_SHORTCUT + break + case 'aws.amazonq.stopCmdExecution': + defaultKey = OS === 'darwin' ? DEFAULT_MACOS_STOP_SHORTCUT : DEFAULT_WINDOW_STOP_SHORTCUT + break + default: + this.#log(`#getKeyBinding: ${commandId} shortcut is supported by Q `) + break + } + + if (defaultKey === '') { + return null + } + + //TODO: handle case: user change default keybind, suggestion: read `keybinding.json` provided by VSC + + return defaultKey + } + #processToolConfirmation( toolUse: ToolUse, requiresAcceptance: Boolean, @@ -1990,13 +2519,13 @@ export class AgenticChatController implements ChatHandlers { // Configure tool-specific UI elements switch (toolName) { - case 'executeBash': { + case EXECUTE_BASH: { const commandString = (toolUse.input as unknown as ExecuteBashParams).command buttons = requiresAcceptance ? [ - { id: 'run-shell-command', text: 'Run', icon: 'play' }, + { id: BUTTON_RUN_SHELL_COMMAND, text: 'Run', icon: 'play' }, { - id: 'reject-shell-command', + id: BUTTON_REJECT_SHELL_COMMAND, status: 'dimmed-clear' as Status, text: 'Reject', icon: 'cancel', @@ -2035,14 +2564,14 @@ export class AgenticChatController implements ChatHandlers { break } - case 'fsWrite': { + case FS_WRITE: { const writeFilePath = (toolUse.input as unknown as FsWriteParams).path // Validate the path using our synchronous utility validatePathBasic(writeFilePath) this.#debug(`Processing ${toolUse.name} for path: ${writeFilePath}`) - buttons = [{ id: 'allow-tools', text: 'Allow', icon: 'ok', status: 'clear' }] + buttons = [{ id: BUTTON_ALLOW_TOOLS, text: 'Allow', icon: 'ok', status: 'clear' }] header = { icon: 'warning', iconForegroundStatus: 'warning', @@ -2057,14 +2586,14 @@ export class AgenticChatController implements ChatHandlers { break } - case 'fsReplace': { + case FS_REPLACE: { const writeFilePath = (toolUse.input as unknown as FsReplaceParams).path // For replace, we need to verify the file exists validatePathExists(writeFilePath) this.#debug(`Processing ${toolUse.name} for path: ${writeFilePath}`) - buttons = [{ id: 'allow-tools', text: 'Allow', icon: 'ok', status: 'clear' }] + buttons = [{ id: BUTTON_ALLOW_TOOLS, text: 'Allow', icon: 'ok', status: 'clear' }] header = { icon: 'warning', iconForegroundStatus: 'warning', @@ -2079,9 +2608,9 @@ export class AgenticChatController implements ChatHandlers { break } - case 'fsRead': - case 'listDirectory': { - buttons = [{ id: 'allow-tools', text: 'Allow', icon: 'ok', status: 'clear' }] + case FS_READ: + case LIST_DIRECTORY: { + buttons = [{ id: BUTTON_ALLOW_TOOLS, text: 'Allow', icon: 'ok', status: 'clear' }] header = { icon: 'tools', iconForegroundStatus: 'tools', @@ -2091,7 +2620,7 @@ export class AgenticChatController implements ChatHandlers { buttons, } - if (toolName === 'fsRead') { + if (toolName === FS_READ) { const paths = (toolUse.input as unknown as FsReadParams).paths // Validate paths using our synchronous utility @@ -2119,7 +2648,7 @@ export class AgenticChatController implements ChatHandlers { default: { // — DEFAULT ⇒ MCP tools - buttons = [{ id: 'allow-tools', text: 'Allow', icon: 'ok', status: 'clear' }] + buttons = [{ id: BUTTON_ALLOW_TOOLS, text: 'Allow', icon: 'ok', status: 'clear' }] header = { icon: 'tools', iconForegroundStatus: 'warning', @@ -2139,7 +2668,7 @@ export class AgenticChatController implements ChatHandlers { type: 'tool', messageId: this.#getMessageIdForToolUse(toolType, toolUse), header, - body: warning ? (toolName === 'executeBash' ? '' : '\n\n') + body : body, + body: warning ? (toolName === EXECUTE_BASH ? '' : '\n\n') + body : body, } } else { return { @@ -2151,9 +2680,9 @@ export class AgenticChatController implements ChatHandlers { icon: 'tools', body: `${toolName}`, buttons: [ - { id: 'allow-tools', text: 'Run', icon: 'play', status: 'clear' }, + { id: BUTTON_ALLOW_TOOLS, text: 'Run', icon: 'play', status: 'clear' }, { - id: 'reject-mcp-tool', + id: BUTTON_REJECT_MCP_TOOL, text: 'Reject', icon: 'cancel', status: 'dimmed-clear' as Status, @@ -2206,7 +2735,7 @@ export class AgenticChatController implements ChatHandlers { }, }, }, - buttons: [{ id: 'undo-changes', text: 'Undo', icon: 'undo' }], + buttons: [{ id: BUTTON_UNDO_CHANGES, text: 'Undo', icon: 'undo' }], }, } } @@ -2221,7 +2750,7 @@ export class AgenticChatController implements ChatHandlers { chatResultStream.setMessageIdToUpdateForTool(toolUse.name!, messageIdToUpdate) } let currentPaths = [] - if (toolUse.name === 'fsRead') { + if (toolUse.name === FS_READ) { currentPaths = (toolUse.input as unknown as FsReadParams)?.paths } else { currentPaths.push((toolUse.input as unknown as ListDirectoryParams | FileSearchParams)?.path) @@ -2251,9 +2780,9 @@ export class AgenticChatController implements ChatHandlers { title = 'Gathering context' } else { title = - toolUse.name === 'fsRead' + toolUse.name === FS_READ ? `${itemCount} file${itemCount > 1 ? 's' : ''} read` - : toolUse.name === 'fileSearch' + : toolUse.name === FILE_SEARCH ? `${itemCount} ${itemCount === 1 ? 'directory' : 'directories'} searched` : `${itemCount} ${itemCount === 1 ? 'directory' : 'directories'} listed` } @@ -2286,7 +2815,7 @@ export class AgenticChatController implements ChatHandlers { result: any, chatResultStream: AgenticChatResultStream ): ChatMessage | undefined { - if (toolUse.name !== 'grepSearch') { + if (toolUse.name !== GREP_SEARCH) { return undefined } @@ -2353,7 +2882,7 @@ export class AgenticChatController implements ChatHandlers { content: string ): ChatCommandInput { // Create a deep copy of the request input - const updatedRequestInput = JSON.parse(JSON.stringify(requestInput)) as ChatCommandInput + const updatedRequestInput = structuredClone(requestInput) as ChatCommandInput // Add tool results to the request updatedRequestInput.conversationState!.currentMessage!.userInputMessage!.userInputMessageContext!.toolResults = @@ -2388,7 +2917,7 @@ export class AgenticChatController implements ChatHandlers { async #handleFinalResult( result: Result, session: ChatSessionService, - params: ChatParams, + tabId: string, metric: Metric, triggerContext: TriggerContext, isNewConversation: boolean, @@ -2401,17 +2930,17 @@ export class AgenticChatController implements ChatHandlers { this.#debug('Final session conversation id:', conversationId || '') if (conversationId) { - this.#telemetryController.setConversationId(params.tabId, conversationId) + this.#telemetryController.setConversationId(tabId, conversationId) if (isNewConversation) { - this.#telemetryController.updateTriggerInfo(params.tabId, { + this.#telemetryController.updateTriggerInfo(tabId, { startTrigger: { hasUserSnippet: metric.metric.cwsprChatHasCodeSnippet ?? false, triggerType: triggerContext.triggerType, }, }) - this.#telemetryController.emitStartConversationMetric(params.tabId, metric.metric) + this.#telemetryController.emitStartConversationMetric(tabId, metric.metric) } } @@ -2446,9 +2975,9 @@ export class AgenticChatController implements ChatHandlers { cwsprChatPinnedPromptContextCount: triggerContext.contextInfo.pinnedContextCount.promptContextCount, }) } - await this.#telemetryController.emitAddMessageMetric(params.tabId, metric.metric, 'Succeeded') + await this.#telemetryController.emitAddMessageMetric(tabId, metric.metric, 'Succeeded') - this.#telemetryController.updateTriggerInfo(params.tabId, { + this.#telemetryController.updateTriggerInfo(tabId, { lastMessageTrigger: { ...triggerContext, messageId: result.data?.chatResult.messageId, @@ -2478,6 +3007,8 @@ export class AgenticChatController implements ChatHandlers { const requestID = getRequestID(err) ?? '' metric.setDimension('cwsprChatResponseCode', getHttpStatusCode(err) ?? 0) metric.setDimension('languageServerVersion', this.#features.runtime.serverInfo.version) + metric.setDimension('codewhispererCustomizationArn', this.#customizationArn) + metric.setDimension('enabled', agenticCodingMode) metric.metric.requestIds = [requestID] metric.metric.cwsprChatMessageId = errorMessageId @@ -2527,7 +3058,7 @@ export class AgenticChatController implements ChatHandlers { tabId, metric.metric, requestID, - errorMessage ?? genericErrorMsg, + errorMessage ?? GENERIC_ERROR_MS, agenticCodingMode ) } @@ -2603,7 +3134,7 @@ export class AgenticChatController implements ChatHandlers { this.#features.logging.error(`Unknown Error: ${loggingUtils.formatErr(err)}`) return new ResponseError(LSPErrorCodes.RequestFailed, err.message, { type: 'answer', - body: requestID ? `${genericErrorMsg} \n\nRequest ID: ${requestID}` : genericErrorMsg, + body: requestID ? `${GENERIC_ERROR_MS} \n\nRequest ID: ${requestID}` : GENERIC_ERROR_MS, messageId: errorMessageId, buttons: [], }) @@ -2777,7 +3308,7 @@ export class AgenticChatController implements ChatHandlers { const toolUseId = params.messageId const toolUse = toolUseId ? session.data?.toolUseLookup.get(toolUseId) : undefined - if (toolUse?.name === 'fsWrite' || toolUse?.name === 'fsReplace') { + if (toolUse?.name === FS_WRITE || toolUse?.name === FS_REPLACE) { const input = toolUse.input as unknown as FsWriteParams | FsReplaceParams this.#features.lsp.workspace.openFileDiff({ originalFileUri: input.path, @@ -2785,7 +3316,7 @@ export class AgenticChatController implements ChatHandlers { isDeleted: false, fileContent: toolUse.fileChange?.after, }) - } else if (toolUse?.name === 'fsRead') { + } else if (toolUse?.name === FS_READ) { await this.#features.lsp.window.showDocument({ uri: URI.file(params.filePath).toString() }) } else { const absolutePath = params.fullPath ?? (await this.#resolveAbsolutePath(params.filePath)) @@ -2847,7 +3378,7 @@ export class AgenticChatController implements ChatHandlers { #legacySetModelId(tabId: string, session: ChatSessionService) { // Since model selection is mandatory, the only time modelId is not set is when the chat history is empty. // In that case, we use the default modelId. - let modelId = this.#chatHistoryDb.getModelId() ?? defaultModelId + let modelId = this.#chatHistoryDb.getModelId() ?? DEFAULT_MODEL_ID const region = AmazonQTokenServiceManager.getInstance().getRegion() if (region === 'eu-central-1') { @@ -3035,9 +3566,32 @@ export class AgenticChatController implements ChatHandlers { return triggerContext } + async #invalidateCompactCommand(tabId: string, messageIds: string[]) { + for (const messageId of messageIds) { + await this.#features.chat.sendChatUpdate({ + tabId, + state: { inProgress: false }, + data: { + messages: [ + { + messageId, + type: 'tool', + body: COMPACTION_BODY, + header: { + body: COMPACTION_HEADER_BODY, + status: { icon: 'block', text: 'Ignored' }, + buttons: [], + }, + }, + ], + }, + }) + } + } + async #invalidateAllShellCommands(tabId: string, session: ChatSessionService) { for (const [toolUseId, toolUse] of session.toolUseLookup.entries()) { - if (toolUse.name !== 'executeBash' || this.#stoppedToolUses.has(toolUseId)) continue + if (toolUse.name !== EXECUTE_BASH || this.#stoppedToolUses.has(toolUseId)) continue const params = toolUse.input as unknown as ExecuteBashParams const command = params.command @@ -3291,7 +3845,8 @@ export class AgenticChatController implements ChatHandlers { metric: Metric, chatResultStream: AgenticChatResultStream, session: ChatSessionService, - contextList?: FileList + contextList?: FileList, + isCompaction?: boolean ): Promise> { const abortController = new AbortController() let timeoutId: NodeJS.Timeout | undefined @@ -3300,11 +3855,11 @@ export class AgenticChatController implements ChatHandlers { abortController.abort() reject( new AgenticChatError( - `${responseTimeoutPartialMsg} ${responseTimeoutMs}ms`, + `${RESPONSE_TIMEOUT_PARTIAL_MSG} ${RESPONSE_TIMEOUT_MS}ms`, 'ResponseProcessingTimeout' ) ) - }, responseTimeoutMs) + }, RESPONSE_TIMEOUT_MS) }) const streamWriter = chatResultStream.getResultStreamWriter() const processResponsePromise = this.#processAgenticChatResponse( @@ -3314,7 +3869,8 @@ export class AgenticChatController implements ChatHandlers { streamWriter, session, contextList, - abortController.signal + abortController.signal, + isCompaction ) try { const result = await Promise.race([processResponsePromise, timeoutPromise]) @@ -3343,7 +3899,7 @@ export class AgenticChatController implements ChatHandlers { } const toolUses = Object.values(data.toolUses) for (const toolUse of toolUses) { - if ((toolUse.name === 'fsWrite' || toolUse.name === 'fsReplace') && typeof toolUse.input === 'string') { + if ((toolUse.name === FS_WRITE || toolUse.name === FS_REPLACE) && typeof toolUse.input === 'string') { const filepath = extractKey(toolUse.input, 'path') const msgId = progressPrefix + toolUse.toolUseId // render fs write UI as soon as fs write starts @@ -3372,7 +3928,7 @@ export class AgenticChatController implements ChatHandlers { } // render the tool use explanatory as soon as this is received for fsWrite/fsReplace const explanation = extractKey(toolUse.input, 'explanation') - const messageId = progressPrefix + toolUse.toolUseId + '_explanation' + const messageId = progressPrefix + toolUse.toolUseId + SUFFIX_EXPLANATION if (explanation && !chatResultStream.hasMessage(messageId)) { await streamWriter.close() await chatResultStream.writeResultBlock({ @@ -3392,14 +3948,15 @@ export class AgenticChatController implements ChatHandlers { streamWriter: ResultStreamWriter, session: ChatSessionService, contextList?: FileList, - abortSignal?: AbortSignal + abortSignal?: AbortSignal, + isCompaction?: boolean ): Promise> { const requestId = response.$metadata.requestId! const chatEventParser = new AgenticChatEventParser(requestId, metric, this.#features.logging) // Display context transparency list once at the beginning of response // Use a flag to track if contextList has been sent already to avoid ux flickering - if (contextList?.filePaths && contextList.filePaths.length > 0 && !session.contextListSent) { + if (!isCompaction && contextList?.filePaths && contextList.filePaths.length > 0 && !session.contextListSent) { await streamWriter.write({ body: '', contextList }) session.contextListSent = true } @@ -3435,7 +3992,7 @@ export class AgenticChatController implements ChatHandlers { this.recordChunk('chunk') } - // make sure to save code reference events + // update the UI with response if (chatEvent.assistantResponseEvent || chatEvent.codeReferenceEvent) { await streamWriter.write(result.data.chatResult) } @@ -3451,9 +4008,18 @@ export class AgenticChatController implements ChatHandlers { } } if (isEmptyResponse) { - // If the response is empty, we need to send an empty answer message to remove the Thinking... indicator + // If the response is empty, we need to send an empty answer message to remove the Working... indicator await streamWriter.write({ type: 'answer', body: '', messageId: uuid() }) } + + if (isCompaction) { + // Show a dummy message to the UI for compaction completion + await streamWriter.write({ + type: 'answer', + body: 'Conversation history has been compacted successfully!', + messageId: uuid(), + }) + } await streamWriter.close() metric.mergeWith({ @@ -3477,6 +4043,11 @@ export class AgenticChatController implements ChatHandlers { toolUseStartTimes: Record, toolUseLoadingTimeouts: Record ) { + const canWrite = new Set(this.#features.agent.getBuiltInWriteToolNames()) + if (toolUseEvent.name && canWrite.has(toolUseEvent.name)) { + return + } + const toolUseId = toolUseEvent.toolUseId if (!toolUseEvent.stop && toolUseId) { if (!toolUseStartTimes[toolUseId]) { @@ -3488,10 +4059,10 @@ export class AgenticChatController implements ChatHandlers { this.#debug(`ToolUseEvent ${toolUseId} started`) toolUseLoadingTimeouts[toolUseId] = setTimeout(async () => { this.#debug( - `ToolUseEvent ${toolUseId} is taking longer than ${loadingThresholdMs}ms, showing loading indicator` + `ToolUseEvent ${toolUseId} is taking longer than ${LOADING_THRESHOLD_MS}ms, showing loading indicator` ) await streamWriter.write({ ...loadingMessage, messageId: `loading-${toolUseId}` }) - }, loadingThresholdMs) + }, LOADING_THRESHOLD_MS) } } else if (toolUseEvent.stop && toolUseId) { if (toolUseStartTimes[toolUseId]) { @@ -3719,6 +4290,45 @@ export class AgenticChatController implements ChatHandlers { }) } + scheduleABTestingFetching(userContext: UserContext | undefined) { + if (!userContext) { + return + } + + this.#abTestingFetchingTimeout = setInterval(() => { + let codeWhispererServiceToken: CodeWhispererServiceToken + try { + codeWhispererServiceToken = AmazonQTokenServiceManager.getInstance().getCodewhispererService() + } catch (error) { + // getCodewhispererService only returns the cwspr client if the service manager was initialized + // i.e. profile was selected otherwise it throws an error + // we will not evaluate a/b status until profile is selected and service manager is fully initialized + return + } + + // Clear interval once we have the CodewhispererService + clearInterval(this.#abTestingFetchingTimeout) + this.#abTestingFetchingTimeout = undefined + + codeWhispererServiceToken + .listFeatureEvaluations({ userContext }) + .then(result => { + const feature = result.featureEvaluations?.find( + feature => feature.feature === 'MaestroWorkspaceContext' + ) + if (feature) { + this.#abTestingAllocation = { + experimentName: feature.feature, + userVariation: feature.variation, + } + } + }) + .catch(error => { + this.#features.logging.debug(`Error fetching AB testing result: ${error}`) + }) + }, 5000) + } + #log(...messages: string[]) { this.#features.logging.log(messages.join(' ')) } @@ -3726,4 +4336,13 @@ export class AgenticChatController implements ChatHandlers { #debug(...messages: string[]) { this.#features.logging.debug(messages.join(' ')) } + + // Helper function to sanitize the 'images' field for logging by replacing large binary data (e.g., Uint8Array) with a concise summary. + // This prevents logs from being overwhelmed by raw byte arrays and keeps log output readable. + #imageReplacer(key: string, value: any): string | any { + if (key === 'bytes' && value && typeof value.length === 'number') { + return `[Uint8Array, length: ${value.length}]` + } + return value + } } diff --git a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/constants.ts b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/constants.ts deleted file mode 100644 index 1a81924d46..0000000000 --- a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/constants.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { BedrockModel } from './modelSelection' - -export const genericErrorMsg = 'An unexpected error occurred, check the logs for more information.' -export const loadingThresholdMs = 2000 -export const generateAssistantResponseInputLimit = 500_000 -export const outputLimitExceedsPartialMsg = 'output exceeds maximum character limit of' -export const responseTimeoutMs = 240_000 -export const responseTimeoutPartialMsg = 'Response processing timed out after' -export const clientTimeoutMs = 245_000 -export const defaultModelId = BedrockModel.CLAUDE_SONNET_4_20250514_V1_0 diff --git a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/constants/constants.ts b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/constants/constants.ts new file mode 100644 index 0000000000..67572d4d13 --- /dev/null +++ b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/constants/constants.ts @@ -0,0 +1,90 @@ +import { BedrockModel } from './modelSelection' + +// Error message constants +export const GENERIC_ERROR_MS = 'An unexpected error occurred, check the logs for more information.' +export const OUTPUT_LIMIT_EXCEEDS_PARTIAL_MSG = 'output exceeds maximum character limit of' +export const RESPONSE_TIMEOUT_PARTIAL_MSG = 'Response processing timed out after' + +// Time Constants +export const LOADING_THRESHOLD_MS = 2000 +export const CLIENT_TIMEOUT_MS = 245_000 +export const RESPONSE_TIMEOUT_MS = 240_000 + +// LLM Constants +export const GENERATE_ASSISTANT_RESPONSE_INPUT_LIMIT = 500_000 +export const DEFAULT_MODEL_ID = BedrockModel.CLAUDE_SONNET_4_20250514_V1_0 + +// Compaction +export const COMPACTION_BODY = + 'The context window is almost full (80%). Amazon Q can compact your chat history to improve response quality.' +export const COMPACTION_HEADER_BODY = 'Compact chat history?' +export const COMPACTION_PROMPT = ` +[SYSTEM NOTE: This is an automated summarization request, not from the user]\n\n + +Your task is to generate a concise summary of the conversation history between an AI coding agent (assistant) and user once the LLM context window is reached. +This summary will replace the raw conversation history, so it should contain important information from the history such that it enables continuning the conversation with the user in a coherent manner. +Output the summary in markdown format with sections provided in format tag. + + + +The summary should have following main sections: +## Conversation Summary +- contains an entry for each key topic discussed +## Files and Code Summary +- contains entries on what was learned about the files and code discussed. If relevant, it includes file paths, function signatures, and key changes +## Key Insights +- contains a summary for each key insight learned from the conversation (such as user preferences, technical details, decisions made, etc.) +## Most Recent Topic +- contains a detailed summary of the most recent topic discussed along with details of actions taken so far to address the user needs along with ALL tools executed + + + +- Add an entry to Key Insights section for any SIGNIFICANT tool usages whose result is important for continuing the conversation +- DO NOT respond conversationally. DO NOT address the user directly. +- For files that were read/written, exclude the full raw content but keep their path and what was learned about them +- If a file was loaded multiple times, only keep information about its latest fetch +- For code pieces, capture file paths and key changes +- Summarize code content concisely rather than including full snippets +- Remove chat conventions (greetings, offers to help, etc.) +- Only output the summary and nothing else + + + +- Information essential for continuing the conversation effectively +- Technical details and code patterns that maintain context +- User primary goals and requirements +- Adding more details for recent conversations/actions over older ones + + + +## Conversation Summary +- **Topic1**: Summary of what was done to address Topic1 and the final conclusion +- **Topic2**: Summary of what was done to address Topic2 and the final conclusion + +## Files and Code Summary +- **fileA path**: learnings about fileA +- **fileB path**: learnings about fileB +- **codeSnippetA**: learnings from codeSnippetA + +## Key Insights +- **INSIGHT**: Insight1 +- **INSIGHT**: Insight2 + +## Most Recent Topic +**Topic**: the most recent topic being discussed +**Progress**: Key actions taken so far to address the topic +**Tools Used**: +- **toolUsage1**: Summary of what was done in toolUsage1 and ultimate result + +` + +// shortcut constant +export const DEFAULT_MACOS_RUN_SHORTCUT = '⇧ ⌘ ↵' +export const DEFAULT_WINDOW_RUN_SHORTCUT = 'Ctrl + ⇧ + ↵' +export const DEFAULT_LINUX_RUN_SHORTCUT = 'Meta + ⇧ + ↵' +export const DEFAULT_MACOS_STOP_SHORTCUT = '⇧ ⌘ ⌫' +export const DEFAULT_WINDOW_STOP_SHORTCUT = 'Ctrl + ⇧ + ⌫' +export const DEFAULT_LINUX_STOP_SHORTCUT = 'Meta + ⇧ + ⌫' +export const DEFAULT_MACOS_REJECT_SHORTCUT = '⇧ ⌘ R' +export const DEFAULT_WINDOW_REJECT_SHORTCUT = 'Ctrl + ⇧ + R' +export const DEFAULT_LINUX_REJECT_SHORTCUT = 'Meta + ⇧ + R' diff --git a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/modelSelection.test.ts b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/constants/modelSelection.test.ts similarity index 75% rename from server/aws-lsp-codewhisperer/src/language-server/agenticChat/modelSelection.test.ts rename to server/aws-lsp-codewhisperer/src/language-server/agenticChat/constants/modelSelection.test.ts index 7aaa428bd3..0fc768d88e 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/modelSelection.test.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/constants/modelSelection.test.ts @@ -1,19 +1,19 @@ import * as assert from 'assert' -import { modelOptions, modelOptionsForRegion } from './modelSelection' +import { MODEL_OPTIONS, MODEL_OPTIONS_FOR_REGION } from './modelSelection' describe('modelSelection', () => { describe('modelOptions', () => { it('should contain the correct model options', () => { - assert.ok(Array.isArray(modelOptions), 'modelOptions should be an array') - assert.strictEqual(modelOptions.length, 2, 'modelOptions should have 2 items') + assert.ok(Array.isArray(MODEL_OPTIONS), 'modelOptions should be an array') + assert.strictEqual(MODEL_OPTIONS.length, 2, 'modelOptions should have 2 items') // Check that the array contains the expected models - const modelIds = modelOptions.map(model => model.id) + const modelIds = MODEL_OPTIONS.map(model => model.id) assert.ok(modelIds.includes('CLAUDE_SONNET_4_20250514_V1_0'), 'Should include Claude Sonnet 4') assert.ok(modelIds.includes('CLAUDE_3_7_SONNET_20250219_V1_0'), 'Should include Claude Sonnet 3.7') // Check that each model has the required properties - modelOptions.forEach(model => { + MODEL_OPTIONS.forEach(model => { assert.ok('id' in model, 'Model should have id property') assert.ok('name' in model, 'Model should have name property') assert.strictEqual(typeof model.id, 'string', 'Model id should be a string') @@ -21,8 +21,8 @@ describe('modelSelection', () => { }) // Check specific model names - const claudeSonnet4 = modelOptions.find(model => model.id === 'CLAUDE_SONNET_4_20250514_V1_0') - const claudeSonnet37 = modelOptions.find(model => model.id === 'CLAUDE_3_7_SONNET_20250219_V1_0') + const claudeSonnet4 = MODEL_OPTIONS.find(model => model.id === 'CLAUDE_SONNET_4_20250514_V1_0') + const claudeSonnet37 = MODEL_OPTIONS.find(model => model.id === 'CLAUDE_3_7_SONNET_20250219_V1_0') assert.strictEqual(claudeSonnet4?.name, 'Claude Sonnet 4', 'Claude Sonnet 4 should have correct name') assert.strictEqual(claudeSonnet37?.name, 'Claude Sonnet 3.7', 'Claude Sonnet 3.7 should have correct name') @@ -31,8 +31,8 @@ describe('modelSelection', () => { describe('modelOptionsForRegion', () => { it('should provide all models for us-east-1 region', () => { - const usEast1Models = modelOptionsForRegion['us-east-1'] - assert.deepStrictEqual(usEast1Models, modelOptions, 'us-east-1 should have all models') + const usEast1Models = MODEL_OPTIONS_FOR_REGION['us-east-1'] + assert.deepStrictEqual(usEast1Models, MODEL_OPTIONS, 'us-east-1 should have all models') assert.strictEqual(usEast1Models.length, 2, 'us-east-1 should have 2 models') const modelIds = usEast1Models.map(model => model.id) @@ -44,7 +44,7 @@ describe('modelSelection', () => { }) it('should provide limited models for eu-central-1 region', () => { - const euCentral1Models = modelOptionsForRegion['eu-central-1'] + const euCentral1Models = MODEL_OPTIONS_FOR_REGION['eu-central-1'] assert.ok(Array.isArray(euCentral1Models), 'eu-central-1 models should be an array') assert.strictEqual(euCentral1Models.length, 1, 'eu-central-1 should have 1 model') @@ -60,14 +60,14 @@ describe('modelSelection', () => { }) it('should filter out Claude Sonnet 4 for eu-central-1 region', () => { - const euCentral1Models = modelOptionsForRegion['eu-central-1'] + const euCentral1Models = MODEL_OPTIONS_FOR_REGION['eu-central-1'] const claudeSonnet4 = euCentral1Models.find(model => model.id === 'CLAUDE_SONNET_4_20250514_V1_0') assert.strictEqual(claudeSonnet4, undefined, 'Claude Sonnet 4 should be filtered out for eu-central-1') }) it('should fall back to all models for unknown regions', () => { // Test with a region that doesn't exist in the modelOptionsForRegion map - const unknownRegionModels = modelOptionsForRegion['unknown-region'] + const unknownRegionModels = MODEL_OPTIONS_FOR_REGION['unknown-region'] // Should be undefined since the region doesn't exist in the map assert.strictEqual(unknownRegionModels, undefined, 'Unknown region should return undefined') diff --git a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/modelSelection.ts b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/constants/modelSelection.ts similarity index 58% rename from server/aws-lsp-codewhisperer/src/language-server/agenticChat/modelSelection.ts rename to server/aws-lsp-codewhisperer/src/language-server/agenticChat/constants/modelSelection.ts index f44027323a..d7ee53cf75 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/modelSelection.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/constants/modelSelection.ts @@ -9,19 +9,19 @@ type ModelDetails = { label: string } -const modelRecord: Record = { +const MODEL_RECORD: Record = { [BedrockModel.CLAUDE_3_7_SONNET_20250219_V1_0]: { label: 'Claude Sonnet 3.7' }, [BedrockModel.CLAUDE_SONNET_4_20250514_V1_0]: { label: 'Claude Sonnet 4' }, } -export const modelOptions: ListAvailableModelsResult['models'] = Object.entries(modelRecord).map( +export const MODEL_OPTIONS: ListAvailableModelsResult['models'] = Object.entries(MODEL_RECORD).map( ([value, { label }]) => ({ id: value, name: label, }) ) -export const modelOptionsForRegion: Record = { - 'us-east-1': modelOptions, - 'eu-central-1': modelOptions.filter(option => option.id !== BedrockModel.CLAUDE_SONNET_4_20250514_V1_0), +export const MODEL_OPTIONS_FOR_REGION: Record = { + 'us-east-1': MODEL_OPTIONS, + 'eu-central-1': MODEL_OPTIONS.filter(option => option.id !== BedrockModel.CLAUDE_SONNET_4_20250514_V1_0), } diff --git a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/constants/toolConstants.ts b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/constants/toolConstants.ts new file mode 100644 index 0000000000..d4423564bc --- /dev/null +++ b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/constants/toolConstants.ts @@ -0,0 +1,38 @@ +/** + * Constants related to tools used in agenticChatController.ts + * This file centralizes all tool names and related constants to improve code quality and maintainability. + */ + +// File system tools +export const FS_READ = 'fsRead' +export const FS_WRITE = 'fsWrite' +export const FS_REPLACE = 'fsReplace' + +// Directory tools +export const LIST_DIRECTORY = 'listDirectory' + +// Search tools +export const GREP_SEARCH = 'grepSearch' +export const FILE_SEARCH = 'fileSearch' + +// Shell tools +export const EXECUTE_BASH = 'executeBash' + +// Code analysis tools +export const Q_CODE_REVIEW = 'qCodeReview' + +// Tool use button IDs +export const BUTTON_RUN_SHELL_COMMAND = 'run-shell-command' +export const BUTTON_REJECT_SHELL_COMMAND = 'reject-shell-command' +export const BUTTON_REJECT_MCP_TOOL = 'reject-mcp-tool' +export const BUTTON_ALLOW_TOOLS = 'allow-tools' +export const BUTTON_UNDO_CHANGES = 'undo-changes' +export const BUTTON_UNDO_ALL_CHANGES = 'undo-all-changes' +export const BUTTON_STOP_SHELL_COMMAND = 'stop-shell-command' +export const BUTTON_PAIDTIER_UPGRADE_Q_LEARNMORE = 'paidtier-upgrade-q-learnmore' +export const BUTTON_PAIDTIER_UPGRADE_Q = 'paidtier-upgrade-q' + +// Message ID suffixes +export const SUFFIX_PERMISSION = '_permission' +export const SUFFIX_UNDOALL = '_undoall' +export const SUFFIX_EXPLANATION = '_explanation' diff --git a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/context/additionalContextProvider.test.ts b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/context/additionalContextProvider.test.ts index f1f79ce822..6c745f20b3 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/context/additionalContextProvider.test.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/context/additionalContextProvider.test.ts @@ -3,13 +3,14 @@ import * as sinon from 'sinon' import { URI } from 'vscode-uri' import { TestFeatures } from '@aws/language-server-runtimes/testing' import * as assert from 'assert' -import { AdditionalContextPrompt } from 'local-indexing' +import { AdditionalContextPrompt, ContextCommandItem } from 'local-indexing' import { AdditionalContextProvider } from './additionalContextProvider' -import { getUserPromptsDirectory } from './contextUtils' +import { getInitialContextInfo, getUserPromptsDirectory } from './contextUtils' import { LocalProjectContextController } from '../../../shared/localProjectContextController' import { workspaceUtils } from '@aws/lsp-core' import { ChatDatabase } from '../tools/chatDb/chatDb' import { TriggerContext } from './agenticChatTriggerContext' +import { expect } from 'chai' describe('AdditionalContextProvider', () => { let provider: AdditionalContextProvider @@ -17,6 +18,7 @@ describe('AdditionalContextProvider', () => { let chatHistoryDb: ChatDatabase let fsExistsStub: sinon.SinonStub let getContextCommandPromptStub: sinon.SinonStub + let getContextCommandItemsStub: sinon.SinonStub let fsReadDirStub: sinon.SinonStub let localProjectContextControllerInstanceStub: sinon.SinonStub @@ -27,7 +29,8 @@ describe('AdditionalContextProvider', () => { testFeatures.workspace.fs.exists = fsExistsStub testFeatures.workspace.fs.readdir = fsReadDirStub testFeatures.chat.sendPinnedContext = sinon.stub() - getContextCommandPromptStub = sinon.stub() + getContextCommandPromptStub = sinon.stub().returns([]) + getContextCommandItemsStub = sinon.stub().returns([]) chatHistoryDb = { getHistory: sinon.stub().returns([]), searchMessages: sinon.stub().returns([]), @@ -49,6 +52,7 @@ describe('AdditionalContextProvider', () => { provider = new AdditionalContextProvider(testFeatures, chatHistoryDb) localProjectContextControllerInstanceStub = sinon.stub(LocalProjectContextController, 'getInstance').resolves({ getContextCommandPrompt: getContextCommandPromptStub, + getContextCommandItems: getContextCommandItemsStub, } as unknown as LocalProjectContextController) }) @@ -500,6 +504,60 @@ describe('AdditionalContextProvider', () => { ]) }) + it('should update pinned code symbol IDs when they no longer match current index', async () => { + // Mock LocalProjectContextController.getInstance + getContextCommandItemsStub.returns([ + { + id: 'new-symbol-id', + symbol: { + name: 'calculateTotal', + kind: 'Function', + range: { + start: { line: 9, column: 0 }, + end: { line: 19, column: 1 }, + }, + }, + workspaceFolder: '/workspace', + relativePath: 'src/utils.ts', + type: 'file', + }, + ] as ContextCommandItem[]) + + // Create a trigger context + const triggerContext = { + workspaceFolder: { uri: '/workspace', name: 'workspace' }, + contextInfo: getInitialContextInfo(), + } + + // Mock pinned context with an outdated symbol ID + const pinnedContext = [ + { + id: 'old-symbol-id', // This ID no longer exists in the index + command: 'calculateTotal', + label: 'code', + description: `Function, ${path.join('workspace', 'src', 'utils.ts')}`, + route: ['/workspace', '/src/utils.ts'], + pinned: true, + }, + ] + + // Mock chatDb.getPinnedContext to return our pinned context + ;(chatHistoryDb.getPinnedContext as sinon.SinonStub).returns(pinnedContext) + + // Call getAdditionalContext + await provider.getAdditionalContext(triggerContext, 'tab1') + + // Verify that LocalProjectContextController.getInstance was called + sinon.assert.called(localProjectContextControllerInstanceStub) + + // Verify that getContextCommandPrompt was called with updated ID + const contextCommandPromptCall = getContextCommandPromptStub + .getCalls() + .find(call => call.args[0].some((item: ContextCommandItem) => item.id === 'new-symbol-id')) + + expect(contextCommandPromptCall).to.exist + }) + describe('convertPinnedContextToChatMessages', () => { it('should return empty array for no pinned context', async () => { const result = await provider.convertPinnedContextToChatMessages() @@ -531,7 +589,7 @@ describe('AdditionalContextProvider', () => { assert.strictEqual(result.length, 2) assert.strictEqual(result[0].userInputMessage?.content?.includes(''), true) assert.strictEqual(result[0].userInputMessage?.content?.includes('Follow this rule'), true) - assert.strictEqual(result[1].assistantResponseMessage?.content, '') + assert.strictEqual(result[1].assistantResponseMessage?.content, 'Working...') }) it('should convert file context to fileContext XML', async () => { @@ -615,4 +673,78 @@ describe('AdditionalContextProvider', () => { }) }) }) + + describe('convertRulesToRulesFolders', () => { + it('should convert workspace rules to folders structure', () => { + sinon.stub(workspaceUtils, 'getWorkspaceFolderPaths').returns(['/workspace']) + + // Configure the getRules stub to return a specific value + ;(chatHistoryDb.getRules as sinon.SinonStub).returns({ + folders: {}, // Empty folders state (default all active) + rules: {}, // Empty rules state (default all active) + }) + + const workspaceRules = [ + { + workspaceFolder: '/workspace', + type: 'file' as any, + relativePath: '.amazonq/rules/rule1.md', + id: '/workspace/.amazonq/rules/rule1.md', + }, + { + workspaceFolder: '/workspace', + type: 'file' as any, + relativePath: '.amazonq/rules/rule2.md', + id: '/workspace/.amazonq/rules/rule2.md', + }, + ] + + const result = provider.convertRulesToRulesFolders(workspaceRules, 'tab1') + + assert.strictEqual(result.length, 1) + assert.strictEqual(result[0].folderName, '.amazonq/rules') + assert.strictEqual(result[0].active, true) + assert.strictEqual(result[0].rules.length, 2) + assert.strictEqual(result[0].rules[0].name, 'rule1') + assert.strictEqual(result[0].rules[1].name, 'rule2') + }) + + it('should handle rules with explicit active/inactive states', () => { + sinon.stub(workspaceUtils, 'getWorkspaceFolderPaths').returns(['/workspace']) + + // Configure the getRules stub to return specific active/inactive states + ;(chatHistoryDb.getRules as sinon.SinonStub).returns({ + folders: { + '.amazonq/rules': false, // This folder is explicitly inactive + }, + rules: { + '/workspace/.amazonq/rules/rule1.md': true, // This rule is explicitly active + '/workspace/.amazonq/rules/rule2.md': false, // This rule is explicitly inactive + }, + }) + + const workspaceRules = [ + { + workspaceFolder: '/workspace', + type: 'file' as any, + relativePath: '.amazonq/rules/rule1.md', + id: '/workspace/.amazonq/rules/rule1.md', + }, + { + workspaceFolder: '/workspace', + type: 'file' as any, + relativePath: '.amazonq/rules/rule2.md', + id: '/workspace/.amazonq/rules/rule2.md', + }, + ] + + const result = provider.convertRulesToRulesFolders(workspaceRules, 'tab1') + + assert.strictEqual(result.length, 1) + assert.strictEqual(result[0].folderName, '.amazonq/rules') + assert.strictEqual(result[0].active, 'indeterminate') // Should be indeterminate since rules have mixed states + assert.strictEqual(result[0].rules[0].active, true) // Explicitly set to true + assert.strictEqual(result[0].rules[1].active, false) // Explicitly set to false + }) + }) }) diff --git a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/context/additionalContextProvider.ts b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/context/additionalContextProvider.ts index 362b61c6ca..b4f6d9964e 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/context/additionalContextProvider.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/context/additionalContextProvider.ts @@ -25,13 +25,15 @@ import { getUserPromptsDirectory, getInitialContextInfo, promptFileExtension, + getCodeSymbolDescription, } from './contextUtils' import { LocalProjectContextController } from '../../../shared/localProjectContextController' import { Features } from '../../types' import { ChatDatabase } from '../tools/chatDb/chatDb' import { ChatMessage, ImageBlock, ImageFormat } from '@amzn/codewhisperer-streaming' import { getRelativePathWithUri, getRelativePathWithWorkspaceFolder } from '../../workspaceContext/util' -import { isSupportedImageExtension } from '../../../shared/imageVerification' +import { isSupportedImageExtension, MAX_IMAGE_CONTEXT_COUNT } from '../../../shared/imageVerification' +import { mergeFileLists } from './contextUtils' export const ACTIVE_EDITOR_CONTEXT_ID = 'active-editor' @@ -176,7 +178,8 @@ export class AdditionalContextProvider { if (prompt.filePath.endsWith(promptFileExtension)) { if ( pathUtils.isInDirectory(path.join('.amazonq', 'rules'), prompt.relativePath) || - path.basename(prompt.relativePath) === 'AmazonQ.md' + path.basename(prompt.relativePath) === 'AmazonQ.md' || + path.basename(prompt.relativePath) === 'README.md' ) { return 'rule' } else if (pathUtils.isInDirectory(getUserPromptsDirectory(), prompt.filePath)) { @@ -239,6 +242,45 @@ export class AdditionalContextProvider { if (contextInfo.some(item => item.id === '@workspace')) { triggerContext.hasWorkspace = true } + // Handle code symbol ID mismatches between indexing sessions + // When a workspace is re-indexed, code symbols receive new IDs + // If a pinned symbol's ID is no longer found in the current index: + // 1. Extract the symbol's name, filepath, and kind (without line numbers) + // 2. Search for a matching symbol in the current index with the same attributes + // 3. Update the pinned symbol's ID to reference the newly indexed equivalent + try { + let pinnedCodeItems = contextInfo.filter(item => item.pinned).filter(item => item.label === 'code') + if (pinnedCodeItems.length > 0) { + const localProjectContextController = await LocalProjectContextController.getInstance() + + const availableContextItems = await localProjectContextController.getContextCommandItems() + const availableCodeContextItems = availableContextItems.filter(item => item.symbol) + for (const command of pinnedCodeItems) { + // First check if the pinned symbol's ID still exists in the current index + let matchedId = availableCodeContextItems.find(item => item.id === command.id) + if (!matchedId) { + // If ID no longer exists, try to find a matching symbol by name and description + // Remove line numbers from description for comparison + const pinnedItemDescription = command.description?.replace(/,\s*L\d+[-]\d+$/, '') + if (pinnedItemDescription) { + const matchedDescription = availableCodeContextItems.find(availableItem => { + let availableItemDescription = getCodeSymbolDescription(availableItem, false) + return ( + command.command === availableItem.symbol?.name && + availableItemDescription === pinnedItemDescription + ) + }) + + if (matchedDescription) { + command.id = matchedDescription.id + } + } + } + } + } + } catch { + // Do nothing if local project indexing fails + } const contextCounts = getInitialContextInfo() @@ -401,36 +443,81 @@ export class AdditionalContextProvider { } /** - * Extracts image blocks from a context array, reading image files and returning them as ImageBlock objects. - * Optionally, appends pinned image context from chatDb for the given tabId. - * @param contextArr The context array to extract image blocks from. - * @param tabId Optional tabId to fetch pinned image context from chatDb. + * Returns merged image context from params.context and DB, deduplicated and limited to 20 items. */ - public async getImageBlocksFromContext(contextArr?: ContextCommand[], tabId?: string): Promise { - const imageBlocks: ImageBlock[] = [] - - // 1. Start with the provided contextArr or an empty array + private getMergedImageContext(contextArr?: ContextCommand[], tabId?: string): ContextCommand[] { let mergedContext: ContextCommand[] = contextArr ? [...contextArr] : [] - - // 2. If tabId is provided, append pinned image context from chatDb (avoid duplicates) if (tabId) { const pinnedContext = this.chatDb.getPinnedContext(tabId) for (const pc of pinnedContext) { - if (pc.label === 'image' && !mergedContext.some(c => c.label === 'image' && c.id === pc.id)) { + if ( + pc.label === 'image' && + !mergedContext.some(c => c.label === 'image' && c.description === pc.description) + ) { mergedContext.push(pc) } } } + return mergedContext.slice(0, MAX_IMAGE_CONTEXT_COUNT) + } + + public async appendCustomContextToTriggerContext( + triggerContext: TriggerContext, + contextArr?: ContextCommand[], + tabId?: string + ) { + const mergedContext = this.getMergedImageContext(contextArr, tabId) + if (mergedContext.length > 0) { + const imageFilePaths: string[] = [] + const imageDetails: Record = {} + + for (const contextCommand of mergedContext) { + if (contextCommand.label === 'image' && contextCommand.route && contextCommand.route.length > 0) { + let filePath = contextCommand.route[0] + imageFilePaths.push(filePath) + imageDetails[filePath] = { + description: contextCommand.description || filePath, + lineRanges: [{ first: -1, second: -1 }], + } + } + } + + if (imageFilePaths.length > 0) { + const imageFileList: FileList = { + filePaths: imageFilePaths, + details: imageDetails, + } + if (triggerContext.documentReference) { + triggerContext.documentReference = mergeFileLists(triggerContext.documentReference, imageFileList) + } else { + triggerContext.documentReference = imageFileList + } + } + } + } + + /** + * Extracts image blocks from a context array, reading image files and returning them as ImageBlock objects. + * Optionally, appends pinned image context from chatDb for the given tabId. + * @param contextArr The context array to extract image blocks from. + * @param tabId Optional tabId to fetch pinned image context from chatDb. + */ + public async getImageBlocksFromContext(contextArr?: ContextCommand[], tabId?: string): Promise { + const imageBlocks: ImageBlock[] = [] - // 3. Limit mergedContext to 20 items - mergedContext = mergedContext.slice(0, 20) + // Use the helper to get merged and deduplicated image context + const mergedContext: ContextCommand[] = this.getMergedImageContext(contextArr, tabId) - // 4. Process all image contexts in mergedContext + // Process all image contexts in mergedContext for (const context of mergedContext) { if (context.label === 'image' && context.route && context.route.length > 0) { try { const imagePath = context.route[0] - const format = imagePath.split('.').pop()?.toLowerCase() || '' + let format = imagePath.split('.').pop()?.toLowerCase() || '' + // Both .jpg and .jpeg files use the exact same JPEG compression algorithm and file structure. + if (format === 'jpg') { + format = 'jpeg' + } if (!isSupportedImageExtension(format)) { this.features.logging.warn(`Unsupported image format: ${format}`) continue @@ -527,7 +614,6 @@ export class AdditionalContextProvider { } onPinnedContextAdd(params: PinnedContextParams) { - // add to this.#pinnedContext if that id isnt already in there let itemToAdd = params.contextCommandGroups[0]?.commands?.[0] if (itemToAdd) { this.chatDb.addPinnedContext(params.tabId, itemToAdd) @@ -543,7 +629,7 @@ export class AdditionalContextProvider { this.sendPinnedContext(params.tabId) } - private convertRulesToRulesFolders(workspaceRules: ContextCommandItem[], tabId: string): RulesFolder[] { + convertRulesToRulesFolders(workspaceRules: ContextCommandItem[], tabId: string): RulesFolder[] { // Check if there's only one workspace folder const workspaceFolders = workspaceUtils.getWorkspaceFolderPaths(this.features.workspace) const isSingleWorkspace = workspaceFolders.length <= 1 @@ -570,7 +656,11 @@ export class AdditionalContextProvider { // Root files will use the workspace folder name // Subdir files will use workspace folder name + subdir const workspaceFolderName = path.basename(rule.workspaceFolder) - folderName = dirPath === '.' ? workspaceFolderName : `${workspaceFolderName}/${dirPath}` + folderName = + dirPath === '.' + ? workspaceFolderName + : // Escape backslashes since folderName is displayed in innerHTML + path.join(workspaceFolderName, dirPath).replace(/\\/g, '\\\\') } // Get or create the folder's rule list @@ -714,7 +804,7 @@ export class AdditionalContextProvider { // Create fake assistant response const assistantMessage: ChatMessage = { assistantResponseMessage: { - content: '', + content: 'Working...', }, } diff --git a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/context/agenticChatTriggerContext.ts b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/context/agenticChatTriggerContext.ts index 01265b963d..2671cfadd0 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/context/agenticChatTriggerContext.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/context/agenticChatTriggerContext.ts @@ -37,6 +37,7 @@ import { ContextInfo, mergeFileLists, mergeRelevantTextDocuments } from './conte import { WorkspaceFolderManager } from '../../workspaceContext/workspaceFolderManager' import { getRelativePathWithWorkspaceFolder } from '../../workspaceContext/util' import { ChatCommandInput } from '../../../shared/streamingClientService' +import { COMPACTION_PROMPT } from '../constants/constants' export interface TriggerContext extends Partial { userIntent?: UserIntent @@ -106,6 +107,43 @@ export class AgenticChatTriggerContext { } } + /** + * Creates chat parameters from trigger context for sending to the backend + * @param profileArn Optional ARN for profile + * @param tools Optional Bedrock tools + * @param modelId Optional model ID + * @param origin Optional origin + * @returns ChatCommandInput - which is either SendMessageInput or GenerateAssistantResponseInput + */ + getCompactionChatCommandInput( + profileArn?: string, + tools: BedrockTools = [], + modelId?: string, + origin?: Origin + ): ChatCommandInput { + const data: ChatCommandInput = { + conversationState: { + chatTriggerType: ChatTriggerType.MANUAL, + currentMessage: { + userInputMessage: { + content: COMPACTION_PROMPT, + userInputMessageContext: { + tools, + envState: this.#mapPlatformToEnvState(process.platform), + }, + userIntent: undefined, + origin: origin ? origin : 'IDE', + modelId, + }, + }, + customizationArn: undefined, + }, + profileArn, + } + + return data + } + /** * Creates chat parameters from trigger context for sending to the backend * @param params Chat parameters or inline chat parameters @@ -128,7 +166,6 @@ export class AgenticChatTriggerContext { customizationArn?: string, chatResultStream?: AgenticChatResultStream, profileArn?: string, - history: ChatMessage[] = [], tools: BedrockTools = [], additionalContent?: AdditionalContentEntryAddition[], modelId?: string, @@ -254,7 +291,6 @@ export class AgenticChatTriggerContext { }, }, customizationArn, - history, }, profileArn, } diff --git a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/context/agenticChatTriggerContexts.test.ts b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/context/agenticChatTriggerContexts.test.ts index 0d8d1569fe..eb4fa7e8a3 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/context/agenticChatTriggerContexts.test.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/context/agenticChatTriggerContexts.test.ts @@ -143,7 +143,6 @@ describe('AgenticChatTriggerContext', () => { undefined, undefined, [], - [], undefined, modelId ) diff --git a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/context/contextCommandsProvider.ts b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/context/contextCommandsProvider.ts index 2e1a5e6405..632360cd67 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/context/contextCommandsProvider.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/context/contextCommandsProvider.ts @@ -3,7 +3,7 @@ import { FSWatcher, watch } from 'chokidar' import { ContextCommand, ContextCommandGroup } from '@aws/language-server-runtimes/protocol' import { Disposable } from 'vscode-languageclient/node' import { Chat, Logging, Lsp, Workspace } from '@aws/language-server-runtimes/server-interface' -import { getUserPromptsDirectory, promptFileExtension } from './contextUtils' +import { getCodeSymbolDescription, getUserPromptsDirectory, promptFileExtension } from './contextUtils' import { ContextCommandItem } from 'local-indexing' import { LocalProjectContextController } from '../../../shared/localProjectContextController' import { URI } from 'vscode-uri' @@ -148,7 +148,7 @@ export class ContextCommandsProvider implements Disposable { const imageCmdGroup: ContextCommand = { command: 'Image', - description: 'Add a image to context', + description: 'Add image to context', icon: 'image', placeholder: 'Select an image file', } @@ -193,7 +193,7 @@ export class ContextCommandsProvider implements Disposable { codeCmds.push({ ...baseItem, command: item.symbol.name, - description: `${item.symbol.kind}, ${path.join(wsFolderName, item.relativePath)}, L${item.symbol.range.start.line + 1}-${item.symbol.range.end.line + 1}`, + description: getCodeSymbolDescription(item, true), label: 'code', icon: 'code-block', }) diff --git a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/context/contextUtils.test.ts b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/context/contextUtils.test.ts index 06cdbb71dc..b3c0a339e3 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/context/contextUtils.test.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/context/contextUtils.test.ts @@ -8,11 +8,13 @@ import { promptFileExtension, mergeRelevantTextDocuments, mergeFileLists, + getCodeSymbolDescription, } from './contextUtils' import * as pathUtils from '@aws/lsp-core/out/util/path' import { sanitizeFilename } from '@aws/lsp-core/out/util/text' import { FileList } from '@aws/language-server-runtimes/server-interface' import { RelevantTextDocumentAddition } from './agenticChatTriggerContext' +import { ContextCommandItem } from 'local-indexing' describe('contextUtils', () => { let getUserHomeDirStub: sinon.SinonStub @@ -331,4 +333,99 @@ describe('contextUtils', () => { expect(result.details?.['file.js'].lineRanges).to.deep.equal([{ first: 1, second: 5 }]) }) }) + + describe('getCodeSymbolDescription', () => { + it('should return empty string when no symbol exists', () => { + const item = { + workspaceFolder: '/workspace', + type: 'file', + relativePath: 'src/file.ts', + id: 'id1', + // No symbol property + } as ContextCommandItem + + const result = getCodeSymbolDescription(item) + expect(result).to.equal('') + }) + + it('should format description without line numbers', () => { + const item = { + workspaceFolder: '/workspace', + type: 'file', + relativePath: 'src/utils.ts', + id: 'id1', + symbol: { + kind: 'Function', + name: 'myFunction', + range: { + start: { line: 9, column: 0 }, + end: { line: 19, column: 1 }, + }, + }, + } as ContextCommandItem + + const result = getCodeSymbolDescription(item, false) + expect(result).to.equal(`Function, ${path.join('workspace', 'src', 'utils.ts')}`) + }) + + it('should format description with line numbers', () => { + const item = { + workspaceFolder: '/workspace', + type: 'file', + relativePath: 'src/utils.ts', + id: 'id1', + symbol: { + kind: 'Class', + name: 'MyClass', + range: { + start: { line: 9, column: 0 }, + end: { line: 19, column: 1 }, + }, + }, + } as ContextCommandItem + + const result = getCodeSymbolDescription(item, true) + expect(result).to.equal(`Class, ${path.join('workspace', 'src', 'utils.ts')}, L10-20`) + }) + + it('should handle different workspace folder names', () => { + const item = { + workspaceFolder: '/projects/my-project', + type: 'file', + relativePath: 'src/utils.ts', + id: 'id1', + symbol: { + kind: 'Method', + name: 'myMethod', + range: { + start: { line: 4, column: 2 }, + end: { line: 7, column: 3 }, + }, + }, + } as ContextCommandItem + + const result = getCodeSymbolDescription(item, true) + expect(result).to.equal(`Method, ${path.join('my-project', 'src', 'utils.ts')}, L5-8`) + }) + + it('should handle different symbol kinds', () => { + const item = { + workspaceFolder: '/workspace', + type: 'file', + relativePath: 'src/models.ts', + id: 'id1', + symbol: { + kind: 'Interface', + name: 'MyInterface', + range: { + start: { line: 0, column: 0 }, + end: { line: 5, column: 1 }, + }, + }, + } as ContextCommandItem + + const result = getCodeSymbolDescription(item, false) + expect(result).to.equal(`Interface, ${path.join('workspace', 'src', 'models.ts')}`) + }) + }) }) diff --git a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/context/contextUtils.ts b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/context/contextUtils.ts index 927cd737d6..6fa6cee098 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/context/contextUtils.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/context/contextUtils.ts @@ -3,6 +3,7 @@ import * as path from 'path' import { sanitizeFilename } from '@aws/lsp-core/out/util/text' import { RelevantTextDocumentAddition } from './agenticChatTriggerContext' import { FileDetails, FileList } from '@aws/language-server-runtimes/server-interface' +import { ContextCommandItem } from 'local-indexing' export interface ContextInfo { pinnedContextCount: { fileContextCount: number @@ -226,3 +227,33 @@ export function mergeFileLists(fileList1: FileList, fileList2: FileList): FileLi details: mergedDetails, } } + +/** + * Generates a description string for a code symbol with optional line numbers. + * + * @param item - The ContextCommandItem containing symbol and workspace information + * @param includeLineNumbers - Whether to include line number range in the description + * @returns A formatted string containing the symbol kind, path and optionally line numbers, + * or empty string if no symbol exists + * @example + * // Without line numbers: + * // "Function, myProject/src/utils.ts" + * + * // With line numbers: + * // "Function, myProject/src/utils.ts, L10-L20" + */ +export function getCodeSymbolDescription(item: ContextCommandItem, includeLineNumbers?: boolean): string { + const wsFolderName = path.basename(item.workspaceFolder) + + if (item.symbol) { + const symbolKind = item.symbol.kind + const symbolPath = path.join(wsFolderName, item.relativePath) + const symbolLineNumbers = `L${item.symbol.range.start.line + 1}-${item.symbol.range.end.line + 1}` + const parts = [symbolKind, symbolPath] + if (includeLineNumbers) { + parts.push(symbolLineNumbers) + } + return parts.join(', ') + } + return '' +} diff --git a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/qAgenticChatServer.ts b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/qAgenticChatServer.ts index f06ff4623f..6b334f86a1 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/qAgenticChatServer.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/qAgenticChatServer.ts @@ -6,17 +6,16 @@ import { InitializeParams, Server } from '@aws/language-server-runtimes/server-interface' import { AgenticChatController } from './agenticChatController' import { ChatSessionManagementService } from '../chat/chatSessionManagementService' -import { CLEAR_QUICK_ACTION, HELP_QUICK_ACTION } from '../chat/quickActions' +import { CLEAR_QUICK_ACTION, COMPACT_QUICK_ACTION, HELP_QUICK_ACTION } from '../chat/quickActions' import { TelemetryService } from '../../shared/telemetry/telemetryService' import { makeUserContextObject } from '../../shared/telemetryUtils' -import { AmazonQTokenServiceManager } from '../../shared/amazonQServiceManager/AmazonQTokenServiceManager' import { AmazonQBaseServiceManager } from '../../shared/amazonQServiceManager/BaseAmazonQServiceManager' import { getOrThrowBaseTokenServiceManager } from '../../shared/amazonQServiceManager/AmazonQTokenServiceManager' import { getOrThrowBaseIAMServiceManager } from '../../shared/amazonQServiceManager/AmazonQIAMServiceManager' import { AmazonQWorkspaceConfig } from '../../shared/amazonQServiceManager/configurationUtils' import { TabBarController } from './tabBarController' import { AmazonQServiceInitializationError } from '../../shared/amazonQServiceManager/errors' -import { isUsingIAMAuth, safeGet, enabledModelSelection } from '../../shared/utils' +import { isUsingIAMAuth, safeGet } from '../../shared/utils' import { enabledMCP } from './tools/mcp/mcpUtils' import { QClientCapabilities } from '../configuration/qConfigurationServer' @@ -55,7 +54,7 @@ export const QAgenticChatServer = quickActions: { quickActionsCommandGroups: [ { - commands: [HELP_QUICK_ACTION, CLEAR_QUICK_ACTION], + commands: [HELP_QUICK_ACTION, CLEAR_QUICK_ACTION, COMPACT_QUICK_ACTION], }, ], }, @@ -91,7 +90,8 @@ export const QAgenticChatServer = ) ) - telemetryService.updateUserContext(makeUserContextObject(clientParams, runtime.platform, 'CHAT')) + const userContext = makeUserContextObject(clientParams, runtime.platform, 'CHAT') + telemetryService.updateUserContext(userContext) chatController = new AgenticChatController( chatSessionManagementService, @@ -100,6 +100,10 @@ export const QAgenticChatServer = amazonQServiceManager ) + if (!isUsingIAMAuth()) { + chatController.scheduleABTestingFetching(userContext) + } + await amazonQServiceManager.addDidChangeConfigurationListener(updateConfigurationHandler) }) diff --git a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/chatDb/chatDb.test.ts b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/chatDb/chatDb.test.ts index d4799a42c9..23ef53ff77 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/chatDb/chatDb.test.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/chatDb/chatDb.test.ts @@ -11,6 +11,7 @@ import { Message } from './util' import { ChatMessage, ToolResultStatus } from '@amzn/codewhisperer-streaming' import * as fs from 'fs' import * as util from './util' +import { sleep } from '@aws/lsp-core/out/util/timeoutUtils' describe('ChatDatabase', () => { let mockFeatures: Features @@ -64,6 +65,32 @@ describe('ChatDatabase', () => { sinon.restore() }) + describe('replaceWithSummary', () => { + it('should create a new history with summary message', async () => { + await chatDb.databaseInitialize(0) + const tabId = 'tab-1' + const tabType = 'cwc' + const conversationId = 'conv-1' + const summaryMessage = { + body: 'This is a summary of the conversation', + type: 'prompt' as any, + timestamp: new Date(), + } + + // Call the method + chatDb.replaceWithSummary(tabId, tabType, conversationId, summaryMessage) + + // Verify the messages array contains the summary and a dummy response + const messages = chatDb.getMessages(tabId, 250) + assert.strictEqual(messages.length, 2) + assert.strictEqual(messages[0].body, summaryMessage.body) + assert.strictEqual(messages[0].type, 'prompt') + assert.strictEqual(messages[1].body, 'Working...') + assert.strictEqual(messages[1].type, 'answer') + assert.strictEqual(messages[1].shouldDisplayMessage, false) + }) + }) + describe('ensureValidMessageSequence', () => { it('should preserve valid alternating sequence', () => { const messages: Message[] = [ @@ -431,6 +458,59 @@ describe('ChatDatabase', () => { }) }) + describe('calculateNewMessageCharacterCount', () => { + it('should calculate character count for new message and pinned context', () => { + const newUserMessage = { + userInputMessage: { + content: 'Test message', + userInputMessageContext: {}, + }, + } as ChatMessage + + const pinnedContextMessages = [ + { + userInputMessage: { + content: 'Pinned context 1', + }, + }, + { + assistantResponseMessage: { + content: 'Pinned response 1', + }, + }, + ] + + // Stub the calculateMessagesCharacterCount method + const calculateMessagesCharacterCountStub = sinon.stub(chatDb, 'calculateMessagesCharacterCount') + calculateMessagesCharacterCountStub.onFirstCall().returns(11) // 'Test message' + calculateMessagesCharacterCountStub.onSecondCall().returns(30) // Pinned context messages + + // Stub the calculateToolSpecCharacterCount method + const calculateToolSpecCharacterCountStub = sinon.stub(chatDb as any, 'calculateToolSpecCharacterCount') + calculateToolSpecCharacterCountStub.returns(50) // Tool spec count + + const result = chatDb.calculateNewMessageCharacterCount(newUserMessage, pinnedContextMessages) + + // Verify the result is the sum of all character counts + assert.strictEqual(result, 91) // 11 + 30 + 50 + + // Verify the methods were called with correct arguments + sinon.assert.calledWith(calculateMessagesCharacterCountStub.firstCall, [ + { + body: 'Test message', + type: 'prompt', + userIntent: undefined, + origin: 'IDE', + userInputMessageContext: {}, + }, + ]) + + // Clean up + calculateMessagesCharacterCountStub.restore() + calculateToolSpecCharacterCountStub.restore() + }) + }) + describe('getWorkspaceIdentifier', () => { const MOCK_MD5_HASH = '5bc032692b81700eb516f317861fbf32' const MOCK_SHA256_HASH = 'bb6b72d3eab82acaabbda8ca6c85658b83e178bb57760913ccdd938bbeaede9f' @@ -562,3 +642,6 @@ describe('ChatDatabase', () => { }) }) }) +function uuid(): `${string}-${string}-${string}-${string}-${string}` { + throw new Error('Function not implemented.') +} diff --git a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/chatDb/chatDb.ts b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/chatDb/chatDb.ts index f1c140ec8f..59b948d7c1 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/chatDb/chatDb.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/chatDb/chatDb.ts @@ -22,6 +22,7 @@ import { getChatDbNameFromWorkspaceId, getSha256WorkspaceId, getMd5WorkspaceId, + MessagesWithCharacterCount, } from './util' import * as crypto from 'crypto' import * as path from 'path' @@ -510,14 +511,20 @@ export class ChatDatabase { let historyId = this.#historyIdMapping.get(tabId) if (!historyId) { - historyId = crypto.randomUUID() - this.#features.logging.log(`Creating new historyId=${historyId} for tabId=${tabId}`) - this.setHistoryIdMapping(tabId, historyId) + historyId = this.createHistoryId(tabId) } return historyId } + createHistoryId(tabId: string) { + const historyId = crypto.randomUUID() + this.#features.logging.log(`Creating new historyId=${historyId} for tabId=${tabId}`) + this.setHistoryIdMapping(tabId, historyId) + + return historyId + } + /** * Adds a message to a conversation within a specified tab. * @@ -569,6 +576,63 @@ export class ChatDatabase { } } + /** + * Replace history with summary/dummyResponse pair within a specified tab. + * + * This method manages chat messages by creating a new history with compacted summary and dummy response pairs + */ + replaceWithSummary(tabId: string, tabType: TabType, conversationId: string, message: Message) { + if (this.isInitialized()) { + const clientType = this.#features.lsp.getClientInitializeParams()?.clientInfo?.name || 'unknown' + const tabCollection = this.#db.getCollection(TabCollection) + + this.#features.logging.log( + `Replace history with summary: tabId=${tabId}, tabType=${tabType}, conversationId=${conversationId}` + ) + + const oldHistoryId = this.getOrCreateHistoryId(tabId) + // create a new historyId to start fresh + const historyId = this.createHistoryId(tabId) + + const tabData = historyId ? tabCollection.findOne({ historyId }) : undefined + const tabTitle = + (message.type === 'prompt' && message.shouldDisplayMessage !== false && message.body.trim().length > 0 + ? message.body + : tabData?.title) || 'Amazon Q Chat' + message = this.formatChatHistoryMessage(message) + this.#features.logging.log(`Overriding tab with new historyId=${historyId}`) + tabCollection.insert({ + historyId, + updatedAt: new Date(), + isOpen: true, + tabType: tabType, + title: tabTitle, + conversations: [ + { + conversationId, + clientType, + updatedAt: new Date(), + messages: [ + // summary + message, + // dummy response + { + body: 'Working...', + type: 'answer', + shouldDisplayMessage: false, + timestamp: new Date(), + }, + ], + }, + ], + }) + + if (oldHistoryId) { + tabCollection.findAndRemove({ historyId: oldHistoryId }) + } + } + } + formatChatHistoryMessage(message: Message): Message { if (message.type === ('prompt' as ChatItemType)) { let hasToolResults = false @@ -596,9 +660,15 @@ export class ChatDatabase { * 3. The toolUse and toolResult relationship is valid * 4. The history character length is <= MaxConversationHistoryCharacters - newUserMessageCharacterCount. Oldest messages are dropped. */ - fixAndGetHistory(tabId: string, newUserMessage: ChatMessage, pinnedContextMessages: ChatMessage[]) { + fixAndGetHistory( + tabId: string, + newUserMessage: ChatMessage, + pinnedContextMessages: ChatMessage[], + newUserInputCount?: number + ): MessagesWithCharacterCount { + let messagesWithCount: MessagesWithCharacterCount = { messages: [], count: 0 } if (!this.isInitialized()) { - return [] + return messagesWithCount } this.#features.logging.info(`Fixing history: tabId=${tabId}`) @@ -612,10 +682,14 @@ export class ChatDatabase { // 3. Fix new user prompt: Ensure lastMessage in history toolUse and newMessage toolResult relationship is valid this.validateAndFixNewMessageToolResults(allMessages, newUserMessage) + if (!newUserInputCount) { + newUserInputCount = this.calculateNewMessageCharacterCount(newUserMessage, pinnedContextMessages) + } + // 4. NOTE: Keep this trimming logic at the end of the preprocess. // Make sure max characters ≤ remaining Character Budget, must be put at the end of preprocessing - allMessages = this.trimMessagesToMaxLength(allMessages, newUserMessage, pinnedContextMessages) - + messagesWithCount = this.trimMessagesToMaxLength(allMessages, newUserInputCount) + allMessages = messagesWithCount.messages // Edge case: If the history is empty and the next message contains tool results, then we have to just abandon them. if ( allMessages.length === 0 && @@ -630,10 +704,13 @@ export class ChatDatabase { // Prepend pinned context fake message pair to beginning of history if (pinnedContextMessages.length === 2) { - allMessages = [...pinnedContextMessages.map(msg => chatMessageToMessage(msg)), ...allMessages] + messagesWithCount.messages = [ + ...pinnedContextMessages.map(msg => chatMessageToMessage(msg)), + ...allMessages, + ] } - return allMessages + return messagesWithCount } /** @@ -662,25 +739,11 @@ export class ChatDatabase { return !!ctx && (!ctx.toolResults || ctx.toolResults.length === 0) && message.body !== '' } - private trimMessagesToMaxLength( - messages: Message[], - newUserMessage: ChatMessage, - pinnedContextMessages: ChatMessage[] - ): Message[] { - let totalCharacters = this.calculateMessagesCharacterCount(messages) - this.#features.logging.debug(`Current history characters: ${totalCharacters}`) - const currentUserInputCharacterCount = this.calculateMessagesCharacterCount([ - chatMessageToMessage(newUserMessage), - ...pinnedContextMessages.map(msg => chatMessageToMessage(msg)), - ]) - const currentInputToolSpecCount = this.calculateToolSpecCharacterCount(newUserMessage) - const currentUserInputCount = currentUserInputCharacterCount + currentInputToolSpecCount - this.#features.logging.debug( - `Current user message characters input: ${currentUserInputCharacterCount} + toolSpec: ${currentInputToolSpecCount}` - ) - const maxHistoryCharacterSize = Math.max(0, MaxOverallCharacters - currentUserInputCount) + private trimMessagesToMaxLength(messages: Message[], newUserInputCount: number): MessagesWithCharacterCount { + let historyCharacterCount = this.calculateMessagesCharacterCount(messages) + const maxHistoryCharacterSize = Math.max(0, MaxOverallCharacters - newUserInputCount) this.#features.logging.debug(`Current remaining character budget: ${maxHistoryCharacterSize}`) - while (totalCharacters > maxHistoryCharacterSize && messages.length > 2) { + while (historyCharacterCount > maxHistoryCharacterSize && messages.length > 2) { // Find the next valid user message to start from const indexToTrim = this.findIndexToTrim(messages) if (indexToTrim !== undefined && indexToTrim > 0) { @@ -692,12 +755,14 @@ export class ChatDatabase { this.#features.logging.debug( 'Could not find a valid point to trim, reset history to reduce character count' ) - return [] + return { messages: [], count: 0 } } - totalCharacters = this.calculateMessagesCharacterCount(messages) - this.#features.logging.debug(`Current history characters: ${totalCharacters}`) + historyCharacterCount = this.calculateMessagesCharacterCount(messages) + } + return { + messages, + count: historyCharacterCount, } - return messages } private calculateToolSpecCharacterCount(currentMessage: ChatMessage): number { @@ -714,17 +779,36 @@ export class ChatDatabase { return count } - private calculateMessagesCharacterCount(allMessages: Message[]): number { - let count = 0 + calculateNewMessageCharacterCount(newUserMessage: ChatMessage, pinnedContextMessages: ChatMessage[]): number { + const currentUserInputCharacterCount = this.calculateMessagesCharacterCount([ + chatMessageToMessage(newUserMessage), + ]) + const pinnedContextCount = this.calculateMessagesCharacterCount([ + ...pinnedContextMessages.map(msg => chatMessageToMessage(msg)), + ]) + const currentInputToolSpecCount = this.calculateToolSpecCharacterCount(newUserMessage) + const totalCount = currentUserInputCharacterCount + currentInputToolSpecCount + pinnedContextCount + this.#features.logging.debug( + `Current user message characters input: ${currentUserInputCharacterCount} + toolSpec: ${currentInputToolSpecCount} + pinnedContext: ${pinnedContextCount} = total: ${totalCount}` + ) + return totalCount + } + + calculateMessagesCharacterCount(allMessages: Message[]): number { + let bodyCount = 0 + let toolUsesCount = 0 + let toolResultsCount = 0 + let editorStateCount = 0 + for (const message of allMessages) { // Count characters of all message text - count += message.body.length + bodyCount += message.body.length // Count characters in tool uses if (message.toolUses) { try { for (const toolUse of message.toolUses) { - count += JSON.stringify(toolUse).length + toolUsesCount += JSON.stringify(toolUse).length } } catch (e) { this.#features.logging.error(`Error counting toolUses: ${String(e)}`) @@ -734,7 +818,7 @@ export class ChatDatabase { if (message.userInputMessageContext?.toolResults) { try { for (const toolResul of message.userInputMessageContext.toolResults) { - count += JSON.stringify(toolResul).length + toolResultsCount += JSON.stringify(toolResul).length } } catch (e) { this.#features.logging.error(`Error counting toolResults: ${String(e)}`) @@ -742,13 +826,18 @@ export class ChatDatabase { } if (message.userInputMessageContext?.editorState) { try { - count += JSON.stringify(message.userInputMessageContext?.editorState).length + editorStateCount += JSON.stringify(message.userInputMessageContext?.editorState).length } catch (e) { this.#features.logging.error(`Error counting editorState: ${String(e)}`) } } } - return count + + const totalCount = bodyCount + toolUsesCount + toolResultsCount + editorStateCount + this.#features.logging.debug( + `Messages characters: body: ${bodyCount} + toolUses: ${toolUsesCount} + toolResults: ${toolResultsCount} + editorState: ${editorStateCount} = total: ${totalCount}` + ) + return totalCount } /** @@ -808,7 +897,7 @@ export class ChatDatabase { if (messages.length > 0 && messages[messages.length - 1].type === ('prompt' as ChatItemType)) { // Add an assistant response to both request and DB to maintain a valid sequence const dummyResponse: Message = { - body: 'Thinking...', + body: 'Working...', type: 'answer', shouldDisplayMessage: false, timestamp: new Date(), diff --git a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/chatDb/util.ts b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/chatDb/util.ts index 312dd354e5..45f37929fc 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/chatDb/util.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/chatDb/util.ts @@ -123,6 +123,11 @@ export type TabWithDbMetadata = { */ export type DbReference = { collection: Collection; db: Loki } +export type MessagesWithCharacterCount = { + messages: Message[] + count: number +} + /** * Converts Message to codewhisperer-streaming ChatMessage */ diff --git a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/executeBash.test.ts b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/executeBash.test.ts index e74cfce3a3..c524550ee7 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/executeBash.test.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/executeBash.test.ts @@ -5,6 +5,8 @@ import { ExecuteBash } from './executeBash' import { TestFeatures } from '@aws/language-server-runtimes/testing' import { TextDocument } from 'vscode-languageserver-textdocument' import { URI } from 'vscode-uri' +import * as fs from 'fs' +import * as path from 'path' describe('ExecuteBash Tool', () => { let features: TestFeatures @@ -112,7 +114,7 @@ describe('ExecuteBash Tool', () => { getTextDocument: async s => ({}) as TextDocument, }, }) - const result = await execBash.requiresAcceptance({ command: 'echo hello world', cwd: workspaceFolder }) + const result = await execBash.requiresAcceptance({ command: 'ps aux', cwd: workspaceFolder }) assert.equal( result.requiresAcceptance, @@ -120,4 +122,142 @@ describe('ExecuteBash Tool', () => { 'A command without any path-like token should not require acceptance' ) }) + + describe('isLikelyCredentialFile', () => { + let execBash: ExecuteBash + + beforeEach(() => { + execBash = new ExecuteBash(features) + }) + + it('should identify credential files by name', () => { + assert.equal((execBash as any).isLikelyCredentialFile('/path/to/credentials.json'), true) + assert.equal((execBash as any).isLikelyCredentialFile('/path/to/secret_key.txt'), true) + assert.equal((execBash as any).isLikelyCredentialFile('/path/to/auth_token'), true) + assert.equal((execBash as any).isLikelyCredentialFile('/path/to/password.txt'), true) + }) + + it('should identify credential files by extension', () => { + assert.equal((execBash as any).isLikelyCredentialFile('/path/to/certificate.pem'), true) + assert.equal((execBash as any).isLikelyCredentialFile('/path/to/private.key'), true) + assert.equal((execBash as any).isLikelyCredentialFile('/path/to/cert.crt'), true) + assert.equal((execBash as any).isLikelyCredentialFile('/path/to/keystore.p12'), true) + }) + + it('should identify credential-related config files', () => { + assert.equal((execBash as any).isLikelyCredentialFile('/path/to/.aws/config'), true) + assert.equal((execBash as any).isLikelyCredentialFile('/path/to/.ssh/id_rsa'), true) + assert.equal((execBash as any).isLikelyCredentialFile('/path/to/config.json'), true) + assert.equal((execBash as any).isLikelyCredentialFile('/path/to/.env'), true) + }) + + it('should not identify non-credential files', () => { + assert.equal((execBash as any).isLikelyCredentialFile('/path/to/document.txt'), false) + assert.equal((execBash as any).isLikelyCredentialFile('/path/to/image.png'), false) + assert.equal((execBash as any).isLikelyCredentialFile('/path/to/script.js'), false) + assert.equal((execBash as any).isLikelyCredentialFile('/path/to/data.csv'), false) + }) + }) + + describe('isLikelyBinaryFile', () => { + let execBash: ExecuteBash + + beforeEach(() => { + execBash = new ExecuteBash(features) + }) + + describe('on Windows', () => { + // Save original platform + const originalPlatform = process.platform + + before(() => { + // Mock Windows platform + Object.defineProperty(process, 'platform', { value: 'win32' }) + }) + + after(() => { + // Restore original platform + Object.defineProperty(process, 'platform', { value: originalPlatform }) + }) + + it('should identify Windows executable extensions', () => { + // Create a simple mock implementation + const isLikelyBinaryFileMock = function (filePath: string): boolean { + const ext = path.extname(filePath).toLowerCase() + return ['.exe', '.dll', '.bat', '.cmd'].includes(ext) + } + + // Replace the method with our mock + sinon.replace(execBash as any, 'isLikelyBinaryFile', isLikelyBinaryFileMock) + + assert.equal((execBash as any).isLikelyBinaryFile('/path/to/program.exe'), true) + assert.equal((execBash as any).isLikelyBinaryFile('/path/to/library.dll'), true) + assert.equal((execBash as any).isLikelyBinaryFile('/path/to/script.bat'), true) + assert.equal((execBash as any).isLikelyBinaryFile('/path/to/command.cmd'), true) + }) + + it('should not identify non-executable extensions on Windows', () => { + // Create a simple mock implementation + const isLikelyBinaryFileMock = function (filePath: string): boolean { + const ext = path.extname(filePath).toLowerCase() + return ['.exe', '.dll', '.bat', '.cmd'].includes(ext) + } + + // Replace the method with our mock + sinon.replace(execBash as any, 'isLikelyBinaryFile', isLikelyBinaryFileMock) + + assert.equal((execBash as any).isLikelyBinaryFile('/path/to/document.txt'), false) + assert.equal((execBash as any).isLikelyBinaryFile('/path/to/script.js'), false) + assert.equal((execBash as any).isLikelyBinaryFile('/path/to/data.csv'), false) + }) + }) + + describe('on Unix', () => { + // Save original platform + const originalPlatform = process.platform + + beforeEach(() => { + // Mock Unix platform for each test + Object.defineProperty(process, 'platform', { value: 'darwin' }) + + // Create a simple mock implementation for Unix tests + const isLikelyBinaryFileMock = function (filePath: string, stats?: fs.Stats): boolean { + if (filePath === '/path/to/executable') { + return true + } else if (filePath === '/path/to/non-executable') { + return false + } else if (filePath === '/path/to/non-existent-file') { + return false + } else if (filePath === '/path/to/directory') { + return false + } + return false + } + + // Replace the method with our mock + sinon.replace(execBash as any, 'isLikelyBinaryFile', isLikelyBinaryFileMock) + }) + + afterEach(() => { + // Restore original platform + Object.defineProperty(process, 'platform', { value: originalPlatform }) + }) + + it('should identify files with execute permissions', () => { + assert.equal((execBash as any).isLikelyBinaryFile('/path/to/executable'), true) + }) + + it('should not identify files without execute permissions', () => { + assert.equal((execBash as any).isLikelyBinaryFile('/path/to/non-executable'), false) + }) + + it('should not identify non-existent files', () => { + assert.equal((execBash as any).isLikelyBinaryFile('/path/to/non-existent-file'), false) + }) + + it('should not identify directories', () => { + assert.equal((execBash as any).isLikelyBinaryFile('/path/to/directory'), false) + }) + }) + }) }) diff --git a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/executeBash.ts b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/executeBash.ts index e8ae48c5fe..be43d97353 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/executeBash.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/executeBash.ts @@ -7,9 +7,11 @@ import { CancellationError, processUtils, workspaceUtils } from '@aws/lsp-core' import { CancellationToken } from 'vscode-languageserver' import { ChildProcess, ChildProcessOptions } from '@aws/lsp-core/out/util/processUtils' // eslint-disable-next-line import/no-nodejs-modules -import { isAbsolute, join } from 'path' // Safe to import on web since this is part of path-browserify +import { isAbsolute, join, extname } from 'path' // Safe to import on web since this is part of path-browserify import { Features } from '../../types' import { getWorkspaceFolderPaths } from '@aws/lsp-core/out/util/workspaceUtils' +// eslint-disable-next-line import/no-nodejs-modules +import { existsSync, statSync } from 'fs' export enum CommandCategory { ReadOnly, @@ -25,12 +27,10 @@ export const commandCategories = new Map([ ['cat', CommandCategory.ReadOnly], ['bat', CommandCategory.ReadOnly], ['pwd', CommandCategory.ReadOnly], - ['echo', CommandCategory.ReadOnly], ['file', CommandCategory.ReadOnly], ['less', CommandCategory.ReadOnly], ['more', CommandCategory.ReadOnly], ['tree', CommandCategory.ReadOnly], - ['find', CommandCategory.ReadOnly], ['top', CommandCategory.ReadOnly], ['htop', CommandCategory.ReadOnly], ['ps', CommandCategory.ReadOnly], @@ -52,7 +52,6 @@ export const commandCategories = new Map([ ['diff', CommandCategory.ReadOnly], ['head', CommandCategory.ReadOnly], ['tail', CommandCategory.ReadOnly], - ['grep', CommandCategory.ReadOnly], // Mutable commands ['chmod', CommandCategory.Mutate], @@ -79,6 +78,9 @@ export const commandCategories = new Map([ ['exec', CommandCategory.Mutate], ['eval', CommandCategory.Mutate], ['xargs', CommandCategory.Mutate], + ['echo', CommandCategory.Mutate], + ['grep', CommandCategory.Mutate], + ['find', CommandCategory.Mutate], // Destructive commands ['rm', CommandCategory.Destructive], @@ -109,6 +111,9 @@ export const lineCount: number = 1024 export const destructiveCommandWarningMessage = 'WARNING: Potentially destructive command detected:\n\n' export const mutateCommandWarningMessage = 'Mutation command:\n\n' export const outOfWorkspaceWarningmessage = 'Execution out of workspace scope:\n\n' +export const credentialFileWarningMessage = + 'WARNING: Command involves credential files that require secure permissions:\n\n' +export const binaryFileWarningMessage = 'WARNING: Command involves binary files that require secure permissions:\n\n' /** * Parameters for executing a command on the system shell. @@ -242,6 +247,34 @@ export class ExecuteBash { continue } + // Check if this is a credential file that needs protection + try { + if (existsSync(fullPath) && statSync(fullPath).isFile()) { + // Check for credential files + if (this.isLikelyCredentialFile(fullPath)) { + this.logging.info(`Detected credential file in command: ${fullPath}`) + return { + requiresAcceptance: true, + warning: credentialFileWarningMessage, + commandCategory: CommandCategory.Mutate, + } + } + + // Check for binary files + if (this.isLikelyBinaryFile(fullPath)) { + this.logging.info(`Detected binary file in command: ${fullPath}`) + return { + requiresAcceptance: true, + warning: binaryFileWarningMessage, + commandCategory: CommandCategory.Mutate, + } + } + } + } catch (err) { + // Ignore errors for files that don't exist or can't be accessed + this.logging.debug(`Error checking file ${fullPath}: ${(err as Error).message}`) + } + const isInWorkspace = workspaceUtils.isInWorkspace( getWorkspaceFolderPaths(this.workspace), fullPath @@ -352,15 +385,82 @@ export class ExecuteBash { } } + // Static patterns for faster lookups - defined once, used many times + private static readonly CREDENTIAL_PATTERNS = new Set([ + 'credential', + 'secret', + 'token', + 'password', + 'key', + 'cert', + 'auth', + '.aws', + '.ssh', + '.pgp', + '.gpg', + '.pem', + '.crt', + '.key', + '.p12', + '.pfx', + 'config.json', + 'settings.json', + '.env', + '.npmrc', + '.yarnrc', + ]) + + private static readonly BINARY_EXTENSIONS_WINDOWS = new Set(['.exe', '.dll', '.bat', '.cmd']) + + /** + * Efficiently checks if a file is likely to contain credentials based on name or extension + * @param filePath Path to check + * @returns true if the file likely contains credentials + */ + private isLikelyCredentialFile(filePath: string): boolean { + const fileName = filePath.toLowerCase() + + // Fast check using Set for O(1) lookups instead of array iteration + for (const pattern of ExecuteBash.CREDENTIAL_PATTERNS) { + if (fileName.includes(pattern)) { + return true + } + } + + return false + } + + /** + * Efficiently checks if a file is a binary executable + * @param filePath Path to check + * @returns true if the file is likely a binary executable + */ + private isLikelyBinaryFile(filePath: string): boolean { + if (IS_WINDOWS_PLATFORM) { + const ext = extname(filePath).toLowerCase() + return ExecuteBash.BINARY_EXTENSIONS_WINDOWS.has(ext) + } + + try { + // Check if file exists and is executable + const stats = statSync(filePath) + return stats.isFile() && (stats.mode & 0o111) !== 0 // Check if any execute bit is set + } catch (error) { + this.logging.debug(`Failed to check if file is binary: ${filePath}, error: ${(error as Error).message}`) + return false + } + } + // TODO: generalize cancellation logic for tools. public async invoke( params: ExecuteBashParams, cancellationToken?: CancellationToken, updates?: WritableStream ): Promise { + // use absoluate file path const { shellName, shellFlag } = IS_WINDOWS_PLATFORM - ? { shellName: 'cmd.exe', shellFlag: '/c' } - : { shellName: 'bash', shellFlag: '-c' } + ? { shellName: 'C:\\Windows\\System32\\cmd.exe', shellFlag: '/c' } + : { shellName: '/bin/bash', shellFlag: '-c' } this.logging.info(`Invoking ${shellName} command: "${params.command}" in cwd: "${params.cwd}"`) return new Promise(async (resolve, reject) => { @@ -438,7 +538,7 @@ export class ExecuteBash { outputQueue.push({ timestamp, isStdout: true, - content: IS_WINDOWS_PLATFORM ? ExecuteBash.decodeWinUtf(chunk) : chunk, + content: chunk, isFirst, }) processQueue() @@ -453,7 +553,7 @@ export class ExecuteBash { outputQueue.push({ timestamp, isStdout: false, - content: IS_WINDOWS_PLATFORM ? ExecuteBash.decodeWinUtf(chunk) : chunk, + content: chunk, isFirst, }) processQueue() @@ -538,24 +638,6 @@ export class ExecuteBash { }) } - /** - * Re‑creates the raw bytes from the received string (Buffer.from(text, 'binary')). - * Detects UTF‑16 LE by checking whether every odd byte in the first 32 bytes is 0x00. - * Decodes with buf.toString('utf16le') when the pattern matches, otherwise falls back to UTF‑8. - */ - private static decodeWinUtf(raw: string): string { - const buffer = Buffer.from(raw, 'binary') - - let utf16 = true - for (let i = 1, n = Math.min(buffer.length, 32); i < n; i += 2) { - if (buffer[i] !== 0x00) { - utf16 = false - break - } - } - return utf16 ? buffer.toString('utf16le') : buffer.toString('utf8') - } - private static handleChunk(chunk: string, buffer: string[], writer?: WritableStreamDefaultWriter) { try { // Trim trailing newlines from the chunk before writing diff --git a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/fsWrite.test.ts b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/fsWrite.test.ts index 5276315115..936cbf7d77 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/fsWrite.test.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/fsWrite.test.ts @@ -7,10 +7,17 @@ import { InvokeOutput } from './toolShared' import { TestFeatures } from '@aws/language-server-runtimes/testing' import { Workspace } from '@aws/language-server-runtimes/server-interface' import { StubbedInstance } from 'ts-sinon' +import * as sinon from 'sinon' +import { LocalProjectContextController } from '../../../shared/localProjectContextController' +import { URI } from 'vscode-uri' describe('FsWrite Tool', function () { let tempFolder: testFolder.TestFolder let features: TestFeatures + let localProjectContextControllerStub: sinon.SinonStub + let mockController: { + updateIndexAndContextCommand: sinon.SinonStub + } const expectedOutput: InvokeOutput = { output: { kind: 'text', @@ -40,14 +47,26 @@ describe('FsWrite Tool', function () { } as Workspace['fs'], } as StubbedInstance tempFolder = await testFolder.TestFolder.create() + + // Set up LocalProjectContextController mock + mockController = { + updateIndexAndContextCommand: sinon.stub().resolves(), + } + localProjectContextControllerStub = sinon + .stub(LocalProjectContextController, 'getInstance') + .resolves(mockController as any) }) afterEach(async function () { await tempFolder.clear() + // Reset the mock between tests + mockController.updateIndexAndContextCommand.resetHistory() }) after(async function () { await tempFolder.delete() + // Restore the stub + localProjectContextControllerStub.restore() }) it('writes a empty space to updates stream', async function () { @@ -82,6 +101,18 @@ describe('FsWrite Tool', function () { assert.strictEqual(content, 'Hello World') assert.deepStrictEqual(output, expectedOutput) + + // Verify LocalProjectContextController was called + assert.ok(localProjectContextControllerStub.calledOnce) + + // Wait a bit for the async void call to complete + await new Promise(resolve => setTimeout(resolve, 10)) + + // Verify updateIndexAndContextCommand was called with correct parameters + assert.ok(mockController.updateIndexAndContextCommand.calledOnce) + const [paths, isAdded] = mockController.updateIndexAndContextCommand.firstCall.args + assert.deepStrictEqual(paths, [URI.file(filePath).fsPath]) + assert.strictEqual(isAdded, true) }) it('replaces existing file with fileText content', async function () { diff --git a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/fsWrite.ts b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/fsWrite.ts index 63fbf17323..e319d360a1 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/fsWrite.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/fsWrite.ts @@ -2,6 +2,8 @@ import { CommandValidation, ExplanatoryParams, InvokeOutput, requiresPathAccepta import { EmptyPathError, MissingContentError, FileExistsWithSameContentError, EmptyAppendContentError } from '../errors' import { Features } from '@aws/language-server-runtimes/server-interface/server' import { sanitize } from '@aws/lsp-core/out/util/path' +import { LocalProjectContextController } from '../../../shared/localProjectContextController' +import { URI } from 'vscode-uri' interface BaseParams extends ExplanatoryParams { path: string @@ -99,6 +101,12 @@ export class FsWrite { private async handleCreate(params: CreateParams, sanitizedPath: string): Promise { const content = params.fileText await this.workspace.fs.writeFile(sanitizedPath, content) + + // Add created file to @Files list + void LocalProjectContextController.getInstance().then(controller => { + const filePath = URI.file(sanitizedPath).fsPath + return controller.updateIndexAndContextCommand([filePath], true) + }) } private async handleAppend(params: AppendParams, sanitizedPath: string): Promise { diff --git a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/mcp/mcpManager.ts b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/mcp/mcpManager.ts index 62bd60a603..03616040fd 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/mcp/mcpManager.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/mcp/mcpManager.ts @@ -59,7 +59,7 @@ export class McpManager { this.mcpServerStates = new Map() this.configLoadErrors = new Map() this.mcpServerPermissions = new Map() - this.events = new EventEmitter() + this.events = new EventEmitter({ captureRejections: true }).on('error', console.error) this.features.logging.info(`MCP manager: initialized with ${configPaths.length} configs`) this.toolNameMapping = new Map() this.serverNameMapping = new Map() diff --git a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/qCodeAnalysis/qCodeReview.test.ts b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/qCodeAnalysis/qCodeReview.test.ts new file mode 100644 index 0000000000..75ea5fe455 --- /dev/null +++ b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/qCodeAnalysis/qCodeReview.test.ts @@ -0,0 +1,590 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +import { QCodeReview } from './qCodeReview' +import { QCodeReviewUtils } from './qCodeReviewUtils' +import { Q_CODE_REVIEW_TOOL_NAME, FULL_REVIEW, CODE_DIFF_REVIEW } from './qCodeReviewConstants' +import * as sinon from 'sinon' +import * as path from 'path' +import { expect } from 'chai' +import { CancellationError } from '@aws/lsp-core' +import * as JSZip from 'jszip' + +describe('QCodeReview', () => { + let sandbox: sinon.SinonSandbox + let qCodeReview: QCodeReview + let mockFeatures: any + let mockCodeWhispererClient: any + let mockCancellationToken: any + let mockWritableStream: any + let mockWriter: any + + beforeEach(() => { + sandbox = sinon.createSandbox() + + mockWriter = { + write: sandbox.stub().resolves(), + close: sandbox.stub().resolves(), + releaseLock: sandbox.stub(), + } + + mockWritableStream = { + getWriter: sandbox.stub().returns(mockWriter), + } + + mockCancellationToken = { + isCancellationRequested: false, + } + + mockCodeWhispererClient = { + createUploadUrl: sandbox.stub(), + startCodeAnalysis: sandbox.stub(), + getCodeAnalysis: sandbox.stub(), + listCodeAnalysisFindings: sandbox.stub(), + } + + mockFeatures = { + credentialsProvider: { + getConnectionMetadata: sandbox.stub().returns({ sso: { startUrl: 'https://test.com' } }), + }, + logging: { + info: sandbox.stub(), + warn: sandbox.stub(), + error: sandbox.stub(), + debug: sandbox.stub(), + }, + telemetry: { + emitMetric: sandbox.stub(), + }, + workspace: { + fs: { + readFile: sandbox.stub(), + readdir: sandbox.stub(), + }, + }, + } + + qCodeReview = new QCodeReview(mockFeatures) + }) + + afterEach(() => { + sandbox.restore() + }) + + describe('static properties', () => { + it('should have correct tool name', () => { + expect(QCodeReview.toolName).to.equal(Q_CODE_REVIEW_TOOL_NAME) + }) + + it('should have tool description', () => { + expect(QCodeReview.toolDescription).to.be.a('string') + }) + + it('should have input schema', () => { + expect(QCodeReview.inputSchema).to.be.an('object') + }) + }) + + describe('execute', () => { + let context: any + let validInput: any + + beforeEach(() => { + context = { + cancellationToken: mockCancellationToken, + writableStream: mockWritableStream, + codeWhispererClient: mockCodeWhispererClient, + } + + validInput = { + fileLevelArtifacts: [{ path: '/test/file.js', programmingLanguage: 'javascript' }], + folderLevelArtifacts: [], + ruleArtifacts: [], + scopeOfReview: FULL_REVIEW, + } + }) + + it('should execute successfully with valid input', async () => { + // Setup mocks for successful execution + mockCodeWhispererClient.createUploadUrl.resolves({ + uploadUrl: 'https://upload.com', + uploadId: 'upload-123', + requestHeaders: {}, + }) + + mockCodeWhispererClient.startCodeAnalysis.resolves({ + jobId: 'job-123', + status: 'Pending', + }) + + mockCodeWhispererClient.getCodeAnalysis.resolves({ + status: 'Completed', + }) + + mockCodeWhispererClient.listCodeAnalysisFindings.resolves({ + codeAnalysisFindings: '[]', + nextToken: undefined, + }) + + sandbox.stub(QCodeReviewUtils, 'uploadFileToPresignedUrl').resolves() + sandbox.stub(qCodeReview as any, 'prepareFilesAndFoldersForUpload').resolves({ + zipBuffer: Buffer.from('test'), + md5Hash: 'hash123', + isCodeDiffPresent: false, + }) + sandbox.stub(qCodeReview as any, 'parseFindings').returns([]) + + const result = await qCodeReview.execute(validInput, context) + + expect(result.output.success).to.be.true + expect(result.output.kind).to.equal('json') + }) + + it('should handle missing client error', async () => { + context.codeWhispererClient = undefined + + const result = await qCodeReview.execute(validInput, context) + + expect(result.output.success).to.be.false + expect((result.output.content as any).errorMessage).to.equal('CodeWhisperer client not available') + }) + + it('should handle missing artifacts error', async () => { + const invalidInput = { + fileLevelArtifacts: [], + folderLevelArtifacts: [], + ruleArtifacts: [], + scopeOfReview: FULL_REVIEW, + } + + const result = await qCodeReview.execute(invalidInput, context) + + expect(result.output.success).to.be.false + expect((result.output.content as any).errorMessage).to.include( + 'Missing fileLevelArtifacts and folderLevelArtifacts for qCodeReview tool' + ) + }) + + it('should handle upload failure', async () => { + mockCodeWhispererClient.createUploadUrl.resolves({ + uploadUrl: undefined, + uploadId: undefined, + }) + + sandbox.stub(qCodeReview as any, 'prepareFilesAndFoldersForUpload').resolves({ + zipBuffer: Buffer.from('test'), + md5Hash: 'hash123', + isCodeDiffPresent: false, + }) + + const result = await qCodeReview.execute(validInput, context) + + expect(result.output.success).to.be.false + expect((result.output.content as any).errorMessage).to.include('Failed to upload artifact') + }) + + it('should handle analysis start failure', async () => { + mockCodeWhispererClient.createUploadUrl.resolves({ + uploadUrl: 'https://upload.com', + uploadId: 'upload-123', + requestHeaders: {}, + }) + + mockCodeWhispererClient.startCodeAnalysis.resolves({ + jobId: undefined, + }) + + sandbox.stub(QCodeReviewUtils, 'uploadFileToPresignedUrl').resolves() + sandbox.stub(qCodeReview as any, 'prepareFilesAndFoldersForUpload').resolves({ + zipBuffer: Buffer.from('test'), + md5Hash: 'hash123', + isCodeDiffPresent: false, + }) + + const result = await qCodeReview.execute(validInput, context) + + expect(result.output.success).to.be.false + expect((result.output.content as any).errorMessage).to.include('Failed to start code analysis') + }) + + it('should handle scan timeout', async () => { + mockCodeWhispererClient.createUploadUrl.resolves({ + uploadUrl: 'https://upload.com', + uploadId: 'upload-123', + requestHeaders: {}, + }) + + mockCodeWhispererClient.startCodeAnalysis.resolves({ + jobId: 'job-123', + status: 'Pending', + }) + + // Always return Pending status to simulate timeout + mockCodeWhispererClient.getCodeAnalysis.resolves({ + status: 'Pending', + }) + + sandbox.stub(QCodeReviewUtils, 'uploadFileToPresignedUrl').resolves() + sandbox.stub(qCodeReview as any, 'prepareFilesAndFoldersForUpload').resolves({ + zipBuffer: Buffer.from('test'), + md5Hash: 'hash123', + isCodeDiffPresent: false, + }) + + // Stub setTimeout to avoid actual delays + const setTimeoutStub = sandbox.stub(global, 'setTimeout') + setTimeoutStub.callsFake((callback: Function) => { + callback() + return {} as any + }) + + const result = await qCodeReview.execute(validInput, context) + + expect(result.output.success).to.be.false + expect((result.output.content as any).errorMessage).to.include('Code scan timed out') + }) + + it('should handle cancellation', async () => { + mockCancellationToken.isCancellationRequested = true + + try { + await qCodeReview.execute(validInput, context) + expect.fail('Expected cancellation error') + } catch (error) { + expect(error).to.be.instanceOf(CancellationError) + } + }) + }) + + describe('validateInputAndSetup', () => { + it('should validate and setup correctly for file artifacts', async () => { + const input = { + fileLevelArtifacts: [{ path: '/test/file.js' }], + folderLevelArtifacts: [], + ruleArtifacts: [], + scopeOfReview: FULL_REVIEW, + } + + const context = { + cancellationToken: mockCancellationToken, + writableStream: mockWritableStream, + codeWhispererClient: mockCodeWhispererClient, + } + + const result = await (qCodeReview as any).validateInputAndSetup(input, context) + + expect(result.fileArtifacts).to.have.length(1) + expect(result.folderArtifacts).to.have.length(0) + expect(result.isFullReviewRequest).to.be.true + expect(result.artifactType).to.equal('FILE') + expect(result.programmingLanguage).to.equal('java') + expect(result.scanName).to.match(/^Standard-/) + }) + + it('should validate and setup correctly for folder artifacts', async () => { + const input = { + fileLevelArtifacts: [], + folderLevelArtifacts: [{ path: '/test/folder' }], + ruleArtifacts: [], + scopeOfReview: CODE_DIFF_REVIEW, + } + + const context = { + cancellationToken: mockCancellationToken, + writableStream: mockWritableStream, + codeWhispererClient: mockCodeWhispererClient, + } + + const result = await (qCodeReview as any).validateInputAndSetup(input, context) + + expect(result.fileArtifacts).to.have.length(0) + expect(result.folderArtifacts).to.have.length(1) + expect(result.isFullReviewRequest).to.be.false + expect(result.artifactType).to.equal('FOLDER') + }) + }) + + describe('prepareFilesAndFoldersForUpload', () => { + beforeEach(() => { + mockFeatures.workspace.fs.readFile.resolves(Buffer.from('file content')) + mockFeatures.workspace.fs.readdir.resolves([ + { name: 'file.js', parentPath: '/test', isFile: () => true, isDirectory: () => false }, + ]) + + sandbox.stub(require('fs'), 'existsSync').returns(true) + sandbox.stub(require('fs'), 'statSync').returns({ isFile: () => true }) + }) + + it('should prepare files and folders for upload', async () => { + const fileArtifacts = [{ path: '/test/file.js' }] + const folderArtifacts = [{ path: '/test/folder' }] + const ruleArtifacts: any[] = [] + + const result = await (qCodeReview as any).prepareFilesAndFoldersForUpload( + fileArtifacts, + folderArtifacts, + ruleArtifacts, + false + ) + + expect(result.zipBuffer).to.be.instanceOf(Buffer) + expect(result.md5Hash).to.be.a('string') + expect(result.isCodeDiffPresent).to.be.a('boolean') + }) + + it('should handle code diff generation', async () => { + const fileArtifacts = [{ path: '/test/file.js' }] + const folderArtifacts: any[] = [] + const ruleArtifacts: any[] = [] + + sandbox.stub(QCodeReviewUtils, 'processArtifactWithDiff').resolves('diff content\n') + + const result = await (qCodeReview as any).prepareFilesAndFoldersForUpload( + fileArtifacts, + folderArtifacts, + ruleArtifacts, + true + ) + + expect(result.isCodeDiffPresent).to.be.true + }) + + it('should throw error when no valid files to scan', async () => { + const fileArtifacts: any[] = [] + const folderArtifacts: any[] = [] + const ruleArtifacts = [{ path: '/test/rule.json' }] + + // Mock countZipFiles to return only rule artifacts count + sandbox.stub(QCodeReviewUtils, 'countZipFiles').returns(1) + + try { + await (qCodeReview as any).prepareFilesAndFoldersForUpload( + fileArtifacts, + folderArtifacts, + ruleArtifacts, + false + ) + expect.fail('Expected error was not thrown') + } catch (error: any) { + expect(error.message).to.include('There are no valid files to scan') + } + }) + }) + + describe('collectFindings', () => { + beforeEach(() => { + // Set up the client in the instance + ;(qCodeReview as any).codeWhispererClient = mockCodeWhispererClient + }) + + it('should collect findings for full review', async () => { + const mockFindings = [ + { findingId: '1', severity: 'HIGH', findingContext: 'Full' }, + { findingId: '2', severity: 'MEDIUM', findingContext: 'Full' }, + ] + + mockCodeWhispererClient.listCodeAnalysisFindings.resolves({ + codeAnalysisFindings: JSON.stringify(mockFindings), + nextToken: undefined, + }) + + sandbox.stub(qCodeReview as any, 'parseFindings').returns(mockFindings) + + const result = await (qCodeReview as any).collectFindings('job-123', true, false, 'javascript') + + expect(result.totalFindings).to.have.length(2) + expect(result.findingsExceededLimit).to.be.false + }) + + it('should filter findings for code diff review', async () => { + const mockFindings = [ + { findingId: '1', severity: 'HIGH', findingContext: 'CodeDiff' }, + { findingId: '2', severity: 'MEDIUM', findingContext: 'Full' }, + ] + + mockCodeWhispererClient.listCodeAnalysisFindings.resolves({ + codeAnalysisFindings: JSON.stringify(mockFindings), + nextToken: undefined, + }) + + sandbox.stub(qCodeReview as any, 'parseFindings').returns(mockFindings) + + const result = await (qCodeReview as any).collectFindings('job-123', false, true, 'javascript') + + expect(result.totalFindings).to.have.length(1) + expect(result.totalFindings[0].findingContext).to.equal('CodeDiff') + }) + + it('should handle pagination', async () => { + const mockFindings1 = [{ findingId: '1', severity: 'HIGH' }] + const mockFindings2 = [{ findingId: '2', severity: 'MEDIUM' }] + + mockCodeWhispererClient.listCodeAnalysisFindings + .onFirstCall() + .resolves({ + codeAnalysisFindings: JSON.stringify(mockFindings1), + nextToken: 'token123', + }) + .onSecondCall() + .resolves({ + codeAnalysisFindings: JSON.stringify(mockFindings2), + nextToken: undefined, + }) + + sandbox + .stub(qCodeReview as any, 'parseFindings') + .onFirstCall() + .returns(mockFindings1) + .onSecondCall() + .returns(mockFindings2) + + const result = await (qCodeReview as any).collectFindings('job-123', true, false, 'javascript') + + expect(result.totalFindings).to.have.length(2) + sinon.assert.calledTwice(mockCodeWhispererClient.listCodeAnalysisFindings) + }) + }) + + describe('aggregateFindingsByFile', () => { + it('should aggregate findings by file path', () => { + const mockFindings = [ + { + findingId: '1', + title: 'Test Issue', + description: { text: 'Test description', markdown: 'Test **description**' }, + startLine: 10, + endLine: 15, + severity: 'HIGH', + filePath: '/test/file.js', + detectorId: 'detector1', + detectorName: 'Test Detector', + ruleId: 'rule1', + relatedVulnerabilities: [], + remediation: { recommendation: { text: 'Fix this', url: null } }, + suggestedFixes: [], + comment: 'Test Issue: Test description', + recommendation: { text: 'Fix this', url: null }, + scanJobId: 'job-123', + language: 'javascript', + autoDetected: false, + findingContext: 'Full', + } as any, + ] + + const fileArtifacts = [{ path: '/test/file.js' }] + const folderArtifacts: any[] = [] + + sandbox.stub(qCodeReview as any, 'resolveFilePath').returns('/test/file.js') + + const result = (qCodeReview as any).aggregateFindingsByFile(mockFindings, fileArtifacts, folderArtifacts) + + expect(result).to.have.length(1) + expect(result[0].filePath).to.equal('/test/file.js') + expect(result[0].issues).to.have.length(1) + }) + }) + + describe('resolveFilePath', () => { + let existsSyncStub: sinon.SinonStub + let statSyncStub: sinon.SinonStub + + beforeEach(() => { + existsSyncStub = sandbox.stub(require('fs'), 'existsSync').returns(true) + statSyncStub = sandbox.stub(require('fs'), 'statSync').returns({ isFile: () => true }) + }) + + it('should resolve file path from file artifacts', () => { + const filePath = path.resolve('/project/src/file.js') + const fileArtifacts = [{ path: filePath }] + const folderArtifacts: any[] = [] + + const result = (qCodeReview as any).resolveFilePath('src/file.js', fileArtifacts, folderArtifacts) + + expect(result).to.equal(filePath) + }) + + it('should resolve file path from folder artifacts', () => { + const fileArtifacts: any[] = [] + const folderArtifacts = [{ path: path.resolve('/project/src') }] + + const result = (qCodeReview as any).resolveFilePath('file.js', fileArtifacts, folderArtifacts) + + expect(result).to.equal(path.resolve('/project/src/file.js')) + }) + + it('should resolve file path with common suffix matching', () => { + const fileArtifacts: any[] = [] + const folderArtifacts = [{ path: path.resolve('/project/src/main') }] + + existsSyncStub.returns(true) + statSyncStub.returns({ isFile: () => true }) + + const result = (qCodeReview as any).resolveFilePath( + 'src/main/java/App.java', + fileArtifacts, + folderArtifacts + ) + + expect(result).to.equal(path.resolve('/project/src/main/java/App.java')) + }) + + it('should return null for unresolvable paths', () => { + existsSyncStub.returns(false) + + const fileArtifacts: any[] = [] + const folderArtifacts: any[] = [] + + const result = (qCodeReview as any).resolveFilePath('nonexistent.js', fileArtifacts, folderArtifacts) + + expect(result).to.be.null + }) + }) + + describe('checkCancellation', () => { + it('should not throw when cancellation is not requested', () => { + mockCancellationToken.isCancellationRequested = false + + expect(() => { + ;(qCodeReview as any).checkCancellation() + }).to.not.throw() + }) + + it('should throw CancellationError when cancellation is requested', () => { + mockCancellationToken.isCancellationRequested = true + + // Set up the cancellation token in the instance + ;(qCodeReview as any).cancellationToken = mockCancellationToken + + expect(() => { + ;(qCodeReview as any).checkCancellation() + }).to.throw(CancellationError) + }) + }) + + describe('error handling', () => { + it('should handle unexpected errors gracefully', async () => { + const context = { + cancellationToken: mockCancellationToken, + writableStream: mockWritableStream, + codeWhispererClient: mockCodeWhispererClient, + } + + const input = { + fileLevelArtifacts: [{ path: '/test/file.js' }], + folderLevelArtifacts: [], + ruleArtifacts: [], + scopeOfReview: FULL_REVIEW, + } + + // Make prepareFilesAndFoldersForUpload throw an error + sandbox.stub(qCodeReview as any, 'prepareFilesAndFoldersForUpload').rejects(new Error('Unexpected error')) + + const result = await qCodeReview.execute(input, context) + + expect(result.output.success).to.be.false + expect((result.output.content as any).errorMessage).to.equal('Unexpected error') + }) + }) +}) diff --git a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/qCodeAnalysis/qCodeReview.ts b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/qCodeAnalysis/qCodeReview.ts new file mode 100644 index 0000000000..3ab4951178 --- /dev/null +++ b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/qCodeAnalysis/qCodeReview.ts @@ -0,0 +1,895 @@ +/* eslint-disable import/no-nodejs-modules */ + +import { CodeWhispererServiceToken } from '../../../../shared/codeWhispererService' +import { Features } from '@aws/language-server-runtimes/server-interface/server' +import { Q_CODE_REVIEW_TOOL_NAME, Q_CODE_REVIEW_TOOL_DESCRIPTION, FULL_REVIEW } from './qCodeReviewConstants' +import { QCodeReviewUtils } from './qCodeReviewUtils' +import { Q_CODE_REVIEW_INPUT_SCHEMA, Z_Q_CODE_REVIEW_INPUT_SCHEMA, Q_FINDINGS_SCHEMA } from './qCodeReviewSchemas' +import { randomUUID } from 'crypto' +import * as crypto from 'crypto' +import * as path from 'path' +import * as JSZip from 'jszip' +import { existsSync, statSync } from 'fs' +import { CancellationToken } from '@aws/language-server-runtimes/server-interface' +import { InvokeOutput } from '../toolShared' +import { QCodeReviewInternalError, QCodeReviewTimeoutError, QCodeReviewValidationError } from './qCodeReviewErrors' +import { + FileArtifacts, + FolderArtifacts, + RuleArtifacts, + ValidateInputAndSetupResult, + PrepareAndUploadArtifactsResult, + StartCodeAnalysisResult, + CodeReviewResult, + QCodeReviewFinding, +} from './qCodeReviewTypes' +import { CancellationError } from '@aws/lsp-core' + +export class QCodeReview { + private static readonly CUSTOMER_CODE_BASE_PATH = 'customerCodeBaseFolder' + private static readonly CODE_ARTIFACT_PATH = 'code_artifact' + private static readonly CUSTOMER_CODE_ZIP_NAME = 'customerCode.zip' + private static readonly CODE_DIFF_PATH = 'code_artifact/codeDiff/customerCodeDiff.diff' + private static readonly RULE_ARTIFACT_PATH = '.amazonq/rules' + private static readonly MAX_POLLING_ATTEMPTS = 30 + private static readonly MID_POLLING_ATTEMPTS = 15 + private static readonly POLLING_INTERVAL_MS = 10000 + private static readonly UPLOAD_INTENT = 'AGENTIC_CODE_REVIEW' + private static readonly SCAN_SCOPE = 'AGENTIC' + private static readonly MAX_FINDINGS_COUNT = 50 + + private static readonly ERROR_MESSAGES = { + MISSING_CLIENT: 'CodeWhisperer client not available', + MISSING_ARTIFACTS: `Missing fileLevelArtifacts and folderLevelArtifacts for ${Q_CODE_REVIEW_TOOL_NAME} tool. Ask user to provide a specific file / folder / workspace which has code that can be scanned.`, + MISSING_FILES_TO_SCAN: `There are no valid files to scan. Ask user to provide a specific file / folder / workspace which has code that can be scanned.`, + UPLOAD_FAILED: `Failed to upload artifact for code review in ${Q_CODE_REVIEW_TOOL_NAME} tool.`, + START_CODE_ANALYSIS_FAILED: (jobId: string) => + `Failed to start code analysis in ${Q_CODE_REVIEW_TOOL_NAME} tool for jobId - ${jobId}`, + CODE_ANALYSIS_FAILED: (jobId: string, message: string) => + `Code analysis failed for jobId - ${jobId} due to ${message}`, + SCAN_FAILED: 'Code scan failed', + TIMEOUT: (attempts: number) => + `Code scan timed out after ${attempts} attempts. Ask user to provide a smaller size of code to scan.`, + } + + private readonly credentialsProvider: Features['credentialsProvider'] + private readonly logging: Features['logging'] + private readonly telemetry: Features['telemetry'] + private readonly workspace: Features['workspace'] + private codeWhispererClient?: CodeWhispererServiceToken + private cancellationToken?: CancellationToken + private writableStream?: WritableStream + + constructor( + features: Pick & Partial + ) { + this.credentialsProvider = features.credentialsProvider + this.logging = features.logging + this.telemetry = features.telemetry + this.workspace = features.workspace + } + + static readonly toolName = Q_CODE_REVIEW_TOOL_NAME + + static readonly toolDescription = Q_CODE_REVIEW_TOOL_DESCRIPTION + + static readonly inputSchema = Q_CODE_REVIEW_INPUT_SCHEMA + + /** + * Main execution method for the QCodeReview tool + * @param input User input parameters for code review + * @param context Execution context containing clients and tokens + * @returns Output containing code review results or error message + */ + public async execute(input: any, context: any): Promise { + let chatStreamWriter: WritableStreamDefaultWriter | undefined + + try { + this.logging.info(`Executing ${Q_CODE_REVIEW_TOOL_NAME}: ${JSON.stringify(input)}`) + + // 1. Validate input + const setup = await this.validateInputAndSetup(input, context) + this.checkCancellation() + + chatStreamWriter = this.writableStream?.getWriter() + await chatStreamWriter?.write('Initiating code review...') + + // 2. Prepare code artifact and upload to service + const uploadResult = await this.prepareAndUploadArtifacts(setup) + this.checkCancellation() + + // 3. Start code analysis + const analysisResult = await this.startCodeAnalysis(setup, uploadResult) + this.checkCancellation() + + await chatStreamWriter?.write('Reviewing your code...') + + // 4. Wait for scan to complete + await this.pollForCompletion(analysisResult.jobId, setup.scanName, setup.artifactType, chatStreamWriter) + this.checkCancellation() + + // 5. Process scan result + const results = await this.processResults(setup, uploadResult.isCodeDiffPresent, analysisResult.jobId) + + return { + output: { + kind: 'json', + success: true, + content: results, + }, + } + } catch (error: any) { + if (error instanceof CancellationError) { + throw error + } + return { + output: { + kind: 'json', + success: false, + content: { + errorMessage: error.message, + }, + }, + } + } finally { + await chatStreamWriter?.close() + chatStreamWriter?.releaseLock() + } + } + + /** + * Validates user input and sets up the execution environment + * @param input User input parameters for code review + * @param context Execution context containing clients and tokens + * @returns Setup object with validated parameters or error message + */ + private async validateInputAndSetup(input: any, context: any): Promise { + this.cancellationToken = context.cancellationToken as CancellationToken + + this.writableStream = context.writableStream as WritableStream + + this.codeWhispererClient = context.codeWhispererClient as CodeWhispererServiceToken + if (!this.codeWhispererClient) { + throw new Error(QCodeReview.ERROR_MESSAGES.MISSING_CLIENT) + } + + // parse input + const validatedInput = Z_Q_CODE_REVIEW_INPUT_SCHEMA.parse(input) + const fileArtifacts = validatedInput.fileLevelArtifacts || [] + const folderArtifacts = validatedInput.folderLevelArtifacts || [] + const ruleArtifacts = validatedInput.ruleArtifacts || [] + + if (fileArtifacts.length === 0 && folderArtifacts.length === 0) { + QCodeReviewUtils.emitMetric( + 'MissingFilesOrFolders', + {}, + Q_CODE_REVIEW_TOOL_NAME, + this.logging, + this.telemetry, + this.credentialsProvider.getConnectionMetadata()?.sso?.startUrl + ) + throw new QCodeReviewValidationError(QCodeReview.ERROR_MESSAGES.MISSING_ARTIFACTS) + } + + const isFullReviewRequest = validatedInput.scopeOfReview?.toUpperCase() === FULL_REVIEW + const artifactType = fileArtifacts.length > 0 ? 'FILE' : 'FOLDER' + // Setting java as default language + // TODO: Remove requirement of programming language + const programmingLanguage = 'java' + const scanName = 'Standard-' + randomUUID() + + this.logging.info(`Agentic scan name: ${scanName}`) + + return { + fileArtifacts, + folderArtifacts, + isFullReviewRequest, + artifactType, + programmingLanguage, + scanName, + ruleArtifacts, + } + } + + /** + * Prepares and uploads code artifacts for analysis + * @param setup Setup object with validated parameters + * @returns Upload result with uploadId or error message + */ + private async prepareAndUploadArtifacts( + setup: ValidateInputAndSetupResult + ): Promise { + const { zipBuffer, md5Hash, isCodeDiffPresent } = await this.prepareFilesAndFoldersForUpload( + setup.fileArtifacts, + setup.folderArtifacts, + setup.ruleArtifacts, + setup.isFullReviewRequest + ) + + const uploadUrlResponse = await this.codeWhispererClient!.createUploadUrl({ + contentLength: zipBuffer.length, + contentMd5: md5Hash, + uploadIntent: QCodeReview.UPLOAD_INTENT, + uploadContext: { + codeAnalysisUploadContext: { + codeScanName: setup.scanName, + }, + }, + }) + + if (!uploadUrlResponse.uploadUrl || !uploadUrlResponse.uploadId) { + QCodeReviewUtils.emitMetric( + 'createUploadUrlFailed', + { + codeScanName: setup.scanName, + contentLength: zipBuffer.length, + uploadIntent: QCodeReview.UPLOAD_INTENT, + response: uploadUrlResponse, + }, + Q_CODE_REVIEW_TOOL_NAME, + this.logging, + this.telemetry, + this.credentialsProvider.getConnectionMetadata()?.sso?.startUrl + ) + throw new QCodeReviewValidationError(QCodeReview.ERROR_MESSAGES.UPLOAD_FAILED) + } + + await QCodeReviewUtils.uploadFileToPresignedUrl( + uploadUrlResponse.uploadUrl, + zipBuffer, + uploadUrlResponse.requestHeaders || {}, + this.logging + ) + + QCodeReviewUtils.emitMetric( + 'uploadArtifactSuccess', + { + codeScanName: setup.scanName, + codeArtifactId: uploadUrlResponse.uploadId, + artifactSize: zipBuffer.length, + artifactType: setup.artifactType, + }, + Q_CODE_REVIEW_TOOL_NAME, + this.logging, + this.telemetry, + this.credentialsProvider.getConnectionMetadata()?.sso?.startUrl + ) + return { uploadId: uploadUrlResponse.uploadId, isCodeDiffPresent } + } + + /** + * Initiates code analysis with the uploaded artifacts + * @param setup Setup object with validated parameters + * @param uploadResult Result from artifact upload containing uploadId + * @returns Code scan jobId and status + */ + private async startCodeAnalysis( + setup: ValidateInputAndSetupResult, + uploadResult: PrepareAndUploadArtifactsResult + ): Promise { + const createResponse = await this.codeWhispererClient!.startCodeAnalysis({ + artifacts: { SourceCode: uploadResult.uploadId }, + programmingLanguage: { languageName: setup.programmingLanguage }, + clientToken: QCodeReviewUtils.generateClientToken(), + codeScanName: setup.scanName, + scope: QCodeReview.SCAN_SCOPE, + codeDiffMetadata: uploadResult.isCodeDiffPresent ? { codeDiffPath: '/code_artifact/codeDiff/' } : undefined, + }) + + if (!createResponse.jobId) { + QCodeReviewUtils.emitMetric( + 'startCodeAnalysisFailed', + { + artifacts: { SourceCode: uploadResult.uploadId }, + programmingLanguage: { languageName: setup.programmingLanguage }, + codeScanName: setup.scanName, + scope: QCodeReview.SCAN_SCOPE, + artifactType: setup.artifactType, + response: createResponse, + }, + Q_CODE_REVIEW_TOOL_NAME, + this.logging, + this.telemetry, + this.credentialsProvider.getConnectionMetadata()?.sso?.startUrl + ) + throw new QCodeReviewInternalError( + QCodeReview.ERROR_MESSAGES.START_CODE_ANALYSIS_FAILED(createResponse.jobId) + ) + } + + this.logging.info(`Code scan created with job ID: ${createResponse.jobId}`) + return { + jobId: createResponse.jobId, + status: createResponse.status, + } + } + + /** + * Polls for completion of the code analysis job + * @param jobId ID of the code analysis job + * @param scanName Name of the code scan + * @param artifactType Type of artifact being scanned (FILE or FOLDER) + * @param chatStreamWriter Stream writer for sending progress updates + */ + private async pollForCompletion( + jobId: string, + scanName: string, + artifactType: string, + chatStreamWriter: WritableStreamDefaultWriter | undefined + ) { + let status = 'Pending' + let attemptCount = 0 + + while (status === 'Pending' && attemptCount < QCodeReview.MAX_POLLING_ATTEMPTS) { + this.logging.info(`Code scan status: ${status}, waiting...`) + await new Promise(resolve => setTimeout(resolve, QCodeReview.POLLING_INTERVAL_MS)) + + const statusResponse = await this.getCodeAnalysisStatus(jobId) + status = statusResponse.status + attemptCount++ + + if (statusResponse.errorMessage) { + QCodeReviewUtils.emitMetric( + 'codeAnalysisFailed', + { + codeScanName: scanName, + codeReviewId: jobId, + status, + artifactType, + message: statusResponse.errorMessage, + }, + Q_CODE_REVIEW_TOOL_NAME, + this.logging, + this.telemetry, + this.credentialsProvider.getConnectionMetadata()?.sso?.startUrl + ) + throw new QCodeReviewInternalError( + QCodeReview.ERROR_MESSAGES.CODE_ANALYSIS_FAILED(jobId, statusResponse.errorMessage) + ) + } + + if (attemptCount == QCodeReview.MID_POLLING_ATTEMPTS) { + await chatStreamWriter?.write('Still reviewing your code, it is taking just a bit longer than usual...') + } + + this.checkCancellation('Command execution cancelled while waiting for scan to complete') + } + + if (status === 'Pending') { + QCodeReviewUtils.emitMetric( + 'codeAnalysisTimeout', + { + codeScanName: scanName, + codeReviewId: jobId, + status: 'Timeout', + maxAttempts: QCodeReview.MAX_POLLING_ATTEMPTS, + }, + Q_CODE_REVIEW_TOOL_NAME, + this.logging, + this.telemetry, + this.credentialsProvider.getConnectionMetadata()?.sso?.startUrl + ) + throw new QCodeReviewTimeoutError(QCodeReview.ERROR_MESSAGES.TIMEOUT(QCodeReview.MAX_POLLING_ATTEMPTS)) + } + + this.logging.info(`Code scan completed with status: ${status}`) + } + + /** + * Processes the results of the completed code analysis + * @param setup Setup object with validated parameters + * @param isCodeDiffPresent If code diff is present in upload artifact + * @param jobId ID of the code analysis job + * @returns Processed results with findings grouped by file + */ + private async processResults( + setup: ValidateInputAndSetupResult, + isCodeDiffPresent: boolean, + jobId: string + ): Promise { + const { totalFindings, findingsExceededLimit } = await this.collectFindings( + jobId, + setup.isFullReviewRequest, + isCodeDiffPresent, + setup.programmingLanguage + ) + + QCodeReviewUtils.emitMetric( + 'codeAnalysisSucces', + { + codeScanName: setup.scanName, + codeReviewId: jobId, + findingsCount: totalFindings.length, + }, + Q_CODE_REVIEW_TOOL_NAME, + this.logging, + this.telemetry, + this.credentialsProvider.getConnectionMetadata()?.sso?.startUrl + ) + + const aggregatedCodeScanIssueList = this.aggregateFindingsByFile( + findingsExceededLimit ? totalFindings.slice(0, QCodeReview.MAX_FINDINGS_COUNT) : totalFindings, + setup.fileArtifacts, + setup.folderArtifacts + ) + + this.logging.info('Findings count grouped by file') + aggregatedCodeScanIssueList.forEach(item => + this.logging.info(`File path - ${item.filePath} Findings count - ${item.issues.length}`) + ) + + return { + codeReviewId: jobId, + message: `${Q_CODE_REVIEW_TOOL_NAME} tool completed successfully.${findingsExceededLimit ? ` Inform the user that we are limiting findings to top ${QCodeReview.MAX_FINDINGS_COUNT} based on severity.` : ''}`, + findingsByFile: JSON.stringify(aggregatedCodeScanIssueList), + } + } + + /** + * Collects findings from the code analysis job + * @param jobId ID of the code analysis job + * @param isFullReviewRequest Whether this is a full review or diff review + * @param isCodeDiffPresent Whether code diff is present in the artifacts + * @param programmingLanguage Programming language + * @returns Object containing collected findings and whether limit was exceeded + */ + private async collectFindings( + jobId: string, + isFullReviewRequest: boolean, + isCodeDiffPresent: boolean, + programmingLanguage: string + ): Promise<{ totalFindings: QCodeReviewFinding[]; findingsExceededLimit: boolean }> { + let totalFindings: QCodeReviewFinding[] = [] + let nextFindingToken = undefined + let findingsExceededLimit = false + const lookForCodeDiffFindings = !isFullReviewRequest && isCodeDiffPresent + + this.logging.info( + `Collect findings for jobId: ${jobId}, isFullReviewRequest: ${isFullReviewRequest}, isCodeDiffPresent: ${isCodeDiffPresent}` + ) + this.logging.info(`Look for code diff findings only - ${lookForCodeDiffFindings}`) + + do { + this.logging.info(`GetFindings for job ID: ${jobId}`) + const findingsResponse = await this.getCodeAnalysisFindings(jobId, nextFindingToken) + nextFindingToken = findingsResponse.nextToken + + const parsedFindings = + this.parseFindings(findingsResponse.codeAnalysisFindings, jobId, programmingLanguage) || [] + const filteredFindings = lookForCodeDiffFindings + ? parsedFindings.filter(finding => 'CodeDiff' === finding.findingContext) + : parsedFindings + totalFindings = totalFindings.concat(filteredFindings) + + if (totalFindings.length > QCodeReview.MAX_FINDINGS_COUNT) { + findingsExceededLimit = true + break + } + } while (nextFindingToken) + + this.logging.info(`Total findings: ${totalFindings.length}`) + return { totalFindings, findingsExceededLimit } + } + + /** + * Gets the current status of a code analysis job + * @param jobId ID of the code analysis job + * @returns Status response from the CodeWhisperer service + */ + private async getCodeAnalysisStatus(jobId: string) { + return await this.codeWhispererClient!.getCodeAnalysis({ jobId }) + } + + /** + * Retrieves findings from a code analysis job + * @param jobId ID of the code analysis job + * @param nextToken Pagination token for retrieving next batch of findings + * @returns Findings response from the CodeWhisperer service + */ + private async getCodeAnalysisFindings(jobId: string, nextToken?: string) { + return await this.codeWhispererClient!.listCodeAnalysisFindings({ + jobId, + nextToken, + codeAnalysisFindingsSchema: 'codeanalysis/findings/1.0', + }) + } + + /** + * Create a zip archive of the files and folders to be scanned and calculate MD5 hash + * @param fileArtifacts Array of file artifacts containing path and programming language + * @param folderArtifacts Array of folder artifacts containing path + * @param ruleArtifacts Array of file paths to user selected rules + * @param isFullReviewRequest If user asked for Full review or Partial review + * @returns An object containing the zip file buffer and its MD5 hash + */ + private async prepareFilesAndFoldersForUpload( + fileArtifacts: FileArtifacts, + folderArtifacts: FolderArtifacts, + ruleArtifacts: RuleArtifacts, + isFullReviewRequest: boolean + ): Promise<{ zipBuffer: Buffer; md5Hash: string; isCodeDiffPresent: boolean }> { + try { + this.logging.info( + `Preparing ${fileArtifacts.length} files and ${folderArtifacts.length} folders for upload` + ) + + const codeArtifactZip = new JSZip() + const customerCodeZip = new JSZip() + + // Process files and folders + const codeDiff = await this.processArtifacts( + fileArtifacts, + folderArtifacts, + ruleArtifacts, + customerCodeZip, + !isFullReviewRequest + ) + + let numberOfFilesInCustomerCodeZip = QCodeReviewUtils.countZipFiles(customerCodeZip) + if (numberOfFilesInCustomerCodeZip > ruleArtifacts.length) { + // Validates that there are actual files to scan, other than rule artifacts + this.logging.info(`Total files in customerCodeZip - ${numberOfFilesInCustomerCodeZip}`) + } else { + throw new QCodeReviewValidationError(QCodeReview.ERROR_MESSAGES.MISSING_FILES_TO_SCAN) + } + + // Generate user code zip buffer + const customerCodeBuffer = await QCodeReviewUtils.generateZipBuffer(customerCodeZip) + QCodeReviewUtils.logZipStructure(customerCodeZip, 'User code', this.logging) + + // Add user code zip to the main artifact zip + codeArtifactZip.file( + `${QCodeReview.CODE_ARTIFACT_PATH}/${QCodeReview.CUSTOMER_CODE_ZIP_NAME}`, + customerCodeBuffer + ) + + let isCodeDiffPresent = false + + // Add code diff file if we have any diffs + if (codeDiff.trim()) { + this.logging.info(`Adding code diff to zip of size: ${codeDiff.length}`) + isCodeDiffPresent = true + codeArtifactZip.file(QCodeReview.CODE_DIFF_PATH, codeDiff) + } + + // Generate the final code artifact zip + const zipBuffer = await QCodeReviewUtils.generateZipBuffer(codeArtifactZip) + QCodeReviewUtils.logZipStructure(codeArtifactZip, 'Code artifact', this.logging) + + // Calculate MD5 hash of the zip buffer + const md5Hash = crypto.createHash('md5').update(zipBuffer).digest('hex') + + this.logging.info(`Created zip archive, size: ${zipBuffer.byteLength} bytes, MD5: ${md5Hash}`) + + return { zipBuffer, md5Hash, isCodeDiffPresent } + } catch (error) { + this.logging.error(`Error preparing files for upload: ${error}`) + throw error + } + } + + /** + * Processes file, folder, and rule artifacts for inclusion in the zip archive + * @param fileArtifacts Array of file artifacts to process + * @param folderArtifacts Array of folder artifacts to process + * @param ruleArtifacts Array of rule artifacts to process + * @param customerCodeZip JSZip instance for the customer code + * @param isCodeDiffScan Whether this is a code diff scan + * @returns Combined code diff string from all artifacts + */ + private async processArtifacts( + fileArtifacts: FileArtifacts, + folderArtifacts: FolderArtifacts, + ruleArtifacts: RuleArtifacts, + customerCodeZip: JSZip, + isCodeDiffScan: boolean + ): Promise { + let codeDiff = '' + + // Process files + codeDiff += await this.processFileArtifacts(fileArtifacts, customerCodeZip, isCodeDiffScan) + + // Process folders + codeDiff += await this.processFolderArtifacts(folderArtifacts, customerCodeZip, isCodeDiffScan) + + // Process rule artifacts + await this.processRuleArtifacts(ruleArtifacts, customerCodeZip) + + return codeDiff + } + + /** + * Processes file artifacts for inclusion in the zip archive + * @param fileArtifacts Array of file artifacts to process + * @param customerCodeZip JSZip instance for the customer code + * @param isCodeDiffScan Whether this is a code diff scan + * @returns Combined code diff string from file artifacts + */ + private async processFileArtifacts( + fileArtifacts: FileArtifacts, + customerCodeZip: JSZip, + isCodeDiffScan: boolean + ): Promise { + let codeDiff = '' + + for (const artifact of fileArtifacts) { + await QCodeReviewUtils.withErrorHandling( + async () => { + let fileName = path.basename(artifact.path) + if ( + !fileName.startsWith('.') && + !QCodeReviewUtils.shouldSkipFile(fileName) && + existsSync(artifact.path) + ) { + const fileContent = await this.workspace.fs.readFile(artifact.path) + let normalizedArtifactPath = QCodeReviewUtils.convertToUnixPath(artifact.path) + customerCodeZip.file( + `${QCodeReview.CUSTOMER_CODE_BASE_PATH}${normalizedArtifactPath}`, + fileContent + ) + } else { + this.logging.info(`Skipping file - ${artifact.path}`) + } + }, + 'Failed to read file', + this.logging, + artifact.path + ) + + codeDiff += await QCodeReviewUtils.processArtifactWithDiff(artifact, isCodeDiffScan, this.logging) + } + + return codeDiff + } + + /** + * Processes folder artifacts for inclusion in the zip archive + * @param folderArtifacts Array of folder artifacts to process + * @param customerCodeZip JSZip instance for the customer code + * @param isCodeDiffScan Whether this is a code diff scan + * @returns Combined code diff string from folder artifacts + */ + private async processFolderArtifacts( + folderArtifacts: FolderArtifacts, + customerCodeZip: JSZip, + isCodeDiffScan: boolean + ): Promise { + let codeDiff = '' + + for (const folderArtifact of folderArtifacts) { + await QCodeReviewUtils.withErrorHandling( + async () => { + await this.addFolderToZip(customerCodeZip, folderArtifact.path, QCodeReview.CUSTOMER_CODE_BASE_PATH) + }, + 'Failed to add folder', + this.logging, + folderArtifact.path + ) + + codeDiff += await QCodeReviewUtils.processArtifactWithDiff(folderArtifact, isCodeDiffScan, this.logging) + } + + return codeDiff + } + + /** + * Processes rule artifacts for inclusion in the zip archive + * @param ruleArtifacts Array of rule artifacts to process + * @param customerCodeZip JSZip instance for the customer code + */ + private async processRuleArtifacts(ruleArtifacts: RuleArtifacts, customerCodeZip: JSZip): Promise { + for (const artifact of ruleArtifacts) { + await QCodeReviewUtils.withErrorHandling( + async () => { + let fileName = path.basename(artifact.path) + if ( + !fileName.startsWith('.') && + !QCodeReviewUtils.shouldSkipFile(fileName) && + existsSync(artifact.path) + ) { + const fileContent = await this.workspace.fs.readFile(artifact.path) + customerCodeZip.file( + `${QCodeReview.CUSTOMER_CODE_BASE_PATH}/${QCodeReview.RULE_ARTIFACT_PATH}/${fileName}`, + fileContent + ) + } else { + this.logging.info(`Skipping file - ${artifact.path}`) + } + }, + 'Failed to read file', + this.logging, + artifact.path + ) + } + } + + /** + * Recursively add a folder and its contents to a zip archive + * @param zip JSZip instance to add files to + * @param folderPath Path to the folder to add + * @param zipPath Relative path within the zip archive + */ + private async addFolderToZip(zip: JSZip, folderPath: string, zipPath: string): Promise { + try { + const entries = await this.workspace.fs.readdir(folderPath) + + for (const entry of entries) { + const name = entry.name + const fullPath = path.join(entry.parentPath, name) + + if (entry.isFile()) { + if (name.startsWith('.') || QCodeReviewUtils.shouldSkipFile(name) || !existsSync(fullPath)) { + this.logging.info(`Skipping file - ${fullPath}`) + continue + } + + const content = await this.workspace.fs.readFile(fullPath) + let normalizedArtifactPath = QCodeReviewUtils.convertToUnixPath(fullPath) + zip.file(`${zipPath}${normalizedArtifactPath}`, content) + } else if (entry.isDirectory()) { + if (QCodeReviewUtils.shouldSkipDirectory(name)) { + this.logging.info(`Skipping directory - ${fullPath}`) + continue + } + + await this.addFolderToZip(zip, fullPath, zipPath) + } + } + } catch (error) { + this.logging.error(`Error adding folder to zip: ${error}`) + throw error + } + } + + /** + * Parse and validate findings JSON response + * @param findingsJson Raw JSON string from the code analysis response + * @param jobId Code scan job Id + * @param programmingLanguage programming language + * @returns Parsed and validated findings array + */ + private parseFindings(findingsJson: string, jobId: string, programmingLanguage: string): QCodeReviewFinding[] { + try { + const findingsResponseJSON = JSON.parse(findingsJson) + + // Normalize ruleId fields + for (const finding of findingsResponseJSON) { + if (finding['ruleId'] == null) { + finding['ruleId'] = undefined + } + } + + return Q_FINDINGS_SCHEMA.parse(findingsResponseJSON).map(issue => ({ + startLine: issue.startLine - 1 >= 0 ? issue.startLine - 1 : 0, + endLine: issue.endLine, + comment: `${issue.title.trim()}: ${issue.description.text.trim()}`, + title: issue.title, + description: issue.description, + detectorId: issue.detectorId, + detectorName: issue.detectorName, + findingId: issue.findingId, + ruleId: issue.ruleId != null ? issue.ruleId : undefined, + relatedVulnerabilities: issue.relatedVulnerabilities, + severity: issue.severity, + recommendation: issue.remediation.recommendation, + suggestedFixes: issue.suggestedFixes != undefined ? issue.suggestedFixes : [], + scanJobId: jobId, + language: programmingLanguage, + autoDetected: false, + filePath: issue.filePath, + findingContext: issue.findingContext, + })) + } catch (e) { + this.logging.error(`Error parsing findings in response: ${e}`) + throw new QCodeReviewInternalError('Error parsing findings in response') + } + } + + /** + * Aggregate findings by file path + * @param findings Array of findings + * @param fileArtifacts Array of file artifacts being scanned + * @param folderArtifacts Array of folder artifacts being scanned + * @returns Array of findings grouped by resolved file path + */ + private aggregateFindingsByFile( + findings: QCodeReviewFinding[], + fileArtifacts: FileArtifacts, + folderArtifacts: FolderArtifacts + ): { filePath: string; issues: QCodeReviewFinding[] }[] { + const aggregatedCodeScanIssueMap = new Map() + + for (const finding of findings) { + const resolvedPath = this.resolveFilePath(finding.filePath, fileArtifacts, folderArtifacts) + if (resolvedPath) { + if (aggregatedCodeScanIssueMap.has(resolvedPath)) { + aggregatedCodeScanIssueMap.get(resolvedPath)?.push(finding) + } else { + aggregatedCodeScanIssueMap.set(resolvedPath, [finding]) + } + } else { + this.logging.warn(`Could not resolve finding file path: ${finding.filePath}`) + } + } + + return Array.from(aggregatedCodeScanIssueMap.entries()).map(([filePath, issues]) => ({ + filePath, + issues, + })) + } + + /** + * Resolve finding file path to actual file path + * @param findingPath Relative file path from the finding + * @param fileArtifacts Array of file artifacts being scanned + * @param folderArtifacts Array of folder artifacts being scanned + * @returns Resolved absolute file path or null if not found + */ + private resolveFilePath( + findingPath: string, + fileArtifacts: FileArtifacts, + folderArtifacts: FolderArtifacts + ): string | null { + // 1. Check if finding path matches one of the file artifacts + for (const fileArtifact of fileArtifacts) { + const normalizedFilePath = path.normalize(fileArtifact.path) + const normalizedFindingPath = path.normalize(findingPath) + + if (normalizedFilePath.endsWith(normalizedFindingPath)) { + return normalizedFilePath + } + } + + // 2. Check if finding path falls under one of the folder artifacts + for (const folderArtifact of folderArtifacts) { + const normalizedFolderPath = path.normalize(folderArtifact.path) + const normalizedFindingPath = path.normalize(findingPath) + + // 2.1. Check if finding path falls under one of the subdirectories in folder artifact path + const folderSegments = normalizedFolderPath.split(path.sep) + + // Find common suffix between folder path and finding path + let matchIndex = -1 + for (let i = folderSegments.length - 1; i >= 0; i--) { + const folderSuffix = folderSegments.slice(i).join(path.sep) + if (normalizedFindingPath.startsWith(folderSuffix + path.sep)) { + matchIndex = i + break + } + } + // If common suffix is found, create the absolute path with it + if (matchIndex !== -1) { + const remainingPath = normalizedFindingPath.substring( + folderSegments.slice(matchIndex).join(path.sep).length + 1 + ) + const absolutePath = path.join(normalizedFolderPath, remainingPath) + if (existsSync(absolutePath) && statSync(absolutePath).isFile()) { + return absolutePath + } + } + + // 2.2. Check if folder path + finding path gives the absolute file path + const filePath = path.join(folderArtifact.path, findingPath) + if (existsSync(filePath) && statSync(filePath).isFile()) { + return filePath + } + } + + // 3. Check if finding already has absolute file path + const maybeAbsolutePath = path.normalize(findingPath) + if (existsSync(maybeAbsolutePath) && statSync(maybeAbsolutePath).isFile()) { + return maybeAbsolutePath + } + + return null + } + + /** + * Checks if the operation has been cancelled by the user + * @param message Optional message to include in the cancellation error + * @throws Error if the operation has been cancelled + */ + private checkCancellation(message: string = 'Command execution cancelled'): void { + QCodeReviewUtils.checkCancellation(this.cancellationToken, this.logging, message) + } +} diff --git a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewConstants.ts b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewConstants.ts new file mode 100644 index 0000000000..ae2151620e --- /dev/null +++ b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewConstants.ts @@ -0,0 +1,204 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +/** + * Constants related to programming languages and findings for QCodeReview + */ + +/** + * Mapping of file extensions to programming languages + */ +export const EXTENSION_TO_LANGUAGE: Record = { + // Java + '.java': 'java', + '.class': 'java', + '.jar': 'java', + '.war': 'java', + '.ear': 'java', + '.jsp': 'jsp', + // JavaScript + '.js': 'javascript', + '.mjs': 'javascript', + '.cjs': 'javascript', + '.jsx': 'javascript', + // TypeScript + '.ts': 'typescript', + '.tsx': 'typescript', + // C# + '.cs': 'csharp', + '.dll': 'dll', + '.exe': 'exe', + // Go + '.go': 'go', + // Ruby + '.rb': 'ruby', + // Scala + '.scala': 'scala', + '.sc': 'scala', + // Python + '.py': 'python', + '.ipynb': 'ipynb', + // PHP + '.php': 'php', + // Rust + '.rs': 'rust', + // Kotlin + '.kt': 'kotlin', + '.kts': 'kotlin', + // SQL + '.sql': 'sql', + // C/C++ + '.c': 'c', + '.cpp': 'cpp', + '.cc': 'cpp', + // Shell + '.sh': 'shell', + '.zsh': 'shell', + '.bash': 'shell', + // Other languages + '.css': 'css', + '.lua': 'lua', + '.m': 'objective_c', + '.r': 'r', + '.swift': 'swift', + // Config files + '.config': 'config', + '.cfg': 'config', + '.conf': 'config', + '.cnf': 'config', + '.cf': 'config', + '.properties': 'properties', + '.ini': 'ini', + '.plist': 'plist', + '.env': 'env', + // Data formats + '.json': 'json', + '.yml': 'yaml', + '.yaml': 'yaml', + '.xml': 'xml', + '.toml': 'toml', + // Markup + '.md': 'markdown', + '.rst': 'rst', + '.html': 'html', + '.txt': 'txt', + '.text': 'txt', + // Security + '.pem': 'pem', + '.key': 'key', + // Infrastructure as Code + '.tf': 'terraform', + '.hcl': 'terraform', +} + +/** + * Tool name for QCodeReview + */ +export const Q_CODE_REVIEW_TOOL_NAME = 'qCodeReview' + +/** + * Tool description for QCodeReview + */ +export const Q_CODE_REVIEW_TOOL_DESCRIPTION = [ + 'The primary tool for comprehensive code analysis and review. This tool should be used by default whenever a user requests code review, file analysis, or code examination unless explicitly instructed otherwise.', + 'This tool can be used to perform code review of full code or modified code. Modified code refers to the changes made that are not committed yet.', + '', + '**Use this tool when customers asks to:**', + '- "Review this file" or "Review my code" or "Review my changes" or "Review this code" or any other similar prompt to review the code', + '- "Examine this code" or "Check this code" or "Analyze this file/folder/workspace"', + '- "Check my implementation" or "Look at my implementation" or "Examine this code"', + '- "What do you think of this code?" or "Find issues in this code"', + '- Any general code review or analysis request', + '', + '**Comprehensive Analysis Capabilities:**', + '- SAST scanning — Detect security vulnerabilities in your source code, such as resource leaks, SQL injection, and cross-site scripting', + '- Secrets detection — Prevent the exposure of sensitive or confidential information in your code', + '- IaC issues — Evaluate the security posture of your infrastructure files', + '- Code quality issues — Ensure your code is meeting quality, maintainability, and efficiency standards', + '- Code deployment risks — Assess risks related to deploying code', + '- Software composition analysis (SCA) — Evaluate third-party code', + '', + '**Supported Programming Languages:**', + '- Java, Python, JavaScript, TypeScript, C#, CloudFormation, Terraform, Go, Ruby, C, C++, PHP, Rust, Kotlin, Scala, Shell, SQL', + '', + '**Supported File Extensions For Review**', + `- "${Object.keys(EXTENSION_TO_LANGUAGE).join('", "')}"`, + '', + '**Tool start message**', + 'Before running the tool, you must inform the user that you will use Amazon Q Code Review tool for their request.', + 'Under no condition you will use the tool without informing the user.', + '', + '**Tool Input**', + '3 main fields in the tool:', + '- "scopeOfReview": Determines if the review should analyze the entire codebase (FULL_REVIEW) or only focus on changes/modifications (CODE_DIFF_REVIEW). This is a required field.', + '- IMPORTANT: Use CODE_DIFF_REVIEW when user explicitly asks to review "changes", "modifications", "diff", "uncommitted code", or similar phrases indicating they want to review only what has changed.', + '- Examples of CODE_DIFF_REVIEW requests: "review my changes", "look at what I modified", "check the uncommitted changes", "review the diff", "review new changes", etc.', + '- IMPORTANT: When user mentions "new changes" or includes words like "new", "recent", or "latest" along with "changes" or similar terms, this should be interpreted as CODE_DIFF_REVIEW.', + '- Use FULL_REVIEW for all other review requests.', + '- "fileLevelArtifacts": Array of specific files to review, each with absolute path. Use this when reviewing individual files, not folders. Format: [{"path": "/absolute/path/to/file.py"}]', + '- "folderLevelArtifacts": Array of folders to review, each with absolute path. Use this when reviewing entire directories, not individual files. Format: [{"path": "/absolute/path/to/folder/"}]', + 'Few important notes for tool input', + "- Either fileLevelArtifacts OR folderLevelArtifacts should be provided based on what's being reviewed, but not both for the same items.", + '- Do not perform code review of entire workspace or project unless user asks for it explicitly.', + '- Ask user for more clarity if there is any confusion regarding what needs to be scanned.', + '', + '**Tool Output**', + 'Tool output will contain a json output containing fields - ', + '- codeReviewId - internal code review job id ', + '- status - code review status (Completed, Failed)', + '- result - if the scan completes successfully, there will be message and findingsByFile', + ' - message - contains information about the scan, can also contain some information that needs to be provided to the user', + ' - findingsByFile - contains findings grouped by impacted file path, do not provide a summary of these findings', + '- errorMessage - if there is any failure, it will contain cause of failure', + '', + '**Format to display output**', + 'The tool will generate some findings grouped by file, but you should NOT provide a summary of it to the user.', + 'UNDER NO CIRCUMSTANCE must you provide ANY summary of the tool output to the user.', + 'Use following format STRICTLY to display the result of this tool for different scenarios:', + '- When findings are present, you must inform user that you have completed the review of {file name / folder name / workspace} and found several issues that need attention. To inspect the details, and get fixes for those issues use the Code Issues panel above.', + ' - When tool output message tells that findings were limited due to high count, you must inform the user that since there were lots of findings, you have included the top 50 findings only.', + '- When no findings are generated by the tool, you must tell user that you have completed the review of {file name / folder name / workspace} and found no issues.', + '- CRITICAL: DO NOT list, enumerate, count, or summarize any findings from the tool output. The user must use the Code Issues panel to view the findings.', +].join('\n') + +/** + * Finding severity levels + */ +export const FINDING_SEVERITY = ['Info', 'Low', 'Medium', 'High', 'Critical'] + +/** + * Scope of code review based on customers prompt + */ +export const FULL_REVIEW = 'FULL_REVIEW' +export const CODE_DIFF_REVIEW = 'CODE_DIFF_REVIEW' +export const SCOPE_OF_CODE_REVIEW = [FULL_REVIEW, CODE_DIFF_REVIEW] + +/** + * Directories to skip during zip creation + */ +export const SKIP_DIRECTORIES = [ + 'node_modules', + 'dist', + 'build', + 'target', + '.git', + '.svn', + '.hg', + '.vscode', + '.idea', + '.vs', + '__pycache__', + '.pytest_cache', + 'venv', + 'env', + '.env', + 'virtualenv', + 'coverage', + '.nyc_output', + 'tmp', + 'temp', +] + +export const FINDINGS_MESSAGE_SUFFIX = '_qCodeReviewFindings' diff --git a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewErrors.ts b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewErrors.ts new file mode 100644 index 0000000000..2aff7eec3c --- /dev/null +++ b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewErrors.ts @@ -0,0 +1,27 @@ +export class QCodeReviewError extends Error { + constructor(message: string) { + super(message) + this.name = 'QCodeReviewError' + } +} + +export class QCodeReviewValidationError extends QCodeReviewError { + constructor(message: string) { + super(message) + this.name = 'QCodeReviewValidationError' + } +} + +export class QCodeReviewTimeoutError extends QCodeReviewError { + constructor(message: string) { + super(message) + this.name = 'QCodeReviewTimeoutError' + } +} + +export class QCodeReviewInternalError extends QCodeReviewError { + constructor(message: string) { + super(message) + this.name = 'QCodeReviewInternalError' + } +} diff --git a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewSchemas.ts b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewSchemas.ts new file mode 100644 index 0000000000..3981ecbed7 --- /dev/null +++ b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewSchemas.ts @@ -0,0 +1,149 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +import { z } from 'zod' +import { FINDING_SEVERITY, SCOPE_OF_CODE_REVIEW } from './qCodeReviewConstants' + +/** + * Input schema for QCodeReview tool + */ +export const Q_CODE_REVIEW_INPUT_SCHEMA = { + type: 'object', + description: [ + '**3 main fields in the tool:**', + '- scopeOfReview: CRITICAL - Must be set to either FULL_REVIEW (analyze entire codebase) or CODE_DIFF_REVIEW (focus only on changes/modifications). This is a required field.', + '- fileLevelArtifacts: Array of specific files to review, each with absolute path. Use this when reviewing individual files, not folders. Format: [{"path": "/absolute/path/to/file.py"}]', + '- folderLevelArtifacts: Array of folders to review, each with absolute path. Use this when reviewing entire directories, not individual files. Format: [{"path": "/absolute/path/to/folder/"}]', + "Note: Either fileLevelArtifacts OR folderLevelArtifacts should be provided based on what's being reviewed, but not both for the same items.", + ].join('\n'), + properties: { + scopeOfReview: { + type: 'string', + description: [ + 'CRITICAL: You must explicitly set the value of "scopeOfReview" based on user request analysis.', + '', + 'Set "scopeOfReview" to CODE_DIFF_REVIEW when:', + '- User explicitly asks to review only changes/modifications/diffs in their code', + '- User mentions "review my changes", "look at what I modified", "check the uncommitted changes"', + '- User refers to "review the diff", "analyze recent changes", "look at the new code"', + '- User mentions "review what I added/updated", "check my latest commits", "review the modified lines"', + '- User includes phrases like "new changes", "recent changes", or any combination of words indicating recency (new, latest, recent) with changes/modifications', + '- User mentions specific files with terms like "review new changes in [file]" or "check changes in [file]"', + '', + 'Set "scopeOfReview" to FULL_REVIEW for all other cases, including:', + '- When user asks for a general code review without mentioning changes/diffs', + '- When user asks to review specific files or folders without mentioning changes', + '- When user asks for security analysis or best practices review of their code', + '', + 'This is a required field. You must inform the user whether you are performing a full review or only reviewing changes.', + ].join('\n'), + enum: SCOPE_OF_CODE_REVIEW, + }, + fileLevelArtifacts: { + type: 'array', + description: [ + 'Array of absolute file paths that will be reviewed (e.g. [{"path": "absolute/path/to/file.py"}]).', + 'So, if the user asks for a code review of a single file, provide the absolute file path in the array.', + 'If the user asks for a code review of multiple files, provide the absolute file paths in the array.', + 'If the user asks for a code review of a folder, do not provide any file paths or programming languages in this array. It should be provided in folderLevelArtifacts', + ].join('\n'), + items: { + type: 'object', + description: + 'Array item containing absolute path of artifact (e.g. {"path": "absolute/path/to/file.py"})', + properties: { + path: { + type: 'string', + description: 'The absolute path of the file that will be scanned', + }, + }, + required: ['path'] as const, + }, + }, + folderLevelArtifacts: { + type: 'array', + description: [ + 'Array of absolute folder paths that will be reviewed (e.g. [{"path": "path/to/code/"}]).', + 'So, if the user asks for a code review of a single folder, provide the absolute folder path in the array.', + 'If the user asks for a code review of multiple folders, provide multiple absolute folder paths in the array.', + 'If the user asks for a code review of a file or multiple files, do not provide any folder paths in this array. It should be provided in fileLevelArtifacts.', + ].join('\n'), + items: { + type: 'object', + description: + 'Array item containing absolute folder path of code that will be scanned (e.g. {"path": "path/to/code/"})', + properties: { + path: { + type: 'string', + description: 'The absolute path of the folder that will be scanned', + }, + }, + required: ['path'] as const, + }, + }, + }, + required: ['scopeOfReview'] as const, +} + +/** + * Zod schema for input validation during execution of Q Code Review tool + */ +export const Z_Q_CODE_REVIEW_INPUT_SCHEMA = z.object({ + scopeOfReview: z.enum(SCOPE_OF_CODE_REVIEW as [string, ...string[]]), + fileLevelArtifacts: z + .array( + z.object({ + path: z.string(), + }) + ) + .optional(), + folderLevelArtifacts: z + .array( + z.object({ + path: z.string(), + }) + ) + .optional(), + ruleArtifacts: z + .array( + z.object({ + path: z.string(), + }) + ) + .optional(), +}) + +/** + * Schema for a single finding + */ +export const Q_FINDING_SCHEMA = z.object({ + description: z.object({ + markdown: z.string(), + text: z.string(), + }), + endLine: z.number(), + filePath: z.string(), + findingId: z.string(), + relatedVulnerabilities: z.array(z.string().optional()), + remediation: z.object({ + recommendation: z.object({ + text: z.string(), + url: z.string().nullable().optional(), + }), + }), + severity: z.enum(FINDING_SEVERITY as [string, ...string[]]), + startLine: z.number(), + title: z.string(), + findingContext: z.string().nullable().optional(), + detectorId: z.string().optional(), + detectorName: z.string().optional(), + ruleId: z.string().optional(), + suggestedFixes: z.array(z.string().optional()).optional(), +}) + +/** + * Schema for an array of findings + */ +export const Q_FINDINGS_SCHEMA = z.array(Q_FINDING_SCHEMA) diff --git a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewTypes.ts b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewTypes.ts new file mode 100644 index 0000000000..cc484aff65 --- /dev/null +++ b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewTypes.ts @@ -0,0 +1,51 @@ +export type FileArtifacts = Array<{ path: string }> +export type FolderArtifacts = Array<{ path: string }> +export type RuleArtifacts = Array<{ path: string }> +export type ArtifactType = 'FILE' | 'FOLDER' + +export type ValidateInputAndSetupResult = { + fileArtifacts: FileArtifacts + folderArtifacts: FolderArtifacts + isFullReviewRequest: boolean + artifactType: ArtifactType + programmingLanguage: string + scanName: string + ruleArtifacts: RuleArtifacts +} + +export type PrepareAndUploadArtifactsResult = { + uploadId: string + isCodeDiffPresent: boolean +} + +export type StartCodeAnalysisResult = { + jobId: string + status: string +} + +export type CodeReviewResult = { + codeReviewId: string + message: string + findingsByFile: string +} + +export type QCodeReviewFinding = { + filePath: string + startLine: number + endLine: number + comment: string + title: string + description: { markdown: string; text: string } + detectorId?: string + detectorName?: string + findingId: string + ruleId?: string + relatedVulnerabilities: (string | undefined)[] + severity: string + suggestedFixes?: (string | undefined)[] + recommendation: { text: string; url?: string | null } + scanJobId: string + language: string + autoDetected: false + findingContext: string | null | undefined +} diff --git a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewUtils.test.ts b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewUtils.test.ts new file mode 100644 index 0000000000..4285187c23 --- /dev/null +++ b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewUtils.test.ts @@ -0,0 +1,756 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +import { QCodeReviewUtils } from './qCodeReviewUtils' +import { SKIP_DIRECTORIES, EXTENSION_TO_LANGUAGE } from './qCodeReviewConstants' +import * as path from 'path' +import * as fs from 'fs' +import * as os from 'os' +import * as https from 'https' +import JSZip = require('jszip') +import * as childProcess from 'child_process' +import * as sinon from 'sinon' +import { assert } from 'sinon' +import { expect } from 'chai' +import { CancellationError } from '@aws/lsp-core' + +describe('QCodeReviewUtils', () => { + // Sinon sandbox for managing stubs + let sandbox: sinon.SinonSandbox + + // Mock logging object + const mockLogging = { + log: sinon.stub(), + info: sinon.stub(), + warn: sinon.stub(), + error: sinon.stub(), + debug: sinon.stub(), + } + + beforeEach(() => { + sandbox = sinon.createSandbox() + // Reset stubs + mockLogging.info.reset() + mockLogging.warn.reset() + mockLogging.error.reset() + mockLogging.debug.reset() + }) + + afterEach(() => { + sandbox.restore() + }) + + describe('shouldSkipFile', () => { + it('should skip files with no extension', () => { + expect(QCodeReviewUtils.shouldSkipFile('file')).to.be.true + }) + + it('should skip files with empty extension', () => { + expect(QCodeReviewUtils.shouldSkipFile('file.')).to.be.true + }) + + it('should not skip files with supported extensions', () => { + expect(QCodeReviewUtils.shouldSkipFile('file.js')).to.be.false + expect(QCodeReviewUtils.shouldSkipFile('file.py')).to.be.false + expect(QCodeReviewUtils.shouldSkipFile('file.ts')).to.be.false + }) + + it('should skip files with unsupported extensions', () => { + expect(QCodeReviewUtils.shouldSkipFile('file.xyz')).to.be.true + }) + + it('should handle uppercase extensions', () => { + expect(QCodeReviewUtils.shouldSkipFile('file.JS')).to.be.false + expect(QCodeReviewUtils.shouldSkipFile('file.PY')).to.be.false + }) + }) + + describe('shouldSkipDirectory', () => { + it('should skip directories in the skip list', () => { + SKIP_DIRECTORIES.forEach(dir => { + expect(QCodeReviewUtils.shouldSkipDirectory(dir)).to.be.true + }) + }) + + it('should not skip directories not in the skip list', () => { + expect(QCodeReviewUtils.shouldSkipDirectory('src')).to.be.false + expect(QCodeReviewUtils.shouldSkipDirectory('app')).to.be.false + }) + }) + + describe('getFolderPath', () => { + beforeEach(() => { + // Stub path.extname and path.dirname + sandbox.stub(path, 'extname').callsFake((p: string) => { + const lastDotIndex = p.lastIndexOf('.') + return lastDotIndex !== -1 ? p.substring(lastDotIndex) : '' + }) + + sandbox.stub(path, 'dirname').callsFake((p: string) => { + const lastSlashIndex = p.lastIndexOf('/') + return lastSlashIndex !== -1 ? p.substring(0, lastSlashIndex) : p + }) + }) + + it('should return directory path for file paths', () => { + expect(QCodeReviewUtils.getFolderPath('/path/to/file.js')).to.equal('/path/to') + }) + + it('should return the same path for directory paths', () => { + expect(QCodeReviewUtils.getFolderPath('/path/to/dir')).to.equal('/path/to/dir') + }) + + it('should handle paths with trailing slashes', () => { + expect(QCodeReviewUtils.getFolderPath('/path/to/dir/')).to.equal('/path/to/dir') + }) + }) + + describe('logZipSummary', () => { + it('should log zip summary information', () => { + const mockZip = { + files: { + 'file1.js': { dir: false }, + 'file2.ts': { dir: false }, + 'dir1/': { dir: true }, + 'dir2/': { dir: true }, + 'dir1/file3.py': { dir: false }, + }, + } as unknown as JSZip + + QCodeReviewUtils.logZipSummary(mockZip, mockLogging) + + sinon.assert.calledWith(mockLogging.info, 'Zip summary: 3 files, 2 folders') + sinon.assert.calledWith( + mockLogging.info, + sinon.match(str => str.includes('Zip structure:')) + ) + }) + + it('should handle errors gracefully', () => { + const mockZip = {} as unknown as JSZip + + QCodeReviewUtils.logZipSummary(mockZip, mockLogging) + + sinon.assert.calledWith( + mockLogging.warn, + sinon.match(str => str.includes('Failed to generate zip summary')) + ) + }) + }) + + describe('generateClientToken', () => { + it('should generate a unique token', () => { + const token1 = QCodeReviewUtils.generateClientToken() + const token2 = QCodeReviewUtils.generateClientToken() + + expect(token1).to.match(/^code-scan-\d+-[a-z0-9]+$/) + expect(token2).to.match(/^code-scan-\d+-[a-z0-9]+$/) + expect(token1).to.not.equal(token2) + }) + }) + + describe('executeGitCommand', () => { + it('should execute git command and return output on success', async () => { + const execStub = sandbox.stub(childProcess, 'exec').callsFake((cmd, callback: any) => { + callback(null, 'command output', '') + return {} as childProcess.ChildProcess + }) + + const result = await QCodeReviewUtils.executeGitCommand('git status', 'status', mockLogging) + expect(result).to.equal('command output') + sinon.assert.calledWith(execStub, 'git status', sinon.match.func) + }) + + it('should handle errors and return empty string', async () => { + sandbox.stub(childProcess, 'exec').callsFake((cmd, callback: any) => { + callback(new Error('git error'), '', 'error output') + return {} as childProcess.ChildProcess + }) + + const result = await QCodeReviewUtils.executeGitCommand('git status', 'status', mockLogging) + expect(result).to.equal('') + sinon.assert.calledWith( + mockLogging.warn, + sinon.match(str => str.includes('Git diff failed for status')) + ) + }) + }) + + describe('getGitDiff', () => { + let getFolderPathStub: sinon.SinonStub + let executeGitCommandStub: sinon.SinonStub + + beforeEach(() => { + // Stub getFolderPath and executeGitCommand + getFolderPathStub = sandbox.stub(QCodeReviewUtils, 'getFolderPath').returns('/mock/path') + executeGitCommandStub = sandbox.stub(QCodeReviewUtils, 'executeGitCommand') + executeGitCommandStub.callsFake(async cmd => { + if (cmd.includes('--staged')) { + return 'staged diff' + } + return 'unstaged diff' + }) + }) + + it('should get combined git diff for a path', async () => { + const result = await QCodeReviewUtils.getGitDiff('/mock/path/file.js', mockLogging) + expect(result).to.equal('unstaged diff\n\nstaged diff') + sinon.assert.calledTwice(executeGitCommandStub) + }) + + it('should return null if no diff is found', async () => { + executeGitCommandStub.resolves('') + const result = await QCodeReviewUtils.getGitDiff('/mock/path/file.js', mockLogging) + expect(result).to.be.null + }) + + it('should handle errors', async () => { + executeGitCommandStub.rejects(new Error('git error')) + const result = await QCodeReviewUtils.getGitDiff('/mock/path/file.js', mockLogging) + expect(result).to.be.null + sinon.assert.calledWith( + mockLogging.error, + sinon.match(str => str.includes('Error getting git diff')) + ) + }) + }) + + describe('logZipStructure', () => { + it('should log zip file structure', () => { + const mockZip = { + files: { + 'file1.js': { dir: false }, + 'dir1/': { dir: true }, + 'dir1/file2.ts': { dir: false }, + }, + } as unknown as JSZip + + QCodeReviewUtils.logZipStructure(mockZip, 'test-zip', mockLogging) + + sinon.assert.calledWith(mockLogging.info, 'test-zip zip structure:') + sinon.assert.calledWith(mockLogging.info, ' file1.js') + sinon.assert.calledWith(mockLogging.info, ' dir1/file2.ts') + }) + }) + + describe('countZipFiles', () => { + it('should count files in zip correctly', () => { + const mockZip = { + files: { + 'file1.js': { dir: false }, + 'dir1/': { dir: true }, + 'dir1/file2.ts': { dir: false }, + 'dir2/': { dir: true }, + 'dir2/file3.py': { dir: false }, + }, + } as unknown as JSZip + + const count = QCodeReviewUtils.countZipFiles(mockZip) + expect(count).to.equal(3) + }) + + it('should return 0 for empty zip', () => { + const mockZip = { files: {} } as unknown as JSZip + const count = QCodeReviewUtils.countZipFiles(mockZip) + expect(count).to.equal(0) + }) + }) + + describe('generateZipBuffer', () => { + it('should call generateAsync with correct options', async () => { + const generateAsyncStub = sandbox.stub().resolves(Buffer.from('zip-data')) + const mockZip = { + generateAsync: generateAsyncStub, + } as unknown as JSZip + + await QCodeReviewUtils.generateZipBuffer(mockZip) + + sinon.assert.calledWith(generateAsyncStub, { + type: 'nodebuffer', + compression: 'DEFLATE', + compressionOptions: { level: 9 }, + }) + }) + }) + + describe('saveZipToDownloads', () => { + let homedirStub: sinon.SinonStub + let pathJoinStub: sinon.SinonStub + let toISOStringStub: sinon.SinonStub + let writeFileSyncStub: sinon.SinonStub + + beforeEach(() => { + homedirStub = sandbox.stub(os, 'homedir').returns('/home/user') + pathJoinStub = sandbox.stub(path, 'join').callsFake((...args) => args.join('/')) + toISOStringStub = sandbox.stub(Date.prototype, 'toISOString').returns('2023-01-01T12:00:00.000Z') + writeFileSyncStub = sandbox.stub(fs, 'writeFileSync') + }) + + it('should save zip buffer to downloads folder', () => { + const mockBuffer = Buffer.from('zip-data') + + QCodeReviewUtils.saveZipToDownloads(mockBuffer, mockLogging) + + sinon.assert.calledWith( + writeFileSyncStub, + '/home/user/Downloads/codeArtifact-2023-01-01T12-00-00-000Z.zip', + mockBuffer + ) + sinon.assert.calledWith( + mockLogging.info, + sinon.match(str => str.includes('Saved code artifact zip to:')) + ) + }) + + it('should handle errors', () => { + writeFileSyncStub.throws(new Error('write error')) + + const mockBuffer = Buffer.from('zip-data') + QCodeReviewUtils.saveZipToDownloads(mockBuffer, mockLogging) + + sinon.assert.calledWith( + mockLogging.error, + sinon.match(str => str.includes('Failed to save zip file')) + ) + }) + }) + + describe('processArtifactWithDiff', () => { + let getGitDiffStub: sinon.SinonStub + + beforeEach(() => { + getGitDiffStub = sandbox.stub(QCodeReviewUtils, 'getGitDiff').resolves('mock diff') + }) + + it('should return empty string if not a code diff scan', async () => { + const result = await QCodeReviewUtils.processArtifactWithDiff({ path: '/path/file.js' }, false, mockLogging) + expect(result).to.equal('') + sinon.assert.notCalled(getGitDiffStub) + }) + + it('should return diff with newline if code diff scan', async () => { + const result = await QCodeReviewUtils.processArtifactWithDiff({ path: '/path/file.js' }, true, mockLogging) + expect(result).to.equal('mock diff\n') + sinon.assert.calledWith(getGitDiffStub, '/path/file.js', mockLogging) + }) + + it('should handle null diff result', async () => { + getGitDiffStub.resolves(null) + const result = await QCodeReviewUtils.processArtifactWithDiff({ path: '/path/file.js' }, true, mockLogging) + expect(result).to.equal('') + }) + + it('should handle errors', async () => { + getGitDiffStub.rejects(new Error('diff error')) + const result = await QCodeReviewUtils.processArtifactWithDiff({ path: '/path/file.js' }, true, mockLogging) + expect(result).to.equal('') + sinon.assert.calledWith( + mockLogging.warn, + sinon.match(str => str.includes('Failed to get git diff')) + ) + }) + }) + + describe('withErrorHandling', () => { + it('should return operation result on success', async () => { + const operation = sandbox.stub().resolves('success') + + const result = await QCodeReviewUtils.withErrorHandling( + operation, + 'Error message', + mockLogging, + '/path/file.js' + ) + + expect(result).to.equal('success') + sinon.assert.calledOnce(operation) + }) + + it('should handle errors and log them', async () => { + const error = new Error('operation failed') + const operation = sandbox.stub().rejects(error) + + try { + await QCodeReviewUtils.withErrorHandling(operation, 'Error message', mockLogging, '/path/file.js') + // Should not reach here + expect.fail('Expected error was not thrown') + } catch (e: any) { + // The error message is formatted with the error message prefix + expect(e.message).to.include('operation failed') + sinon.assert.calledWith( + mockLogging.error, + sinon.match(str => str.includes('Error message')) + ) + } + }) + + it('should handle errors without path', async () => { + const error = new Error('operation failed') + const operation = sandbox.stub().rejects(error) + + try { + await QCodeReviewUtils.withErrorHandling(operation, 'Error message', mockLogging) + expect.fail('Expected error was not thrown') + } catch (e: any) { + expect(e.message).to.include('operation failed') + sinon.assert.calledWith( + mockLogging.error, + sinon.match(str => !str.includes('/path/file.js')) + ) + } + }) + }) + + describe('isAgenticReviewEnabled', () => { + it('should return true when qCodeReviewInChat is enabled', () => { + const params = { + initializationOptions: { + aws: { + awsClientCapabilities: { + q: { + qCodeReviewInChat: true, + }, + }, + }, + }, + } + + expect(QCodeReviewUtils.isAgenticReviewEnabled(params as any)).to.be.true + }) + + it('should return false when qCodeReviewInChat is disabled', () => { + const params = { + initializationOptions: { + aws: { + awsClientCapabilities: { + q: { + qCodeReviewInChat: false, + }, + }, + }, + }, + } + + expect(QCodeReviewUtils.isAgenticReviewEnabled(params as any)).to.be.false + }) + + it('should return false when q capabilities are undefined', () => { + const params = { + initializationOptions: { + aws: { + awsClientCapabilities: {}, + }, + }, + } + + expect(QCodeReviewUtils.isAgenticReviewEnabled(params as any)).to.be.false + }) + + it('should return false when params are undefined', () => { + expect(QCodeReviewUtils.isAgenticReviewEnabled(undefined)).to.be.false + }) + }) + + describe('convertToUnixPath', () => { + let normalizeStub: sinon.SinonStub + + beforeEach(() => { + // We need to directly test the implementation without relying on path.normalize + normalizeStub = sandbox.stub(path, 'normalize') + }) + + it('should convert Windows path to Unix format', () => { + // Setup the stub to return a Windows-style normalized path + normalizeStub.returns('C:\\Users\\test\\file.js') + + const result = QCodeReviewUtils.convertToUnixPath('C:\\Users\\test\\file.js') + + // Verify the regex replacements work correctly + expect(result).to.match(/^\/Users\/test\/file\.js$/) + }) + + it('should handle paths without drive letter', () => { + normalizeStub.returns('Users\\test\\file.js') + + const result = QCodeReviewUtils.convertToUnixPath('Users\\test\\file.js') + + // Verify backslashes are converted to forward slashes + expect(result).to.match(/^Users\/test\/file\.js$/) + }) + + it('should not modify Unix paths', () => { + normalizeStub.returns('/Users/test/file.js') + + const result = QCodeReviewUtils.convertToUnixPath('/Users/test/file.js') + + // Unix paths should remain unchanged + expect(result).to.equal('/Users/test/file.js') + }) + }) + + describe('createErrorOutput', () => { + it('should create standardized error output object', () => { + const errorObj = { message: 'Test error' } + const result = QCodeReviewUtils.createErrorOutput(errorObj) + + expect(result).to.deep.equal({ + output: { + kind: 'json', + content: errorObj, + success: false, + }, + }) + }) + }) + + describe('uploadFileToPresignedUrl', () => { + let httpsRequestStub: sinon.SinonStub + let requestOnStub: sinon.SinonStub + let requestWriteStub: sinon.SinonStub + let requestEndStub: sinon.SinonStub + let responseOnStub: sinon.SinonStub + + beforeEach(() => { + requestOnStub = sandbox.stub() + requestWriteStub = sandbox.stub() + requestEndStub = sandbox.stub() + responseOnStub = sandbox.stub() + + const mockRequest = { + on: requestOnStub, + write: requestWriteStub, + end: requestEndStub, + } + + const mockResponse = { + statusCode: 200, + on: responseOnStub, + } + + httpsRequestStub = sandbox.stub(https, 'request').returns(mockRequest as any) + + // Setup response.on('data') and response.on('end') + responseOnStub.withArgs('data').callsFake((event, callback) => { + if (event === 'data') callback('response chunk') + }) + + responseOnStub.withArgs('end').callsFake((event, callback) => { + if (event === 'end') callback() + }) + + // Setup the request callback to be called with the mock response + httpsRequestStub.callsFake((options, callback) => { + callback(mockResponse) + return mockRequest as any + }) + }) + + it('should upload file to presigned URL successfully', async () => { + const uploadUrl = 'https://example.com/upload' + const fileContent = Buffer.from('test content') + const requestHeaders = { 'Content-Type': 'application/octet-stream' } + + await QCodeReviewUtils.uploadFileToPresignedUrl(uploadUrl, fileContent, requestHeaders, mockLogging) + + sinon.assert.calledOnce(httpsRequestStub) + sinon.assert.calledWith(requestWriteStub, fileContent) + sinon.assert.calledOnce(requestEndStub) + sinon.assert.calledWith(mockLogging.info, sinon.match('File upload completed successfully')) + }) + + it('should handle upload failure with non-200 status code', async () => { + const uploadUrl = 'https://example.com/upload' + const fileContent = Buffer.from('test content') + const requestHeaders = { 'Content-Type': 'application/octet-stream' } + + // Override the response status code + httpsRequestStub.callsFake((options, callback) => { + callback({ statusCode: 403, on: responseOnStub }) + return { on: requestOnStub, write: requestWriteStub, end: requestEndStub } as any + }) + + try { + await QCodeReviewUtils.uploadFileToPresignedUrl(uploadUrl, fileContent, requestHeaders, mockLogging) + expect.fail('Expected error was not thrown') + } catch (e: any) { + expect(e.message).to.include('Upload failed with status code: 403') + } + }) + + it('should handle network errors during upload', async () => { + const uploadUrl = 'https://example.com/upload' + const fileContent = Buffer.from('test content') + const requestHeaders = { 'Content-Type': 'application/octet-stream' } + + // Create a request object that will emit an error + const mockRequest = { + on: sandbox.stub(), + write: sandbox.stub(), + end: sandbox.stub(), + } + + // Make the request emit an error when 'error' event is registered + mockRequest.on.withArgs('error').callsFake((event, callback) => { + // Immediately call the callback with an error + setTimeout(() => callback(new Error('Network error')), 0) + return mockRequest + }) + + // Make https.request return our mock request + httpsRequestStub.returns(mockRequest as any) + + try { + await QCodeReviewUtils.uploadFileToPresignedUrl(uploadUrl, fileContent, requestHeaders, mockLogging) + expect.fail('Expected error was not thrown') + } catch (e: any) { + expect(e.message).to.equal('Network error') + sinon.assert.calledWith(mockLogging.error, sinon.match('Error uploading file:')) + } + }) + }) + + describe('handleFailure', () => { + let mockTelemetry: { emitMetric: sinon.SinonStub } + let emitMetricStub: sinon.SinonStub + + beforeEach(() => { + mockTelemetry = { emitMetric: sandbox.stub() } + emitMetricStub = sandbox.stub(QCodeReviewUtils, 'emitMetric') + }) + + it('should handle regular errors', () => { + const error = new Error('Test error') + const result = QCodeReviewUtils.handleFailure(error, mockLogging, mockTelemetry as any, 'testTool') + + expect(result).to.deep.include({ + status: 'Failed', + errorMessage: 'Test error', + }) + + sinon.assert.calledWith( + emitMetricStub, + 'failed', + sinon.match.object, + 'testTool', + mockLogging, + mockTelemetry + ) + sinon.assert.calledWith(mockLogging.error, sinon.match('Error in testTool - Test error')) + }) + + it('should include scan name and job ID when provided', () => { + const error = new Error('Test error') + const result = QCodeReviewUtils.handleFailure( + error, + mockLogging, + mockTelemetry as any, + 'testTool', + 'testScan', + 'job-123' + ) + + expect(result).to.deep.include({ + status: 'Failed', + errorMessage: 'Test error', + codeScanName: 'testScan', + codeReviewId: 'job-123', + }) + }) + + it('should throw CancellationError without handling', () => { + const error = new CancellationError('user') + + try { + QCodeReviewUtils.handleFailure(error, mockLogging, mockTelemetry as any, 'testTool') + expect.fail('Expected error was not thrown') + } catch (e: any) { + expect(e).to.equal(error) + } + }) + }) + + describe('emitMetric', () => { + let mockTelemetry: { emitMetric: sinon.SinonStub } + + beforeEach(() => { + mockTelemetry = { emitMetric: sandbox.stub() } + }) + + it('should emit metric with correct format', () => { + const metricData = { key: 'value' } + + QCodeReviewUtils.emitMetric('test', metricData, 'testTool', mockLogging, mockTelemetry as any) + + sinon.assert.calledWith(mockLogging.info, sinon.match('Emitting telemetry metric: testTool_test')) + sinon.assert.calledWith(mockTelemetry.emitMetric, { + name: 'testTool_test', + data: metricData, + }) + }) + + it('should include credentialStartUrl when provided', () => { + const metricData = { key: 'value' } + const credentialStartUrl = 'https://example.com' + + QCodeReviewUtils.emitMetric( + 'test', + metricData, + 'testTool', + mockLogging, + mockTelemetry as any, + credentialStartUrl + ) + + sinon.assert.calledWith(mockTelemetry.emitMetric, { + name: 'testTool_test', + data: { + key: 'value', + credentialStartUrl: 'https://example.com', + }, + }) + }) + }) + + describe('checkCancellation', () => { + it('should not throw when cancellation is not requested', () => { + const cancellationToken = { isCancellationRequested: false } + + expect(() => { + QCodeReviewUtils.checkCancellation(cancellationToken as any, mockLogging) + }).to.not.throw() + }) + + it('should throw CancellationError when cancellation is requested', () => { + const cancellationToken = { isCancellationRequested: true } + + try { + QCodeReviewUtils.checkCancellation(cancellationToken as any, mockLogging) + expect.fail('Expected error was not thrown') + } catch (e: any) { + expect(e).to.be.instanceOf(CancellationError) + sinon.assert.calledWith(mockLogging.info, 'Command execution cancelled') + } + }) + + it('should use custom message when provided', () => { + const cancellationToken = { isCancellationRequested: true } + const customMessage = 'Custom cancellation message' + + try { + QCodeReviewUtils.checkCancellation(cancellationToken as any, mockLogging, customMessage) + expect.fail('Expected error was not thrown') + } catch (e: any) { + expect(e).to.be.instanceOf(CancellationError) + sinon.assert.calledWith(mockLogging.info, customMessage) + } + }) + + it('should not throw when cancellation token is undefined', () => { + expect(() => { + QCodeReviewUtils.checkCancellation(undefined, mockLogging) + }).to.not.throw() + }) + }) +}) diff --git a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewUtils.ts b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewUtils.ts new file mode 100644 index 0000000000..21d301f134 --- /dev/null +++ b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/qCodeAnalysis/qCodeReviewUtils.ts @@ -0,0 +1,434 @@ +/*! + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +/* eslint-disable import/no-nodejs-modules */ + +import { Features } from '@aws/language-server-runtimes/server-interface/server' +import { SKIP_DIRECTORIES, EXTENSION_TO_LANGUAGE } from './qCodeReviewConstants' +import JSZip = require('jszip') +import { exec } from 'child_process' +import * as path from 'path' +import * as fs from 'fs' +import * as os from 'os' +import * as https from 'https' +import { InitializeParams } from '@aws/language-server-runtimes/server-interface' +import { QClientCapabilities } from '../../../configuration/qConfigurationServer' +import { CancellationError } from '@aws/lsp-core' +import { InvokeOutput } from '../toolShared' +import { CancellationToken } from '@aws/language-server-runtimes/server-interface' + +/** + * Utility functions for QCodeReview + */ +export class QCodeReviewUtils { + /** + * Check if a file should be skipped during zip creation + * @param fileName Name of the file to check + * @returns True if the file should be skipped, false otherwise + */ + public static shouldSkipFile(fileName: string): boolean { + const extension = path.extname(fileName).toLowerCase() + if (!extension || extension.trim() === '') { + return true + } else { + return !EXTENSION_TO_LANGUAGE.hasOwnProperty(extension) + } + } + + /** + * Check if a directory should be skipped during zip creation + * @param dirName Name of the directory to check + * @returns True if the directory should be skipped, false otherwise + */ + public static shouldSkipDirectory(dirName: string): boolean { + return SKIP_DIRECTORIES.includes(dirName) + } + + /** + * Get the folder path from a file or folder path + * @param inputPath Path to a file or folder + * @returns The folder path + */ + public static getFolderPath(inputPath: string): string { + // Remove trailing slash and get dirname + const cleanPath = inputPath.replace(/\/$/, '') + + // If it's a file (has extension), get its directory + // If it's a directory (no extension), return it as-is + return path.extname(cleanPath) ? path.dirname(cleanPath) : cleanPath + } + + /** + * Log a summary of the zip archive contents + * @param zip JSZip instance to analyze + * @param logging Logging interface + */ + public static logZipSummary(zip: JSZip, logging: Features['logging']): void { + try { + const files = Object.keys(zip.files) + const fileCount = files.filter(f => !zip.files[f].dir).length + const folderCount = files.filter(f => zip.files[f].dir).length + + logging.info(`Zip summary: ${fileCount} files, ${folderCount} folders`) + + // Log the top-level structure + const topLevel = files + .filter(path => !path.includes('/') || path.split('/').length === 2) + .map(path => ` - ${path}${zip.files[path].dir ? '/' : ''}`) + .join('\n') + + logging.info(`Zip structure:\n${topLevel}`) + } catch (error) { + logging.warn(`Failed to generate zip summary: ${error}`) + } + } + + /** + * Generate a unique client token for the request + * @returns A unique string token + */ + public static generateClientToken(): string { + return `code-scan-${Date.now()}-${Math.random().toString(36).substring(2, 15)}` + } + + /** + * Execute git command and return output + * @param command Git command to execute + * @param type Type of command for logging + * @param logging Logging interface + * @returns Promise resolving to command output + */ + public static async executeGitCommand( + command: string, + type: string, + logging: Features['logging'] + ): Promise { + return new Promise(resolve => { + exec(command, (error: any, stdout: string, stderr: string) => { + if (error) { + logging.warn(`Git diff failed for ${type}: ${stderr || error.message}`) + resolve('') + } else { + resolve(stdout.trim()) + } + }) + }) + } + + /** + * Get git diff for a file or folder + * @param artifactPath Path to the file or folder + * @param logging Logging interface + * @returns Git diff output as string or null if not in a git repository + */ + public static async getGitDiff(artifactPath: string, logging: Features['logging']): Promise { + logging.info(`Get git diff for path - ${artifactPath}`) + + const directoryPath = QCodeReviewUtils.getFolderPath(artifactPath) + const gitDiffCommandUnstaged = `cd ${directoryPath} && git diff ${artifactPath}` + const gitDiffCommandStaged = `cd ${directoryPath} && git diff --staged ${artifactPath}` + + logging.info(`Running git commands - ${gitDiffCommandUnstaged} and ${gitDiffCommandStaged}`) + + try { + const [unstagedDiff, stagedDiff] = await Promise.all([ + QCodeReviewUtils.executeGitCommand(gitDiffCommandUnstaged, 'unstaged', logging), + QCodeReviewUtils.executeGitCommand(gitDiffCommandStaged, 'staged', logging), + ]) + + const combinedDiff = [unstagedDiff, stagedDiff].filter(Boolean).join('\n\n') + return combinedDiff || null + } catch (error) { + logging.error(`Error getting git diff: ${error}`) + return null + } + } + + /** + * Log zip structure + * @param zip JSZip instance + * @param zipName Name of the zip for logging + * @param logging Logging interface + */ + public static logZipStructure(zip: JSZip, zipName: string, logging: Features['logging']): void { + logging.info(`${zipName} zip structure:`) + Object.keys(zip.files).forEach(filePath => { + let item = zip.files[filePath] + if (!item.dir) { + logging.info(` ${filePath}`) + } + }) + } + + /** + * Count number of files in zip + * @param zip JSZip instance + * @returns number of files in zip + */ + public static countZipFiles(zip: JSZip): number { + let count = 0 + Object.keys(zip.files).forEach(filePath => { + let item = zip.files[filePath] + if (!item.dir) { + count += 1 + } + }) + return count + } + + /** + * Generate zip buffer with compression + * @param zip JSZip instance + * @returns Promise resolving to compressed buffer + */ + public static async generateZipBuffer(zip: JSZip): Promise { + return await zip.generateAsync({ + type: 'nodebuffer', + compression: 'DEFLATE', + compressionOptions: { level: 9 }, + }) + } + + /** + * Save zip buffer to Downloads folder + * @param zipBuffer Buffer to save + * @param logging Logging interface + */ + public static saveZipToDownloads(zipBuffer: Buffer, logging: Features['logging']): void { + try { + const downloadsPath = path.join(os.homedir(), 'Downloads') + const timestamp = new Date().toISOString().replace(/[:.]/g, '-') + const zipFilePath = path.join(downloadsPath, `codeArtifact-${timestamp}.zip`) + + fs.writeFileSync(zipFilePath, zipBuffer) + logging.info(`Saved code artifact zip to: ${zipFilePath}`) + } catch (saveError) { + logging.error(`Failed to save zip file to Downloads folder: ${saveError}`) + } + } + + /** + * Process artifact with git diff + * @param artifact Artifact with path + * @param isCodeDiffScan Whether to scan for code diff + * @param logging Logging interface + * @returns Promise resolving to diff string + */ + public static async processArtifactWithDiff( + artifact: { path: string }, + isCodeDiffScan: boolean, + logging: Features['logging'] + ): Promise { + if (!isCodeDiffScan) return '' + + try { + const diff = await QCodeReviewUtils.getGitDiff(artifact.path, logging) + return diff ? `${diff}\n` : '' + } catch (diffError) { + logging.warn(`Failed to get git diff for ${artifact.path}: ${diffError}`) + return '' + } + } + + /** + * Error handling wrapper + * @param operation Operation to execute + * @param errorMessage Error message prefix + * @param logging Logging interface + * @param path Optional path for error context + * @returns Promise resolving to operation result + */ + public static async withErrorHandling( + operation: () => Promise, + errorMessage: string, + logging: Features['logging'], + path?: string + ): Promise { + try { + return await operation() + } catch (error) { + const fullMessage = path ? `${errorMessage} ${path}: ${error}` : `${errorMessage}: ${error}` + logging.error(fullMessage) + throw new Error(fullMessage) + } + } + + /** + * Check if agentic review capability is enabled in client capabilities + * @param params Initialize parameters from client + * @returns True if agentic reviewer is enabled, false otherwise + */ + public static isAgenticReviewEnabled(params: InitializeParams | undefined): boolean { + const qCapabilities = params?.initializationOptions?.aws?.awsClientCapabilities?.q as + | QClientCapabilities + | undefined + return qCapabilities?.qCodeReviewInChat || false + } + + /** + * Converts a Windows absolute file path to Unix format and removes the drive letter + * @param windowsPath The Windows path to convert + * @returns The Unix formatted path without drive letter + */ + public static convertToUnixPath(windowsPath: string): string { + // Remove drive letter (e.g., C:/) if present + // Normalize the path and convert backslashes to forward slashes + return path + .normalize(windowsPath) + .replace(/^[a-zA-Z]:\/?/, '') + .replace(/\\/g, '/') + } + + /** + * Create a standardized error output object + * @param errorObj Error object or message + * @returns Formatted InvokeOutput with error details + */ + public static createErrorOutput(errorObj: any): InvokeOutput { + return { + output: { + kind: 'json', + content: errorObj, + success: false, + }, + } + } + + /** + * Upload file content to the pre-signed URL + * @param uploadUrl Pre-signed URL for uploading the file + * @param fileContent Buffer containing the file content + * @param requestHeaders Additional headers for the request + * @param logging Logging interface + */ + public static uploadFileToPresignedUrl( + uploadUrl: string, + fileContent: Buffer, + requestHeaders: Record, + logging: Features['logging'] + ): Promise { + return new Promise((resolve, reject) => { + const url = new URL(uploadUrl) + + const options = { + hostname: url.hostname, + path: url.pathname + url.search, + method: 'PUT', + headers: { + 'Content-Length': fileContent.length, + ...requestHeaders, + }, + } + + logging.info(`Uploading file to ${url.hostname}${url.pathname}`) + + const req = https.request(options, (res: any) => { + if (res.statusCode !== 200) { + reject(new Error(`Upload failed with status code: ${res.statusCode}`)) + return + } + let responseData = '' + res.on('data', (chunk: string) => { + responseData += chunk + }) + res.on('end', () => { + logging.info('File upload completed successfully') + resolve() + }) + }) + + req.on('error', (error: any) => { + logging.error(`Error uploading file: ${error}`) + reject(error) + }) + + req.write(fileContent) + req.end() + }) + } + + /** + * Handle failure in a consistent way + * @param error Error object + * @param scanName Optional scan name for context + * @param jobId Optional job ID for context + * @param logging Logging interface + * @param telemetry Telemetry interface + * @param toolName Tool name for error messages + * @returns Standardized error response + */ + public static handleFailure( + error: any, + logging: Features['logging'], + telemetry: Features['telemetry'], + toolName: string, + scanName?: string, + jobId?: string + ): any { + // if error is of type CancellationError then throw + if (error instanceof CancellationError) { + throw error + } + + const errorData: any = { errorMessage: error?.message } + if (scanName) errorData.codeScanName = scanName + if (jobId) errorData.codeReviewId = jobId + + QCodeReviewUtils.emitMetric('failed', { data: errorData }, toolName, logging, telemetry) + + logging.error(`Error in ${toolName} - ${error?.message}`) + + return { + status: 'Failed', + ...errorData, + } + } + + /** + * Emit a telemetry metric with standard formatting + * @param metricSuffix Suffix for the metric name + * @param metricData Additional metric data + * @param toolName Tool name for the metric prefix + * @param logging Logging interface + * @param telemetry Telemetry interface + * @param credentialStartUrl Optional credential start URL + */ + public static emitMetric( + metricSuffix: string, + metricData: any, + toolName: string, + logging: Features['logging'], + telemetry: Features['telemetry'], + credentialStartUrl?: string + ): void { + const metricName = `${toolName}_${metricSuffix}` + const metricPayload = { + name: metricName, + data: { + ...(credentialStartUrl ? { credentialStartUrl } : {}), + ...metricData, + }, + } + logging.info(`Emitting telemetry metric: ${metricName} with data: ${JSON.stringify(metricPayload.data)}`) + telemetry.emitMetric(metricPayload) + } + + /** + * Check if cancellation has been requested and throw if it has + * @param cancellationToken Cancellation token to check + * @param message Optional message for the error + * @param logging Logging interface + */ + public static checkCancellation( + cancellationToken: CancellationToken | undefined, + logging: Features['logging'], + message: string = 'Command execution cancelled' + ): void { + if (cancellationToken?.isCancellationRequested) { + logging.info(message) + throw new CancellationError('user') + } + } +} diff --git a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/toolServer.ts b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/toolServer.ts index 83ed19ca68..0b68c4d772 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/toolServer.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/tools/toolServer.ts @@ -10,6 +10,8 @@ import { AGENT_TOOLS_CHANGED, McpManager } from './mcp/mcpManager' import { McpTool } from './mcp/mcpTool' import { FileSearch, FileSearchParams } from './fileSearch' import { GrepSearch } from './grepSearch' +import { QCodeReview } from './qCodeAnalysis/qCodeReview' +import { CodeWhispererServiceToken } from '../../../shared/codeWhispererService' import { McpToolDefinition } from './mcp/mcpTypes' import { getGlobalMcpConfigPath, @@ -21,6 +23,8 @@ import { sanitizeName, } from './mcp/mcpUtils' import { FsReplace, FsReplaceParams } from './fsReplace' +import { QCodeReviewUtils } from './qCodeAnalysis/qCodeReviewUtils' +import { DEFAULT_AWS_Q_ENDPOINT_URL, DEFAULT_AWS_Q_REGION } from '../../../shared/constants' export const FsToolsServer: Server = ({ workspace, logging, agent, lsp }) => { const fsReadTool = new FsRead({ workspace, lsp, logging }) @@ -84,6 +88,66 @@ export const FsToolsServer: Server = ({ workspace, logging, agent, lsp }) => { return () => {} } +export const QCodeAnalysisServer: Server = ({ + agent, + credentialsProvider, + logging, + lsp, + sdkInitializator, + telemetry, + workspace, +}) => { + logging.info('QCodeAnalysisServer') + const qCodeReviewTool = new QCodeReview({ + credentialsProvider, + logging, + telemetry, + workspace, + }) + + lsp.onInitialized(async () => { + if (!QCodeReviewUtils.isAgenticReviewEnabled(lsp.getClientInitializeParams())) { + logging.warn('Agentic Review is currently not supported') + return + } + + logging.info('LSP on initialize for QCodeAnalysisServer') + // Get credentials provider from the LSP context + if (!credentialsProvider.hasCredentials) { + logging.error('Credentials provider not available') + return + } + + // Create the CodeWhisperer client + const codeWhispererClient = new CodeWhispererServiceToken( + credentialsProvider, + workspace, + logging, + process.env.CODEWHISPERER_REGION || DEFAULT_AWS_Q_REGION, + process.env.CODEWHISPERER_ENDPOINT || DEFAULT_AWS_Q_ENDPOINT_URL, + sdkInitializator + ) + + agent.addTool( + { + name: QCodeReview.toolName, + description: QCodeReview.toolDescription, + inputSchema: QCodeReview.inputSchema, + }, + async (input: any, token?: CancellationToken, updates?: WritableStream) => { + return await qCodeReviewTool.execute(input, { + codeWhispererClient: codeWhispererClient, + cancellationToken: token, + writableStream: updates, + }) + }, + ToolClassification.BuiltIn + ) + }) + + return () => {} +} + export const BashToolsServer: Server = ({ logging, workspace, agent, lsp }) => { const bashTool = new ExecuteBash({ logging, workspace, lsp }) agent.addTool( @@ -151,59 +215,68 @@ export const McpToolsServer: Server = ({ credentialsProvider, workspace, logging }, } - agent.addTool( - { - name: namespaced, - description: (def.description?.trim() || 'undefined').substring(0, 10240), - inputSchema: inputSchemaWithExplanation, - }, - input => tool.invoke(input), - ToolClassification.MCP - ) - registered[server].push(namespaced) - logging.info(`MCP: registered tool ${namespaced} (original: ${def.toolName})`) + const loggedToolName = `${namespaced} (original: ${def.toolName})` + try { + agent.addTool( + { + name: namespaced, + description: (def.description?.trim() || 'undefined').substring(0, 10240), + inputSchema: inputSchemaWithExplanation, + }, + input => tool.invoke(input), + ToolClassification.MCP + ) + registered[server].push(namespaced) + logging.info(`MCP: registered tool ${loggedToolName}`) + } catch (e) { + console.warn(`Failed to register tool ${loggedToolName}:`, e) + } } } lsp.onInitialized(async () => { - if (!enabledMCP(lsp.getClientInitializeParams())) { - logging.warn('MCP is currently not supported') - return - } + try { + if (!enabledMCP(lsp.getClientInitializeParams())) { + logging.warn('MCP is currently not supported') + return + } - const wsUris = workspace.getAllWorkspaceFolders()?.map(f => f.uri) ?? [] - const wsConfigPaths = getWorkspaceMcpConfigPaths(wsUris) - const globalConfigPath = getGlobalMcpConfigPath(workspace.fs.getUserHomeDir()) - const allConfigPaths = [...wsConfigPaths, globalConfigPath] + const wsUris = workspace.getAllWorkspaceFolders()?.map(f => f.uri) ?? [] + const wsConfigPaths = getWorkspaceMcpConfigPaths(wsUris) + const globalConfigPath = getGlobalMcpConfigPath(workspace.fs.getUserHomeDir()) + const allConfigPaths = [...wsConfigPaths, globalConfigPath] - const wsPersonaPaths = getWorkspacePersonaConfigPaths(wsUris) - const globalPersonaPath = getGlobalPersonaConfigPath(workspace.fs.getUserHomeDir()) - const allPersonaPaths = [...wsPersonaPaths, globalPersonaPath] + const wsPersonaPaths = getWorkspacePersonaConfigPaths(wsUris) + const globalPersonaPath = getGlobalPersonaConfigPath(workspace.fs.getUserHomeDir()) + const allPersonaPaths = [...wsPersonaPaths, globalPersonaPath] - const mgr = await McpManager.init(allConfigPaths, allPersonaPaths, { - logging, - workspace, - lsp, - telemetry, - credentialsProvider, - runtime, - }) + const mgr = await McpManager.init(allConfigPaths, allPersonaPaths, { + logging, + workspace, + lsp, + telemetry, + credentialsProvider, + runtime, + }) - // Clear tool name mapping before registering all tools to avoid conflicts from previous registrations - McpManager.instance.clearToolNameMapping() + // Clear tool name mapping before registering all tools to avoid conflicts from previous registrations + McpManager.instance.clearToolNameMapping() - const byServer: Record = {} - // only register enabled tools - for (const d of mgr.getEnabledTools()) { - ;(byServer[d.serverName] ||= []).push(d) - } - for (const [server, defs] of Object.entries(byServer)) { - registerServerTools(server, defs) - } + const byServer: Record = {} + // only register enabled tools + for (const d of mgr.getEnabledTools()) { + ;(byServer[d.serverName] ||= []).push(d) + } + for (const [server, defs] of Object.entries(byServer)) { + registerServerTools(server, defs) + } - mgr.events.on(AGENT_TOOLS_CHANGED, (server: string, defs: McpToolDefinition[]) => { - registerServerTools(server, defs) - }) + mgr.events.on(AGENT_TOOLS_CHANGED, (server: string, defs: McpToolDefinition[]) => { + registerServerTools(server, defs) + }) + } catch (e) { + console.warn('Caught error during MCP tool initialization; initialization may be incomplete:', e) + } }) return async () => { diff --git a/server/aws-lsp-codewhisperer/src/language-server/agenticChat/utils/agenticChatControllerHelper.ts b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/utils/agenticChatControllerHelper.ts new file mode 100644 index 0000000000..55ac7873e2 --- /dev/null +++ b/server/aws-lsp-codewhisperer/src/language-server/agenticChat/utils/agenticChatControllerHelper.ts @@ -0,0 +1,16 @@ +import { ListAvailableModelsResult } from '@aws/language-server-runtimes/protocol' +import { MODEL_OPTIONS, MODEL_OPTIONS_FOR_REGION } from '../constants/modelSelection' + +/** + * Gets the latest available model for a region, optionally excluding a specific model + * @param region The AWS region + * @param exclude Optional model ID to exclude + * @returns The latest available model + */ +export function getLatestAvailableModel( + region: string | undefined, + exclude?: string +): ListAvailableModelsResult['models'][0] { + const models = region && MODEL_OPTIONS_FOR_REGION[region] ? MODEL_OPTIONS_FOR_REGION[region] : MODEL_OPTIONS + return models.reverse().find(model => model.id !== exclude) ?? models[models.length - 1] +} diff --git a/server/aws-lsp-codewhisperer/src/language-server/chat/chatSessionService.ts b/server/aws-lsp-codewhisperer/src/language-server/chat/chatSessionService.ts index 6a15aa619c..d553866b99 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/chat/chatSessionService.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/chat/chatSessionService.ts @@ -82,13 +82,17 @@ export class ChatSessionService { this.#deferredToolExecution[messageId] = { resolve, reject } } + public getAllDeferredCompactMessageIds(): string[] { + return Object.keys(this.#deferredToolExecution).filter(messageId => messageId.endsWith('_compact')) + } + public rejectAllDeferredToolExecutions(error: Error): void { - for (const messageId in this.#deferredToolExecution) { + Object.keys(this.#deferredToolExecution).forEach(messageId => { const handler = this.#deferredToolExecution[messageId] if (handler && handler.reject) { handler.reject(error) } - } + }) // Clear all handlers after rejecting them this.#deferredToolExecution = {} } diff --git a/server/aws-lsp-codewhisperer/src/language-server/chat/quickActions.ts b/server/aws-lsp-codewhisperer/src/language-server/chat/quickActions.ts index 0ffc71a6f3..17892949fc 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/chat/quickActions.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/chat/quickActions.ts @@ -1,6 +1,7 @@ export enum QuickAction { Clear = '/clear', Help = '/help', + Compact = '/compact', } export const HELP_QUICK_ACTION = { @@ -14,3 +15,9 @@ export const CLEAR_QUICK_ACTION = { description: 'Clear this session', icon: 'trash', } + +export const COMPACT_QUICK_ACTION = { + command: QuickAction.Compact, + description: 'Compact this conversation', + icon: 'folder', +} diff --git a/server/aws-lsp-codewhisperer/src/language-server/chat/telemetry/chatTelemetryController.ts b/server/aws-lsp-codewhisperer/src/language-server/chat/telemetry/chatTelemetryController.ts index d9e8c53ddb..a0713e5837 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/chat/telemetry/chatTelemetryController.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/chat/telemetry/chatTelemetryController.ts @@ -169,6 +169,16 @@ export class ChatTelemetryController { } } + public emitActiveUser() { + this.#telemetry.emitMetric({ + name: ChatTelemetryEventName.ActiveUser, + data: { + credentialStartUrl: this.#credentialsProvider.getConnectionMetadata()?.sso?.startUrl, + result: 'Succeeded', + }, + }) + } + public emitAgencticLoop_InvokeLLM( requestId: string, conversationId: string, @@ -182,7 +192,9 @@ export class ChatTelemetryController { toolCallLatency?: number[], cwsprChatTimeToFirstChunk?: number, cwsprChatTimeBetweenChunks?: number[], - agenticCodingMode?: boolean + agenticCodingMode?: boolean, + experimentName?: string, + userVariation?: string ) { this.#telemetry.emitMetric({ name: ChatTelemetryEventName.AgencticLoop_InvokeLLM, @@ -201,6 +213,8 @@ export class ChatTelemetryController { requestId, enabled: agenticCodingMode, modelId, + experimentName: experimentName, + userVariation: userVariation, }, }) } @@ -210,7 +224,9 @@ export class ChatTelemetryController { conversationId: string, languageServerVersion: string, latency?: number, - agenticCodingMode?: boolean + agenticCodingMode?: boolean, + experimentName?: string, + userVariation?: string ) { this.#telemetry.emitMetric({ name: ChatTelemetryEventName.ToolUseSuggested, @@ -224,6 +240,8 @@ export class ChatTelemetryController { result: 'Succeeded', languageServerVersion: languageServerVersion, enabled: agenticCodingMode, + experimentName: experimentName, + userVariation: userVariation, }, }) } @@ -232,7 +250,9 @@ export class ChatTelemetryController { interactionType: AgenticChatInteractionType, tabId: string, agenticCodingMode?: boolean, - conversationType?: string + conversationType?: string, + experimentName?: string, + userVariation?: string ) { this.#telemetry.emitMetric({ name: ChatTelemetryEventName.InteractWithAgenticChat, @@ -243,6 +263,8 @@ export class ChatTelemetryController { cwsprAgenticChatInteractionType: interactionType, result: 'Succeeded', enabled: agenticCodingMode, + experimentName: experimentName, + userVariation: userVariation, }, }) } @@ -300,6 +322,8 @@ export class ChatTelemetryController { cwsprChatPinnedPromptContextCount: metric.cwsprChatPinnedPromptContextCount, languageServerVersion: metric.languageServerVersion, requestIds: metric.requestIds, + experimentName: metric.experimentName, + userVariation: metric.userVariation, } ) } @@ -403,6 +427,8 @@ export class ChatTelemetryController { enabled: agenticCodingMode, [CONVERSATION_ID_METRIC_KEY]: this.getConversationId(tabId), languageServerVersion: metric.languageServerVersion, + experimentName: metric.experimentName, + userVariation: metric.userVariation, }, }) } diff --git a/server/aws-lsp-codewhisperer/src/language-server/configuration/qConfigurationServer.ts b/server/aws-lsp-codewhisperer/src/language-server/configuration/qConfigurationServer.ts index dec2952721..c8894f6320 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/configuration/qConfigurationServer.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/configuration/qConfigurationServer.ts @@ -41,6 +41,7 @@ export interface QClientCapabilities { mcp?: boolean modelSelection?: boolean reroute?: boolean + qCodeReviewInChat?: boolean } type QConfigurationResponse = diff --git a/server/aws-lsp-codewhisperer/src/language-server/inline-completion/auto-trigger/autoTrigger.test.ts b/server/aws-lsp-codewhisperer/src/language-server/inline-completion/auto-trigger/autoTrigger.test.ts index adfdd476fd..9397c709d9 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/inline-completion/auto-trigger/autoTrigger.test.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/inline-completion/auto-trigger/autoTrigger.test.ts @@ -1,6 +1,6 @@ import assert = require('assert') import { FileContext } from '../../../shared/codeWhispererService' -import { autoTrigger, triggerType } from './autoTrigger' +import { autoTrigger, getAutoTriggerType, triggerType } from './autoTrigger' describe('Auto Trigger', async () => { const createBasicFileContext = (left: string = '', right: string = ''): FileContext => ({ @@ -103,7 +103,59 @@ describe('Auto Trigger', async () => { assert.equal(trigger, 'Classifier') }) }) + describe('getAutoTriggerType', () => { + const createContentChange = (text: string) => [{ text }] + it('should return undefined for multi-line changes', () => { + const changes = [{ text: 'line1\n' }, { text: 'line2' }] + assert.strictEqual(getAutoTriggerType(changes), undefined) + }) + + it('should return undefined for empty changes', () => { + assert.strictEqual(getAutoTriggerType(createContentChange('')), undefined) + }) + + it('should return "Enter" for newline changes', () => { + assert.strictEqual(getAutoTriggerType(createContentChange('\n')), 'Enter') + assert.strictEqual(getAutoTriggerType(createContentChange('\r\n')), 'Enter') + assert.strictEqual(getAutoTriggerType(createContentChange('\n ')), 'Enter') + }) + + it('should return undefined for tab changes', () => { + assert.strictEqual(getAutoTriggerType(createContentChange(' ')), undefined) + assert.strictEqual(getAutoTriggerType(createContentChange(' ')), undefined) + }) + + it('should return "SpecialCharacters" for special character changes', () => { + assert.strictEqual(getAutoTriggerType(createContentChange('(')), 'SpecialCharacters') + assert.strictEqual(getAutoTriggerType(createContentChange('()')), 'SpecialCharacters') + assert.strictEqual(getAutoTriggerType(createContentChange('[')), 'SpecialCharacters') + assert.strictEqual(getAutoTriggerType(createContentChange('[]')), 'SpecialCharacters') + assert.strictEqual(getAutoTriggerType(createContentChange('{')), 'SpecialCharacters') + assert.strictEqual(getAutoTriggerType(createContentChange('{}')), 'SpecialCharacters') + assert.strictEqual(getAutoTriggerType(createContentChange(':')), 'SpecialCharacters') + }) + + it('should return "Classifier" for single character changes', () => { + assert.strictEqual(getAutoTriggerType(createContentChange('a')), 'Classifier') + assert.strictEqual(getAutoTriggerType(createContentChange('1')), 'Classifier') + assert.strictEqual(getAutoTriggerType(createContentChange('.')), 'Classifier') + }) + + it('should return undefined for single line reformat', () => { + assert.strictEqual(getAutoTriggerType(createContentChange(' ')), undefined) + assert.strictEqual(getAutoTriggerType(createContentChange(' ')), undefined) + }) + + it('should return undefined for multi-character non-special changes', () => { + assert.strictEqual(getAutoTriggerType(createContentChange('abc')), undefined) + assert.strictEqual(getAutoTriggerType(createContentChange('123')), undefined) + }) + + it('should return undefined for multi-line input', () => { + assert.strictEqual(getAutoTriggerType(createContentChange('line1\nline2')), undefined) + }) + }) describe('Right Context should trigger validation', () => { it('should not trigger when there is immediate right context in VSCode', () => { const params = createBasicParams({ diff --git a/server/aws-lsp-codewhisperer/src/language-server/inline-completion/auto-trigger/autoTrigger.ts b/server/aws-lsp-codewhisperer/src/language-server/inline-completion/auto-trigger/autoTrigger.ts index 5c110c9e2a..e9c5e31247 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/inline-completion/auto-trigger/autoTrigger.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/inline-completion/auto-trigger/autoTrigger.ts @@ -1,6 +1,7 @@ import { Logging } from '@aws/language-server-runtimes/server-interface' import { FileContext } from '../../../shared/codeWhispererService' import typedCoefficients = require('./coefficients.json') +import { TextDocumentContentChangeEvent } from 'vscode-languageserver-textdocument' type TypedCoefficients = typeof typedCoefficients type Coefficients = TypedCoefficients & { @@ -61,6 +62,78 @@ export const triggerType = (fileContext: FileContext): CodewhispererAutomatedTri return 'Classifier' } +// Enter key should always start with ONE '\n' or '\r\n' and potentially following spaces due to IDE reformat +function isEnterKey(str: string): boolean { + if (str.length === 0) { + return false + } + return ( + (str.startsWith('\r\n') && str.substring(2).trim() === '') || + (str[0] === '\n' && str.substring(1).trim() === '') + ) +} + +function isSingleLine(str: string): boolean { + let newLineCounts = 0 + for (const ch of str) { + if (ch === '\n') { + newLineCounts += 1 + } + } + + // since pressing Enter key possibly will generate string like '\n ' due to indention + if (isEnterKey(str)) { + return true + } + if (newLineCounts >= 1) { + return false + } + return true +} + +function isUserTypingSpecialChar(str: string): boolean { + return ['(', '()', '[', '[]', '{', '{}', ':'].includes(str) +} + +function isTabKey(str: string): boolean { + const tabSize = 4 // TODO: Use IDE real tab size + if (str.length % tabSize === 0 && str.trim() === '') { + return true + } + return false +} + +// Reference: https://github.com/aws/aws-toolkit-vscode/blob/amazonq/v1.74.0/packages/core/src/codewhisperer/service/keyStrokeHandler.ts#L222 +// Enter, Special character guarantees a trigger +// Regular keystroke input will be evaluated by classifier +export const getAutoTriggerType = ( + contentChanges: TextDocumentContentChangeEvent[] +): CodewhispererAutomatedTriggerType | undefined => { + if (contentChanges.length !== 1) { + // Won't trigger cwspr on multi-line changes + // event.contentChanges.length will be 2 when user press Enter key multiple times + return undefined + } + const changedText = contentChanges[0].text + if (isSingleLine(changedText)) { + if (changedText.length === 0) { + return undefined + } else if (isEnterKey(changedText)) { + return 'Enter' + } else if (isTabKey(changedText)) { + return undefined + } else if (isUserTypingSpecialChar(changedText)) { + return 'SpecialCharacters' + } else if (changedText.length === 1) { + return 'Classifier' + } else if (new RegExp('^[ ]+$').test(changedText)) { + // single line && single place reformat should consist of space chars only + return undefined + } + } + return undefined +} + // Normalize values based on minn and maxx values in the coefficients. const normalize = (val: number, field: keyof typeof typedCoefficients.minn & keyof typeof typedCoefficients.maxx) => (val - typedCoefficients.minn[field]) / (typedCoefficients.maxx[field] - typedCoefficients.minn[field]) diff --git a/server/aws-lsp-codewhisperer/src/language-server/inline-completion/auto-trigger/editPredictionAutoTrigger.ts b/server/aws-lsp-codewhisperer/src/language-server/inline-completion/auto-trigger/editPredictionAutoTrigger.ts index 6109f76b72..eee9edbdcb 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/inline-completion/auto-trigger/editPredictionAutoTrigger.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/inline-completion/auto-trigger/editPredictionAutoTrigger.ts @@ -54,7 +54,12 @@ export const editPredictionAutoTrigger = ({ ) // [condition 2] Non-empty content in one of the lines following the current line - const hasNonEmptySuffix = rightContextLines.length > 1 && rightContextLines[1].trim().length > 0 + let hasNonEmptySuffix = false + const maxLinesToScanForContent = Math.min(rightContextLines.length, config.maxLinesToScanForContent + 1) + if (maxLinesToScanForContent > 0) { + const linesToScanForContent = rightContextLines.slice(1, maxLinesToScanForContent) + hasNonEmptySuffix = linesToScanForContent.some(line => line.trim().length > 0) + } const shouldTrigger = hasRecentEdit && hasNonEmptySuffix diff --git a/server/aws-lsp-codewhisperer/src/language-server/inline-completion/auto-trigger/editPredictionConfig.ts b/server/aws-lsp-codewhisperer/src/language-server/inline-completion/auto-trigger/editPredictionConfig.ts index 7f84f9c722..c419a4944f 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/inline-completion/auto-trigger/editPredictionConfig.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/inline-completion/auto-trigger/editPredictionConfig.ts @@ -18,6 +18,7 @@ export interface EditPredictionConfig { // Edit tracking editHistoryDurationMs: number editAdjacentLineRange: number + maxLinesToScanForContent: number // Feature flags enableLanguageKeywordTrigger: boolean @@ -36,6 +37,7 @@ export const DEFAULT_EDIT_PREDICTION_CONFIG: EditPredictionConfig = { cursorUpdateIntervalMs: 250, // 250 milliseconds editHistoryDurationMs: 300000, // 5 minutes editAdjacentLineRange: 3, + maxLinesToScanForContent: 3, enableLanguageKeywordTrigger: true, enableOperatorDelimiterTrigger: true, enableUserPauseTrigger: true, diff --git a/server/aws-lsp-codewhisperer/src/language-server/inline-completion/codeWhispererServer.test.ts b/server/aws-lsp-codewhisperer/src/language-server/inline-completion/codeWhispererServer.test.ts index 9a08766706..cbe86261fd 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/inline-completion/codeWhispererServer.test.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/inline-completion/codeWhispererServer.test.ts @@ -27,6 +27,7 @@ import { EXPECTED_REFERENCE, EXPECTED_RESPONSE_CONTEXT, EXPECTED_RESULT, + EXPECTED_RESULT_EDITS, EXPECTED_RESULT_WITHOUT_IMPORTS, EXPECTED_RESULT_WITHOUT_REFERENCES, EXPECTED_RESULT_WITH_IMPORTS, @@ -2064,8 +2065,8 @@ describe('CodeWhisperer Server', () => { expectedSessionData ) }) - - it('should discard inflight session on new request when cached session is in REQUESTING state on subsequent requests', async () => { + // we decided to temporarily stop concurrent trigger and disable such logic + it.skip('should discard inflight session on new request when cached session is in REQUESTING state on subsequent requests', async () => { const getCompletionsResponses = await Promise.all([ features.doInlineCompletionWithReferences( { @@ -2127,7 +2128,47 @@ describe('CodeWhisperer Server', () => { ) }) - it('should record all sessions that were created in session log', async () => { + it('should block inflight session on new request when cached session is in REQUESTING state on subsequent requests', async () => { + const getCompletionsResponses = await Promise.all([ + features.doInlineCompletionWithReferences( + { + textDocument: { uri: SOME_FILE.uri }, + position: AUTO_TRIGGER_POSITION, + context: { triggerKind: InlineCompletionTriggerKind.Automatic }, + }, + CancellationToken.None + ), + features.doInlineCompletionWithReferences( + { + textDocument: { uri: SOME_FILE.uri }, + position: AUTO_TRIGGER_POSITION, + context: { triggerKind: InlineCompletionTriggerKind.Automatic }, + }, + CancellationToken.None + ), + features.doInlineCompletionWithReferences( + { + textDocument: { uri: SOME_FILE.uri }, + position: AUTO_TRIGGER_POSITION, + context: { triggerKind: InlineCompletionTriggerKind.Automatic }, + }, + CancellationToken.None + ), + ]) + + // 3 requests were processed by server, but only first should return results + const EXPECTED_COMPLETION_RESPONSES = [ + { sessionId: SESSION_IDS_LOG[0], items: EXPECTED_RESULT.items, partialResultToken: undefined }, // First session wins + { sessionId: '', items: [] }, + { sessionId: '', items: [] }, + ] + // Only last request must return completion items + assert.deepEqual(getCompletionsResponses, EXPECTED_COMPLETION_RESPONSES) + + assert.equal(sessionManagerSpy.createSession.callCount, 1) + }) + + it.skip('should record all sessions that were created in session log', async () => { // Start 3 session, 2 will be cancelled inflight await Promise.all([ features.doInlineCompletionWithReferences( @@ -2277,4 +2318,151 @@ describe('CodeWhisperer Server', () => { sinon.assert.calledOnce(sessionManagerSpy.closeSession) }) }) + + describe('Recommendation with editsEnabled', () => { + let features: TestFeatures + let server: Server + let service: StubbedInstance + + beforeEach(async () => { + // Set up the server with a mock service, returning predefined recommendations + service = sinon.createStubInstance(CodeWhispererServiceToken) as StubbedInstance + + service.generateSuggestions.returns( + Promise.resolve({ + suggestions: EXPECTED_SUGGESTION, + responseContext: EXPECTED_RESPONSE_CONTEXT, + suggestionType: SuggestionType.EDIT, + }) + ) + + // Initialize the features, but don't start server yet + features = new TestFeatures() + //@ts-ignore + features.logging = console + + const mockInitParams: InitializeParams = { + processId: 0, + rootUri: 'some-root-uri', + capabilities: {}, + initializationOptions: { + aws: { + awsClientCapabilities: { + textDocument: { + inlineCompletionWithReferences: { + inlineEditSupport: true, + }, + }, + }, + }, + }, + } + + features.lsp.getClientInitializeParams.returns(mockInitParams) + + TestAmazonQServiceManager.resetInstance() + server = CodewhispererServerFactory(() => initBaseTestServiceManager(features, service)) + + // Return no specific configuration for CodeWhisperer + features.lsp.workspace.getConfiguration.returns(Promise.resolve({})) + + // Start the server and open a document + await startServer(features, server) + + features.openDocument(SOME_FILE) + }) + + afterEach(() => { + features.dispose() + TestAmazonQServiceManager.resetInstance() + }) + + it('should handle editsEnabled=true with COMPLETIONS prediction type', async () => { + const result = await features.doInlineCompletionWithReferences( + { + textDocument: { uri: SOME_FILE.uri }, + position: { line: 0, character: 0 }, + context: { triggerKind: InlineCompletionTriggerKind.Invoked }, + }, + CancellationToken.None + ) + + // Check the completion result + assert.deepEqual(result, EXPECTED_RESULT_EDITS) + + const expectedGenerateSuggestionsRequest = { + fileContext: { + fileUri: SOME_FILE.uri, + filename: URI.parse(SOME_FILE.uri).path.substring(1), + programmingLanguage: { languageName: 'csharp' }, + leftFileContent: '', + rightFileContent: HELLO_WORLD_IN_CSHARP, + }, + maxResults: 5, + supplementalContexts: [], + predictionTypes: ['COMPLETIONS'], + editorState: { + document: { + relativeFilePath: SOME_FILE.uri, + programmingLanguage: { languageName: 'csharp' }, + text: HELLO_WORLD_IN_CSHARP, + }, + cursorState: { + position: { + line: 0, + character: 0, + }, + }, + }, + } + + sinon.assert.calledOnceWithExactly(service.generateSuggestions, expectedGenerateSuggestionsRequest) + }) + + it('should include EDITS in predictionTypes when previous session was accepted EDIT', async () => { + const session = sessionManager.createSession(SAMPLE_SESSION_DATA) + sessionManager.closeSession(session) + const currentSession = sessionManager.getCurrentSession() + if (currentSession) { + currentSession.suggestionsStates = new Map([['test-suggestion-id', 'Accept']]) + currentSession.suggestionType = SuggestionType.EDIT + } + + await features.doInlineCompletionWithReferences( + { + textDocument: { uri: SOME_FILE.uri }, + position: { line: 0, character: 0 }, + context: { triggerKind: InlineCompletionTriggerKind.Invoked }, + }, + CancellationToken.None + ) + + const expectedGenerateSuggestionsRequest = { + fileContext: { + fileUri: SOME_FILE.uri, + filename: URI.parse(SOME_FILE.uri).path.substring(1), + programmingLanguage: { languageName: 'csharp' }, + leftFileContent: '', + rightFileContent: HELLO_WORLD_IN_CSHARP, + }, + maxResults: 5, + supplementalContexts: [], + predictionTypes: ['EDITS'], + editorState: { + document: { + relativeFilePath: SOME_FILE.uri, + programmingLanguage: { languageName: 'csharp' }, + text: HELLO_WORLD_IN_CSHARP, + }, + cursorState: { + position: { + line: 0, + character: 0, + }, + }, + }, + } + sinon.assert.calledOnceWithExactly(service.generateSuggestions, expectedGenerateSuggestionsRequest) + }) + }) }) diff --git a/server/aws-lsp-codewhisperer/src/language-server/inline-completion/codeWhispererServer.ts b/server/aws-lsp-codewhisperer/src/language-server/inline-completion/codeWhispererServer.ts index 37b779b17a..732f17fb98 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/inline-completion/codeWhispererServer.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/inline-completion/codeWhispererServer.ts @@ -17,7 +17,7 @@ import { IdeDiagnostic, } from '@aws/language-server-runtimes/server-interface' import { AWSError } from 'aws-sdk' -import { autoTrigger, triggerType } from './auto-trigger/autoTrigger' +import { autoTrigger, getAutoTriggerType, triggerType } from './auto-trigger/autoTrigger' import { CodeWhispererServiceToken, GenerateSuggestionsRequest, @@ -338,27 +338,41 @@ export const CodewhispererServerFactory = const cursorTracker = CursorTracker.getInstance() const rejectedEditTracker = RejectedEditTracker.getInstance(logging, DEFAULT_REJECTED_EDIT_TRACKER_CONFIG) let editsEnabled = false + let isOnInlineCompletionHandlerInProgress = false const onInlineCompletionHandler = async ( params: InlineCompletionWithReferencesParams, token: CancellationToken ): Promise => { - // On every new completion request close current inflight session. - const currentSession = sessionManager.getCurrentSession() - if (currentSession && currentSession.state == 'REQUESTING' && !params.partialResultToken) { - currentSession.discardInflightSessionOnNewInvocation = true + // this handle should not run concurrently because + // 1. it would create a high volume of traffic, causing throttling + // 2. it is not designed to handle concurrent changes to these state variables. + // when one handler is at the API call stage, it has not yet update the session state + // but another request can start, causing the state to be incorrect. + if (isOnInlineCompletionHandlerInProgress) { + logging.log(`Skip concurrent inline completion`) + return EMPTY_RESULT } + isOnInlineCompletionHandlerInProgress = true - if (cursorTracker) { - cursorTracker.trackPosition(params.textDocument.uri, params.position) - } + try { + // On every new completion request close current inflight session. + const currentSession = sessionManager.getCurrentSession() + if (currentSession && currentSession.state == 'REQUESTING' && !params.partialResultToken) { + // this REQUESTING state only happens when the session is initialized, which is rare + currentSession.discardInflightSessionOnNewInvocation = true + } + + if (cursorTracker) { + cursorTracker.trackPosition(params.textDocument.uri, params.position) + } + const textDocument = await workspace.getTextDocument(params.textDocument.uri) - return workspace.getTextDocument(params.textDocument.uri).then(async textDocument => { const codeWhispererService = amazonQServiceManager.getCodewhispererService() if (params.partialResultToken && currentSession) { // subsequent paginated requests for current session - return codeWhispererService - .generateSuggestions({ + try { + const suggestionResponse = await codeWhispererService.generateSuggestions({ ...currentSession.requestContext, fileContext: { ...currentSession.requestContext.fileContext, @@ -371,17 +385,15 @@ export const CodewhispererServerFactory = }, nextToken: `${params.partialResultToken}`, }) - .then(async suggestionResponse => { - return await processSuggestionResponse( - suggestionResponse, - currentSession, - false, - params.context.selectedCompletionInfo?.range - ) - }) - .catch(error => { - return handleSuggestionsErrors(error, currentSession) - }) + return await processSuggestionResponse( + suggestionResponse, + currentSession, + false, + params.context.selectedCompletionInfo?.range + ) + } catch (error) { + return handleSuggestionsErrors(error as Error, currentSession) + } } else { // request for new session if (!textDocument) { @@ -414,10 +426,22 @@ export const CodewhispererServerFactory = ? workspaceState.workspaceId : undefined - // TODO: Can we get this derived from a keyboard event in the future? - // This picks the last non-whitespace character, if any, before the cursor - const triggerCharacter = fileContext.leftFileContent.trim().at(-1) ?? '' - const codewhispererAutoTriggerType = triggerType(fileContext) + let triggerCharacters = '' + let codewhispererAutoTriggerType = undefined + // Reference: https://github.com/aws/aws-toolkit-vscode/blob/amazonq/v1.74.0/packages/core/src/codewhisperer/service/classifierTrigger.ts#L477 + if ( + params.documentChangeParams?.contentChanges && + params.documentChangeParams.contentChanges.length > 0 && + params.documentChangeParams.contentChanges[0].text !== undefined + ) { + triggerCharacters = params.documentChangeParams.contentChanges[0].text + codewhispererAutoTriggerType = getAutoTriggerType(params.documentChangeParams.contentChanges) + } else { + // if the client does not emit document change for the trigger, use left most character. + triggerCharacters = fileContext.leftFileContent.trim().at(-1) ?? '' + codewhispererAutoTriggerType = triggerType(fileContext) + } + const previousSession = sessionManager.getPreviousSession() const previousDecision = previousSession?.getAggregatedUserTriggerDecision() ?? '' const previousSuggestionType = previousSession?.suggestionType ?? '' @@ -427,11 +451,18 @@ export const CodewhispererServerFactory = if (initializeParams !== undefined) { ideCategory = getIdeCategory(initializeParams) } + + // See: https://github.com/aws/aws-toolkit-vscode/blob/amazonq/v1.74.0/packages/core/src/codewhisperer/service/keyStrokeHandler.ts#L132 + // In such cases, do not auto trigger. + if (codewhispererAutoTriggerType === undefined) { + return EMPTY_RESULT + } + const autoTriggerResult = autoTrigger( { fileContext, // The left/right file context and programming language lineNum: params.position.line, // the line number of the invocation, this is the line of the cursor - char: triggerCharacter, // Add the character just inserted, if any, before the invication position + char: triggerCharacters, // Add the character just inserted, if any, before the invication position ide: ideCategory ?? '', os: '', // TODO: We should get this in a platform-agnostic way (i.e., compatible with the browser) previousDecision, // The last decision by the user on the previous invocation @@ -511,7 +542,7 @@ export const CodewhispererServerFactory = const editPredictionAutoTriggerResult = editPredictionAutoTrigger({ fileContext: fileContext, lineNum: params.position.line, - char: triggerCharacter, + char: triggerCharacters, previousDecision: previousDecision, cursorHistory: cursorTracker, recentEdits: recentEditTracker, @@ -557,7 +588,7 @@ export const CodewhispererServerFactory = document: { relativeFilePath: textDocument.uri, programmingLanguage: { - languageName: textDocument.languageId, + languageName: requestContext.fileContext.programmingLanguage.languageName, }, text: textDocument.getText(), }, @@ -589,8 +620,7 @@ export const CodewhispererServerFactory = } // Emit user trigger decision at session close time for active session sessionManager.discardSession(currentSession) - // TODO add streakLength back once the model is updated - // const streakLength = editsEnabled ? sessionManager.getAndUpdateStreakLength(false) : 0 + const streakLength = editsEnabled ? sessionManager.getAndUpdateStreakLength(false) : 0 await emitUserTriggerDecisionTelemetry( telemetry, telemetryService, @@ -599,7 +629,8 @@ export const CodewhispererServerFactory = 0, 0, [], - [] + [], + streakLength ) } @@ -631,7 +662,7 @@ export const CodewhispererServerFactory = language: fileContext.programmingLanguage.languageName, requestContext: requestContext, autoTriggerType: isAutomaticLspTriggerKind ? codewhispererAutoTriggerType : undefined, - triggerCharacter: triggerCharacter, + triggerCharacter: triggerCharacters, classifierResult: autoTriggerResult?.classifierResult, classifierThreshold: autoTriggerResult?.classifierThreshold, credentialStartUrl: credentialsProvider.getConnectionMetadata?.()?.sso?.startUrl ?? undefined, @@ -659,17 +690,16 @@ export const CodewhispererServerFactory = }, ...(workspaceId ? { workspaceId: workspaceId } : {}), } - - return codeWhispererService - .generateSuggestions(generateCompletionReq) - .then(async suggestionResponse => { - return processSuggestionResponse(suggestionResponse, newSession, true, selectionRange) - }) - .catch(err => { - return handleSuggestionsErrors(err, newSession) - }) + try { + const suggestionResponse = await codeWhispererService.generateSuggestions(generateCompletionReq) + return await processSuggestionResponse(suggestionResponse, newSession, true, selectionRange) + } catch (error) { + return handleSuggestionsErrors(error as Error, newSession) + } } - }) + } finally { + isOnInlineCompletionHandlerInProgress = false + } } const processSuggestionResponse = async ( @@ -703,13 +733,17 @@ export const CodewhispererServerFactory = if (session.discardInflightSessionOnNewInvocation) { session.discardInflightSessionOnNewInvocation = false sessionManager.discardSession(session) - // TODO add streakLength back once the model is updated - // const streakLength = editsEnabled ? sessionManager.getAndUpdateStreakLength(false) : 0 + const streakLength = editsEnabled ? sessionManager.getAndUpdateStreakLength(false) : 0 await emitUserTriggerDecisionTelemetry( telemetry, telemetryService, session, - timeSinceLastUserModification + timeSinceLastUserModification, + 0, + 0, + [], + [], + streakLength ) } @@ -837,6 +871,7 @@ export const CodewhispererServerFactory = }) .filter(item => item.insertText !== ''), sessionId: session.id, + partialResultToken: suggestionResponse.responseContext.nextToken, } } } @@ -992,8 +1027,7 @@ export const CodewhispererServerFactory = // Always emit user trigger decision at session close sessionManager.closeSession(session) - // TODO add streakLength back once the model is updated - // const streakLength = editsEnabled ? sessionManager.getAndUpdateStreakLength(isAccepted) : 0 + const streakLength = editsEnabled ? sessionManager.getAndUpdateStreakLength(isAccepted) : 0 await emitUserTriggerDecisionTelemetry( telemetry, telemetryService, @@ -1002,7 +1036,8 @@ export const CodewhispererServerFactory = addedCharactersForEditSuggestion.length, deletedCharactersForEditSuggestion.length, addedDiagnostics, - removedDiagnostics + removedDiagnostics, + streakLength ) } diff --git a/server/aws-lsp-codewhisperer/src/language-server/inline-completion/userTriggerDecision.test.ts b/server/aws-lsp-codewhisperer/src/language-server/inline-completion/userTriggerDecision.test.ts index b200b2b3a1..70740e3127 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/inline-completion/userTriggerDecision.test.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/inline-completion/userTriggerDecision.test.ts @@ -1266,8 +1266,9 @@ describe('Telemetry', () => { }) }) + // we are blocking subsequent completion request as long as inflight is running describe('Case 4. Inflight session is closed by subsequent completion request', function () { - it('should emit Discard user trigger decision event when REQUESTING session is closed before becoming ACTIVE', async () => { + it.skip('should emit Discard user trigger decision event when REQUESTING session is closed before becoming ACTIVE', async () => { // Chain requests in a callbacks let concurrentCount = 0 let requests: Promise[] = [] diff --git a/server/aws-lsp-codewhisperer/src/language-server/localProjectContext/localProjectContextServer.ts b/server/aws-lsp-codewhisperer/src/language-server/localProjectContext/localProjectContextServer.ts index e88617514b..1fa2b8301b 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/localProjectContext/localProjectContextServer.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/localProjectContext/localProjectContextServer.ts @@ -17,6 +17,7 @@ export const LocalProjectContextServer = let telemetryService: TelemetryService let localProjectContextEnabled: boolean = false + let VSCWindowsOverride: boolean = false lsp.addInitializer((params: InitializeParams) => { const workspaceFolders = workspace.getAllWorkspaceFolders() || params.workspaceFolders @@ -25,6 +26,11 @@ export const LocalProjectContextServer = workspaceFolders, logging ) + // Context: Adding, deleting, renaming files within the VSC IDE on windows does not properly trigger reindexing. All other IDE/OS combinations work + // For all IDE/OS combination except VSC on Windows, using URI.parse() works + // For VSC on Windows, using URI.parse() chops off the windows drive letter, so need to use URI.file() to preserve it + // Temporary solution until further investigation is done on how the pathing works: + VSCWindowsOverride = params.clientInfo?.name === 'vscode' && process.platform === 'win32' const supportedFilePatterns = Object.keys(languageByExtension).map(ext => `**/*${ext}`) @@ -85,7 +91,9 @@ export const LocalProjectContextServer = lsp.workspace.onDidCreateFiles(async event => { try { - const filePaths = event.files.map(file => URI.parse(file.uri).fsPath) + const filePaths = VSCWindowsOverride + ? event.files.map(file => URI.file(file.uri).fsPath) + : event.files.map(file => URI.parse(file.uri).fsPath) await localProjectContextController.updateIndexAndContextCommand(filePaths, true) } catch (error) { logging.error(`Error handling create event: ${error}`) @@ -94,7 +102,9 @@ export const LocalProjectContextServer = lsp.workspace.onDidDeleteFiles(async event => { try { - const filePaths = event.files.map(file => URI.parse(file.uri).fsPath) + const filePaths = VSCWindowsOverride + ? event.files.map(file => URI.file(file.uri).fsPath) + : event.files.map(file => URI.parse(file.uri).fsPath) await localProjectContextController.updateIndexAndContextCommand(filePaths, false) } catch (error) { logging.error(`Error handling delete event: ${error}`) @@ -103,8 +113,12 @@ export const LocalProjectContextServer = lsp.workspace.onDidRenameFiles(async event => { try { - const oldPaths = event.files.map(file => URI.parse(file.oldUri).fsPath) - const newPaths = event.files.map(file => URI.parse(file.newUri).fsPath) + const oldPaths = VSCWindowsOverride + ? event.files.map(file => URI.file(file.oldUri).fsPath) + : event.files.map(file => URI.parse(file.newUri).fsPath) + const newPaths = VSCWindowsOverride + ? event.files.map(file => URI.file(file.oldUri).fsPath) + : event.files.map(file => URI.parse(file.newUri).fsPath) await localProjectContextController.updateIndexAndContextCommand(oldPaths, false) await localProjectContextController.updateIndexAndContextCommand(newPaths, true) @@ -115,7 +129,9 @@ export const LocalProjectContextServer = lsp.onDidSaveTextDocument(async event => { try { - const filePaths = [URI.parse(event.textDocument.uri).fsPath] + const filePaths = VSCWindowsOverride + ? [URI.file(event.textDocument.uri).fsPath] + : [URI.parse(event.textDocument.uri).fsPath] await localProjectContextController.updateIndex(filePaths, 'update') } catch (error) { logging.error(`Error handling save event: ${error}`) diff --git a/server/aws-lsp-codewhisperer/src/language-server/netTransform/artifactManager.ts b/server/aws-lsp-codewhisperer/src/language-server/netTransform/artifactManager.ts index 30dc4bd35a..0b510e7c64 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/netTransform/artifactManager.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/netTransform/artifactManager.ts @@ -2,9 +2,20 @@ import { Logging, Workspace } from '@aws/language-server-runtimes/server-interfa import * as archiver from 'archiver' import * as crypto from 'crypto' import * as fs from 'fs' -import { CodeFile, ExternalReference, Project, References, RequirementJson, StartTransformRequest } from './models' +import { + CodeFile, + ExternalReference, + Project, + References, + RequirementJson, + StartTransformRequest, + TransformationPreferences, + TransformationSettings, +} from './models' import path = require('path') + const requriementJsonFileName = 'requirement.json' +const transformationPreferencesFileName = 'transformation-preferences.json' const artifactFolderName = 'artifact' const referencesFolderName = 'references' const zipFileName = 'artifact.zip' @@ -16,6 +27,7 @@ export class ArtifactManager { private workspace: Workspace private logging: Logging private workspacePath: string + constructor(workspace: Workspace, logging: Logging, workspacePath: string) { this.workspace = workspace this.logging = logging @@ -23,14 +35,65 @@ export class ArtifactManager { } async createZip(request: StartTransformRequest): Promise { + // Requirements.json contains project metadata const requirementJson = await this.createRequirementJsonContent(request) await this.writeRequirementJsonAsync(this.getRequirementJsonPath(), JSON.stringify(requirementJson)) + + // Transformation preferences contains user intent for the transformation type + const transformationPreferences = await this.createTransformationPreferencesContent(request) + await this.writeTransformationPreferencesAsync( + this.getTransformationPreferencesPath(), + JSON.stringify(transformationPreferences) + ) + await this.copySolutionConfigFiles(request) await this.removeDuplicateNugetPackagesFolder(request) const zipPath = await this.zipArtifact() return zipPath } + async createTransformationPreferencesContent(request: StartTransformRequest): Promise { + const transformationSettings: TransformationSettings = {} + + // Detect database modernization intent from DatabaseSettings or DmsArn presence + const hasDatabaseSettings = request.DatabaseSettings != null + const hasDmsArn = request.DmsArn != null + + // Conditional enabling of DatabaseModernization transformation + if (hasDatabaseSettings || hasDmsArn) { + transformationSettings.DatabaseModernization = { + Enabled: true, + } + + // Handle DmsArn when present + if (hasDmsArn) { + transformationSettings.DatabaseModernization.DmsArn = request.DmsArn + } + + // Handle full DatabaseSettings scenario + if (hasDatabaseSettings) { + transformationSettings.DatabaseModernization.DatabaseSettings = request.DatabaseSettings + } else if (hasDmsArn) { + // Handle DmsArn-only scenario - create minimal tool configuration + transformationSettings.DatabaseModernization.DatabaseSettings = { + Tools: [ + { + Name: 'DMS', + Properties: { DmsArn: request.DmsArn }, + }, + ], + } + } + } + + return { + Transformations: transformationSettings, + Metadata: { + GeneratedAt: new Date().toISOString(), + }, + } as TransformationPreferences + } + async removeDir(dir: string) { if (await this.workspace.fs.exists(dir)) { await this.workspace.fs.rm(dir, { recursive: true, force: true }) @@ -171,8 +234,8 @@ export class ArtifactManager { ...(request.EnableRazorViewTransform !== undefined && { EnableRazorViewTransform: request.EnableRazorViewTransform, }), - ...(request.EnableWebFormsToBlazorTransform !== undefined && { - EnableWebFormsToBlazorTransform: request.EnableWebFormsToBlazorTransform, + ...(request.EnableWebFormsTransform !== undefined && { + EnableWebFormsTransform: request.EnableWebFormsTransform, }), Packages: packages, } as RequirementJson @@ -240,6 +303,12 @@ export class ArtifactManager { return dir } + getTransformationPreferencesPath(): string { + const dir = path.join(this.workspacePath, artifactFolderName) + this.createFolderIfNotExist(dir) + return dir + } + getWorkspaceReferencePathFromRelativePath(relativePath: string): string { return path.join(this.workspacePath, artifactFolderName, relativePath) } @@ -287,6 +356,11 @@ export class ArtifactManager { fs.writeFileSync(fileName, fileContent) } + async writeTransformationPreferencesAsync(dir: string, fileContent: string) { + const fileName = path.join(dir, transformationPreferencesFileName) + fs.writeFileSync(fileName, fileContent) + } + createFolderIfNotExist(dir: string) { if (!fs.existsSync(dir)) { fs.mkdirSync(dir, { recursive: true }) diff --git a/server/aws-lsp-codewhisperer/src/language-server/netTransform/models.ts b/server/aws-lsp-codewhisperer/src/language-server/netTransform/models.ts index 96568fc692..5175403fd9 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/netTransform/models.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/netTransform/models.ts @@ -22,8 +22,10 @@ export interface StartTransformRequest extends ExecuteCommandParams { ProjectMetadata: TransformProjectMetadata[] TransformNetStandardProjects: boolean EnableRazorViewTransform: boolean - EnableWebFormsToBlazorTransform: boolean + EnableWebFormsTransform: boolean PackageReferences?: PackageReferenceMetadata[] + DmsArn?: string + DatabaseSettings?: DatabaseSettings } export interface StartTransformResponse { @@ -103,7 +105,41 @@ export interface RequirementJson { Projects: Project[] TransformNetStandardProjects: boolean EnableRazorViewTransform: boolean - EnableWebFormsToBlazorTransform: boolean + EnableWebFormsTransform: boolean +} + +export interface TransformationPreferences { + Transformations: TransformationSettings + Metadata: TransformationMetadata +} + +export interface TransformationSettings { + DatabaseModernization?: DatabaseModernizationTransformation +} + +export interface DatabaseModernizationTransformation { + Enabled: boolean + DmsArn?: string + DatabaseSettings?: DatabaseSettings +} + +export interface DatabaseSettings { + Tools?: Tool[] + Source?: DatabaseInfo + Target?: DatabaseInfo +} + +export interface Tool { + Name?: string + Properties?: Object +} + +export interface DatabaseInfo { + DatabaseName?: string + DatabaseVersion?: string +} +export interface TransformationMetadata { + GeneratedAt: string } export interface ExternalReference { diff --git a/server/aws-lsp-codewhisperer/src/language-server/netTransform/tests/artifactManager.createTransformationPreferencesContent.test.ts b/server/aws-lsp-codewhisperer/src/language-server/netTransform/tests/artifactManager.createTransformationPreferencesContent.test.ts new file mode 100644 index 0000000000..24d89651fa --- /dev/null +++ b/server/aws-lsp-codewhisperer/src/language-server/netTransform/tests/artifactManager.createTransformationPreferencesContent.test.ts @@ -0,0 +1,450 @@ +import { expect } from 'chai' +import { Workspace, Logging } from '@aws/language-server-runtimes/server-interface' +import { StartTransformRequest, TransformationPreferences, DatabaseSettings, Tool, DatabaseInfo } from '../models' +import { ArtifactManager } from '../artifactManager' +import { StubbedInstance, stubInterface } from 'ts-sinon' +import { EXAMPLE_REQUEST } from './mockData' + +describe('ArtifactManager - createTransformationPreferencesContent', () => { + let workspace: StubbedInstance + let artifactManager: ArtifactManager + let mockedLogging: StubbedInstance + let baseRequest: StartTransformRequest + + beforeEach(() => { + workspace = stubInterface() + mockedLogging = stubInterface() + artifactManager = new ArtifactManager(workspace, mockedLogging, '') + + // Create a clean base request for each test + baseRequest = { + ...EXAMPLE_REQUEST, + DmsArn: undefined, + DatabaseSettings: undefined, + } + }) + + describe('Full DatabaseSettings scenario', () => { + it('should generate transformation preferences with complete DatabaseSettings', async () => { + // Arrange + const dmsArn = 'arn:aws:dms:us-east-1:123456789012:replication-instance:test-instance' + const databaseSettings: DatabaseSettings = { + Tools: [ + { + Name: 'DMS', + Properties: { DmsArn: dmsArn }, + }, + { + Name: 'SCT', + Properties: { Version: '1.0.0' }, + }, + ], + Source: { + DatabaseName: 'MSSQL', + DatabaseVersion: '2019', + }, + Target: { + DatabaseName: 'POSTGRES', + DatabaseVersion: '13', + }, + } + + const request: StartTransformRequest = { + ...baseRequest, + DmsArn: dmsArn, + DatabaseSettings: databaseSettings, + } + + // Act + const result = await artifactManager.createTransformationPreferencesContent(request) + + // Assert + expect(result).to.not.be.null + expect(result.Transformations).to.not.be.null + expect(result.Transformations.DatabaseModernization).to.not.be.undefined + expect(result.Transformations.DatabaseModernization!.Enabled).to.be.true + expect(result.Transformations.DatabaseModernization!.DmsArn).to.equal(dmsArn) + expect(result.Transformations.DatabaseModernization!.DatabaseSettings).to.deep.equal(databaseSettings) + + // Verify metadata + expect(result.Metadata).to.not.be.null + expect(result.Metadata.GeneratedAt).to.not.be.empty + expect(new Date(result.Metadata.GeneratedAt)).to.be.instanceOf(Date) + }) + + it('should preserve all tool configurations from DatabaseSettings', async () => { + // Arrange + const complexDatabaseSettings: DatabaseSettings = { + Tools: [ + { + Name: 'DMS', + Properties: { + DmsArn: 'arn:aws:dms:us-east-1:123456789012:replication-instance:test', + ReplicationTaskArn: 'arn:aws:dms:us-east-1:123456789012:task:test-task', + }, + }, + { + Name: 'SCT', + Properties: { + Version: '1.0.0', + ConfigPath: '/path/to/config', + }, + }, + { + Name: 'CustomTool', + Properties: { + CustomProperty: 'value', + }, + }, + ], + Source: { + DatabaseName: 'ORACLE', + DatabaseVersion: '19c', + }, + Target: { + DatabaseName: 'AURORA_POSTGRESQL', + DatabaseVersion: '13.7', + }, + } + + const request: StartTransformRequest = { + ...baseRequest, + DatabaseSettings: complexDatabaseSettings, + } + + // Act + const result = await artifactManager.createTransformationPreferencesContent(request) + + // Assert + const dbSettings = result.Transformations.DatabaseModernization!.DatabaseSettings! + expect(dbSettings.Tools).to.have.length(3) + expect(dbSettings.Tools![0].Name).to.equal('DMS') + expect(dbSettings.Tools![0].Properties).to.deep.equal({ + DmsArn: 'arn:aws:dms:us-east-1:123456789012:replication-instance:test', + ReplicationTaskArn: 'arn:aws:dms:us-east-1:123456789012:task:test-task', + }) + expect(dbSettings.Tools![1].Name).to.equal('SCT') + expect(dbSettings.Tools![2].Name).to.equal('CustomTool') + expect(dbSettings.Source).to.deep.equal(complexDatabaseSettings.Source) + expect(dbSettings.Target).to.deep.equal(complexDatabaseSettings.Target) + }) + }) + + describe('DmsArn only scenario', () => { + it('should generate transformation preferences with minimal DMS tool configuration', async () => { + // Arrange + const dmsArn = 'arn:aws:dms:us-west-2:987654321098:replication-instance:prod-instance' + const request: StartTransformRequest = { + ...baseRequest, + DmsArn: dmsArn, + } + + // Act + const result = await artifactManager.createTransformationPreferencesContent(request) + + // Assert + expect(result.Transformations.DatabaseModernization).to.not.be.undefined + expect(result.Transformations.DatabaseModernization!.Enabled).to.be.true + expect(result.Transformations.DatabaseModernization!.DmsArn).to.equal(dmsArn) + + // Verify minimal tool configuration is created + const dbSettings = result.Transformations.DatabaseModernization!.DatabaseSettings! + expect(dbSettings).to.not.be.undefined + expect(dbSettings.Tools).to.have.length(1) + expect(dbSettings.Tools![0].Name).to.equal('DMS') + expect(dbSettings.Tools![0].Properties).to.deep.equal({ DmsArn: dmsArn }) + + // Source and Target should be undefined in minimal scenario + expect(dbSettings.Source).to.be.undefined + expect(dbSettings.Target).to.be.undefined + }) + + it('should include metadata with valid timestamp', async () => { + // Arrange + const request: StartTransformRequest = { + ...baseRequest, + DmsArn: 'arn:aws:dms:us-east-1:123456789012:replication-instance:test', + } + + // Act + const beforeTime = new Date() + const result = await artifactManager.createTransformationPreferencesContent(request) + const afterTime = new Date() + + // Assert + expect(result.Metadata.GeneratedAt).to.not.be.empty + const generatedTime = new Date(result.Metadata.GeneratedAt) + expect(generatedTime).to.be.at.least(beforeTime) + expect(generatedTime).to.be.at.most(afterTime) + + // Verify ISO 8601 format + expect(result.Metadata.GeneratedAt).to.match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/) + }) + }) + + describe('No database modernization scenario', () => { + it('should generate transformation preferences without DatabaseModernization when neither DmsArn nor DatabaseSettings provided', async () => { + // Arrange + const request: StartTransformRequest = { + ...baseRequest, + // Neither DmsArn nor DatabaseSettings are set + } + + // Act + const result = await artifactManager.createTransformationPreferencesContent(request) + + // Assert + expect(result.Transformations).to.not.be.null + expect(result.Transformations.DatabaseModernization).to.be.undefined + + // Metadata should still be present + expect(result.Metadata).to.not.be.null + expect(result.Metadata.GeneratedAt).to.not.be.empty + }) + + it('should generate empty transformation settings when no transformations are enabled', async () => { + // Arrange + const request: StartTransformRequest = { + ...baseRequest, + DmsArn: undefined, + DatabaseSettings: undefined, + } + + // Act + const result = await artifactManager.createTransformationPreferencesContent(request) + + // Assert + expect(result.Transformations).to.deep.equal({}) + expect(Object.keys(result.Transformations)).to.have.length(0) + }) + }) + + describe('JSON structure validation', () => { + it('should generate JSON structure matching expected format for full configuration', async () => { + // Arrange + const dmsArn = 'arn:aws:dms:us-east-1:123456789012:replication-instance:test' + const databaseSettings: DatabaseSettings = { + Tools: [ + { + Name: 'DMS', + Properties: { DmsArn: dmsArn }, + }, + ], + Source: { + DatabaseName: 'MSSQL', + DatabaseVersion: '2019', + }, + Target: { + DatabaseName: 'POSTGRES', + DatabaseVersion: '13', + }, + } + + const request: StartTransformRequest = { + ...baseRequest, + DmsArn: dmsArn, + DatabaseSettings: databaseSettings, + } + + // Act + const result = await artifactManager.createTransformationPreferencesContent(request) + const jsonString = JSON.stringify(result) + const parsedResult = JSON.parse(jsonString) + + // Assert - Verify top-level structure + expect(parsedResult).to.have.property('Transformations') + expect(parsedResult).to.have.property('Metadata') + + // Verify Transformations structure + expect(parsedResult.Transformations).to.have.property('DatabaseModernization') + expect(parsedResult.Transformations.DatabaseModernization).to.have.property('Enabled', true) + expect(parsedResult.Transformations.DatabaseModernization).to.have.property('DmsArn', dmsArn) + expect(parsedResult.Transformations.DatabaseModernization).to.have.property('DatabaseSettings') + + // Verify DatabaseSettings structure + const dbSettings = parsedResult.Transformations.DatabaseModernization.DatabaseSettings + expect(dbSettings).to.have.property('Tools') + expect(dbSettings).to.have.property('Source') + expect(dbSettings).to.have.property('Target') + + // Verify Tools structure + expect(dbSettings.Tools).to.be.an('array').with.length(1) + expect(dbSettings.Tools[0]).to.have.property('Name', 'DMS') + expect(dbSettings.Tools[0]).to.have.property('Properties') + expect(dbSettings.Tools[0].Properties).to.have.property('DmsArn', dmsArn) + + // Verify Source and Target structure + expect(dbSettings.Source).to.have.property('DatabaseName', 'MSSQL') + expect(dbSettings.Source).to.have.property('DatabaseVersion', '2019') + expect(dbSettings.Target).to.have.property('DatabaseName', 'POSTGRES') + expect(dbSettings.Target).to.have.property('DatabaseVersion', '13') + + // Verify Metadata structure + expect(parsedResult.Metadata).to.have.property('GeneratedAt') + expect(parsedResult.Metadata.GeneratedAt).to.be.a('string') + }) + + it('should generate valid JSON for minimal DmsArn-only configuration', async () => { + // Arrange + const dmsArn = 'arn:aws:dms:us-east-1:123456789012:replication-instance:minimal' + const request: StartTransformRequest = { + ...baseRequest, + DmsArn: dmsArn, + } + + // Act + const result = await artifactManager.createTransformationPreferencesContent(request) + const jsonString = JSON.stringify(result) + const parsedResult = JSON.parse(jsonString) + + // Assert + expect(parsedResult.Transformations.DatabaseModernization.Enabled).to.be.true + expect(parsedResult.Transformations.DatabaseModernization.DmsArn).to.equal(dmsArn) + expect(parsedResult.Transformations.DatabaseModernization.DatabaseSettings.Tools).to.have.length(1) + expect(parsedResult.Transformations.DatabaseModernization.DatabaseSettings.Tools[0].Name).to.equal('DMS') + expect( + parsedResult.Transformations.DatabaseModernization.DatabaseSettings.Tools[0].Properties.DmsArn + ).to.equal(dmsArn) + + // Source and Target should not be present in JSON + expect(parsedResult.Transformations.DatabaseModernization.DatabaseSettings).to.not.have.property('Source') + expect(parsedResult.Transformations.DatabaseModernization.DatabaseSettings).to.not.have.property('Target') + }) + + it('should generate valid JSON for no database modernization scenario', async () => { + // Arrange + const request: StartTransformRequest = { + ...baseRequest, + } + + // Act + const result = await artifactManager.createTransformationPreferencesContent(request) + const jsonString = JSON.stringify(result) + const parsedResult = JSON.parse(jsonString) + + // Assert + expect(parsedResult).to.have.property('Transformations') + expect(parsedResult).to.have.property('Metadata') + expect(parsedResult.Transformations).to.not.have.property('DatabaseModernization') + expect(parsedResult.Metadata).to.have.property('GeneratedAt') + }) + + it('should serialize and deserialize without data loss', async () => { + // Arrange + const complexRequest: StartTransformRequest = { + ...baseRequest, + DmsArn: 'arn:aws:dms:us-east-1:123456789012:replication-instance:complex', + DatabaseSettings: { + Tools: [ + { + Name: 'DMS', + Properties: { + DmsArn: 'arn:aws:dms:us-east-1:123456789012:replication-instance:complex', + AdditionalConfig: { nested: { value: 'test' } }, + }, + }, + ], + Source: { + DatabaseName: 'ORACLE', + DatabaseVersion: '19c', + }, + Target: { + DatabaseName: 'AURORA_POSTGRESQL', + DatabaseVersion: '13.7', + }, + }, + } + + // Act + const originalResult = await artifactManager.createTransformationPreferencesContent(complexRequest) + const jsonString = JSON.stringify(originalResult) + const deserializedResult: TransformationPreferences = JSON.parse(jsonString) + + // Assert - Compare original and deserialized results + expect(deserializedResult.Transformations.DatabaseModernization!.Enabled).to.equal( + originalResult.Transformations.DatabaseModernization!.Enabled + ) + expect(deserializedResult.Transformations.DatabaseModernization!.DmsArn).to.equal( + originalResult.Transformations.DatabaseModernization!.DmsArn + ) + expect(deserializedResult.Transformations.DatabaseModernization!.DatabaseSettings).to.deep.equal( + originalResult.Transformations.DatabaseModernization!.DatabaseSettings + ) + expect(deserializedResult.Metadata.GeneratedAt).to.equal(originalResult.Metadata.GeneratedAt) + }) + }) + + describe('Edge cases and error handling', () => { + it('should handle null DatabaseSettings gracefully', async () => { + // Arrange + const request: StartTransformRequest = { + ...baseRequest, + DmsArn: 'arn:aws:dms:us-east-1:123456789012:replication-instance:test', + DatabaseSettings: null as any, + } + + // Act + const result = await artifactManager.createTransformationPreferencesContent(request) + + // Assert + expect(result.Transformations.DatabaseModernization!.Enabled).to.be.true + expect(result.Transformations.DatabaseModernization!.DmsArn).to.equal(request.DmsArn) + expect(result.Transformations.DatabaseModernization!.DatabaseSettings!.Tools).to.have.length(1) + expect(result.Transformations.DatabaseModernization!.DatabaseSettings!.Tools![0].Name).to.equal('DMS') + }) + + it('should handle empty DatabaseSettings Tools array', async () => { + // Arrange + const request: StartTransformRequest = { + ...baseRequest, + DatabaseSettings: { + Tools: [], + Source: { + DatabaseName: 'MSSQL', + DatabaseVersion: '2019', + }, + Target: { + DatabaseName: 'POSTGRES', + DatabaseVersion: '13', + }, + }, + } + + // Act + const result = await artifactManager.createTransformationPreferencesContent(request) + + // Assert + expect(result.Transformations.DatabaseModernization!.Enabled).to.be.true + expect(result.Transformations.DatabaseModernization!.DatabaseSettings!.Tools).to.have.length(0) + expect(result.Transformations.DatabaseModernization!.DatabaseSettings!.Source).to.deep.equal( + request.DatabaseSettings!.Source + ) + expect(result.Transformations.DatabaseModernization!.DatabaseSettings!.Target).to.deep.equal( + request.DatabaseSettings!.Target + ) + }) + + it('should handle undefined properties in DatabaseSettings gracefully', async () => { + // Arrange + const request: StartTransformRequest = { + ...baseRequest, + DatabaseSettings: { + Tools: undefined, + Source: undefined, + Target: undefined, + }, + } + + // Act + const result = await artifactManager.createTransformationPreferencesContent(request) + + // Assert + expect(result.Transformations.DatabaseModernization!.Enabled).to.be.true + expect(result.Transformations.DatabaseModernization!.DatabaseSettings).to.deep.equal({ + Tools: undefined, + Source: undefined, + Target: undefined, + }) + }) + }) +}) diff --git a/server/aws-lsp-codewhisperer/src/language-server/netTransform/tests/converter.test.ts b/server/aws-lsp-codewhisperer/src/language-server/netTransform/tests/converter.test.ts index 08d51a6bbd..81c078e874 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/netTransform/tests/converter.test.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/netTransform/tests/converter.test.ts @@ -58,7 +58,7 @@ const sampleUserInputRequest: StartTransformRequest = { ], TransformNetStandardProjects: false, EnableRazorViewTransform: false, - EnableWebFormsToBlazorTransform: false, + EnableWebFormsTransform: false, command: '', PackageReferences: [], } diff --git a/server/aws-lsp-codewhisperer/src/language-server/netTransform/tests/mockData.ts b/server/aws-lsp-codewhisperer/src/language-server/netTransform/tests/mockData.ts index bc3d593060..d130e42587 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/netTransform/tests/mockData.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/netTransform/tests/mockData.ts @@ -5,7 +5,7 @@ export const EXAMPLE_REQUEST: StartTransformRequest = { SolutionConfigPaths: [], TransformNetStandardProjects: true, EnableRazorViewTransform: true, - EnableWebFormsToBlazorTransform: false, + EnableWebFormsTransform: false, SolutionRootPath: 'D:\\TestProjects-master\\TestProjects-master\\netcoreapp3.1\\CoreMVC', TargetFramework: 'net8.0', ProgramLanguage: 'csharp', diff --git a/server/aws-lsp-codewhisperer/src/language-server/netTransform/tests/validation.test.ts b/server/aws-lsp-codewhisperer/src/language-server/netTransform/tests/validation.test.ts index 5d645bf951..93de05c82b 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/netTransform/tests/validation.test.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/netTransform/tests/validation.test.ts @@ -16,7 +16,7 @@ const sampleStartTransformRequest: StartTransformRequest = { ProjectMetadata: [], TransformNetStandardProjects: false, EnableRazorViewTransform: false, - EnableWebFormsToBlazorTransform: false, + EnableWebFormsTransform: false, command: '', PackageReferences: [], } diff --git a/server/aws-lsp-codewhisperer/src/language-server/workspaceContext/artifactManager.ts b/server/aws-lsp-codewhisperer/src/language-server/workspaceContext/artifactManager.ts index 2c26b2f552..49a32e8e97 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/workspaceContext/artifactManager.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/workspaceContext/artifactManager.ts @@ -69,6 +69,7 @@ export class ArtifactManager { private workspaceFolders: WorkspaceFolder[] // TODO, how to handle when two workspace folders have the same name but different URI private filesByWorkspaceFolderAndLanguage: Map> + private isDisposed: boolean = false constructor(workspace: Workspace, logging: Logging, workspaceFolders: WorkspaceFolder[]) { this.workspace = workspace @@ -124,7 +125,17 @@ export class ArtifactManager { return zipFileMetadata } - async removeWorkspaceFolders(workspaceFolders: WorkspaceFolder[]): Promise { + public resetFromDisposal(): void { + this.isDisposed = false + } + + dispose(): void { + this.filesByWorkspaceFolderAndLanguage.clear() + this.workspaceFolders = [] + this.isDisposed = true + } + + removeWorkspaceFolders(workspaceFolders: WorkspaceFolder[]): void { workspaceFolders.forEach(workspaceToRemove => { // Find the matching workspace folder by URI let folderToDelete: WorkspaceFolder | undefined @@ -543,6 +554,9 @@ export class ArtifactManager { } for (const workspaceFolder of workspaceFolders) { + if (this.isDisposed) { + break + } const workspacePath = URI.parse(workspaceFolder.uri).path try { @@ -579,6 +593,9 @@ export class ArtifactManager { const zipFileMetadata: FileMetadata[] = [] await this.updateWorkspaceFiles(workspaceFolder, filesByLanguage) for (const [language, files] of filesByLanguage.entries()) { + if (this.isDisposed) { + break + } // Generate java .classpath and .project files const processedFiles = language === 'java' ? await this.processJavaProjectConfig(workspaceFolder, files) : files diff --git a/server/aws-lsp-codewhisperer/src/language-server/workspaceContext/dependency/dependencyDiscoverer.ts b/server/aws-lsp-codewhisperer/src/language-server/workspaceContext/dependency/dependencyDiscoverer.ts index f0d41e9801..027bba4796 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/workspaceContext/dependency/dependencyDiscoverer.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/workspaceContext/dependency/dependencyDiscoverer.ts @@ -3,7 +3,11 @@ import * as fs from 'fs' import { Logging, Workspace, WorkspaceFolder } from '@aws/language-server-runtimes/server-interface' import { URI } from 'vscode-uri' import { DependencyHandlerFactory } from './dependencyHandler/LanguageDependencyHandlerFactory' -import { BaseDependencyInfo, LanguageDependencyHandler } from './dependencyHandler/LanguageDependencyHandler' +import { + BaseDependencyInfo, + DependencyHandlerSharedState, + LanguageDependencyHandler, +} from './dependencyHandler/LanguageDependencyHandler' import { ArtifactManager } from '../artifactManager' import { supportedWorkspaceContextLanguages } from '../../../shared/languageDetection' @@ -12,8 +16,7 @@ export class DependencyDiscoverer { private workspaceFolders: WorkspaceFolder[] public dependencyHandlerRegistry: LanguageDependencyHandler[] = [] private initializedWorkspaceFolder = new Map() - // Create a SharedArrayBuffer with 4 bytes (for a 32-bit unsigned integer) for thread-safe counter - protected dependencyUploadedSizeSum = new Uint32Array(new SharedArrayBuffer(4)) + private sharedState: DependencyHandlerSharedState = { isDisposed: false, dependencyUploadedSizeSum: 0 } constructor( workspace: Workspace, @@ -23,7 +26,6 @@ export class DependencyDiscoverer { ) { this.workspaceFolders = workspaceFolders this.logging = logging - this.dependencyUploadedSizeSum[0] = 0 let jstsHandlerCreated = false supportedWorkspaceContextLanguages.forEach(language => { @@ -33,7 +35,7 @@ export class DependencyDiscoverer { logging, workspaceFolders, artifactManager, - this.dependencyUploadedSizeSum + this.sharedState ) if (handler) { // Share handler for javascript and typescript @@ -135,8 +137,9 @@ export class DependencyDiscoverer { } async reSyncDependenciesToS3(folders: WorkspaceFolder[]) { - Atomics.store(this.dependencyUploadedSizeSum, 0, 0) + this.sharedState.dependencyUploadedSizeSum = 0 for (const dependencyHandler of this.dependencyHandlerRegistry) { + dependencyHandler.markAllDependenciesAsUnZipped() await dependencyHandler.zipDependencyMap(folders) } } @@ -150,12 +153,17 @@ export class DependencyDiscoverer { } } + public resetFromDisposal(): void { + this.sharedState.isDisposed = false + this.sharedState.dependencyUploadedSizeSum = 0 + } + public dispose(): void { this.initializedWorkspaceFolder.clear() this.dependencyHandlerRegistry.forEach(dependencyHandler => { dependencyHandler.dispose() }) - Atomics.store(this.dependencyUploadedSizeSum, 0, 0) + this.sharedState.isDisposed = true } public disposeWorkspaceFolder(workspaceFolder: WorkspaceFolder) { diff --git a/server/aws-lsp-codewhisperer/src/language-server/workspaceContext/dependency/dependencyHandler/LanguageDependencyHandler.ts b/server/aws-lsp-codewhisperer/src/language-server/workspaceContext/dependency/dependencyHandler/LanguageDependencyHandler.ts index 226e16ef57..e381d7625f 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/workspaceContext/dependency/dependencyHandler/LanguageDependencyHandler.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/workspaceContext/dependency/dependencyHandler/LanguageDependencyHandler.ts @@ -19,6 +19,11 @@ export interface BaseDependencyInfo { workspaceFolder: WorkspaceFolder } +export interface DependencyHandlerSharedState { + isDisposed: boolean + dependencyUploadedSizeSum: number +} + // Abstract base class for all language dependency handlers export abstract class LanguageDependencyHandler { public language: CodewhispererLanguage @@ -28,7 +33,7 @@ export abstract class LanguageDependencyHandler { // key: workspaceFolder, value: {key: dependency name, value: Dependency} protected dependencyMap = new Map>() protected dependencyUploadedSizeMap = new Map() - protected dependencyUploadedSizeSum: Uint32Array + protected dependencyHandlerSharedState: DependencyHandlerSharedState protected dependencyWatchers: Map = new Map() protected artifactManager: ArtifactManager protected dependenciesFolderName: string @@ -48,7 +53,7 @@ export abstract class LanguageDependencyHandler { workspaceFolders: WorkspaceFolder[], artifactManager: ArtifactManager, dependenciesFolderName: string, - dependencyUploadedSizeSum: Uint32Array + dependencyHandlerSharedState: DependencyHandlerSharedState ) { this.language = language this.workspace = workspace @@ -62,7 +67,7 @@ export abstract class LanguageDependencyHandler { this.workspaceFolders.forEach(workSpaceFolder => this.dependencyMap.set(workSpaceFolder, new Map()) ) - this.dependencyUploadedSizeSum = dependencyUploadedSizeSum + this.dependencyHandlerSharedState = dependencyHandlerSharedState } /* @@ -126,6 +131,9 @@ export abstract class LanguageDependencyHandler { async zipDependencyMap(folders: WorkspaceFolder[]): Promise { // Process each workspace folder sequentially for (const [workspaceFolder, correspondingDependencyMap] of this.dependencyMap) { + if (this.dependencyHandlerSharedState.isDisposed) { + return + } // Check if the workspace folder is in the provided folders if (!folders.includes(workspaceFolder)) { continue @@ -144,6 +152,9 @@ export abstract class LanguageDependencyHandler { let currentChunkSize = 0 let currentChunk: Dependency[] = [] for (const dependency of dependencyList) { + if (this.dependencyHandlerSharedState.isDisposed) { + return + } // If adding this dependency would exceed the chunk size limit, // process the current chunk first if (currentChunkSize + dependency.size > MAX_CHUNK_SIZE_BYTES && currentChunk.length > 0) { @@ -177,7 +188,7 @@ export abstract class LanguageDependencyHandler { workspaceFolder, (this.dependencyUploadedSizeMap.get(workspaceFolder) || 0) + dependency.size ) - Atomics.add(this.dependencyUploadedSizeSum, 0, dependency.size) + this.dependencyHandlerSharedState.dependencyUploadedSizeSum += dependency.size // Mark this dependency that has been zipped dependency.zipped = true this.dependencyMap.get(workspaceFolder)?.set(dependency.name, dependency) @@ -298,8 +309,7 @@ export abstract class LanguageDependencyHandler { * However, everytime flare server restarts, this dependency map will be initialized. */ private validateWorkspaceDependencySize(workspaceFolder: WorkspaceFolder): boolean { - let uploadedSize = Atomics.load(this.dependencyUploadedSizeSum, 0) - if (uploadedSize && this.MAX_WORKSPACE_DEPENDENCY_SIZE < uploadedSize) { + if (this.MAX_WORKSPACE_DEPENDENCY_SIZE < this.dependencyHandlerSharedState.dependencyUploadedSizeSum) { return false } return true @@ -314,7 +324,8 @@ export abstract class LanguageDependencyHandler { disposeWorkspaceFolder(workspaceFolder: WorkspaceFolder): void { this.dependencyMap.delete(workspaceFolder) - Atomics.sub(this.dependencyUploadedSizeSum, 0, this.dependencyUploadedSizeMap.get(workspaceFolder) || 0) + this.dependencyHandlerSharedState.dependencyUploadedSizeSum -= + this.dependencyUploadedSizeMap.get(workspaceFolder) || 0 this.dependencyUploadedSizeMap.delete(workspaceFolder) this.disposeWatchers(workspaceFolder) this.disposeDependencyInfo(workspaceFolder) @@ -353,4 +364,12 @@ export abstract class LanguageDependencyHandler { protected isDependencyZipped(dependencyName: string, workspaceFolder: WorkspaceFolder): boolean | undefined { return this.dependencyMap.get(workspaceFolder)?.get(dependencyName)?.zipped } + + markAllDependenciesAsUnZipped(): void { + this.dependencyMap.forEach(correspondingDependencyMap => { + correspondingDependencyMap.forEach(dependency => { + dependency.zipped = false + }) + }) + } } diff --git a/server/aws-lsp-codewhisperer/src/language-server/workspaceContext/dependency/dependencyHandler/LanguageDependencyHandlerFactory.ts b/server/aws-lsp-codewhisperer/src/language-server/workspaceContext/dependency/dependencyHandler/LanguageDependencyHandlerFactory.ts index d5cadbe520..a6ce6892f1 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/workspaceContext/dependency/dependencyHandler/LanguageDependencyHandlerFactory.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/workspaceContext/dependency/dependencyHandler/LanguageDependencyHandlerFactory.ts @@ -1,7 +1,11 @@ import { JavaDependencyHandler } from './JavaDependencyHandler' import { PythonDependencyHandler } from './PythonDependencyHandler' import { JSTSDependencyHandler } from './JSTSDependencyHandler' -import { BaseDependencyInfo, LanguageDependencyHandler } from './LanguageDependencyHandler' +import { + BaseDependencyInfo, + DependencyHandlerSharedState, + LanguageDependencyHandler, +} from './LanguageDependencyHandler' import { Logging, Workspace, WorkspaceFolder } from '@aws/language-server-runtimes/server-interface' import { ArtifactManager } from '../../artifactManager' import { CodewhispererLanguage } from '../../../../shared/languageDetection' @@ -13,7 +17,7 @@ export class DependencyHandlerFactory { logging: Logging, workspaceFolders: WorkspaceFolder[], artifactManager: ArtifactManager, - dependencyUploadedSizeSum: Uint32Array + dependencyHandlerSharedState: DependencyHandlerSharedState ): LanguageDependencyHandler | null { switch (language.toLowerCase()) { case 'python': @@ -24,7 +28,7 @@ export class DependencyHandlerFactory { workspaceFolders, artifactManager, 'site-packages', - dependencyUploadedSizeSum + dependencyHandlerSharedState ) case 'javascript': case 'typescript': @@ -35,7 +39,7 @@ export class DependencyHandlerFactory { workspaceFolders, artifactManager, 'node_modules', - dependencyUploadedSizeSum + dependencyHandlerSharedState ) case 'java': return new JavaDependencyHandler( @@ -45,7 +49,7 @@ export class DependencyHandlerFactory { workspaceFolders, artifactManager, 'dependencies', - dependencyUploadedSizeSum + dependencyHandlerSharedState ) default: return null diff --git a/server/aws-lsp-codewhisperer/src/language-server/workspaceContext/fileUploadJobManager.ts b/server/aws-lsp-codewhisperer/src/language-server/workspaceContext/fileUploadJobManager.ts index beac88cb51..3f35ded00a 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/workspaceContext/fileUploadJobManager.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/workspaceContext/fileUploadJobManager.ts @@ -157,6 +157,8 @@ export class FileUploadJobManager { } public dispose(): void { - clearInterval(this.jobConsumerInterval) + if (this.jobConsumerInterval) { + clearInterval(this.jobConsumerInterval) + } } } diff --git a/server/aws-lsp-codewhisperer/src/language-server/workspaceContext/workspaceContextServer.test.ts b/server/aws-lsp-codewhisperer/src/language-server/workspaceContext/workspaceContextServer.test.ts index f1c342c8a2..f3bbb28a2a 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/workspaceContext/workspaceContextServer.test.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/workspaceContext/workspaceContextServer.test.ts @@ -2,14 +2,13 @@ import { InitializeParams, Server } from '@aws/language-server-runtimes/server-i import { TestFeatures } from '@aws/language-server-runtimes/testing' import sinon from 'ts-sinon' import { WorkspaceContextServer } from './workspaceContextServer' -import { AmazonQTokenServiceManager } from '../../shared/amazonQServiceManager/AmazonQTokenServiceManager' describe('WorkspaceContext Server', () => { let features: TestFeatures let server: Server let disposeServer: () => void - before(() => { + beforeEach(() => { features = new TestFeatures() server = WorkspaceContextServer() disposeServer = server(features) @@ -45,4 +44,149 @@ describe('WorkspaceContext Server', () => { sinon.assert.calledWith(features.logging.warn, sinon.match(/No workspaceIdentifier set/)) }) }) + + describe('UpdateConfiguration', () => { + it('should opt in for VSCode extension with server-sideContext enabled', async () => { + features.lsp.getClientInitializeParams.returns({ + initializationOptions: { + aws: { + clientInfo: { + name: 'AmazonQ-For-VSCode', + version: '0.0.1', + extension: { + name: 'AmazonQ-For-VSCode', + version: '0.0.1', + }, + }, + }, + }, + } as InitializeParams) + + features.lsp.workspace.getConfiguration.withArgs('amazonQ').resolves({ + 'server-sideContext': true, + }) + + await features.initialize(server) + await features.doChangeConfiguration() + + sinon.assert.calledWith(features.logging.log, sinon.match(/Workspace context server opt-in flag is: true/)) + }) + + it('should opt out for VSCode extension with server-sideContext disabled', async () => { + features.lsp.getClientInitializeParams.returns({ + initializationOptions: { + aws: { + clientInfo: { + name: 'AmazonQ-For-VSCode', + version: '0.0.1', + extension: { + name: 'AmazonQ-For-VSCode', + version: '0.0.1', + }, + }, + }, + }, + } as InitializeParams) + + features.lsp.workspace.getConfiguration.withArgs('amazonQ').resolves({ + 'server-sideContext': false, + }) + + await features.initialize(server) + await features.doChangeConfiguration() + + sinon.assert.calledWith(features.logging.log, sinon.match(/Workspace context server opt-in flag is: false/)) + }) + + it('should opt in for VSCode extension with server-sideContext missing for internal & BuilderID users', async () => { + features.lsp.getClientInitializeParams.returns({ + initializationOptions: { + aws: { + clientInfo: { + name: 'AmazonQ-For-VSCode', + version: '0.0.1', + extension: { + name: 'AmazonQ-For-VSCode', + version: '0.0.1', + }, + }, + }, + }, + } as InitializeParams) + + features.lsp.workspace.getConfiguration.withArgs('amazonQ').resolves({}) + await features.initialize(server) + + // Internal users + features.credentialsProvider.getConnectionMetadata.returns({ + sso: { + startUrl: 'https://amzn.awsapps.com/start', + }, + }) + await features.doChangeConfiguration() + sinon.assert.calledWith(features.logging.log, sinon.match(/Workspace context server opt-in flag is: true/)) + + // BuilderID users + sinon.restore() + features.credentialsProvider.getConnectionMetadata.returns({ + sso: { + startUrl: 'https://view.awsapps.com/start', + }, + }) + await features.doChangeConfiguration() + sinon.assert.calledWith(features.logging.log, sinon.match(/Workspace context server opt-in flag is: true/)) + }) + + it('should opt in for JetBrains extension with server-sideContext enabled', async () => { + features.lsp.getClientInitializeParams.returns({ + initializationOptions: { + aws: { + clientInfo: { + name: 'Amazon Q For JetBrains', + version: '0.0.1', + extension: { + name: 'Amazon Q For JetBrains', + version: '0.0.1', + }, + }, + }, + }, + } as InitializeParams) + + features.lsp.workspace.getConfiguration.withArgs('aws.codeWhisperer').resolves({ + workspaceContext: true, + }) + + await features.initialize(server) + await features.doChangeConfiguration() + + sinon.assert.calledWith(features.logging.log, sinon.match(/Workspace context server opt-in flag is: true/)) + }) + + it('should opt out for JetBrains extension with server-sideContext disabled', async () => { + features.lsp.getClientInitializeParams.returns({ + initializationOptions: { + aws: { + clientInfo: { + name: 'Amazon Q For JetBrains', + version: '0.0.1', + extension: { + name: 'Amazon Q For JetBrains', + version: '0.0.1', + }, + }, + }, + }, + } as InitializeParams) + + features.lsp.workspace.getConfiguration.withArgs('aws.codeWhisperer').resolves({ + workspaceContext: false, + }) + + await features.initialize(server) + await features.doChangeConfiguration() + + sinon.assert.calledWith(features.logging.log, sinon.match(/Workspace context server opt-in flag is: false/)) + }) + }) }) diff --git a/server/aws-lsp-codewhisperer/src/language-server/workspaceContext/workspaceContextServer.ts b/server/aws-lsp-codewhisperer/src/language-server/workspaceContext/workspaceContextServer.ts index 76c7275c41..c474869eab 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/workspaceContext/workspaceContextServer.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/workspaceContext/workspaceContextServer.ts @@ -23,7 +23,7 @@ import { AmazonQTokenServiceManager } from '../../shared/amazonQServiceManager/A import { FileUploadJobManager, FileUploadJobType } from './fileUploadJobManager' import { DependencyEventBundler } from './dependency/dependencyEventBundler' import ignore = require('ignore') -import { INTERNAL_USER_START_URL } from '../../shared/constants' +import { BUILDER_ID_START_URL, INTERNAL_USER_START_URL } from '../../shared/constants' const Q_CONTEXT_CONFIGURATION_SECTION = 'aws.q.workspaceContext' @@ -141,19 +141,35 @@ export const WorkspaceContextServer = (): Server => features => { const updateConfiguration = async () => { try { - let workspaceContextConfig = (await lsp.workspace.getConfiguration('amazonQ.workspaceContext')) || false - const configJetBrains = await lsp.workspace.getConfiguration('aws.codeWhisperer') - if (configJetBrains) { - workspaceContextConfig = workspaceContextConfig || configJetBrains['workspaceContext'] + const clientInitializParams = safeGet(lsp.getClientInitializeParams()) + const extensionName = clientInitializParams.initializationOptions?.aws?.clientInfo?.extension.name + if (extensionName === 'AmazonQ-For-VSCode') { + const amazonQSettings = (await lsp.workspace.getConfiguration('amazonQ'))?.['server-sideContext'] + isOptedIn = amazonQSettings || false + + // We want this temporary override for Amazon internal users and BuilderId users who are still using + // the old VSCode extension versions. Will remove this later. + if (amazonQSettings === undefined) { + const startUrl = credentialsProvider.getConnectionMetadata()?.sso?.startUrl + const isInternalOrBuilderIdUser = + startUrl && + (startUrl.includes(INTERNAL_USER_START_URL) || startUrl.includes(BUILDER_ID_START_URL)) + if (isInternalOrBuilderIdUser) { + isOptedIn = true + } + } + } else { + isOptedIn = (await lsp.workspace.getConfiguration('aws.codeWhisperer'))?.['workspaceContext'] || false } - - // TODO, removing client side opt in temporarily - isOptedIn = true - // isOptedIn = workspaceContextConfig === true + logging.log(`Workspace context server opt-in flag is: ${isOptedIn}`) if (!isOptedIn) { isWorkflowInitialized = false - await workspaceFolderManager.clearAllWorkspaceResources() + fileUploadJobManager?.dispose() + dependencyEventBundler?.dispose() + workspaceFolderManager.clearAllWorkspaceResources() + // Delete remote workspace when user chooses to opt-out + await workspaceFolderManager.deleteRemoteWorkspace() } } catch (error) { logging.error(`Error in getConfiguration: ${error}`) @@ -292,19 +308,18 @@ export const WorkspaceContextServer = (): Server => features => { fileUploadJobManager.startFileUploadJobConsumer() dependencyEventBundler.startDependencyEventBundler() - workspaceFolderManager.initializeWorkspaceStatusMonitor().catch(error => { - logging.error(`Error while initializing workspace status monitoring: ${error}`) - }) + await Promise.all([ + workspaceFolderManager.initializeWorkspaceStatusMonitor(), + workspaceFolderManager.processNewWorkspaceFolders(workspaceFolders), + ]) logging.log(`Workspace context workflow initialized`) - artifactManager.updateWorkspaceFolders(workspaceFolders) - workspaceFolderManager.processNewWorkspaceFolders(workspaceFolders).catch(error => { - logging.error(`Error while processing new workspace folders: ${error}`) - }) } else if (!isLoggedIn) { if (isWorkflowInitialized) { // If user is not logged in but the workflow is marked as initialized, it means user was logged in and is now logged out // In this case, clear the resources and stop the monitoring - await workspaceFolderManager.clearAllWorkspaceResources() + fileUploadJobManager?.dispose() + dependencyEventBundler?.dispose() + workspaceFolderManager.clearAllWorkspaceResources() } isWorkflowInitialized = false } @@ -523,11 +538,7 @@ export const WorkspaceContextServer = (): Server => features => { dependencyEventBundler.dispose() } if (workspaceFolderManager) { - workspaceFolderManager.clearAllWorkspaceResources().catch(error => { - logging.warn( - `Error while clearing workspace resources: ${error instanceof Error ? error.message : 'Unknown error'}` - ) - }) + workspaceFolderManager.clearAllWorkspaceResources() } } } diff --git a/server/aws-lsp-codewhisperer/src/language-server/workspaceContext/workspaceFolderManager.ts b/server/aws-lsp-codewhisperer/src/language-server/workspaceContext/workspaceFolderManager.ts index d0147219eb..bbab80e2d1 100644 --- a/server/aws-lsp-codewhisperer/src/language-server/workspaceContext/workspaceFolderManager.ts +++ b/server/aws-lsp-codewhisperer/src/language-server/workspaceContext/workspaceFolderManager.ts @@ -37,13 +37,17 @@ export class WorkspaceFolderManager { private static instance: WorkspaceFolderManager | undefined private readonly workspaceIdentifier: string private workspaceState: WorkspaceState - private remoteWorkspaceIdPromise: Promise - private remoteWorkspaceIdResolver!: (id: string) => void + // Promise that gates operations until workspace ID is ready or cancelled + private remoteWorkspaceIdPromise: Promise + // Resolves the remoteWorkspaceIdPromise to signal whether operations should proceed + private remoteWorkspaceIdResolver!: (id: boolean) => void + // Tracks whether the existing remoteWorkspaceIdPromise has been resolved + private remoteWorkspaceIdPromiseResolved: boolean = false private workspaceFolders: WorkspaceFolder[] private credentialsProvider: CredentialsProvider private readonly INITIAL_CHECK_INTERVAL = 40 * 1000 // 40 seconds private readonly INITIAL_CONNECTION_TIMEOUT = 2 * 60 * 1000 // 2 minutes - private readonly CONTINUOUS_MONITOR_INTERVAL = 30 * 60 * 1000 // 30 minutes + private readonly CONTINUOUS_MONITOR_INTERVAL = 5 * 60 * 1000 // 30 minutes private readonly MESSAGE_PUBLISH_INTERVAL: number = 100 // 100 milliseconds private continuousMonitorInterval: NodeJS.Timeout | undefined private optOutMonitorInterval: NodeJS.Timeout | undefined @@ -105,7 +109,7 @@ export class WorkspaceFolderManager { }) }) - this.remoteWorkspaceIdPromise = new Promise(resolve => { + this.remoteWorkspaceIdPromise = new Promise(resolve => { this.remoteWorkspaceIdResolver = resolve }) this.workspaceState = { @@ -137,7 +141,10 @@ export class WorkspaceFolderManager { async processNewWorkspaceFolders(folders: WorkspaceFolder[]) { // Wait for remote workspace id - await this.waitForRemoteWorkspaceId() + const shouldProceed = await this.remoteWorkspaceIdPromise + if (!shouldProceed) { + return + } // Sync workspace source codes await this.syncSourceCodesToS3(folders).catch(e => { @@ -201,12 +208,15 @@ export class WorkspaceFolderManager { return s3Url } - async clearAllWorkspaceResources() { + clearAllWorkspaceResources() { this.stopContinuousMonitoring() + this.stopOptOutMonitoring() + this.remoteWorkspaceIdResolver(false) + this.remoteWorkspaceIdPromiseResolved = true this.stopMessageQueueConsumer() - this.resetRemoteWorkspaceId() this.workspaceState.webSocketClient?.destroyClient() this.dependencyDiscoverer.dispose() + this.artifactManager.dispose() } /** @@ -215,7 +225,10 @@ export class WorkspaceFolderManager { * @param workspaceFolder */ async processWorkspaceFoldersDeletion(workspaceFolders: WorkspaceFolder[]) { - const workspaceId = await this.waitForRemoteWorkspaceId() + const shouldProceed = await this.remoteWorkspaceIdPromise + if (!shouldProceed) { + return + } for (const folder of workspaceFolders) { const languagesMap = this.artifactManager.getLanguagesForWorkspaceFolder(folder) const programmingLanguages = languagesMap ? Array.from(languagesMap.keys()) : [] @@ -234,7 +247,7 @@ export class WorkspaceFolderManager { ], }, workspaceChangeMetadata: { - workspaceId: workspaceId, + workspaceId: this.workspaceState.workspaceId, programmingLanguage: language, }, }, @@ -243,7 +256,7 @@ export class WorkspaceFolderManager { } this.dependencyDiscoverer.disposeWorkspaceFolder(folder) } - await this.artifactManager.removeWorkspaceFolders(workspaceFolders) + this.artifactManager.removeWorkspaceFolders(workspaceFolders) } private async uploadDependencyZipAndQueueEvent(zip: FileMetadata, addWSFolderPathInS3: boolean): Promise { @@ -302,36 +315,43 @@ export class WorkspaceFolderManager { async initializeWorkspaceStatusMonitor() { this.logging.log(`Initializing workspace status check for workspace [${this.workspaceIdentifier}]`) + // Reset workspace ID to force operations to wait for new remote workspace information + this.resetRemoteWorkspaceId() + + this.artifactManager.resetFromDisposal() + this.dependencyDiscoverer.resetFromDisposal() + // Set up message queue consumer - this.messageQueueConsumerInterval = setInterval(() => { - if (this.workspaceState.webSocketClient && this.workspaceState.webSocketClient.isConnected()) { - const message = this.workspaceState.messageQueue[0] - if (message) { - try { - this.workspaceState.webSocketClient.send(message) - this.workspaceState.messageQueue.shift() - } catch (error) { - this.logging.error(`Error sending message: ${error}`) + if (this.messageQueueConsumerInterval === undefined) { + this.messageQueueConsumerInterval = setInterval(() => { + if (this.workspaceState.webSocketClient && this.workspaceState.webSocketClient.isConnected()) { + const message = this.workspaceState.messageQueue[0] + if (message) { + try { + this.workspaceState.webSocketClient.send(message) + this.workspaceState.messageQueue.shift() + } catch (error) { + this.logging.error(`Error sending message: ${error}`) + } } } - } - }, this.MESSAGE_PUBLISH_INTERVAL) + }, this.MESSAGE_PUBLISH_INTERVAL) + } // Perform a one-time checkRemoteWorkspaceStatusAndReact first // Pass skipUploads as true since it would be handled by processNewWorkspaceFolders await this.checkRemoteWorkspaceStatusAndReact(true) // Set up continuous monitoring which periodically invokes checkRemoteWorkspaceStatusAndReact - if (!this.isOptedOut) { + if (!this.isOptedOut && this.continuousMonitorInterval === undefined) { this.logging.log(`Starting continuous monitor for workspace [${this.workspaceIdentifier}]`) - const intervalId = setInterval(async () => { + this.continuousMonitorInterval = setInterval(async () => { try { await this.checkRemoteWorkspaceStatusAndReact() } catch (error) { this.logging.error(`Error monitoring workspace status: ${error}`) } }, this.CONTINUOUS_MONITOR_INTERVAL) - this.continuousMonitorInterval = intervalId } } @@ -353,8 +373,8 @@ export class WorkspaceFolderManager { if (optOut) { this.logging.log(`User opted out during initial connection`) this.isOptedOut = true - await this.clearAllWorkspaceResources() - await this.startOptOutMonitor() + this.clearAllWorkspaceResources() + this.startOptOutMonitor() return resolve(false) } @@ -407,8 +427,8 @@ export class WorkspaceFolderManager { if (optOut) { this.logging.log('User opted out, clearing all resources and starting opt-out monitor') this.isOptedOut = true - await this.clearAllWorkspaceResources() - await this.startOptOutMonitor() + this.clearAllWorkspaceResources() + this.startOptOutMonitor() return } @@ -426,8 +446,7 @@ export class WorkspaceFolderManager { this.workspaceState.remoteWorkspaceState = metadata.workspaceStatus if (this.workspaceState.workspaceId === undefined) { - this.workspaceState.workspaceId = metadata.workspaceId - this.remoteWorkspaceIdResolver(this.workspaceState.workspaceId) + this.setRemoteWorkspaceId(metadata.workspaceId) } switch (metadata.workspaceStatus) { @@ -454,37 +473,24 @@ export class WorkspaceFolderManager { } } - async waitForRemoteWorkspaceId(): Promise { - // If workspaceId is already set, return it immediately - if (this.workspaceState.workspaceId) { - return this.workspaceState.workspaceId - } - // Otherwise, wait for the promise to resolve - let waitedWorkspaceId = undefined - while (!waitedWorkspaceId) { - waitedWorkspaceId = await this.remoteWorkspaceIdPromise - } - return waitedWorkspaceId + private setRemoteWorkspaceId(workspaceId: string) { + this.workspaceState.workspaceId = workspaceId + this.remoteWorkspaceIdResolver(true) + this.remoteWorkspaceIdPromiseResolved = true } private resetRemoteWorkspaceId() { this.workspaceState.workspaceId = undefined - // Store the old resolver - const oldResolver = this.remoteWorkspaceIdResolver - - // Create new promise first - this.remoteWorkspaceIdPromise = new Promise(resolve => { - this.remoteWorkspaceIdResolver = resolve - }) - - // Reset the old promise - if (oldResolver) { - oldResolver('') + if (this.remoteWorkspaceIdPromiseResolved) { + this.remoteWorkspaceIdPromise = new Promise(resolve => { + this.remoteWorkspaceIdResolver = resolve + }) + this.remoteWorkspaceIdPromiseResolved = false } } - private async startOptOutMonitor() { + private startOptOutMonitor() { if (this.optOutMonitorInterval === undefined) { const intervalId = setInterval(async () => { try { @@ -492,10 +498,17 @@ export class WorkspaceFolderManager { if (!optOut) { this.isOptedOut = false - this.logging.log('User opted back in, stopping opt-out monitor and re-initializing workspace') + this.logging.log( + "User's administrator opted in, stopping opt-out monitor and initializing remote workspace" + ) clearInterval(intervalId) this.optOutMonitorInterval = undefined - await this.initializeWorkspaceStatusMonitor() + this.initializeWorkspaceStatusMonitor().catch(error => { + this.logging.error(`Error while initializing workspace status monitoring: ${error}`) + }) + this.processNewWorkspaceFolders(this.workspaceFolders).catch(error => { + this.logging.error(`Error while processing workspace folders: ${error}`) + }) } } catch (error) { this.logging.error(`Error in opt-out monitor: ${error}`) @@ -555,16 +568,23 @@ export class WorkspaceFolderManager { } private stopContinuousMonitoring() { - this.logging.log(`Stopping monitoring for workspace [${this.workspaceIdentifier}]`) if (this.continuousMonitorInterval) { + this.logging.log(`Stopping monitoring for workspace [${this.workspaceIdentifier}]`) clearInterval(this.continuousMonitorInterval) this.continuousMonitorInterval = undefined } } + private stopOptOutMonitoring() { + if (this.optOutMonitorInterval) { + clearInterval(this.optOutMonitorInterval) + this.optOutMonitorInterval = undefined + } + } + private stopMessageQueueConsumer() { - this.logging.log(`Stopping message queue consumer`) if (this.messageQueueConsumerInterval) { + this.logging.log(`Stopping message queue consumer`) clearInterval(this.messageQueueConsumerInterval) this.messageQueueConsumerInterval = undefined } @@ -580,8 +600,7 @@ export class WorkspaceFolderManager { this.workspaceState.remoteWorkspaceState = workspaceDetails.workspace.workspaceStatus if (this.workspaceState.workspaceId === undefined) { - this.workspaceState.workspaceId = workspaceDetails.workspace.workspaceId - this.remoteWorkspaceIdResolver(this.workspaceState.workspaceId) + this.setRemoteWorkspaceId(workspaceDetails.workspace.workspaceId) } return createWorkspaceResult @@ -640,14 +659,19 @@ export class WorkspaceFolderManager { } } - // TODO, this function is unused at the moment - private async deleteWorkspace(workspaceId: string) { + public async deleteRemoteWorkspace() { + const workspaceId = this.workspaceState.workspaceId + this.resetRemoteWorkspaceId() try { + if (!workspaceId) { + this.logging.warn(`No remote workspaceId found, skipping workspace deletion`) + return + } if (isLoggedInUsingBearerToken(this.credentialsProvider)) { await this.serviceManager.getCodewhispererService().deleteWorkspace({ workspaceId: workspaceId, }) - this.logging.log(`Workspace (${workspaceId}) deleted successfully`) + this.logging.log(`Remote workspace (${workspaceId}) deleted successfully`) } else { this.logging.log(`Skipping workspace (${workspaceId}) deletion because user is not logged in`) } @@ -681,7 +705,7 @@ export class WorkspaceFolderManager { e?.__type?.includes('AccessDeniedException') && e?.reason === 'UNAUTHORIZED_WORKSPACE_CONTEXT_FEATURE_ACCESS' ) { - this.logging.log(`Server side opt-out detected for workspace context`) + this.logging.log(`User's administrator opted out server-side workspace context`) optOut = true } } diff --git a/server/aws-lsp-codewhisperer/src/shared/activeUserTracker.test.ts b/server/aws-lsp-codewhisperer/src/shared/activeUserTracker.test.ts new file mode 100644 index 0000000000..1389d2adb7 --- /dev/null +++ b/server/aws-lsp-codewhisperer/src/shared/activeUserTracker.test.ts @@ -0,0 +1,191 @@ +import { ActiveUserTracker, DEFAULT_ACTIVE_USER_WINDOW_MINUTES } from './activeUserTracker' +import * as sinon from 'sinon' +import * as assert from 'assert' +import { Features } from '@aws/language-server-runtimes/server-interface/server' + +describe('ActiveUserTracker', function () { + // Increase the timeout for all tests in this suite + this.timeout(10000) + let clock: sinon.SinonFakeTimers + let mockFeatures: Features + let mockFs: any + let mockClientId: string + + beforeEach(function () { + // Ensure singleton is completely reset + if ((ActiveUserTracker as any).instance) { + ;(ActiveUserTracker as any).instance.dispose() + } + ;(ActiveUserTracker as any).instance = undefined + + // Use fake timers starting at timestamp 0 + clock = sinon.useFakeTimers(0) + + // Setup mock file system + mockFs = { + exists: sinon.stub().resolves(false), + readFile: sinon.stub().resolves(''), + writeFile: sinon.stub().resolves(undefined), + mkdir: sinon.stub().resolves(undefined), + rm: sinon.stub().resolves(undefined), + } + + // Setup mock client ID + mockClientId = 'test-client-id' + + // Setup mock features + mockFeatures = { + workspace: { + fs: mockFs, + } as any, + logging: { + debug: sinon.stub(), + info: sinon.stub(), + warn: sinon.stub(), + error: sinon.stub(), + } as any, + lsp: { + getClientInitializeParams: sinon.stub().returns({ + initializationOptions: { + aws: { + clientInfo: { + clientId: mockClientId, + }, + }, + }, + }), + } as any, + } as Features + }) + + afterEach(function () { + // Restore real timers + clock.restore() + + // Restore all stubs + sinon.restore() + + // Ensure singleton is disposed + if ((ActiveUserTracker as any).instance) { + ;(ActiveUserTracker as any).instance.dispose() + } + }) + + it('should return true for first call', function () { + const tracker = ActiveUserTracker.getInstance(mockFeatures) + const result = tracker.isNewActiveUser() + assert.strictEqual(result, true) + }) + + it('should return false for calls within window', function () { + const tracker = ActiveUserTracker.getInstance(mockFeatures) + + // First call returns true and starts a window + assert.strictEqual(tracker.isNewActiveUser(), true) + + // Advance time within window by 100 ms + clock.tick(100) + + // Second call within window should return false + assert.strictEqual(tracker.isNewActiveUser(), false) + }) + + it('should return true for calls after window expires', function () { + const tracker = ActiveUserTracker.getInstance(mockFeatures) + + // First call returns true + assert.strictEqual(tracker.isNewActiveUser(), true) + + // Advance time past the window (convert minutes to milliseconds) + clock.tick((DEFAULT_ACTIVE_USER_WINDOW_MINUTES + 1) * 60 * 1000) + + // Call after window expires returns true + assert.strictEqual(tracker.isNewActiveUser(), true) + }) + + it('should reset tracker on dispose', function () { + const tracker = ActiveUserTracker.getInstance(mockFeatures) + tracker.isNewActiveUser() + + tracker.dispose() + + // After dispose, next call should return true + assert.strictEqual(tracker.isNewActiveUser(), true) + }) + + it('should use client ID from features', function () { + const tracker = ActiveUserTracker.getInstance(mockFeatures) + + // Verify the client ID was used + assert.strictEqual((tracker as any).clientId, mockClientId) + }) + + it('should update client ID when it changes', function () { + // First create with initial client ID + const tracker = ActiveUserTracker.getInstance(mockFeatures) + assert.strictEqual((tracker as any).clientId, mockClientId) + + // Now change the client ID + const newClientId = 'new-client-id' + const newFeatures = { ...mockFeatures } + newFeatures.lsp = { + getClientInitializeParams: sinon.stub().returns({ + initializationOptions: { aws: { clientInfo: { clientId: newClientId } } }, + }), + } as any + + // Get instance with new client ID + const updatedTracker = ActiveUserTracker.getInstance(newFeatures) + + // Verify it's the same instance but with updated client ID + assert.strictEqual(updatedTracker, tracker) + assert.strictEqual((updatedTracker as any).clientId, newClientId) + }) + + it('should call persistState when a new active user event occurs', function () { + // Setup - create a spy on the private persistState method + const tracker = ActiveUserTracker.getInstance(mockFeatures) + const persistStateSpy = sinon.spy(tracker as any, 'persistState') + + // Trigger a new active user event which should call persistState + tracker.isNewActiveUser() + + // Verify that persistState was called + assert.strictEqual(persistStateSpy.called, true, 'persistState should be called') + }) + + it('should load state from disk on initialization', function () { + // Setup - prepare mock file system with existing state + const timestamp = 12345 + const existingState = { + clients: { + [mockClientId]: timestamp, + }, + } + + mockFs.exists.resolves(true) + mockFs.readFile.resolves(JSON.stringify(existingState)) + + // Reset singleton for this test + ;(ActiveUserTracker as any).instance = undefined + + // Act - create a new tracker which will load state + const tracker = ActiveUserTracker.getInstance(mockFeatures) + + // Force synchronous execution of promises + clock.runAll() + + // Directly set the timestamp to simulate the async load completing + // This is necessary because the real loadPersistedState is async and we can't await it in the test + ;(tracker as any).windowStartTimestamp = timestamp + + // Assert - verify file was read + assert.strictEqual(mockFs.exists.calledOnce, true) + + // Assert - verify timestamp was loaded + assert.strictEqual((tracker as any).windowStartTimestamp, timestamp) + + // Verify behavior - should return false for calls within window + assert.strictEqual(tracker.isNewActiveUser(), false) + }) +}) diff --git a/server/aws-lsp-codewhisperer/src/shared/activeUserTracker.ts b/server/aws-lsp-codewhisperer/src/shared/activeUserTracker.ts new file mode 100644 index 0000000000..57232969e6 --- /dev/null +++ b/server/aws-lsp-codewhisperer/src/shared/activeUserTracker.ts @@ -0,0 +1,191 @@ +/** + * This class tracks active user events based on time windows. + * If multiple messages are sent within the same time window, it will count as a single active user event. + * The time window is not reset by subsequent messages within the window. + * A new message outside the window will reset the window and count as a new active user event. + * + * The window state is persisted to disk to survive across IDE restarts and user logout/login cycles. + */ + +import * as os from 'os' +import path = require('path') +import { Features } from '@aws/language-server-runtimes/server-interface/server' + +// Default window size in minutes (24 hours) +export const DEFAULT_ACTIVE_USER_WINDOW_MINUTES = 24 * 60 + +// The state file contains a map of client IDs to their window start timestamps +interface WindowState { + clients: Record +} + +export class ActiveUserTracker { + private static instance: ActiveUserTracker | undefined + private windowStartTimestamp: number = -1 + private windowSizeMs: number + private clientId: string + private stateFilePath: string + private features: Features + + private constructor(features: Features) { + this.windowSizeMs = DEFAULT_ACTIVE_USER_WINDOW_MINUTES * 60 * 1000 + this.features = features + this.clientId = this.getClientId() + this.stateFilePath = this.getStateFilePath() + // Initialize with default state + void this.loadPersistedState() + } + + /** + * Gets the singleton instance of ActiveUserTracker + * @param features Features object containing workspace, logging, lsp, and other services + * @returns The ActiveUserTracker instance + */ + public static getInstance(features: Features): ActiveUserTracker { + if (!ActiveUserTracker.instance) { + ActiveUserTracker.instance = new ActiveUserTracker(features) + } + + const currentClientId = + features.lsp.getClientInitializeParams()?.initializationOptions?.aws?.clientInfo?.clientId + if (currentClientId && ActiveUserTracker.instance.clientId !== currentClientId) { + // Client ID changed, update it and load its state + features.logging.debug( + `Client ID changed from ${ActiveUserTracker.instance.clientId} to ${currentClientId}` + ) + ActiveUserTracker.instance.clientId = currentClientId + + // Don't reset the timestamp here - just load the state for the new client ID + // If there's no state for this client ID, loadPersistedState will leave windowStartTimestamp as -1 + // which will trigger a new active user event on the next isNewActiveUser() call + void ActiveUserTracker.instance.loadPersistedState() + } + + return ActiveUserTracker.instance + } + + /** + * Determines if it should count as a new active user event + * @returns true if this is a new active user event, false if it's within an existing window + */ + public isNewActiveUser(): boolean { + const currentTime = Date.now() + + // If this is the first message or the window has expired + if (this.windowStartTimestamp === -1 || currentTime - this.windowStartTimestamp > this.windowSizeMs) { + // This is a new active user event - start a new window + this.windowStartTimestamp = currentTime + this.features.logging.debug( + `New active user event for client ${this.clientId}, setting timestamp: ${this.windowStartTimestamp}` + ) + void this.persistState() + return true + } + + // Message is within the current window, do NOT update the timestamp + // The window continues from its original start time + return false + } + + /** + * Resets the tracker + */ + public dispose(): void { + // Just reset the in-memory state and clear the singleton instance + this.windowStartTimestamp = -1 + ActiveUserTracker.instance = undefined + } + + /** + * Gets the client ID from the LSP initialization parameters or generates a machine ID if not available + * @returns The client ID + */ + private getClientId(): string { + const clientId = this.features.lsp.getClientInitializeParams()?.initializationOptions?.aws?.clientInfo?.clientId + if (clientId) { + return clientId + } + + // Generate a machine-specific ID if no client ID is available + const hostname = os.hostname() + const username = os.userInfo().username + return `${hostname}-${username}` + } + + /** + * Gets the path to the state file + * @returns The path to the state file + */ + private getStateFilePath(): string { + const amazonQDir = path.join(os.homedir(), '.aws', 'amazonq') + + // Directory will be created when needed in persistState() + return path.join(amazonQDir, 'active-user-state.json') + } + + /** + * Loads the persisted state from disk + */ + private async loadPersistedState(): Promise { + try { + const exists = await this.features.workspace.fs.exists(this.stateFilePath) + if (exists) { + const data = await this.features.workspace.fs.readFile(this.stateFilePath, { encoding: 'utf8' }) + const state = JSON.parse(data) as WindowState + + // If the client exists in the state, restore its timestamp + if (state.clients && state.clients[this.clientId] !== undefined) { + this.windowStartTimestamp = state.clients[this.clientId] + this.features.logging.debug( + `Loaded active user state for client ${this.clientId}, timestamp: ${this.windowStartTimestamp}` + ) + } + } + } catch (error) { + // If there's any error reading the state, delete the corrupted file and start fresh + this.windowStartTimestamp = -1 + this.features.logging.warn(`Error loading active user state: ${error}`) + try { + const exists = await this.features.workspace.fs.exists(this.stateFilePath) + if (exists) { + await this.features.workspace.fs.rm(this.stateFilePath) + } + } catch (deleteError) { + // Ignore errors when deleting corrupted file + } + } + } + + /** + * Persists the current state to disk + */ + private async persistState(): Promise { + try { + // Try to read existing state file to update it + let state: WindowState = { clients: {} } + + // Create directory if it doesn't exist + const dirPath = path.dirname(this.stateFilePath) + await this.features.workspace.fs.mkdir(dirPath, { recursive: true }) + + const exists = await this.features.workspace.fs.exists(this.stateFilePath) + if (exists) { + try { + const data = await this.features.workspace.fs.readFile(this.stateFilePath, { encoding: 'utf8' }) + state = JSON.parse(data) as WindowState + } catch (error) { + // If there's any error reading the state, start fresh + state = { clients: {} } + this.features.logging.warn(`Error parsing active user state file: ${error}`) + } + } + + // Update or add the current client timestamp + state.clients[this.clientId] = this.windowStartTimestamp + + await this.features.workspace.fs.writeFile(this.stateFilePath, JSON.stringify(state), { mode: 0o600 }) + } catch (error) { + this.features.logging.warn(`Error persisting active user state: ${error}`) + } + } +} diff --git a/server/aws-lsp-codewhisperer/src/shared/amazonQServiceManager/configurationUtils.ts b/server/aws-lsp-codewhisperer/src/shared/amazonQServiceManager/configurationUtils.ts index cfad502017..9c833213ec 100644 --- a/server/aws-lsp-codewhisperer/src/shared/amazonQServiceManager/configurationUtils.ts +++ b/server/aws-lsp-codewhisperer/src/shared/amazonQServiceManager/configurationUtils.ts @@ -108,6 +108,14 @@ export async function getAmazonQRelatedWorkspaceConfigs( lsp: Lsp, logging: Logging ): Promise>> { + const clientParams = lsp.getClientInitializeParams() + const supportsWorkspaceConfiguration = clientParams?.capabilities?.workspace?.configuration !== false + + if (!supportsWorkspaceConfiguration) { + logging.debug('Client does not support workspace configuration, returning default config.') + return {} + } + let qConfig: Readonly | undefined = undefined let codeWhispererConfig: Readonly | undefined = undefined diff --git a/server/aws-lsp-codewhisperer/src/shared/codeWhispererService.ts b/server/aws-lsp-codewhisperer/src/shared/codeWhispererService.ts index b845b216f3..2c20e1f21c 100644 --- a/server/aws-lsp-codewhisperer/src/shared/codeWhispererService.ts +++ b/server/aws-lsp-codewhisperer/src/shared/codeWhispererService.ts @@ -255,14 +255,19 @@ export class CodeWhispererServiceToken extends CodeWhispererServiceBase { // add error check if (this.customizationArn) request.customizationArn = this.customizationArn const response = await this.client.generateCompletions(this.withProfileArn(request)).promise() - this.logging.info(`GenerateCompletion response: + this.logging.info( + `GenerateCompletion response: "requestId": ${response.$response.requestId}, "responseCompletionCount": ${response.completions?.length ?? 0}, "responsePredictionCount": ${response.predictions?.length ?? 0}, "suggestionType": ${request.predictionTypes?.toString() ?? ''}, "filename": ${request.fileContext.filename}, "language": ${request.fileContext.programmingLanguage.languageName}, - "supplementalContextLength": ${request.supplementalContexts?.length ?? 0}`) + "supplementalContextLength": ${request.supplementalContexts?.length ?? 0}, + "request.nextToken": ${request.nextToken}, + "response.nextToken": ${response.nextToken}` + ) + const responseContext = { requestId: response?.$response?.requestId, codewhispererSessionId: response?.$response?.httpResponse?.headers['x-amzn-sessionid'], diff --git a/server/aws-lsp-codewhisperer/src/shared/imageVerification.ts b/server/aws-lsp-codewhisperer/src/shared/imageVerification.ts index bbaeef9cb4..6252b8fdd0 100644 --- a/server/aws-lsp-codewhisperer/src/shared/imageVerification.ts +++ b/server/aws-lsp-codewhisperer/src/shared/imageVerification.ts @@ -11,6 +11,8 @@ export interface ImageVerificationResult { errors: string[] } +export const MAX_IMAGE_CONTEXT_COUNT = 20 + export interface ImageVerificationOptions { maxSizeBytes?: number maxDimension?: number @@ -20,7 +22,7 @@ export interface ImageVerificationOptions { export const DEFAULT_IMAGE_VERIFICATION_OPTIONS: Required = { maxSizeBytes: 3.75 * 1024 * 1024, // 3.75MB maxDimension: 8000, // 8000px - supportedExtensions: ['jpeg', 'png', 'gif', 'webp'], + supportedExtensions: ['jpeg', 'jpg', 'png', 'gif', 'webp'], } /** diff --git a/server/aws-lsp-codewhisperer/src/shared/streamingClientService.ts b/server/aws-lsp-codewhisperer/src/shared/streamingClientService.ts index 6db2267e88..905bfe9f4f 100644 --- a/server/aws-lsp-codewhisperer/src/shared/streamingClientService.ts +++ b/server/aws-lsp-codewhisperer/src/shared/streamingClientService.ts @@ -16,7 +16,7 @@ import { CredentialsProvider, SDKInitializator, Logging } from '@aws/language-se import { getBearerTokenFromProvider, getIAMCredentialsFromProvider, isUsageLimitError } from './utils' import { ConfiguredRetryStrategy } from '@aws-sdk/util-retry' import { CredentialProviderChain, Credentials } from 'aws-sdk' -import { clientTimeoutMs } from '../language-server/agenticChat/constants' +import { CLIENT_TIMEOUT_MS } from '../language-server/agenticChat/constants/constants' import { AmazonQUsageLimitError } from './amazonQServiceManager/errors' import { NodeHttpHandler } from '@smithy/node-http-handler' @@ -83,7 +83,7 @@ export class StreamingClientServiceToken extends StreamingClientServiceBase { token: tokenProvider, retryStrategy: new ConfiguredRetryStrategy(0, (attempt: number) => 500 + attempt ** 10), requestHandler: new NodeHttpHandler({ - requestTimeout: clientTimeoutMs, + requestTimeout: CLIENT_TIMEOUT_MS, }), customUserAgent: customUserAgent, }) diff --git a/server/aws-lsp-codewhisperer/src/shared/telemetry/telemetryService.test.ts b/server/aws-lsp-codewhisperer/src/shared/telemetry/telemetryService.test.ts index 7c0b02f783..14df60adb9 100644 --- a/server/aws-lsp-codewhisperer/src/shared/telemetry/telemetryService.test.ts +++ b/server/aws-lsp-codewhisperer/src/shared/telemetry/telemetryService.test.ts @@ -276,6 +276,7 @@ describe('TelemetryService', () => { deletedCharacterCount: undefined, addedIdeDiagnostics: undefined, removedIdeDiagnostics: undefined, + streakLength: 0, }, }, optOutPreference: 'OPTIN', @@ -839,6 +840,8 @@ describe('TelemetryService', () => { enabled: true, languageServerVersion: undefined, requestIds: undefined, + experimentName: undefined, + userVariation: undefined, cwsprChatHasContextList: true, cwsprChatFolderContextCount: 0, cwsprChatFileContextCount: 0, diff --git a/server/aws-lsp-codewhisperer/src/shared/telemetry/telemetryService.ts b/server/aws-lsp-codewhisperer/src/shared/telemetry/telemetryService.ts index e12892722d..6cc0b4fdfe 100644 --- a/server/aws-lsp-codewhisperer/src/shared/telemetry/telemetryService.ts +++ b/server/aws-lsp-codewhisperer/src/shared/telemetry/telemetryService.ts @@ -271,8 +271,7 @@ export class TelemetryService { deletedCharacterCount: deletedCharacterCount, addedIdeDiagnostics: addedIdeDiagnostics, removedIdeDiagnostics: removedIdeDiagnostics, - // TODO add streakLength back once the model is updated - // streakLength: streakLength, + streakLength: streakLength ?? 0, } return this.invokeSendTelemetryEvent({ userTriggerDecisionEvent: event, @@ -529,6 +528,8 @@ export class TelemetryService { cwsprChatPinnedPromptContextCount?: number languageServerVersion?: string requestIds?: string[] + experimentName?: string + userVariation?: string }> ) { const timeBetweenChunks = params.timeBetweenChunks?.slice(0, 100) @@ -580,6 +581,8 @@ export class TelemetryService { enabled: params.agenticCodingMode, languageServerVersion: additionalParams.languageServerVersion, requestIds: truncatedRequestIds, + experimentName: additionalParams.experimentName, + userVariation: additionalParams.userVariation, }, }) } diff --git a/server/aws-lsp-codewhisperer/src/shared/telemetry/types.ts b/server/aws-lsp-codewhisperer/src/shared/telemetry/types.ts index c0af49ecb6..16dccbedff 100644 --- a/server/aws-lsp-codewhisperer/src/shared/telemetry/types.ts +++ b/server/aws-lsp-codewhisperer/src/shared/telemetry/types.ts @@ -208,6 +208,7 @@ export enum ChatTelemetryEventName { ChatHistoryAction = 'amazonq_performChatHistoryAction', ExportTab = 'amazonq_exportTab', UiClick = 'ui_click', + ActiveUser = 'amazonq_activeUser', } export interface ChatTelemetryEventMap { @@ -230,6 +231,7 @@ export interface ChatTelemetryEventMap { [ChatTelemetryEventName.ChatHistoryAction]: ChatHistoryActionEvent [ChatTelemetryEventName.ExportTab]: ExportTabEvent [ChatTelemetryEventName.UiClick]: UiClickEvent + [ChatTelemetryEventName.ActiveUser]: ActiveUserEvent } export type AgencticLoop_InvokeLLMEvent = { @@ -262,6 +264,11 @@ export type InteractWithAgenticChatEvent = { enabled?: boolean } +export type ActiveUserEvent = { + credentialStartUrl?: string + result: string +} + export type ModifyCodeEvent = { cwsprChatConversationId: string cwsprChatMessageId: string @@ -295,6 +302,8 @@ export type AddMessageEvent = { enabled?: boolean languageServerVersion?: string requestIds?: string[] + experimentName?: string + userVariation?: string // context related metrics cwsprChatHasContextList?: boolean diff --git a/server/aws-lsp-codewhisperer/src/shared/testUtils.ts b/server/aws-lsp-codewhisperer/src/shared/testUtils.ts index 9695f9121f..38d6e960cb 100644 --- a/server/aws-lsp-codewhisperer/src/shared/testUtils.ts +++ b/server/aws-lsp-codewhisperer/src/shared/testUtils.ts @@ -146,6 +146,18 @@ export const EXPECTED_RESULT = { partialResultToken: undefined, } +export const EXPECTED_RESULT_EDITS = { + sessionId: EXPECTED_SESSION_ID, + items: [ + { + itemId: EXPECTED_SUGGESTION[0].itemId, + insertText: EXPECTED_SUGGESTION[0].content, + isInlineEdit: true, + }, + ], + partialResultToken: undefined, +} + export const EXPECTED_NEXT_TOKEN = 'randomNextToken' export const EXPECTED_REFERENCE = { diff --git a/server/aws-lsp-identity/package.json b/server/aws-lsp-identity/package.json index 4244160a29..1692e811af 100644 --- a/server/aws-lsp-identity/package.json +++ b/server/aws-lsp-identity/package.json @@ -26,8 +26,8 @@ "dependencies": { "@aws-sdk/client-sso-oidc": "^3.616.0", "@aws-sdk/token-providers": "^3.744.0", - "@aws/language-server-runtimes": "^0.2.102", - "@aws/lsp-core": "^0.0.11", + "@aws/language-server-runtimes": "^0.2.112", + "@aws/lsp-core": "^0.0.12", "@smithy/node-http-handler": "^3.2.5", "@smithy/shared-ini-file-loader": "^4.0.1", "https-proxy-agent": "^7.0.5", diff --git a/server/aws-lsp-identity/src/iam/iamProvider.ts b/server/aws-lsp-identity/src/iam/iamProvider.ts new file mode 100644 index 0000000000..42c3cdc7d5 --- /dev/null +++ b/server/aws-lsp-identity/src/iam/iamProvider.ts @@ -0,0 +1,29 @@ +import { AwsErrorCodes, IamCredentials, Profile, ProfileKind } from '@aws/language-server-runtimes/server-interface' +import { AwsError, Observability } from '@aws/lsp-core' +import { ProfileStore } from '../language-server/profiles/profileService' + +export class IamProvider { + constructor( + private readonly observability: Observability, // In case we need telemetry and logging in the future + private readonly profileStore: ProfileStore // Will be used when assuming role with source_profile + ) {} + + async getCredential(profile: Profile, callStsOnInvalidIamCredential: boolean): Promise { + let credentials: IamCredentials + // Get the credentials directly from the profile + if (profile.kinds.includes(ProfileKind.IamCredentialsProfile)) { + credentials = { + accessKeyId: profile.settings!.aws_access_key_id!, + secretAccessKey: profile.settings!.aws_secret_access_key!, + sessionToken: profile.settings!.aws_session_token!, + } + } else { + throw new AwsError( + 'Credentials could not be found for provided profile kind', + AwsErrorCodes.E_INVALID_PROFILE + ) + } + + return credentials + } +} diff --git a/server/aws-lsp-identity/src/iam/utils.ts b/server/aws-lsp-identity/src/iam/utils.ts new file mode 100644 index 0000000000..06467906a9 --- /dev/null +++ b/server/aws-lsp-identity/src/iam/utils.ts @@ -0,0 +1,38 @@ +import { IAMClient, SimulatePrincipalPolicyCommand, SimulatePrincipalPolicyCommandOutput } from '@aws-sdk/client-iam' +import { GetCallerIdentityCommand, STSClient } from '@aws-sdk/client-sts' +import { + AwsErrorCodes, + GetMfaCodeParams, + GetMfaCodeResult, + IamCredentials, +} from '@aws/language-server-runtimes/server-interface' +import { AwsError } from '@aws/lsp-core' + +// Simulate permissions on the identity associated with the credentials +export async function simulatePermissions( + credentials: IamCredentials, + permissions: string[], + region?: string +): Promise { + // Convert the credentials into an identity + const stsClient = new STSClient({ region: region || 'us-east-1', credentials: credentials }) + const identity = await stsClient.send(new GetCallerIdentityCommand({})) + if (!identity.Arn) { + throw new AwsError('Caller identity ARN not found.', AwsErrorCodes.E_INVALID_PROFILE) + } + + // Simulate permissions on the identity + const iamClient = new IAMClient({ region: region || 'us-east-1', credentials: credentials }) + return await iamClient.send( + new SimulatePrincipalPolicyCommand({ + PolicySourceArn: identity.Arn, + ActionNames: permissions, + }) + ) +} + +export type SendGetMfaCode = (params: GetMfaCodeParams) => Promise + +export type IamHandlers = { + sendGetMfaCode: SendGetMfaCode +} diff --git a/server/aws-lsp-identity/src/language-server/identityServer.ts b/server/aws-lsp-identity/src/language-server/identityServer.ts index be5d357ead..31a01577de 100644 --- a/server/aws-lsp-identity/src/language-server/identityServer.ts +++ b/server/aws-lsp-identity/src/language-server/identityServer.ts @@ -10,6 +10,8 @@ import { InitializeParams, PartialInitializeResult, ShowMessageRequestParams, + GetIamCredentialParams, + GetMfaCodeParams, } from '@aws/language-server-runtimes/server-interface' import { SharedConfigProfileStore } from './profiles/sharedConfigProfileStore' import { IdentityService } from './identityService' @@ -18,6 +20,8 @@ import { SsoTokenAutoRefresher } from './ssoTokenAutoRefresher' import { AwsError, ServerBase } from '@aws/lsp-core' import { Features } from '@aws/language-server-runtimes/server-interface/server' import { ShowUrl, ShowMessageRequest, ShowProgress } from '../sso/utils' +import { SendGetMfaCode } from '../iam/utils' +import { IamProvider } from '../iam/iamProvider' export class IdentityServer extends ServerBase { constructor(features: Features) { @@ -38,6 +42,8 @@ export class IdentityServer extends ServerBase { const showMessageRequest: ShowMessageRequest = (params: ShowMessageRequestParams) => this.features.lsp.window.showMessageRequest(params) const showProgress: ShowProgress = this.features.lsp.sendProgress + const sendGetMfaCode: SendGetMfaCode = (params: GetMfaCodeParams) => + this.features.identityManagement.sendGetMfaCode(params) // Initialize dependencies const profileStore = new SharedConfigProfileStore(this.observability) @@ -50,11 +56,14 @@ export class IdentityServer extends ServerBase { const autoRefresher = new SsoTokenAutoRefresher(ssoCache, this.observability) + const iamProvider = new IamProvider(this.observability, profileStore) + const identityService = new IdentityService( profileStore, ssoCache, autoRefresher, - { showUrl, showMessageRequest, showProgress }, + iamProvider, + { showUrl, showMessageRequest, showProgress, sendGetMfaCode }, this.getClientName(params), this.observability ) @@ -70,6 +79,14 @@ export class IdentityServer extends ServerBase { }) ) + this.features.identityManagement.onGetIamCredential( + async (params: GetIamCredentialParams, token: CancellationToken) => + await identityService.getIamCredential(params, token).catch(reason => { + this.observability.logging.log(`GetIamCredential failed. ${reason}`) + throw awsResponseErrorWrap(reason) + }) + ) + this.features.identityManagement.onInvalidateSsoToken( async (params: InvalidateSsoTokenParams, token: CancellationToken) => await identityService.invalidateSsoToken(params, token).catch(reason => { diff --git a/server/aws-lsp-identity/src/language-server/identityService.test.ts b/server/aws-lsp-identity/src/language-server/identityService.test.ts index 5bf9ff1432..a007aead95 100644 --- a/server/aws-lsp-identity/src/language-server/identityService.test.ts +++ b/server/aws-lsp-identity/src/language-server/identityService.test.ts @@ -4,7 +4,7 @@ import { awsBuilderIdReservedName, SsoCache, SsoClientRegistration } from '../ss import { IdentityService } from './identityService' import { ProfileData, ProfileStore } from './profiles/profileService' import { SsoTokenAutoRefresher } from './ssoTokenAutoRefresher' -import { createStubInstance, restore, spy, SinonSpy } from 'sinon' +import { createStubInstance, restore, spy, SinonSpy, stub } from 'sinon' import { AuthorizationFlowKind, CancellationToken, @@ -14,6 +14,9 @@ import { import { SSOToken } from '@smithy/shared-ini-file-loader' import { Logging, Telemetry } from '@aws/language-server-runtimes/server-interface' import { Observability } from '@aws/lsp-core' +import { STSClient } from '@aws-sdk/client-sts' +import { IAMClient } from '@aws-sdk/client-iam' +import { IamProvider } from '../iam/iamProvider' // eslint-disable-next-line use(require('chai-as-promised')) @@ -23,6 +26,7 @@ let sut: IdentityService let profileStore: StubbedInstance let ssoCache: StubbedInstance let autoRefresher: StubbedInstance +let iamProvider: StubbedInstance let observability: StubbedInstance let authFlowFn: SinonSpy @@ -33,11 +37,52 @@ describe('IdentityService', () => { profiles: [ { kinds: [ProfileKind.SsoTokenProfile], - name: 'my-profile', + name: 'my-sso-profile', settings: { sso_session: 'my-sso-session', }, }, + { + kinds: [ProfileKind.IamCredentialsProfile], + name: 'my-iam-profile', + settings: { + aws_access_key_id: 'my-access-key', + aws_secret_access_key: 'my-secret-key', + }, + }, + { + kinds: [ProfileKind.IamCredentialsProfile], + name: 'my-sts-profile', + settings: { + aws_access_key_id: 'my-access-key', + aws_secret_access_key: 'my-secret-key', + aws_session_token: 'my-session-token', + }, + }, + { + kinds: [ProfileKind.IamSourceProfileProfile], + name: 'my-role-profile', + settings: { + role_arn: 'my-role-arn', + source_profile: 'my-iam-profile', + }, + }, + { + kinds: [ProfileKind.IamSourceProfileProfile], + name: 'my-mfa-profile', + settings: { + role_arn: 'my-role-arn', + source_profile: 'my-iam-profile', + mfa_serial: 'my-device-arn', + }, + }, + { + kinds: [ProfileKind.IamCredentialProcessProfile], + name: 'my-process-profile', + settings: { + credential_process: 'my-process', + }, + }, ], ssoSessions: [ { @@ -70,6 +115,14 @@ describe('IdentityService', () => { unwatch: undefined, }) as StubbedInstance + iamProvider = stubInterface({ + getCredential: Promise.resolve({ + accessKeyId: 'my-access-key', + secretAccessKey: 'my-secret-key', + sessionToken: 'my-session-token', + }), + }) + authFlowFn = spy(() => Promise.resolve({ accessToken: 'my-access-token', @@ -85,10 +138,12 @@ describe('IdentityService', () => { profileStore, ssoCache, autoRefresher, + iamProvider, { showUrl: _ => {}, showMessageRequest: _ => Promise.resolve({ title: 'client-response' }), showProgress: _ => Promise.resolve(), + sendGetMfaCode: () => Promise.resolve({ code: 'mfa-code' }), }, 'My Client', observability, @@ -97,6 +152,24 @@ describe('IdentityService', () => { [AuthorizationFlowKind.DeviceCode]: authFlowFn, } ) + + stub(STSClient.prototype, 'send').resolves({ + Credentials: { + AccessKeyId: 'role-access-key', + SecretAccessKey: 'role-secret-key', + SessionToken: 'role-session-token', + Expiration: new Date('2024-09-25T18:09:20.455Z'), + }, + AssumedRoleUser: { + Arn: 'role-arn', + AssumedRoleId: 'role-id', + }, + Arn: 'role-arn', + }) + + stub(IAMClient.prototype, 'send').resolves({ + EvaluationResults: [], + }) }) afterEach(() => { @@ -122,7 +195,7 @@ describe('IdentityService', () => { const actual = await sut.getSsoToken( { clientName: 'my-client', - source: { kind: SsoTokenSourceKind.IamIdentityCenter, profileName: 'my-profile' }, + source: { kind: SsoTokenSourceKind.IamIdentityCenter, profileName: 'my-sso-profile' }, }, CancellationToken.None ) @@ -136,7 +209,7 @@ describe('IdentityService', () => { await sut.getSsoToken( { clientName: 'my-client', - source: { kind: SsoTokenSourceKind.IamIdentityCenter, profileName: 'my-profile' }, + source: { kind: SsoTokenSourceKind.IamIdentityCenter, profileName: 'my-sso-profile' }, options: { authorizationFlow: 'DeviceCode', }, @@ -148,7 +221,7 @@ describe('IdentityService', () => { await sut.getSsoToken( { clientName: 'my-client', - source: { kind: SsoTokenSourceKind.IamIdentityCenter, profileName: 'my-profile' }, + source: { kind: SsoTokenSourceKind.IamIdentityCenter, profileName: 'my-sso-profile' }, options: { authorizationFlow: 'Pkce', }, @@ -185,7 +258,7 @@ describe('IdentityService', () => { const actual = await sut.getSsoToken( { clientName: 'my-client', - source: { kind: SsoTokenSourceKind.IamIdentityCenter, profileName: 'my-profile' }, + source: { kind: SsoTokenSourceKind.IamIdentityCenter, profileName: 'my-sso-profile' }, }, CancellationToken.None ) @@ -203,7 +276,7 @@ describe('IdentityService', () => { const actual = await sut.getSsoToken( { clientName: 'my-client', - source: { kind: SsoTokenSourceKind.IamIdentityCenter, profileName: 'my-profile' }, + source: { kind: SsoTokenSourceKind.IamIdentityCenter, profileName: 'my-sso-profile' }, }, CancellationToken.None ) @@ -255,6 +328,16 @@ describe('IdentityService', () => { }) }) + describe('getIamCredential', () => { + it('Can login with access key, secret key, and session token.', async () => { + const actual = await sut.getIamCredential({ profileName: 'my-sts-profile' }, CancellationToken.None) + + expect(actual.credential.credentials.accessKeyId).to.equal('my-access-key') + expect(actual.credential.credentials.secretAccessKey).to.equal('my-secret-key') + expect(actual.credential.credentials.sessionToken).to.equal('my-session-token') + }) + }) + describe('invalidateSsoToken', () => { it('removeToken removes on valid SSO session name', async () => { await sut.invalidateSsoToken({ ssoTokenId: 'my-sso-session' }, CancellationToken.None) diff --git a/server/aws-lsp-identity/src/language-server/identityService.ts b/server/aws-lsp-identity/src/language-server/identityService.ts index 6e0d4a3817..22eecb3ca5 100644 --- a/server/aws-lsp-identity/src/language-server/identityService.ts +++ b/server/aws-lsp-identity/src/language-server/identityService.ts @@ -3,7 +3,10 @@ import { AwsBuilderIdSsoTokenSource, AwsErrorCodes, CancellationToken, + GetIamCredentialParams, + GetIamCredentialResult, getSsoTokenOptionsDefaults, + getIamCredentialOptionsDefaults, GetSsoTokenParams, GetSsoTokenResult, IamIdentityCenterSsoTokenSource, @@ -13,6 +16,7 @@ import { SsoSession, SsoTokenSourceKind, } from '@aws/language-server-runtimes/server-interface' + import { normalizeSettingList, ProfileStore } from './profiles/profileService' import { authorizationCodePkceFlow, awsBuilderIdReservedName, awsBuilderIdSsoRegion } from '../sso' import { SsoCache, SsoClientRegistration } from '../sso/cache' @@ -22,14 +26,18 @@ import { throwOnInvalidSsoSession, throwOnInvalidSsoSessionName, SsoFlowParams, + SsoHandlers, } from '../sso/utils' +import { IamHandlers, simulatePermissions } from '../iam/utils' import { AwsError, Observability } from '@aws/lsp-core' import { __ServiceException } from '@aws-sdk/client-sso-oidc/dist-types/models/SSOOIDCServiceException' import { deviceCodeFlow } from '../sso/deviceCode/deviceCodeFlow' import { SSOToken } from '@smithy/shared-ini-file-loader' +import { IamProvider } from '../iam/iamProvider' type SsoTokenSource = IamIdentityCenterSsoTokenSource | AwsBuilderIdSsoTokenSource type AuthFlows = Record Promise> +type Handlers = SsoHandlers & IamHandlers const flows: AuthFlows = { [AuthorizationFlowKind.DeviceCode]: deviceCodeFlow, @@ -41,7 +49,8 @@ export class IdentityService { private readonly profileStore: ProfileStore, private readonly ssoCache: SsoCache, private readonly autoRefresher: SsoTokenAutoRefresher, - private readonly handlers: SsoFlowParams['handlers'], + private readonly iamProvider: IamProvider, + private readonly handlers: Handlers, private readonly clientName: string, private readonly observability: Observability, private readonly authFlows: AuthFlows = flows @@ -94,7 +103,7 @@ export class IdentityService { clientName: this.clientName, clientRegistration, ssoSession, - handlers: this.handlers, + handlers: this.handlers as Pick, token, observability: this.observability, } @@ -136,6 +145,51 @@ export class IdentityService { } } + async getIamCredential(params: GetIamCredentialParams, token: CancellationToken): Promise { + const emitMetric = this.emitMetric.bind( + this, + 'flareIdentity_getIamCredential', + this.getIamCredential.name, + Date.now() + ) + + try { + const options = { ...getIamCredentialOptionsDefaults, ...params.options } + + token.onCancellationRequested(_ => { + emitMetric('Cancelled', null) + }) + + // Get the profile with provided name + const profileData = await this.profileStore.load() + const profile = profileData.profiles.find(p => p.name === params.profileName) + if (!profile) { + this.observability.logging.log('Profile not found.') + throw new AwsError('Profile not found.', AwsErrorCodes.E_PROFILE_NOT_FOUND) + } + + const credentials = await this.iamProvider.getCredential(profile, options.callStsOnInvalidIamCredential) + + // Validate permissions + if (options.permissionSet.length > 0) { + const response = await simulatePermissions(credentials, options.permissionSet, profile.settings?.region) + if (!response?.EvaluationResults?.every(result => result.EvalDecision === 'allowed')) { + throw new AwsError(`Credentials have insufficient permissions.`, AwsErrorCodes.E_INVALID_PROFILE) + } + } + + emitMetric('Succeeded') + + return { + credential: { id: params.profileName, kinds: profile.kinds, credentials: credentials }, + updateCredentialsParams: { data: credentials, encrypted: false }, + } + } catch (e) { + emitMetric('Failed', e) + throw e + } + } + async invalidateSsoToken( params: InvalidateSsoTokenParams, token: CancellationToken diff --git a/server/aws-lsp-identity/src/sso/utils.ts b/server/aws-lsp-identity/src/sso/utils.ts index fe068dc796..29841df6e4 100644 --- a/server/aws-lsp-identity/src/sso/utils.ts +++ b/server/aws-lsp-identity/src/sso/utils.ts @@ -111,17 +111,18 @@ export function UpdateSsoTokenFromCreateToken( export type ShowUrl = (url: URL) => void export type ShowMessageRequest = (params: ShowMessageRequestParams) => Promise export type ShowProgress = Lsp['sendProgress'] +export type SsoHandlers = { + showUrl: ShowUrl + showMessageRequest: ShowMessageRequest + showProgress: ShowProgress + // Add `showMsg: ShowMessage` if needed. +} export type SsoFlowParams = { clientName: string clientRegistration: SsoClientRegistration ssoSession: SsoSession - handlers: { - showUrl: ShowUrl - showMessageRequest: ShowMessageRequest - showProgress: ShowProgress - // Add `showMsg: ShowMessage` if needed. - } + handlers: SsoHandlers token: CancellationToken observability: Observability } diff --git a/server/aws-lsp-json/CHANGELOG.md b/server/aws-lsp-json/CHANGELOG.md index f4d847a6f4..c16adea0ff 100644 --- a/server/aws-lsp-json/CHANGELOG.md +++ b/server/aws-lsp-json/CHANGELOG.md @@ -1,5 +1,19 @@ # Changelog +## [0.1.16](https://github.com/aws/language-servers/compare/lsp-json/v0.1.15...lsp-json/v0.1.16) (2025-07-17) + + +### Bug Fixes + +* use document change events for auto trigger classifier input ([#1912](https://github.com/aws/language-servers/issues/1912)) ([2204da6](https://github.com/aws/language-servers/commit/2204da6193f2030ee546f61c969b1a664d8025e3)) + + +### Dependencies + +* The following workspace dependencies were updated + * dependencies + * @aws/lsp-core bumped from ^0.0.11 to ^0.0.12 + ## [0.1.15](https://github.com/aws/language-servers/compare/lsp-json/v0.1.14...lsp-json/v0.1.15) (2025-07-02) diff --git a/server/aws-lsp-json/package.json b/server/aws-lsp-json/package.json index 9846fbf22d..c3b9e4ab1e 100644 --- a/server/aws-lsp-json/package.json +++ b/server/aws-lsp-json/package.json @@ -1,6 +1,6 @@ { "name": "@aws/lsp-json", - "version": "0.1.15", + "version": "0.1.16", "description": "JSON Language Server", "main": "out/index.js", "repository": { @@ -26,8 +26,8 @@ "prepack": "shx cp ../../LICENSE ../../NOTICE ../../SECURITY.md ." }, "dependencies": { - "@aws/language-server-runtimes": "^0.2.102", - "@aws/lsp-core": "^0.0.11", + "@aws/language-server-runtimes": "^0.2.112", + "@aws/lsp-core": "^0.0.12", "vscode-languageserver": "^9.0.1", "vscode-languageserver-textdocument": "^1.0.8" }, diff --git a/server/aws-lsp-notification/package.json b/server/aws-lsp-notification/package.json index a434932939..6cd283939e 100644 --- a/server/aws-lsp-notification/package.json +++ b/server/aws-lsp-notification/package.json @@ -22,8 +22,8 @@ "coverage:report": "c8 report --reporter=html --reporter=text" }, "dependencies": { - "@aws/language-server-runtimes": "^0.2.102", - "@aws/lsp-core": "^0.0.11", + "@aws/language-server-runtimes": "^0.2.112", + "@aws/lsp-core": "^0.0.12", "vscode-languageserver": "^9.0.1" }, "devDependencies": { diff --git a/server/aws-lsp-partiql/CHANGELOG.md b/server/aws-lsp-partiql/CHANGELOG.md index d3de47d50a..8b9af69338 100644 --- a/server/aws-lsp-partiql/CHANGELOG.md +++ b/server/aws-lsp-partiql/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.0.15](https://github.com/aws/language-servers/compare/lsp-partiql/v0.0.14...lsp-partiql/v0.0.15) (2025-07-17) + + +### Bug Fixes + +* use document change events for auto trigger classifier input ([#1912](https://github.com/aws/language-servers/issues/1912)) ([2204da6](https://github.com/aws/language-servers/commit/2204da6193f2030ee546f61c969b1a664d8025e3)) + ## [0.0.14](https://github.com/aws/language-servers/compare/lsp-partiql/v0.0.13...lsp-partiql/v0.0.14) (2025-06-26) diff --git a/server/aws-lsp-partiql/package.json b/server/aws-lsp-partiql/package.json index c9308e8e39..9e37ff2808 100644 --- a/server/aws-lsp-partiql/package.json +++ b/server/aws-lsp-partiql/package.json @@ -3,7 +3,7 @@ "author": "Amazon Web Services", "license": "Apache-2.0", "description": "PartiQL language server", - "version": "0.0.14", + "version": "0.0.15", "repository": { "type": "git", "url": "https://github.com/aws/language-servers" @@ -24,7 +24,7 @@ "out" ], "dependencies": { - "@aws/language-server-runtimes": "^0.2.102", + "@aws/language-server-runtimes": "^0.2.112", "antlr4-c3": "3.4.2", "antlr4ng": "3.0.14", "web-tree-sitter": "0.22.6" diff --git a/server/aws-lsp-s3/package.json b/server/aws-lsp-s3/package.json index 3771c78c30..0c9059d62e 100644 --- a/server/aws-lsp-s3/package.json +++ b/server/aws-lsp-s3/package.json @@ -9,7 +9,8 @@ "dependencies": { "@aws-sdk/client-s3": "^3.623.0", "@aws-sdk/types": "^3.734.0", - "@aws/lsp-core": "^0.0.11", + "@aws/language-server-runtimes": "^0.2.112", + "@aws/lsp-core": "^0.0.12", "vscode-languageserver": "^9.0.1", "vscode-languageserver-textdocument": "^1.0.8" } diff --git a/server/aws-lsp-yaml/CHANGELOG.md b/server/aws-lsp-yaml/CHANGELOG.md index f26d08952e..8e58c69c67 100644 --- a/server/aws-lsp-yaml/CHANGELOG.md +++ b/server/aws-lsp-yaml/CHANGELOG.md @@ -1,5 +1,19 @@ # Changelog +## [0.1.16](https://github.com/aws/language-servers/compare/lsp-yaml/v0.1.15...lsp-yaml/v0.1.16) (2025-07-17) + + +### Bug Fixes + +* use document change events for auto trigger classifier input ([#1912](https://github.com/aws/language-servers/issues/1912)) ([2204da6](https://github.com/aws/language-servers/commit/2204da6193f2030ee546f61c969b1a664d8025e3)) + + +### Dependencies + +* The following workspace dependencies were updated + * dependencies + * @aws/lsp-core bumped from ^0.0.11 to ^0.0.12 + ## [0.1.15](https://github.com/aws/language-servers/compare/lsp-yaml/v0.1.14...lsp-yaml/v0.1.15) (2025-07-02) diff --git a/server/aws-lsp-yaml/package.json b/server/aws-lsp-yaml/package.json index 4e2117ffe7..cb0e62fa65 100644 --- a/server/aws-lsp-yaml/package.json +++ b/server/aws-lsp-yaml/package.json @@ -1,6 +1,6 @@ { "name": "@aws/lsp-yaml", - "version": "0.1.15", + "version": "0.1.16", "description": "YAML Language Server", "main": "out/index.js", "repository": { @@ -26,8 +26,8 @@ "postinstall": "node patchYamlPackage.js" }, "dependencies": { - "@aws/language-server-runtimes": "^0.2.102", - "@aws/lsp-core": "^0.0.11", + "@aws/language-server-runtimes": "^0.2.112", + "@aws/lsp-core": "^0.0.12", "vscode-languageserver": "^9.0.1", "vscode-languageserver-textdocument": "^1.0.8", "yaml-language-server": "1.13.0" diff --git a/server/device-sso-auth-lsp/package.json b/server/device-sso-auth-lsp/package.json index d2e0c0689a..71a0a8bbda 100644 --- a/server/device-sso-auth-lsp/package.json +++ b/server/device-sso-auth-lsp/package.json @@ -7,7 +7,7 @@ "compile": "tsc --build" }, "dependencies": { - "@aws/language-server-runtimes": "^0.2.102", + "@aws/language-server-runtimes": "^0.2.112", "vscode-languageserver": "^9.0.1" }, "devDependencies": { diff --git a/server/hello-world-lsp/package.json b/server/hello-world-lsp/package.json index ff69fe9555..2837bb8302 100644 --- a/server/hello-world-lsp/package.json +++ b/server/hello-world-lsp/package.json @@ -13,7 +13,7 @@ "coverage:report": "c8 report --reporter=html --reporter=text" }, "dependencies": { - "@aws/language-server-runtimes": "^0.2.102", + "@aws/language-server-runtimes": "^0.2.112", "vscode-languageserver": "^9.0.1" }, "devDependencies": { diff --git a/tsconfig.json b/tsconfig.json index 794079dd82..e7bad8e0e2 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -80,6 +80,9 @@ }, { "path": "./app/aws-lsp-partiql-runtimes" + }, + { + "path": "./integration-tests/q-agentic-chat-server" } ] }