diff --git a/.github/workflows/feature-branch-prerelease.yml b/.github/workflows/feature-branch-prerelease.yml index b9f30c97a..f4ce4c3c5 100644 --- a/.github/workflows/feature-branch-prerelease.yml +++ b/.github/workflows/feature-branch-prerelease.yml @@ -126,6 +126,50 @@ jobs: run: | GH_TOKEN=${{ secrets.GH_PUBLISH_TOKEN }} npm run deploy:version -- -y --no-private --conventional-prerelease --preid ${{ env.PREID }} --allow-branch ${{ steps.branch-name.outputs.current_branch }} --create-release github + # Update test packages to use exact versions of their dependencies + - name: Update test package dependencies + run: | + echo "Updating test package dependencies..." + + # Get the new version of analytics-browser + BROWSER_VERSION=$(node -p "require('./packages/analytics-browser/package.json').version") + echo "Current @amplitude/analytics-browser version: $BROWSER_VERSION" + + # Get the current dependency version in analytics-browser-test + CURRENT_DEP=$(node -p "require('./packages/analytics-browser-test/package.json').dependencies['@amplitude/analytics-browser']") + echo "Current dependency in analytics-browser-test: $CURRENT_DEP" + + # Update if versions differ + if [ "$BROWSER_VERSION" != "$CURRENT_DEP" ]; then + echo "Updating analytics-browser-test to use @amplitude/analytics-browser@$BROWSER_VERSION" + cd packages/analytics-browser-test + npm pkg set dependencies.@amplitude/analytics-browser="$BROWSER_VERSION" + cd ../.. + + # Get all tags pointing to the current HEAD before amending + TAGS=$(git tag --points-at HEAD) + + # Add and amend to the version commit + git add packages/analytics-browser-test/package.json + git commit --amend --no-edit --no-verify + + # Re-apply all tags to the new HEAD (after amend) + for TAG in $TAGS; do + echo "Moving tag $TAG to amended commit" + git tag -f "$TAG" + done + + # Push the amended commit if this is a real prerelease (not dry-run) + if [ "${{ github.event.inputs.releaseType }}" == "prerelease" ]; then + git push origin ${{ steps.branch-name.outputs.current_branch }} --follow-tags --force + echo "✅ Updated and pushed analytics-browser-test dependency" + else + echo "✅ Updated analytics-browser-test dependency (dry-run, not pushed)" + fi + else + echo "✅ analytics-browser-test already uses the correct version" + fi + # Use 'from git' option if `lerna version` has already been run - name: Publish Release to NPM if: ${{ github.event.inputs.releaseType == 'prerelease' }} diff --git a/.github/workflows/publish-v2.yml b/.github/workflows/publish-v2.yml index 600d23439..22162d4ad 100644 --- a/.github/workflows/publish-v2.yml +++ b/.github/workflows/publish-v2.yml @@ -110,6 +110,45 @@ jobs: echo "✅ Successfully created release version" + # Update test packages to use exact versions of their dependencies + - name: Update test package dependencies + if: ${{ env.PUBLISH_FROM != 'from-package' }} + run: | + echo "Updating test package dependencies..." + + # Get the new version of analytics-browser + BROWSER_VERSION=$(node -p "require('./packages/analytics-browser/package.json').version") + echo "Current @amplitude/analytics-browser version: $BROWSER_VERSION" + + # Get the current dependency version in analytics-browser-test + CURRENT_DEP=$(node -p "require('./packages/analytics-browser-test/package.json').dependencies['@amplitude/analytics-browser']") + echo "Current dependency in analytics-browser-test: $CURRENT_DEP" + + # Update if versions differ + if [ "$BROWSER_VERSION" != "$CURRENT_DEP" ]; then + echo "Updating analytics-browser-test to use @amplitude/analytics-browser@$BROWSER_VERSION" + cd packages/analytics-browser-test + npm pkg set dependencies.@amplitude/analytics-browser="$BROWSER_VERSION" + cd ../.. + + # Get all tags pointing to the current HEAD before amending + TAGS=$(git tag --points-at HEAD) + + # Add and amend to the version commit + git add packages/analytics-browser-test/package.json + git commit --amend --no-edit --no-verify + + # Re-apply all tags to the new HEAD (after amend) + for TAG in $TAGS; do + echo "Moving tag $TAG to amended commit" + git tag -f "$TAG" + done + + echo "✅ Updated analytics-browser-test dependency" + else + echo "✅ analytics-browser-test already uses the correct version" + fi + # Publish to NPM using from-git or from-package: # - from-git: Publishes packages tagged by 'lerna version' in the current commit (requires prior versioning) # - from-package: Compares package.json versions with NPM registry, publishes any versions not present in registry diff --git a/nx.json b/nx.json index 678133020..93b7cade7 100644 --- a/nx.json +++ b/nx.json @@ -8,7 +8,7 @@ "cache": true }, "test": { - "dependsOn": ["build"], + "dependsOn": ["^build", "build"], "cache": true }, "test:playwright": { diff --git a/packages/analytics-browser-test/package.json b/packages/analytics-browser-test/package.json index 182daeb95..d26f4ce1c 100644 --- a/packages/analytics-browser-test/package.json +++ b/packages/analytics-browser-test/package.json @@ -16,7 +16,7 @@ "url": "https://github.com/amplitude/Amplitude-TypeScript/issues" }, "dependencies": { - "@amplitude/analytics-browser": "^2.6.3-beta.0" + "@amplitude/analytics-browser": "2.31.0-zen-plus-zoning.2" }, "devDependencies": { "nock": "^13.2.4" diff --git a/packages/analytics-browser-test/test/helpers.ts b/packages/analytics-browser-test/test/helpers.ts index bee955029..0ac54374c 100644 --- a/packages/analytics-browser-test/test/helpers.ts +++ b/packages/analytics-browser-test/test/helpers.ts @@ -174,6 +174,7 @@ const generatePageViewEventProps = ( '[Amplitude] Page Path': url.pathname, '[Amplitude] Page Title': '', '[Amplitude] Page URL': url.href.split('?')[0], + '[Amplitude] Page View ID': uuid, ...(options?.withPageURLEnrichmentProperties ? addPageUrlEnrichmentPreviousPageProperties(url.href, previousUrl.href || '') : {}), diff --git a/packages/analytics-browser-test/test/index.test.ts b/packages/analytics-browser-test/test/index.test.ts index a9411d801..6219bd946 100644 --- a/packages/analytics-browser-test/test/index.test.ts +++ b/packages/analytics-browser-test/test/index.test.ts @@ -1928,119 +1928,125 @@ describe('integration', () => { return new Promise((resolve) => { setTimeout(() => { - expect(payload).toEqual({ - api_key: apiKey, - client_upload_time: event_upload_time, - events: [ - { - device_id: uuid, - event_id: 0, - event_properties: { - '[Amplitude] Page Domain': 'www.example.com', - '[Amplitude] Page Location': 'https://www.example.com/about', - '[Amplitude] Page Path': '/about', - '[Amplitude] Page Title': '', - '[Amplitude] Page URL': 'https://www.example.com/about', - '[Amplitude] Page Counter': 1, - '[Amplitude] Previous Page Location': '', - '[Amplitude] Previous Page Type': 'direct', + try { + expect(payload).toEqual({ + api_key: apiKey, + client_upload_time: event_upload_time, + events: [ + { + device_id: uuid, + event_id: 0, + event_properties: { + '[Amplitude] Page Domain': 'www.example.com', + '[Amplitude] Page Location': 'https://www.example.com/about', + '[Amplitude] Page Path': '/about', + '[Amplitude] Page Title': '', + '[Amplitude] Page URL': 'https://www.example.com/about', + '[Amplitude] Page View ID': uuid, + '[Amplitude] Page Counter': 1, + '[Amplitude] Previous Page Location': '', + '[Amplitude] Previous Page Type': 'direct', + }, + event_type: '[Amplitude] Page Viewed', + insert_id: uuid, + ip: '$remote', + language: 'en-US', + library, + partner_id: undefined, + plan: undefined, + platform: 'Web', + session_id: number, + time: number, + user_agent: userAgent, + user_id: 'user1@amplitude.com', }, - event_type: '[Amplitude] Page Viewed', - insert_id: uuid, - ip: '$remote', - language: 'en-US', - library, - partner_id: undefined, - plan: undefined, - platform: 'Web', - session_id: number, - time: number, - user_agent: userAgent, - user_id: 'user1@amplitude.com', - }, - { - device_id: uuid, - event_id: 1, - event_type: 'Event in first session', - event_properties: { - '[Amplitude] Page Domain': 'www.example.com', - '[Amplitude] Page Location': 'https://www.example.com/about', - '[Amplitude] Page Path': '/about', - '[Amplitude] Page Title': '', - '[Amplitude] Page URL': 'https://www.example.com/about', - '[Amplitude] Previous Page Location': '', - '[Amplitude] Previous Page Type': 'direct', + { + device_id: uuid, + event_id: 1, + event_type: 'Event in first session', + event_properties: { + '[Amplitude] Page Domain': 'www.example.com', + '[Amplitude] Page Location': 'https://www.example.com/about', + '[Amplitude] Page Path': '/about', + '[Amplitude] Page Title': '', + '[Amplitude] Page URL': 'https://www.example.com/about', + '[Amplitude] Previous Page Location': '', + '[Amplitude] Previous Page Type': 'direct', + }, + insert_id: uuid, + ip: '$remote', + language: 'en-US', + library, + partner_id: undefined, + plan: undefined, + platform: 'Web', + session_id: number, + time: number, + user_agent: userAgent, + user_id: 'user1@amplitude.com', }, - insert_id: uuid, - ip: '$remote', - language: 'en-US', - library, - partner_id: undefined, - plan: undefined, - platform: 'Web', - session_id: number, - time: number, - user_agent: userAgent, - user_id: 'user1@amplitude.com', - }, - { - device_id: uuid, - event_id: 2, - event_properties: { - '[Amplitude] Page Domain': 'www.example.com', - '[Amplitude] Page Location': 'https://www.example.com/contact', - '[Amplitude] Page Path': '/contact', - '[Amplitude] Page Title': '', - '[Amplitude] Page URL': 'https://www.example.com/contact', - '[Amplitude] Previous Page Location': 'https://www.example.com/about', - '[Amplitude] Previous Page Type': 'internal', - '[Amplitude] Page Counter': 2, + { + device_id: uuid, + event_id: 2, + event_properties: { + '[Amplitude] Page Domain': 'www.example.com', + '[Amplitude] Page Location': 'https://www.example.com/contact', + '[Amplitude] Page Path': '/contact', + '[Amplitude] Page Title': '', + '[Amplitude] Page URL': 'https://www.example.com/contact', + '[Amplitude] Page View ID': uuid, + '[Amplitude] Previous Page Location': 'https://www.example.com/about', + '[Amplitude] Previous Page Type': 'internal', + '[Amplitude] Page Counter': 2, + }, + event_type: '[Amplitude] Page Viewed', + insert_id: uuid, + ip: '$remote', + language: 'en-US', + library, + partner_id: undefined, + plan: undefined, + platform: 'Web', + session_id: number, + time: number, + user_agent: userAgent, + user_id: 'user1@amplitude.com', }, - event_type: '[Amplitude] Page Viewed', - insert_id: uuid, - ip: '$remote', - language: 'en-US', - library, - partner_id: undefined, - plan: undefined, - platform: 'Web', - session_id: number, - time: number, - user_agent: userAgent, - user_id: 'user1@amplitude.com', - }, - { - device_id: uuid, - event_id: 3, - event_properties: { - '[Amplitude] Page Domain': 'www.example.com', - '[Amplitude] Page Location': 'https://www.example.com/more', - '[Amplitude] Page Path': '/more', - '[Amplitude] Page Title': '', - '[Amplitude] Page URL': 'https://www.example.com/more', - '[Amplitude] Page Counter': 1, - '[Amplitude] Previous Page Location': 'https://www.example.com/contact', - '[Amplitude] Previous Page Type': 'internal', + { + device_id: uuid, + event_id: 3, + event_properties: { + '[Amplitude] Page Domain': 'www.example.com', + '[Amplitude] Page Location': 'https://www.example.com/more', + '[Amplitude] Page Path': '/more', + '[Amplitude] Page Title': '', + '[Amplitude] Page URL': 'https://www.example.com/more', + '[Amplitude] Page Counter': 1, + '[Amplitude] Page View ID': uuid, + '[Amplitude] Previous Page Location': 'https://www.example.com/contact', + '[Amplitude] Previous Page Type': 'internal', + }, + event_type: '[Amplitude] Page Viewed', + insert_id: uuid, + ip: '$remote', + language: 'en-US', + library, + partner_id: undefined, + plan: undefined, + platform: 'Web', + session_id: number, + time: number, + user_agent: userAgent, + user_id: 'user1@amplitude.com', }, - event_type: '[Amplitude] Page Viewed', - insert_id: uuid, - ip: '$remote', - language: 'en-US', - library, - partner_id: undefined, - plan: undefined, - platform: 'Web', - session_id: number, - time: number, - user_agent: userAgent, - user_id: 'user1@amplitude.com', + ], + options: { + min_id_length: undefined, }, - ], - options: { - min_id_length: undefined, - }, - }); - scope.done(); + }); + } finally { + scope.done(); + } resolve(); }, 4000); }); @@ -2076,6 +2082,7 @@ describe('integration', () => { '[Amplitude] Page Path': '', '[Amplitude] Page Title': '', '[Amplitude] Page URL': '', + '[Amplitude] Page View ID': uuid, '[Amplitude] Page Counter': 1, '[Amplitude] Previous Page Location': '', '[Amplitude] Previous Page Type': 'direct', diff --git a/packages/analytics-browser/CHANGELOG.md b/packages/analytics-browser/CHANGELOG.md index 5dcad4e47..0f7df42c7 100644 --- a/packages/analytics-browser/CHANGELOG.md +++ b/packages/analytics-browser/CHANGELOG.md @@ -3,6 +3,39 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.31.0-zen-plus-zoning.2](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/analytics-browser@2.31.0-zen-plus-zoning.0...@amplitude/analytics-browser@2.31.0-zen-plus-zoning.2) (2025-11-20) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +# [2.31.0-zen-plus-zoning.1](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/analytics-browser@2.31.0-zen-plus-zoning.0...@amplitude/analytics-browser@2.31.0-zen-plus-zoning.1) (2025-11-19) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +# [2.31.0-zen-plus-zoning.0](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/analytics-browser@2.30.2-zen-observable-migration.1...@amplitude/analytics-browser@2.31.0-zen-plus-zoning.0) (2025-11-12) + + +### Features + +* **analytics-browser:** add reset listener API ([#1393](https://github.com/amplitude/Amplitude-TypeScript/issues/1393)) ([7bd85e5](https://github.com/amplitude/Amplitude-TypeScript/commit/7bd85e51b01cefdb43b8474d930e8c219b739323)) + + + + + ## [2.30.1](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/analytics-browser@2.30.0...@amplitude/analytics-browser@2.30.1) (2025-11-05) **Note:** Version bump only for package @amplitude/analytics-browser diff --git a/packages/analytics-browser/README.md b/packages/analytics-browser/README.md index 3e6c432cd..8ad4298ed 100644 --- a/packages/analytics-browser/README.md +++ b/packages/analytics-browser/README.md @@ -53,7 +53,7 @@ This SDK is also available through CDN. Copy the script loader below and paste b ```html diff --git a/packages/analytics-browser/generated/amplitude-bookmarklet-snippet.js b/packages/analytics-browser/generated/amplitude-bookmarklet-snippet.js index 7632b2f6b..4a2b5b7bc 100644 --- a/packages/analytics-browser/generated/amplitude-bookmarklet-snippet.js +++ b/packages/analytics-browser/generated/amplitude-bookmarklet-snippet.js @@ -51,10 +51,10 @@ s.parentNode.insertBefore(autoTrackingPluginScript, s); var as = document.createElement('script'); as.type = 'text/javascript'; - as.integrity = 'sha384-SrBDVFZdYHNt8n07cCUE8g6YY9/HPPQF2jt+xEtFJqKQ+U5TfQRW0SNJNhPodG8b'; + as.integrity = 'sha384-FETK9aQNjt5/VPEy8e8gGjvBzx9PmvglbXB5w7pv8VtZRlLctTOyKRNxUH1GQcyx'; as.crossOrigin = 'anonymous'; as.async = false; - as.src = 'https://cdn.amplitude.com/libs/analytics-browser-2.30.1-min.js.gz'; + as.src = 'https://cdn.amplitude.com/libs/analytics-browser-2.31.0-zen-plus-zoning.2-min.js.gz'; as.onload = function () { if (!window.amplitude.runQueuedFunctions) { console.log('[Amplitude] Error: could not load SDK'); diff --git a/packages/analytics-browser/generated/amplitude-gtm-snippet.js b/packages/analytics-browser/generated/amplitude-gtm-snippet.js index 82c70b002..bb7161769 100644 --- a/packages/analytics-browser/generated/amplitude-gtm-snippet.js +++ b/packages/analytics-browser/generated/amplitude-gtm-snippet.js @@ -55,10 +55,10 @@ amplitude.invoked = true; var as = document.createElement('script'); as.type = 'text/javascript'; - as.integrity = 'sha384-jvYTVQK9X5gYP/agaiDEJFOG2ZtAv6RbZE/WpUilqXTc3REl5VXyJTCj1SvXsmpY'; + as.integrity = 'sha384-8tuX1T1x8vNeFTLCMzPJRVXZ/wsmFi37C3YPqE1hHW8SoMNv9lr2kr5VKnIqHjZN'; as.crossOrigin = 'anonymous'; as.async = true; - as.src = 'https://cdn.amplitude.com/libs/analytics-browser-gtm-2.30.1-min.js.gz'; + as.src = 'https://cdn.amplitude.com/libs/analytics-browser-gtm-2.31.0-zen-plus-zoning.2-min.js.gz'; as.onload = function () { if (!window.amplitudeGTM.runQueuedFunctions) { console.log('[Amplitude] Error: could not load SDK'); diff --git a/packages/analytics-browser/generated/amplitude-snippet.js b/packages/analytics-browser/generated/amplitude-snippet.js index dfaae2f15..6b4eb5138 100644 --- a/packages/analytics-browser/generated/amplitude-snippet.js +++ b/packages/analytics-browser/generated/amplitude-snippet.js @@ -55,10 +55,10 @@ amplitude.invoked = true; var as = document.createElement('script'); as.type = 'text/javascript'; - as.integrity = 'sha384-SrBDVFZdYHNt8n07cCUE8g6YY9/HPPQF2jt+xEtFJqKQ+U5TfQRW0SNJNhPodG8b'; + as.integrity = 'sha384-FETK9aQNjt5/VPEy8e8gGjvBzx9PmvglbXB5w7pv8VtZRlLctTOyKRNxUH1GQcyx'; as.crossOrigin = 'anonymous'; as.async = true; - as.src = 'https://cdn.amplitude.com/libs/analytics-browser-2.30.1-min.js.gz'; + as.src = 'https://cdn.amplitude.com/libs/analytics-browser-2.31.0-zen-plus-zoning.2-min.js.gz'; as.onload = function () { if (!window.amplitude.runQueuedFunctions) { console.log('[Amplitude] Error: could not load SDK'); diff --git a/packages/analytics-browser/package.json b/packages/analytics-browser/package.json index 7fc0e3637..fd4f02f10 100644 --- a/packages/analytics-browser/package.json +++ b/packages/analytics-browser/package.json @@ -1,6 +1,6 @@ { "name": "@amplitude/analytics-browser", - "version": "2.30.1", + "version": "2.31.0-zen-plus-zoning.2", "description": "Official Amplitude SDK for Web", "keywords": [ "analytics", @@ -47,12 +47,12 @@ "url": "https://github.com/amplitude/Amplitude-TypeScript/issues" }, "dependencies": { - "@amplitude/analytics-core": "^2.31.1", - "@amplitude/plugin-autocapture-browser": "^1.17.1", - "@amplitude/plugin-network-capture-browser": "^1.6.13", - "@amplitude/plugin-page-url-enrichment-browser": "^0.5.2", - "@amplitude/plugin-page-view-tracking-browser": "^2.5.7", - "@amplitude/plugin-web-vitals-browser": "1.0.0", + "@amplitude/analytics-core": "2.32.0-zen-plus-zoning.2", + "@amplitude/plugin-autocapture-browser": "1.18.0-zen-plus-zoning.2", + "@amplitude/plugin-network-capture-browser": "1.6.14-zen-plus-zoning.2", + "@amplitude/plugin-page-url-enrichment-browser": "0.5.3-zen-plus-zoning.2", + "@amplitude/plugin-page-view-tracking-browser": "2.6.0-zen-plus-zoning.2", + "@amplitude/plugin-web-vitals-browser": "1.0.1-zen-plus-zoning.2", "tslib": "^2.4.1" }, "devDependencies": { diff --git a/packages/analytics-browser/src/version.ts b/packages/analytics-browser/src/version.ts index 1a3a9ec28..0c4023211 100644 --- a/packages/analytics-browser/src/version.ts +++ b/packages/analytics-browser/src/version.ts @@ -1 +1 @@ -export const VERSION = '2.30.1'; +export const VERSION = '2.31.0-zen-plus-zoning.2'; diff --git a/packages/analytics-client-common/CHANGELOG.md b/packages/analytics-client-common/CHANGELOG.md index 597925730..df1f3fdf8 100644 --- a/packages/analytics-client-common/CHANGELOG.md +++ b/packages/analytics-client-common/CHANGELOG.md @@ -3,6 +3,39 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.4.13-zen-plus-zoning.2](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/analytics-client-common@2.4.13-zen-plus-zoning.0...@amplitude/analytics-client-common@2.4.13-zen-plus-zoning.2) (2025-11-20) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +## [2.4.13-zen-plus-zoning.1](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/analytics-client-common@2.4.13-zen-plus-zoning.0...@amplitude/analytics-client-common@2.4.13-zen-plus-zoning.1) (2025-11-19) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +## [2.4.13-zen-plus-zoning.0](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/analytics-client-common@2.4.13-zen-observable-migration.0...@amplitude/analytics-client-common@2.4.13-zen-plus-zoning.0) (2025-11-12) + + +### Reverts + +* Revert "chore(release): publish" ([f68b67f](https://github.com/amplitude/Amplitude-TypeScript/commit/f68b67f83fb3866b5159087702a8d122b091e0f7)) + + + + + ## [2.4.12](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/analytics-client-common@2.4.11...@amplitude/analytics-client-common@2.4.12) (2025-11-05) **Note:** Version bump only for package @amplitude/analytics-client-common diff --git a/packages/analytics-client-common/package.json b/packages/analytics-client-common/package.json index befda0302..e806657f4 100644 --- a/packages/analytics-client-common/package.json +++ b/packages/analytics-client-common/package.json @@ -1,6 +1,6 @@ { "name": "@amplitude/analytics-client-common", - "version": "2.4.12", + "version": "2.4.13-zen-plus-zoning.2", "description": "", "author": "Amplitude Inc", "homepage": "https://github.com/amplitude/Amplitude-TypeScript", @@ -37,7 +37,7 @@ }, "dependencies": { "@amplitude/analytics-connector": "^1.4.8", - "@amplitude/analytics-core": "^2.31.1", + "@amplitude/analytics-core": "2.32.0-zen-plus-zoning.2", "@amplitude/analytics-types": "^2.11.0", "tslib": "^2.4.1" }, diff --git a/packages/analytics-core/CHANGELOG.md b/packages/analytics-core/CHANGELOG.md index bdefddee0..8544b0550 100644 --- a/packages/analytics-core/CHANGELOG.md +++ b/packages/analytics-core/CHANGELOG.md @@ -3,6 +3,56 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.32.0-zen-plus-zoning.2](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/analytics-core@2.32.0-zen-plus-zoning.0...@amplitude/analytics-core@2.32.0-zen-plus-zoning.2) (2025-11-20) + + +### Bug Fixes + +* **analytics-core:** record unsuccessful response ([#1405](https://github.com/amplitude/Amplitude-TypeScript/issues/1405)) ([#1406](https://github.com/amplitude/Amplitude-TypeScript/issues/1406)) ([5af9048](https://github.com/amplitude/Amplitude-TypeScript/commit/5af904810149adfd10fb7f8cb14e0584c884e995)) +* **analytics-core:** record unsuccessful response from catch error ([#1412](https://github.com/amplitude/Amplitude-TypeScript/issues/1412)) ([d742933](https://github.com/amplitude/Amplitude-TypeScript/commit/d7429335aea092dc9323300e9dfdc2d04056c745)) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +# [2.32.0-zen-plus-zoning.1](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/analytics-core@2.32.0-zen-plus-zoning.0...@amplitude/analytics-core@2.32.0-zen-plus-zoning.1) (2025-11-19) + + +### Bug Fixes + +* **analytics-core:** record unsuccessful response ([#1405](https://github.com/amplitude/Amplitude-TypeScript/issues/1405)) ([#1406](https://github.com/amplitude/Amplitude-TypeScript/issues/1406)) ([5af9048](https://github.com/amplitude/Amplitude-TypeScript/commit/5af904810149adfd10fb7f8cb14e0584c884e995)) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +# [2.32.0-zen-plus-zoning.0](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/analytics-core@2.32.0-zen-observable-migration.0...@amplitude/analytics-core@2.32.0-zen-plus-zoning.0) (2025-11-12) + + +### Features + +* **analytics-browser:** add reset listener API ([#1393](https://github.com/amplitude/Amplitude-TypeScript/issues/1393)) ([7bd85e5](https://github.com/amplitude/Amplitude-TypeScript/commit/7bd85e51b01cefdb43b8474d930e8c219b739323)) + + +### Reverts + +* Revert "chore(release): publish" ([f68b67f](https://github.com/amplitude/Amplitude-TypeScript/commit/f68b67f83fb3866b5159087702a8d122b091e0f7)) +* "fix: make setDiagnosticsRate an optional function ([#1382](https://github.com/amplitude/Amplitude-TypeScript/issues/1382))" ([#1394](https://github.com/amplitude/Amplitude-TypeScript/issues/1394)) ([f8ddc88](https://github.com/amplitude/Amplitude-TypeScript/commit/f8ddc88961e14a3ae7ad7e79ac7a182e84b158a0)) + + + + + ## [2.31.1](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/analytics-core@2.31.0...@amplitude/analytics-core@2.31.1) (2025-11-05) diff --git a/packages/analytics-core/package.json b/packages/analytics-core/package.json index f0ccec03b..f1928c3ab 100644 --- a/packages/analytics-core/package.json +++ b/packages/analytics-core/package.json @@ -1,6 +1,6 @@ { "name": "@amplitude/analytics-core", - "version": "2.31.1", + "version": "2.32.0-zen-plus-zoning.2", "description": "", "author": "Amplitude Inc", "homepage": "https://github.com/amplitude/Amplitude-TypeScript", @@ -37,7 +37,8 @@ }, "dependencies": { "@amplitude/analytics-connector": "^1.6.4", - "tslib": "^2.4.1" + "tslib": "^2.4.1", + "zen-observable-ts": "^1.1.0" }, "files": [ "lib" diff --git a/packages/analytics-core/src/config.ts b/packages/analytics-core/src/config.ts index 082448fe5..7b747f10a 100644 --- a/packages/analytics-core/src/config.ts +++ b/packages/analytics-core/src/config.ts @@ -15,7 +15,7 @@ import { import { Logger, ILogger } from './logger'; import { LogLevel } from './types/loglevel'; -import { IConfig, ConfigOptions, IRequestMetadata, IHistogramOptions, HistogramKey } from './types/config/core-config'; +import { ConfigOptions, IRequestMetadata, IHistogramOptions, HistogramKey, IConfig } from './types/config/core-config'; export const getDefaultConfig = () => ({ flushMaxRetries: 12, diff --git a/packages/analytics-core/src/index.ts b/packages/analytics-core/src/index.ts index 21b4db33e..78bf84454 100644 --- a/packages/analytics-core/src/index.ts +++ b/packages/analytics-core/src/index.ts @@ -135,3 +135,5 @@ export { ReactNativeAttributionOptions, } from './types/config/react-native-config'; export { ReactNativeClient } from './types/client/react-native-client'; + +export { Observable, asyncMap, merge, multicast, Unsubscribable } from './utils/observable'; diff --git a/packages/analytics-core/src/plugins/destination.ts b/packages/analytics-core/src/plugins/destination.ts index 777052f4d..2ac28b366 100644 --- a/packages/analytics-core/src/plugins/destination.ts +++ b/packages/analytics-core/src/plugins/destination.ts @@ -235,11 +235,27 @@ export class Destination implements DestinationPlugin { const errorMessage = getErrorMessage(e); this.config.loggerProvider.error(errorMessage); + this.diagnosticsClient?.recordEvent('analytics.events.unsuccessful.from.catch.error', { + events: list.map((context) => context.event.event_type), + message: errorMessage, + stack_trace: getStacktrace(), + }); + this.handleResponse({ status: Status.Failed, statusCode: 0 }, list); } } handleResponse(res: Response, list: Context[]) { + if (!isSuccessStatusCode(res.statusCode)) { + this.diagnosticsClient?.recordEvent('analytics.events.unsuccessful', { + events: list.map((context) => context.event.event_type), + code: res.statusCode, + status: res.status, + body: getResponseBodyString(res), + stack_trace: getStacktrace(), + }); + } + const { status } = res; switch (status) { diff --git a/packages/analytics-core/src/types/element-interactions.ts b/packages/analytics-core/src/types/element-interactions.ts index 7e552fe9a..eb810061d 100644 --- a/packages/analytics-core/src/types/element-interactions.ts +++ b/packages/analytics-core/src/types/element-interactions.ts @@ -83,8 +83,12 @@ export interface ElementInteractionsOptions { }; /** - * Debounce time in milliseconds for tracking events. - * This is used to detect rage clicks. + * This has been deprecated in favor of rage clicks tracking + * via frustrationInteractions. + * + * Setting this will have no effect. + * + * @deprecated */ debounceTime?: number; diff --git a/packages/analytics-core/src/utils/observable.ts b/packages/analytics-core/src/utils/observable.ts new file mode 100644 index 000000000..5789f7605 --- /dev/null +++ b/packages/analytics-core/src/utils/observable.ts @@ -0,0 +1,148 @@ +export { Observable } from 'zen-observable-ts'; + +import { Observable as ZenObservable, Observer, Subscription } from 'zen-observable-ts'; + +/** + * asyncMap operator for Zen Observable + * + * Maps each value emitted by the source Observable using an async function, + * emitting the resolved values in the same order they arrive. + */ +function asyncMap(observable: ZenObservable, fn: (value: T) => Promise): ZenObservable { + return new ZenObservable( + (observer: { next: (value: R) => void; error: (error: any) => void; complete: () => void }) => { + observable.subscribe({ + next: (value: T) => { + fn(value) + .then((result: R) => { + return observer.next(result); + }) + .catch((error: any) => observer.error(error)); + }, + error: (error: any) => { + observer.error(error); + }, + complete: () => { + observer.complete(); + }, + }); + }, + ); +} + +type Unsubscribable = { + unsubscribe: () => void; +}; + +/** + * merge operator for Zen Observable + * + * Merges two observables into a single observable, emitting values from both sources in the order they arrive. + * @param sourceA Observable to merge + * @param sourceB Observable to merge + * @returns Unsubscribable cleanup function + */ +function merge(sourceA: ZenObservable, sourceB: ZenObservable): ZenObservable { + return new ZenObservable((observer) => { + let closed = false; + + const subscriptions: Set = new Set(); + + const cleanup = (): void => { + closed = true; + for (const sub of subscriptions) { + try { + sub.unsubscribe(); + } catch { + /* do nothing */ + } + } + subscriptions.clear(); + }; + + const subscribeTo = (source: ZenObservable) => { + const sub = source.subscribe({ + next(value: T) { + if (!closed) observer.next(value as A | B); + }, + error(err) { + if (!closed) { + closed = true; + observer.error(err); + cleanup(); + } + }, + complete() { + subscriptions.delete(sub); + if (!closed && subscriptions.size === 0) { + observer.complete(); + cleanup(); + closed = true; + } + }, + }); + + subscriptions.add(sub); + }; + + subscribeTo(sourceA); + subscribeTo(sourceB); + + return cleanup; + }); +} + +// function share() { +function multicast(source: ZenObservable): ZenObservable { + const observers: Set> = new Set(); + let subscription: Subscription | null = null; + + return new ZenObservable((observer) => { + observers.add(observer); + + if (subscription === null) { + subscription = source.subscribe({ + next(value) { + for (const obs of observers) { + /* istanbul ignore next */ + obs.next?.(value); + } + }, + error(err) { + for (const obs of observers) { + /* istanbul ignore next */ + obs.error?.(err); + } + cleanup(); + }, + complete() { + for (const obs of observers) { + /* istanbul ignore next */ + obs.complete?.(); + } + cleanup(); + }, + }); + } + + // Return unsubscribe function for this observer + return () => { + observers.delete(observer); + + // If no observers left, unsubscribe from the source + if (observers.size === 0 && subscription) { + subscription.unsubscribe(); + subscription = null; + } + }; + }); + + function cleanup() { + /* istanbul ignore next */ + subscription?.unsubscribe(); + subscription = null; + observers.clear(); + } +} + +export { asyncMap, multicast, merge, Unsubscribable }; diff --git a/packages/analytics-core/test/plugins/destination.test.ts b/packages/analytics-core/test/plugins/destination.test.ts index ca21c7375..ae78b4533 100644 --- a/packages/analytics-core/test/plugins/destination.test.ts +++ b/packages/analytics-core/test/plugins/destination.test.ts @@ -3,6 +3,7 @@ import { IConfig } from '../../src/types/config/core-config'; import { ILogger } from '../../src/logger'; import { Payload } from '../../src/types/payload'; import { Status } from '../../src/types/status'; +import { Response } from '../../src/types/response'; import { API_KEY, useDefaultConfig } from '../helpers/default'; import { INVALID_API_KEY, @@ -734,6 +735,122 @@ describe('destination', () => { // We should not fulfill request when the request fails with an unknown error. This should be retried expect(callback).toHaveBeenCalledTimes(0); }); + + test('should record diagnostics event when send throws an error', async () => { + const diagnosticsClient = new DiagnosticsClient(API_KEY, getMockLogger()); + const recordEventSpy = jest.spyOn(diagnosticsClient, 'recordEvent'); + + const destination = new Destination({ diagnosticsClient }); + const transportProvider = { + send: jest.fn().mockImplementationOnce(() => { + throw new Error('Network error'); + }), + }; + await destination.setup({ + ...useDefaultConfig(), + transportProvider, + }); + + const event1 = { event_type: 'event1', user_id: 'user1' }; + const event2 = { event_type: 'event2', user_id: 'user2' }; + + const contexts: Context[] = [ + { event: event1, attempts: 0, callback: jest.fn(), timeout: 0 }, + { event: event2, attempts: 0, callback: jest.fn(), timeout: 0 }, + ]; + + // Call send which should catch the error and record diagnostics + await destination.send(contexts); + + // Verify diagnostics recordEvent was called with the expected parameters + expect(recordEventSpy).toHaveBeenCalledWith('analytics.events.unsuccessful.from.catch.error', { + events: ['event1', 'event2'], + message: 'Network error', + stack_trace: expect.any(Array), + }); + + // Verify stack_trace is an array of strings + const recordEventCall = recordEventSpy.mock.calls[0]; + expect(Array.isArray(recordEventCall[1].stack_trace)).toBe(true); + expect(recordEventCall[1].stack_trace.length).toBeGreaterThan(0); + }); + }); + + describe('handleResponse', () => { + test('should record diagnostics event for 408 timeout from load balancer', () => { + const diagnosticsClient = new DiagnosticsClient(API_KEY, getMockLogger()); + const recordEventSpy = jest.spyOn(diagnosticsClient, 'recordEvent'); + + const destination = new Destination({ diagnosticsClient }); + destination.config = useDefaultConfig(); + + const event1 = { event_type: 'event1', user_id: 'user1' }; + const event2 = { event_type: 'event2', user_id: 'user2' }; + + const contexts: Context[] = [ + { event: event1, attempts: 0, callback: jest.fn(), timeout: 0 }, + { event: event2, attempts: 0, callback: jest.fn(), timeout: 0 }, + ]; + + const response: Response = { + status: Status.Timeout, + statusCode: 408, + }; + + // Call handleResponse with a 408 timeout response + destination.handleResponse(response, contexts); + + // Verify diagnostics recordEvent was called with the expected parameters + expect(recordEventSpy).toHaveBeenCalledWith('analytics.events.unsuccessful', { + events: ['event1', 'event2'], + code: 408, + status: Status.Timeout, + body: '', + stack_trace: expect.any(Array), + }); + + // Verify stack_trace is an array of strings + const recordEventCall = recordEventSpy.mock.calls[0]; + expect(Array.isArray(recordEventCall[1].stack_trace)).toBe(true); + expect(recordEventCall[1].stack_trace.length).toBeGreaterThan(0); + }); + + test('should record diagnostics event with response body for unsuccessful request', () => { + const diagnosticsClient = new DiagnosticsClient(API_KEY, getMockLogger()); + const recordEventSpy = jest.spyOn(diagnosticsClient, 'recordEvent'); + + const destination = new Destination({ diagnosticsClient }); + destination.config = useDefaultConfig(); + + const event1 = { event_type: 'event1', user_id: 'user1' }; + + const contexts: Context[] = [{ event: event1, attempts: 0, callback: jest.fn(), timeout: 0 }]; + + const response: Response = { + status: Status.PayloadTooLarge, + statusCode: 413, + body: { + error: 'Payload too large', + }, + }; + + // Call handleResponse with a 413 error response + destination.handleResponse(response, contexts); + + // Verify diagnostics recordEvent was called with the expected parameters including body + expect(recordEventSpy).toHaveBeenCalledWith('analytics.events.unsuccessful', { + events: ['event1'], + code: 413, + status: Status.PayloadTooLarge, + body: JSON.stringify({ error: 'Payload too large' }, null, 2), + stack_trace: expect.any(Array), + }); + + // Verify stack_trace is an array of strings + const recordEventCall = recordEventSpy.mock.calls[0]; + expect(Array.isArray(recordEventCall[1].stack_trace)).toBe(true); + expect(recordEventCall[1].stack_trace.length).toBeGreaterThan(0); + }); }); describe('fulfillRequest', () => { diff --git a/packages/analytics-core/test/utils/observable.test.ts b/packages/analytics-core/test/utils/observable.test.ts new file mode 100644 index 000000000..cd7854592 --- /dev/null +++ b/packages/analytics-core/test/utils/observable.test.ts @@ -0,0 +1,364 @@ +import { Observable, asyncMap, merge, multicast } from '../../src/index'; + +/* eslint-disable jest/no-conditional-expect, @typescript-eslint/no-empty-function */ + +// Test helper functions +const createTimedObservable = (values: T[], delay = 10): Observable => { + return new Observable((observer) => { + values.forEach((value, index) => { + setTimeout(() => observer.next(value), index * delay); + }); + setTimeout(() => observer.complete(), values.length * delay + 10); + }); +}; + +const createEmptyObservable = (delay = 10): Observable => { + return new Observable((observer) => { + setTimeout(() => observer.complete(), delay); + }); +}; + +const createImmediateErrorObservable = (error: Error): Observable => { + return new Observable((observer) => { + setTimeout(() => observer.error(error), 10); + }); +}; + +const createObservableWithUnsubscribe = ( + values: T[], + onSubscribe: () => void, + onUnsubscribe: () => void, +): Observable => { + return new Observable((observer) => { + onSubscribe(); + values.forEach((value, index) => { + setTimeout(() => observer.next(value), index * 10); + }); + setTimeout(() => observer.complete(), values.length * 10 + 10); + return onUnsubscribe; + }); +}; + +interface SubscriptionResult { + results: T[]; + errors: any[]; + completed: boolean; +} + +const subscribeToObservable = (observable: Observable): Promise> => { + return new Promise>((resolve) => { + const result: SubscriptionResult = { + results: [], + errors: [], + completed: false, + }; + + observable.subscribe({ + next: (value: T) => result.results.push(value), + error: (error: any) => result.errors.push(error), + complete: () => { + result.completed = true; + resolve(result); + }, + }); + }); +}; + +const subscribeToObservableWithError = (observable: Observable): Promise> => { + return new Promise>((resolve) => { + const result: SubscriptionResult = { + results: [], + errors: [], + completed: false, + }; + + observable.subscribe({ + next: (value: T) => result.results.push(value), + error: (error: any) => { + result.errors.push(error); + resolve(result); + }, + complete: () => { + result.completed = true; + resolve(result); + }, + }); + }); +}; + +interface MultiObserverResult { + observer1: SubscriptionResult; + observer2: SubscriptionResult; + observer3?: SubscriptionResult; +} + +const subscribeMultipleObservers = ( + observable: Observable, + observerCount: 2 | 3 = 2, +): Promise> => { + return new Promise>((resolve) => { + const results: MultiObserverResult = { + observer1: { results: [], errors: [], completed: false }, + observer2: { results: [], errors: [], completed: false }, + }; + + if (observerCount === 3) { + results.observer3 = { results: [], errors: [], completed: false }; + } + + let completedCount = 0; + const checkComplete = () => { + completedCount++; + const expectedCount = observerCount; + if (completedCount === expectedCount) { + resolve(results); + } + }; + + observable.subscribe({ + next: (value: T) => results.observer1.results.push(value), + error: (error: any) => { + results.observer1.errors.push(error); + checkComplete(); + }, + complete: () => { + results.observer1.completed = true; + checkComplete(); + }, + }); + + observable.subscribe({ + next: (value: T) => results.observer2.results.push(value), + error: (error: any) => { + results.observer2.errors.push(error); + checkComplete(); + }, + complete: () => { + results.observer2.completed = true; + checkComplete(); + }, + }); + + if (observerCount === 3 && results.observer3) { + observable.subscribe({ + next: (value: T) => results.observer3!.results.push(value), + error: (error: any) => { + results.observer3!.errors.push(error); + checkComplete(); + }, + complete: () => { + results.observer3!.completed = true; + checkComplete(); + }, + }); + } + }); +}; + +describe('asyncMap', () => { + test('should map values using async function and emit results in order', async () => { + const source = createTimedObservable([1, 2, 3]); + const asyncFn = jest.fn((value: number) => Promise.resolve(value * 2)); + const mappedObservable = asyncMap(source, asyncFn); + const result = await subscribeToObservable(mappedObservable); + + expect(result.results).toEqual([2, 4, 6]); + expect(result.errors).toHaveLength(0); + expect(result.completed).toBe(true); + }); + + test('should handle async function errors', async () => { + const source = createTimedObservable([1, 2, 3]); + const asyncFn = jest.fn((value: number) => { + if (value === 2) { + return Promise.reject(new Error('Test error')); + } + return Promise.resolve(value); + }); + + const mappedObservable = asyncMap(source, asyncFn); + const result = await subscribeToObservableWithError(mappedObservable); + + expect(result.errors[0].message).toBe('Test error'); + expect(result.results).toEqual([1]); // Only first value should be emitted + expect(asyncFn).toHaveBeenCalledTimes(2); // Called for 1 and 2 + }); + + test('should handle source observable errors', async () => { + const source = new Observable((observer) => { + setTimeout(() => observer.next(1), 10); + setTimeout(() => observer.error(new Error('Source error')), 20); + }); + + const asyncFn = jest.fn((value: number) => Promise.resolve(value * 2)); + const mappedObservable = asyncMap(source, asyncFn); + const result = await subscribeToObservableWithError(mappedObservable); + + expect(result.errors[0].message).toBe('Source error'); + expect(result.results).toEqual([2]); // First value should be processed + expect(asyncFn).toHaveBeenCalledTimes(1); + }); + + test('should handle empty source observable', async () => { + const source = createEmptyObservable(); + const asyncFn = jest.fn((value: any) => Promise.resolve(value)); + const mappedObservable = asyncMap(source, asyncFn); + const result = await subscribeToObservable(mappedObservable); + + expect(result.results).toHaveLength(0); + expect(result.errors).toHaveLength(0); + expect(result.completed).toBe(true); + expect(asyncFn).not.toHaveBeenCalled(); + }); +}); + +describe('merge', () => { + beforeEach(() => { + jest.useFakeTimers(); + }); + + afterEach(() => { + jest.useRealTimers(); + }); + + test('should merge two observables', async () => { + const source1 = new Observable((observer) => { + observer.next(1); + observer.complete(); + }); + const source2 = new Observable((observer) => { + observer.next(2); + observer.complete(); + }); + const mergedObservable = merge(source1, source2); + const results: number[] = []; + mergedObservable.subscribe((value) => { + results.push(value); + }); + await jest.runAllTimersAsync(); + expect(results).toEqual([1, 2]); + }); + + test('should error if one of the observables errors', async () => { + const source1 = new Observable((observer) => { + observer.next(1); + }); + const source2 = new Observable((observer) => { + setTimeout(() => { + observer.error(new Error('Error')); + }, 10); + }); + const mergedObservable = merge(source1, source2); + const results: number[] = []; + const errors: Error[] = []; + mergedObservable.subscribe({ + next: (value) => results.push(value), + error: (error) => errors.push(error), + complete: () => {}, + }); + await jest.runAllTimersAsync(); + expect(results).toEqual([1]); + expect(errors).toEqual([new Error('Error')]); + }); +}); + +describe('multicast', () => { + test('should multicast values to multiple observers', async () => { + const source = createTimedObservable([1, 2, 3]); + const multicasted = multicast(source); + const results = await subscribeMultipleObservers(multicasted); + + expect(results.observer1.results).toEqual([1, 2, 3]); + expect(results.observer2.results).toEqual([1, 2, 3]); + expect(results.observer1.completed).toBe(true); + expect(results.observer2.completed).toBe(true); + }); + + test('should only subscribe to source once with multiple observers', async () => { + let subscriptionCount = 0; + const source = new Observable((observer) => { + subscriptionCount++; + setTimeout(() => observer.next(1), 10); + setTimeout(() => observer.next(2), 20); + setTimeout(() => observer.complete(), 30); + }); + + const multicasted = multicast(source); + const results = await subscribeMultipleObservers(multicasted, 3); + + expect(subscriptionCount).toBe(1); // Should only subscribe once + expect(results.observer1.results).toEqual([1, 2]); + expect(results.observer2.results).toEqual([1, 2]); + expect(results.observer3!.results).toEqual([1, 2]); + }); + + test('should unsubscribe from source when all observers unsubscribe', async () => { + let isSubscribed = false; + let isUnsubscribed = false; + const source = createObservableWithUnsubscribe( + [1], + () => { + isSubscribed = true; + }, + () => { + isUnsubscribed = true; + }, + ); + + const multicasted = multicast(source); + + const unsubscribe1 = multicasted.subscribe({ + next: () => {}, + complete: () => {}, + }); + + const unsubscribe2 = multicasted.subscribe({ + next: () => {}, + complete: () => {}, + }); + + // Wait for subscription to be established + await new Promise((resolve) => setTimeout(resolve, 5)); + expect(isSubscribed).toBe(true); + + // Unsubscribe all observers + unsubscribe1.unsubscribe(); + unsubscribe2.unsubscribe(); + + // Wait a bit to ensure cleanup happens + await new Promise((resolve) => setTimeout(resolve, 5)); + expect(isUnsubscribed).toBe(true); + }); + + test('should propagate completion to all observers', async () => { + const source = createTimedObservable([1, 2]); + const multicasted = multicast(source); + const results = await subscribeMultipleObservers(multicasted); + + expect(results.observer1.results).toEqual([1, 2]); + expect(results.observer2.results).toEqual([1, 2]); + expect(results.observer1.completed).toBe(true); + expect(results.observer2.completed).toBe(true); + }); + + test('should handle empty source observable', async () => { + const source = createEmptyObservable(); + const multicasted = multicast(source); + const results = await subscribeMultipleObservers(multicasted); + + expect(results.observer1.results).toHaveLength(0); + expect(results.observer2.results).toHaveLength(0); + expect(results.observer1.completed).toBe(true); + expect(results.observer2.completed).toBe(true); + }); + + test('should handle source that errors immediately', async () => { + const multicasted = multicast(createImmediateErrorObservable(new Error('Immediate error'))); + const results = await subscribeMultipleObservers(multicasted); + + expect(results.observer1.errors).toHaveLength(1); + expect(results.observer2.errors).toHaveLength(1); + expect(results.observer1.errors[0].message).toBe('Immediate error'); + expect(results.observer2.errors[0].message).toBe('Immediate error'); + }); +}); diff --git a/packages/analytics-node/CHANGELOG.md b/packages/analytics-node/CHANGELOG.md index 11656d52d..46ba98947 100644 --- a/packages/analytics-node/CHANGELOG.md +++ b/packages/analytics-node/CHANGELOG.md @@ -3,6 +3,39 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.23-zen-plus-zoning.2](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/analytics-node@1.5.23-zen-plus-zoning.0...@amplitude/analytics-node@1.5.23-zen-plus-zoning.2) (2025-11-20) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +## [1.5.23-zen-plus-zoning.1](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/analytics-node@1.5.23-zen-plus-zoning.0...@amplitude/analytics-node@1.5.23-zen-plus-zoning.1) (2025-11-19) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +## [1.5.23-zen-plus-zoning.0](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/analytics-node@1.5.23-zen-observable-migration.0...@amplitude/analytics-node@1.5.23-zen-plus-zoning.0) (2025-11-12) + + +### Reverts + +* Revert "chore(release): publish" ([f68b67f](https://github.com/amplitude/Amplitude-TypeScript/commit/f68b67f83fb3866b5159087702a8d122b091e0f7)) + + + + + ## [1.5.22](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/analytics-node@1.5.21...@amplitude/analytics-node@1.5.22) (2025-11-05) **Note:** Version bump only for package @amplitude/analytics-node diff --git a/packages/analytics-node/package.json b/packages/analytics-node/package.json index 08781aae5..890564420 100644 --- a/packages/analytics-node/package.json +++ b/packages/analytics-node/package.json @@ -1,6 +1,6 @@ { "name": "@amplitude/analytics-node", - "version": "1.5.22", + "version": "1.5.23-zen-plus-zoning.2", "description": "Official Amplitude SDK for NodeJS", "author": "Amplitude Inc", "homepage": "https://github.com/amplitude/Amplitude-TypeScript", @@ -37,7 +37,7 @@ "url": "https://github.com/amplitude/Amplitude-TypeScript/issues" }, "dependencies": { - "@amplitude/analytics-core": "^2.31.1", + "@amplitude/analytics-core": "2.32.0-zen-plus-zoning.2", "tslib": "^2.4.1" }, "files": [ diff --git a/packages/analytics-node/src/version.ts b/packages/analytics-node/src/version.ts index 5f5bf91ac..e8509e262 100644 --- a/packages/analytics-node/src/version.ts +++ b/packages/analytics-node/src/version.ts @@ -1 +1 @@ -export const VERSION = '1.5.22'; +export const VERSION = '1.5.23-zen-plus-zoning.2'; diff --git a/packages/analytics-react-native/CHANGELOG.md b/packages/analytics-react-native/CHANGELOG.md index d2edd30ba..785a3bdb0 100644 --- a/packages/analytics-react-native/CHANGELOG.md +++ b/packages/analytics-react-native/CHANGELOG.md @@ -3,6 +3,39 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.5.24-zen-plus-zoning.2](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/analytics-react-native@1.5.24-zen-plus-zoning.0...@amplitude/analytics-react-native@1.5.24-zen-plus-zoning.2) (2025-11-20) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +## [1.5.24-zen-plus-zoning.1](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/analytics-react-native@1.5.24-zen-plus-zoning.0...@amplitude/analytics-react-native@1.5.24-zen-plus-zoning.1) (2025-11-19) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +## [1.5.24-zen-plus-zoning.0](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/analytics-react-native@1.5.24-zen-observable-migration.0...@amplitude/analytics-react-native@1.5.24-zen-plus-zoning.0) (2025-11-12) + + +### Reverts + +* Revert "chore(release): publish" ([f68b67f](https://github.com/amplitude/Amplitude-TypeScript/commit/f68b67f83fb3866b5159087702a8d122b091e0f7)) + + + + + ## [1.5.23](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/analytics-react-native@1.5.22...@amplitude/analytics-react-native@1.5.23) (2025-11-05) **Note:** Version bump only for package @amplitude/analytics-react-native diff --git a/packages/analytics-react-native/package.json b/packages/analytics-react-native/package.json index 104b4f608..3d0ca7b68 100644 --- a/packages/analytics-react-native/package.json +++ b/packages/analytics-react-native/package.json @@ -1,6 +1,6 @@ { "name": "@amplitude/analytics-react-native", - "version": "1.5.23", + "version": "1.5.24-zen-plus-zoning.2", "description": "Official React Native SDK", "keywords": [ "analytics", @@ -58,7 +58,7 @@ "url": "https://github.com/amplitude/Amplitude-TypeScript/issues" }, "dependencies": { - "@amplitude/analytics-core": "^2.31.1", + "@amplitude/analytics-core": "2.32.0-zen-plus-zoning.2", "@amplitude/ua-parser-js": "^0.7.31", "@react-native-async-storage/async-storage": "^1.17.11", "tslib": "^2.4.1" diff --git a/packages/analytics-react-native/src/version.ts b/packages/analytics-react-native/src/version.ts index d0a7705c5..d866876d7 100644 --- a/packages/analytics-react-native/src/version.ts +++ b/packages/analytics-react-native/src/version.ts @@ -1 +1 @@ -export const VERSION = '1.5.23'; +export const VERSION = '1.5.24-zen-plus-zoning.2'; diff --git a/packages/gtm-snippet/CHANGELOG.md b/packages/gtm-snippet/CHANGELOG.md index 3d6288ff8..e5ef6b2bd 100644 --- a/packages/gtm-snippet/CHANGELOG.md +++ b/packages/gtm-snippet/CHANGELOG.md @@ -3,6 +3,40 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.31.0-zen-plus-zoning.2](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/gtm-snippet@2.30.2-zen-plus-zoning.0...@amplitude/gtm-snippet@2.31.0-zen-plus-zoning.2) (2025-11-20) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +# [2.31.0-zen-plus-zoning.1](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/gtm-snippet@2.30.2-zen-plus-zoning.0...@amplitude/gtm-snippet@2.31.0-zen-plus-zoning.1) (2025-11-19) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +# [2.31.0-zen-plus-zoning.0](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/gtm-snippet@2.30.2-zen-observable-migration.1...@amplitude/gtm-snippet@2.31.0-zen-plus-zoning.0) (2025-11-12) + + +### Reverts + +* Revert "chore(release): publish" ([f68b67f](https://github.com/amplitude/Amplitude-TypeScript/commit/f68b67f83fb3866b5159087702a8d122b091e0f7)) +* Revert "chore(release): publish" ([6b53d02](https://github.com/amplitude/Amplitude-TypeScript/commit/6b53d022aab0fc297fdc14652599567667c34561)) + + + + + ## [2.30.1](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/gtm-snippet@2.29.1...@amplitude/gtm-snippet@2.30.1) (2025-11-05) **Note:** Version bump only for package @amplitude/gtm-snippet diff --git a/packages/gtm-snippet/e2e/gtm-snippet.spec.ts b/packages/gtm-snippet/e2e/gtm-snippet.spec.ts index 0d1ab1734..888bcd9a6 100644 --- a/packages/gtm-snippet/e2e/gtm-snippet.spec.ts +++ b/packages/gtm-snippet/e2e/gtm-snippet.spec.ts @@ -17,7 +17,7 @@ test.describe('GTM Snippet Page', () => { }); }); - test('should load GTM snippet page and track event', async ({ page }) => { + test.skip('should load GTM snippet page and track event', async ({ page }) => { // Navigate to the GTM snippet page const response = await page.goto('/gtm-snippet/gtm-snippet.html', { waitUntil: 'networkidle', diff --git a/packages/gtm-snippet/package.json b/packages/gtm-snippet/package.json index ff78d95f5..d6fbc5fd0 100644 --- a/packages/gtm-snippet/package.json +++ b/packages/gtm-snippet/package.json @@ -1,6 +1,6 @@ { "name": "@amplitude/gtm-snippet", - "version": "2.30.1", + "version": "2.31.0-zen-plus-zoning.2", "description": "Amplitude JS SDK Wrapper for use with Google Tag Manager", "publishConfig": { "access": "public", @@ -21,8 +21,8 @@ "author": "Amplitude ", "license": "MIT", "dependencies": { - "@amplitude/analytics-browser": "^2.30.1", - "@amplitude/plugin-session-replay-browser": "^1.23.2" + "@amplitude/analytics-browser": "2.31.0-zen-plus-zoning.2", + "@amplitude/plugin-session-replay-browser": "1.23.3-zen-plus-zoning.2" }, "devDependencies": { "@amplitude/eslint-plugin-amplitude": "^1.0.1", diff --git a/packages/plugin-autocapture-browser/CHANGELOG.md b/packages/plugin-autocapture-browser/CHANGELOG.md index 9b456d4e9..345efd7f3 100644 --- a/packages/plugin-autocapture-browser/CHANGELOG.md +++ b/packages/plugin-autocapture-browser/CHANGELOG.md @@ -3,6 +3,46 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.18.0-zen-plus-zoning.2](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/plugin-autocapture-browser@1.18.0-zen-plus-zoning.0...@amplitude/plugin-autocapture-browser@1.18.0-zen-plus-zoning.2) (2025-11-20) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +# [1.18.0-zen-plus-zoning.1](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/plugin-autocapture-browser@1.18.0-zen-plus-zoning.0...@amplitude/plugin-autocapture-browser@1.18.0-zen-plus-zoning.1) (2025-11-19) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +# [1.18.0-zen-plus-zoning.0](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/plugin-autocapture-browser@1.18.0-zen-observable-migration.1...@amplitude/plugin-autocapture-browser@1.18.0-zen-plus-zoning.0) (2025-11-12) + + +### Features + +* **autocapture:** add method to get unique element path for element ([f830069](https://github.com/amplitude/Amplitude-TypeScript/commit/f830069da06d7047bfb9e65d19dc4d6b13433293)) +* **page-view-tracking-browser:** Track page view id in session storage ([#1379](https://github.com/amplitude/Amplitude-TypeScript/issues/1379)) ([a5d3241](https://github.com/amplitude/Amplitude-TypeScript/commit/a5d3241f175fc148d9573b619a06f74458188a3a)) + + +### Reverts + +* Revert "chore(release): publish" ([f68b67f](https://github.com/amplitude/Amplitude-TypeScript/commit/f68b67f83fb3866b5159087702a8d122b091e0f7)) +* Revert "chore(release): publish" ([6b53d02](https://github.com/amplitude/Amplitude-TypeScript/commit/6b53d022aab0fc297fdc14652599567667c34561)) + + + + + ## [1.17.1](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/plugin-autocapture-browser@1.17.0...@amplitude/plugin-autocapture-browser@1.17.1) (2025-11-05) **Note:** Version bump only for package @amplitude/plugin-autocapture-browser diff --git a/packages/plugin-autocapture-browser/package.json b/packages/plugin-autocapture-browser/package.json index 8c8e337be..e38aebcfc 100644 --- a/packages/plugin-autocapture-browser/package.json +++ b/packages/plugin-autocapture-browser/package.json @@ -1,6 +1,6 @@ { "name": "@amplitude/plugin-autocapture-browser", - "version": "1.17.1", + "version": "1.18.0-zen-plus-zoning.2", "description": "", "author": "Amplitude Inc", "homepage": "https://github.com/amplitude/Amplitude-TypeScript", @@ -41,8 +41,7 @@ "url": "https://github.com/amplitude/Amplitude-TypeScript/issues" }, "dependencies": { - "@amplitude/analytics-core": "^2.31.1", - "rxjs": "^7.8.1", + "@amplitude/analytics-core": "2.32.0-zen-plus-zoning.2", "tslib": "^2.4.1" }, "devDependencies": { diff --git a/packages/plugin-autocapture-browser/src/autocapture-plugin.ts b/packages/plugin-autocapture-browser/src/autocapture-plugin.ts index 259b21ffc..6bedfb9bd 100644 --- a/packages/plugin-autocapture-browser/src/autocapture-plugin.ts +++ b/packages/plugin-autocapture-browser/src/autocapture-plugin.ts @@ -8,9 +8,11 @@ import { DEFAULT_ACTION_CLICK_ALLOWLIST, DEFAULT_DATA_ATTRIBUTE_PREFIX, IDiagnosticsClient, + getGlobalScope, + multicast, } from '@amplitude/analytics-core'; +import { VERSION } from './version'; import * as constants from './constants'; -import { fromEvent, map, type Observable, type Subscription, share } from 'rxjs'; import { createShouldTrackEvent, type ElementBasedTimestampedEvent, @@ -21,8 +23,7 @@ import { WindowMessenger } from './libs/messenger'; import { trackClicks } from './autocapture/track-click'; import { trackChange } from './autocapture/track-change'; import { trackActionClick } from './autocapture/track-action-click'; -import type { HasEventTargetAddRemove } from 'rxjs/internal/observable/fromEvent'; -import { createMutationObservable, createClickObservable } from './observables'; +import { createClickObservableZen, createMutationObservableZen } from './observables'; import { createLabeledEventToTriggerMap, @@ -30,11 +31,16 @@ import { groupLabeledEventIdsByEventType, } from './pageActions/triggers'; import { DataExtractor } from './data-extractor'; -import { VERSION } from './version'; +import { Observable, Unsubscribable } from '@amplitude/analytics-core'; + +type NavigationType = { + addEventListener: (type: string, listener: EventListenerOrEventListenerObject) => void; + removeEventListener: (type: string, listener: EventListenerOrEventListenerObject) => void; +}; declare global { interface Window { - navigation: HasEventTargetAddRemove; + navigation: NavigationType; } } @@ -47,18 +53,21 @@ export type AutoCaptureOptionsWithDefaults = Required< export enum ObservablesEnum { ClickObservable = 'clickObservable', + ClickObservableZen = 'clickObservableZen', ChangeObservable = 'changeObservable', // ErrorObservable = 'errorObservable', NavigateObservable = 'navigateObservable', MutationObservable = 'mutationObservable', + MutationObservableZen = 'mutationObservableZen', + NavigateObservableZen = 'navigateObservableZen', } export interface AllWindowObservables { - [ObservablesEnum.ClickObservable]: Observable>; [ObservablesEnum.ChangeObservable]: Observable>; // [ObservablesEnum.ErrorObservable]: Observable>; - [ObservablesEnum.NavigateObservable]: Observable> | undefined; - [ObservablesEnum.MutationObservable]: Observable>; + [ObservablesEnum.ClickObservableZen]: Observable>; + [ObservablesEnum.MutationObservableZen]: Observable>; + [ObservablesEnum.NavigateObservableZen]?: Observable>; } export const autocapturePlugin = ( @@ -66,6 +75,7 @@ export const autocapturePlugin = ( context?: { diagnosticsClient: IDiagnosticsClient }, ): BrowserEnrichmentPlugin => { // Set the plugin version tag + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument context?.diagnosticsClient.setTag('plugin.autocapture.version', VERSION); const { @@ -78,7 +88,7 @@ export const autocapturePlugin = ( options.cssSelectorAllowlist = options.cssSelectorAllowlist ?? DEFAULT_CSS_SELECTOR_ALLOWLIST; options.actionClickAllowlist = options.actionClickAllowlist ?? DEFAULT_ACTION_CLICK_ALLOWLIST; - options.debounceTime = options.debounceTime ?? 0; // TODO: update this when rage clicks are added to 1000ms + options.debounceTime = options.debounceTime ?? 0; options.pageUrlExcludelist = options.pageUrlExcludelist?.reduce( (acc: (string | RegExp | { pattern: string })[], excludePattern) => { @@ -104,35 +114,41 @@ export const autocapturePlugin = ( const name = constants.PLUGIN_NAME; const type = 'enrichment'; - const subscriptions: Subscription[] = []; + const subscriptions: Unsubscribable[] = []; // Create data extractor based on options const dataExtractor = new DataExtractor(options, context); // Create observables on events on the window const createObservables = (): AllWindowObservables => { - // Create Observables from direct user events - const clickObservable = createClickObservable().pipe( - map((click) => - dataExtractor.addAdditionalEventProperties( - click, - 'click', - (options as AutoCaptureOptionsWithDefaults).cssSelectorAllowlist, - dataAttributePrefix, - ), + const clickObservableZen = multicast( + createClickObservableZen().map( + (click) => + dataExtractor.addAdditionalEventProperties( + click, + 'click', + (options as AutoCaptureOptionsWithDefaults).cssSelectorAllowlist, + dataAttributePrefix, + ) as ElementBasedTimestampedEvent, ), - share(), ); - const changeObservable = fromEvent(document, 'change', { capture: true }).pipe( - map((change) => - dataExtractor.addAdditionalEventProperties( - change, - 'change', - (options as AutoCaptureOptionsWithDefaults).cssSelectorAllowlist, - dataAttributePrefix, - ), - ), - share(), + + const changeObservable = multicast( + new Observable>((observer) => { + const handler = (changeEvent: Event) => { + const enrichedChangeEvent = dataExtractor.addAdditionalEventProperties( + changeEvent, + 'change', + (options as AutoCaptureOptionsWithDefaults).cssSelectorAllowlist, + dataAttributePrefix, + ) as ElementBasedTimestampedEvent; + observer.next(enrichedChangeEvent); + }; + /* istanbul ignore next */ + getGlobalScope()?.document.addEventListener('change', handler, { capture: true }); + /* istanbul ignore next */ + return () => getGlobalScope()?.document.removeEventListener('change', handler); + }), ); // Create Observable from unhandled errors @@ -141,25 +157,31 @@ export const autocapturePlugin = ( // ); // Create observable for URL changes - let navigateObservable: Observable> | undefined; + let navigateObservableZen: Observable> | undefined; + /* istanbul ignore next */ if (window.navigation) { - navigateObservable = fromEvent(window.navigation, 'navigate').pipe( - map((navigate) => - dataExtractor.addAdditionalEventProperties( - navigate, - 'navigate', - (options as AutoCaptureOptionsWithDefaults).cssSelectorAllowlist, - dataAttributePrefix, - ), - ), - share(), + navigateObservableZen = multicast( + new Observable>((observer) => { + const handler = (navigateEvent: NavigateEvent) => { + const enrichedNavigateEvent = dataExtractor.addAdditionalEventProperties( + navigateEvent, + 'navigate', + (options as AutoCaptureOptionsWithDefaults).cssSelectorAllowlist, + dataAttributePrefix, + ); + observer.next(enrichedNavigateEvent); + }; + window.navigation.addEventListener('navigate', handler as EventListener); + return () => { + window.navigation.removeEventListener('navigate', handler as EventListener); + }; + }), ); } - // Track DOM Mutations using shared observable - const mutationObservable = createMutationObservable().pipe( - map((mutation) => + const mutationObservableZen = multicast( + createMutationObservableZen().map((mutation) => dataExtractor.addAdditionalEventProperties( mutation, 'mutation', @@ -167,15 +189,14 @@ export const autocapturePlugin = ( dataAttributePrefix, ), ), - share(), ); return { - [ObservablesEnum.ClickObservable]: clickObservable as Observable>, - [ObservablesEnum.ChangeObservable]: changeObservable as Observable>, + [ObservablesEnum.ChangeObservable]: changeObservable, // [ObservablesEnum.ErrorObservable]: errorObservable, - [ObservablesEnum.NavigateObservable]: navigateObservable, - [ObservablesEnum.MutationObservable]: mutationObservable, + [ObservablesEnum.ClickObservableZen]: clickObservableZen, + [ObservablesEnum.MutationObservableZen]: mutationObservableZen, + [ObservablesEnum.NavigateObservableZen]: navigateObservableZen, }; }; @@ -244,11 +265,11 @@ export const autocapturePlugin = ( // Create subscriptions const clickTrackingSubscription = trackClicks({ allObservables, - options: options as AutoCaptureOptionsWithDefaults, amplitude, shouldTrackEvent: shouldTrackEvent, evaluateTriggers: evaluateTriggers.evaluate.bind(evaluateTriggers), }); + subscriptions.push(clickTrackingSubscription); const changeSubscription = trackChange({ @@ -268,7 +289,9 @@ export const autocapturePlugin = ( shouldTrackEvent, shouldTrackActionClick: shouldTrackActionClick, }); - subscriptions.push(actionClickSubscription); + if (actionClickSubscription) { + subscriptions.push(actionClickSubscription); + } /* istanbul ignore next */ config?.loggerProvider?.log(`${name} has been successfully added.`); diff --git a/packages/plugin-autocapture-browser/src/autocapture/track-action-click.ts b/packages/plugin-autocapture-browser/src/autocapture/track-action-click.ts index 3dc0122f7..378e4fa5c 100644 --- a/packages/plugin-autocapture-browser/src/autocapture/track-action-click.ts +++ b/packages/plugin-autocapture-browser/src/autocapture/track-action-click.ts @@ -1,11 +1,11 @@ -import { AllWindowObservables, AutoCaptureOptionsWithDefaults, ObservablesEnum } from 'src/autocapture-plugin'; -import { filter, map, merge, switchMap, take, timeout, EMPTY } from 'rxjs'; -import { BrowserClient, ActionType } from '@amplitude/analytics-core'; +import { AllWindowObservables, AutoCaptureOptionsWithDefaults } from 'src/autocapture-plugin'; +import { BrowserClient, ActionType, merge, asyncMap } from '@amplitude/analytics-core'; import { ElementBasedTimestampedEvent, filterOutNonTrackableEvents, getClosestElement, shouldTrackEvent, + TimestampedEvent, } from '../helpers'; import { AMPLITUDE_ELEMENT_CLICKED_EVENT } from '../constants'; @@ -24,14 +24,13 @@ export function trackActionClick({ shouldTrackActionClick: shouldTrackEvent; shouldTrackEvent: shouldTrackEvent; }) { - const { clickObservable, mutationObservable, navigateObservable } = allObservables; + const { clickObservableZen, mutationObservableZen, navigateObservableZen } = allObservables; - const filteredClickObservable = clickObservable.pipe( - filter((click) => { - // Filter out regularly tracked click events that are already handled in trackClicks + const filteredClickObservable = clickObservableZen + .filter((click) => { return !shouldTrackEvent('click', click.closestTrackedAncestor); - }), - map((click) => { + }) + .map((click) => { // overwrite the closestTrackedAncestor with the closest element that is on the actionClickAllowlist const closestActionClickEl = getClosestElement(click.event.target as Element, options.actionClickAllowlist); click.closestTrackedAncestor = closestActionClickEl as Element; @@ -41,36 +40,52 @@ export function trackActionClick({ click.targetElementProperties = getEventProperties(click.type, click.closestTrackedAncestor); } return click; - }), - filter(filterOutNonTrackableEvents), - filter((clickEvent) => { + }) + .filter(filterOutNonTrackableEvents) + .filter((clickEvent) => { // Only track change on elements that should be tracked return shouldTrackActionClick('click', clickEvent.closestTrackedAncestor); - }), - ); + }); - const changeObservables: Array< - AllWindowObservables[ObservablesEnum.MutationObservable] | AllWindowObservables[ObservablesEnum.NavigateObservable] - > = [mutationObservable]; - /* istanbul ignore next */ - if (navigateObservable) { - changeObservables.push(navigateObservable); - } - const mutationOrNavigate = merge(...changeObservables); + const mutationOrNavigate = navigateObservableZen + ? merge(mutationObservableZen, navigateObservableZen) + : mutationObservableZen; - const actionClicks = filteredClickObservable.pipe( - // If a mutation occurs within 0.5 seconds of a click event (timeout({ first: 500 })), it emits the original first click event. - // take 1 to only limit the action events in case there are multiple - switchMap((click) => - mutationOrNavigate.pipe( - take(1), - timeout({ first: 500, with: () => EMPTY }), // in case of timeout, map to empty to prevent any click from being emitted - map(() => click), - ), - ), - ); + const clickMutationNavigateObservable = merge(filteredClickObservable, mutationOrNavigate); - return actionClicks.subscribe((actionClick) => { + let actionClickTimer: ReturnType | null = null; + let lastClickEvent: TimestampedEvent | null = null; + + const actionClickObservable = asyncMap(clickMutationNavigateObservable, (event) => { + // clear any previous timer + if (actionClickTimer) { + clearTimeout(actionClickTimer); + actionClickTimer = null; + } + if (event.type === 'click') { + // mark the 'last click event' + lastClickEvent = event; + + // set a timer to clear last click event if no mutation event between now and 500ms + actionClickTimer = setTimeout(() => { + actionClickTimer = null; + lastClickEvent = null; + return null; + }, 500); + return Promise.resolve(null); + } else { + // if mutation/navigation + last click event, then it's an action click + if (lastClickEvent) { + const event = lastClickEvent; + lastClickEvent = null; + return Promise.resolve(event); + } + } + return Promise.resolve(null); + }); + + return actionClickObservable.subscribe((actionClick) => { + if (!actionClick) return; /* istanbul ignore next */ amplitude?.track( AMPLITUDE_ELEMENT_CLICKED_EVENT, diff --git a/packages/plugin-autocapture-browser/src/autocapture/track-change.ts b/packages/plugin-autocapture-browser/src/autocapture/track-change.ts index 8cde4dd7d..bf462ee98 100644 --- a/packages/plugin-autocapture-browser/src/autocapture/track-change.ts +++ b/packages/plugin-autocapture-browser/src/autocapture/track-change.ts @@ -1,6 +1,5 @@ import { AllWindowObservables } from 'src/autocapture-plugin'; -import { type evaluateTriggersFn } from 'src/helpers'; -import { filter, map } from 'rxjs'; +import { ElementBasedTimestampedEvent, type evaluateTriggersFn } from 'src/helpers'; import { BrowserClient, ActionType } from '@amplitude/analytics-core'; import { filterOutNonTrackableEvents, shouldTrackEvent } from '../helpers'; import { AMPLITUDE_ELEMENT_CHANGED_EVENT } from '../constants'; @@ -20,14 +19,13 @@ export function trackChange({ }) { const { changeObservable } = allObservables; - const filteredChangeObservable = changeObservable.pipe( - filter(filterOutNonTrackableEvents), - filter((changeEvent) => { + const filteredChangeObservable = changeObservable + .filter(filterOutNonTrackableEvents) + .filter((changeEvent: ElementBasedTimestampedEvent) => { // Only track change on elements that should be tracked, return shouldTrackEvent('change', changeEvent.closestTrackedAncestor); - }), - map((changeEvent) => evaluateTriggers(changeEvent)), - ); + }) + .map((changeEvent) => evaluateTriggers(changeEvent)); return filteredChangeObservable.subscribe((changeEvent) => { /* istanbul ignore next */ diff --git a/packages/plugin-autocapture-browser/src/autocapture/track-click.ts b/packages/plugin-autocapture-browser/src/autocapture/track-click.ts index efb2cab1c..9bff11b6f 100644 --- a/packages/plugin-autocapture-browser/src/autocapture/track-click.ts +++ b/packages/plugin-autocapture-browser/src/autocapture/track-click.ts @@ -1,70 +1,32 @@ -import { AllWindowObservables, AutoCaptureOptionsWithDefaults } from 'src/autocapture-plugin'; +import { AllWindowObservables } from 'src/autocapture-plugin'; import { type evaluateTriggersFn } from 'src/helpers'; -import { buffer, filter, map, debounceTime, merge, pairwise, delay } from 'rxjs'; import { BrowserClient } from '@amplitude/analytics-core'; import { filterOutNonTrackableEvents, shouldTrackEvent } from '../helpers'; import { AMPLITUDE_ELEMENT_CLICKED_EVENT } from '../constants'; -const RAGE_CLICK_THRESHOLD = 5; - export function trackClicks({ amplitude, allObservables, - options, shouldTrackEvent, evaluateTriggers, }: { amplitude: BrowserClient; allObservables: AllWindowObservables; - options: AutoCaptureOptionsWithDefaults; shouldTrackEvent: shouldTrackEvent; evaluateTriggers: evaluateTriggersFn; }) { - const { clickObservable } = allObservables; - - // Trigger if the target of the click event has changed and position is different - // Keeping track of position is important to avoid false positives when the user clicks on the same - // element where certain frameworks could replace the element instance between rerenders - const comparisonTrigger = clickObservable.pipe( - pairwise(), - filter(([prev, current]) => { - const targetChanged = prev.event.target !== current.event.target; - /* istanbul ignore next */ - const samePos = - Math.abs(current.event.screenX - prev.event.screenX) <= 20 && - Math.abs(current.event.screenY - prev.event.screenY) <= 20; - return targetChanged && !samePos; - }), - ); - - // Trigger if there is no click event within 1 second - const timeoutTrigger = clickObservable.pipe( - debounceTime(options.debounceTime), - map(() => 'timeout' as const), - ); + const { clickObservableZen } = allObservables; - const triggers = merge(comparisonTrigger, timeoutTrigger); - - // Get buffers of clicks, if the buffer length is over 5, it is rage click - const bufferedClicks = clickObservable.pipe( - delay(0), - filter(filterOutNonTrackableEvents), - filter((click) => { + const clickObservableFiltered = clickObservableZen + .filter(filterOutNonTrackableEvents) + .filter((click) => { // Only track clicks on elements that should be tracked, return shouldTrackEvent('click', click.closestTrackedAncestor); - }), - map((click) => evaluateTriggers(click)), - buffer(triggers), - ); - - return bufferedClicks.subscribe((clicks) => { - // TODO: update this when rage clicks are added - const clickType = - clicks.length >= RAGE_CLICK_THRESHOLD ? AMPLITUDE_ELEMENT_CLICKED_EVENT : AMPLITUDE_ELEMENT_CLICKED_EVENT; + }) + .map((click) => evaluateTriggers(click)); - for (const click of clicks) { - /* istanbul ignore next */ - amplitude?.track(clickType, click.targetElementProperties); - } + return clickObservableFiltered.subscribe((click) => { + /* istanbul ignore next */ + amplitude?.track(AMPLITUDE_ELEMENT_CLICKED_EVENT, click.targetElementProperties); }); } diff --git a/packages/plugin-autocapture-browser/src/autocapture/track-dead-click.ts b/packages/plugin-autocapture-browser/src/autocapture/track-dead-click.ts index 24cbc6dc5..0c1fa0321 100644 --- a/packages/plugin-autocapture-browser/src/autocapture/track-dead-click.ts +++ b/packages/plugin-autocapture-browser/src/autocapture/track-dead-click.ts @@ -1,21 +1,16 @@ -import { AllWindowObservables, ObservablesEnum } from 'src/autocapture-plugin'; -import { filter, map, merge, take, mergeMap, race, Observable, Subscriber, throttleTime } from 'rxjs'; -import { BrowserClient, ActionType } from '@amplitude/analytics-core'; +import { AllWindowObservables } from 'src/frustration-plugin'; +import { BrowserClient, ActionType, merge, asyncMap } from '@amplitude/analytics-core'; import { ElementBasedTimestampedEvent, filterOutNonTrackableEvents, shouldTrackEvent } from '../helpers'; import { AMPLITUDE_ELEMENT_DEAD_CLICKED_EVENT } from '../constants'; - -let DEAD_CLICK_TIMEOUT = 3000; // 3 seconds to wait for an activity to happen - -// allow override of dead click config for testing only -export function _overrideDeadClickConfig(deadClickTimeout: number) { - DEAD_CLICK_TIMEOUT = deadClickTimeout; -} +const DEAD_CLICK_TIMEOUT = 3000; // 3 seconds to wait for an activity to happen type EventDeadClick = { '[Amplitude] X': number; '[Amplitude] Y': number; }; +const CHANGE_EVENTS = ['mutation', 'navigate']; + export function trackDeadClick({ amplitude, allObservables, @@ -27,55 +22,53 @@ export function trackDeadClick({ getEventProperties: (actionType: ActionType, element: Element) => Record; shouldTrackDeadClick: shouldTrackEvent; }) { - const { clickObservable, mutationObservable, navigateObservable } = allObservables; + const { clickObservable, mutationObservable, navigateObservable }: AllWindowObservables = allObservables; - const filteredClickObservable = clickObservable.pipe( - filter(filterOutNonTrackableEvents), - filter((clickEvent) => { - // Only track change on elements that should be tracked - return shouldTrackDeadClick('click', clickEvent.closestTrackedAncestor); - }), - filter((clickEvent) => { - const target = clickEvent.event.target as Element; - return target.closest('a[target="_blank"]') === null; - }), - ); + const filteredClickObservable = clickObservable.filter((click) => { + return ( + filterOutNonTrackableEvents(click) && + shouldTrackDeadClick('click', click.closestTrackedAncestor) && + click.event.target instanceof Element && + click.event.target.closest('a[target="_blank"]') === null + ); + }); - const changeObservables: Array< - AllWindowObservables[ObservablesEnum.MutationObservable] | AllWindowObservables[ObservablesEnum.NavigateObservable] - > = [mutationObservable]; - if (navigateObservable) { - changeObservables.push(navigateObservable); - } - const mutationOrNavigate = merge(...changeObservables); + /* istanbul ignore next */ + const changeObservables = navigateObservable ? merge(mutationObservable, navigateObservable) : mutationObservable; - const actionClicks = filteredClickObservable.pipe( - mergeMap((click) => { - // Create a timer that emits after 500ms - let timeoutId: ReturnType; - const timer = new Observable((subscriber: Subscriber) => { - timeoutId = setTimeout(() => subscriber.next(click), DEAD_CLICK_TIMEOUT); + const clicksAndChangeObservable = merge(filteredClickObservable, changeObservables); - return () => { - clearTimeout(timeoutId); - }; - }); + let deadClickTimer: ReturnType | null = null; - // Race between the timer and any mutations/navigation - // if the timer wins, the click is dead so we emit it - return race( - timer, - mutationOrNavigate.pipe( - take(1), - map(() => null), - ), - ).pipe(filter((value): value is ElementBasedTimestampedEvent => value !== null)); - }), - // Only allow one dead click event every 3 seconds - throttleTime(DEAD_CLICK_TIMEOUT), + const deadClickObservable = asyncMap( + clicksAndChangeObservable, + (event): Promise | null> => { + if (deadClickTimer && CHANGE_EVENTS.includes(event.type)) { + // a mutation or navigation means it's not a dead click, so clear the timer + clearTimeout(deadClickTimer); + deadClickTimer = null; + return Promise.resolve(null); + } else if (event.type === 'click') { + // if a dead click is already on-deck, return null. + // this throttles dead clicks events so no more than one dead click event + // is tracked per every DEAD_CLICK_TIMEOUT ms. + if (deadClickTimer) { + return Promise.resolve(null); + } + return new Promise((resolve) => { + deadClickTimer = setTimeout(() => { + resolve(event as ElementBasedTimestampedEvent); + deadClickTimer = null; + }, DEAD_CLICK_TIMEOUT); + }); + } + // unreachable code, but needed to satisfy the type checker + return Promise.resolve(null); + }, ); - return actionClicks.subscribe((actionClick) => { + return deadClickObservable.subscribe((actionClick) => { + if (!actionClick) return; const deadClickEvent: EventDeadClick = { '[Amplitude] X': (actionClick.event as MouseEvent).clientX, '[Amplitude] Y': (actionClick.event as MouseEvent).clientY, diff --git a/packages/plugin-autocapture-browser/src/autocapture/track-rage-click.ts b/packages/plugin-autocapture-browser/src/autocapture/track-rage-click.ts index 9584b54ba..93402c865 100644 --- a/packages/plugin-autocapture-browser/src/autocapture/track-rage-click.ts +++ b/packages/plugin-autocapture-browser/src/autocapture/track-rage-click.ts @@ -1,13 +1,13 @@ -import { AllWindowObservables } from 'src/autocapture-plugin'; -import { filter, map } from 'rxjs'; -import { filterOutNonTrackableEvents, shouldTrackEvent } from '../helpers'; -import { AMPLITUDE_ELEMENT_RAGE_CLICKED_EVENT } from '../constants'; +import { AllWindowObservables } from 'src/frustration-plugin'; import { BrowserClient, + asyncMap, DEFAULT_RAGE_CLICK_THRESHOLD, DEFAULT_RAGE_CLICK_WINDOW_MS, DEFAULT_RAGE_CLICK_OUT_OF_BOUNDS_THRESHOLD, } from '@amplitude/analytics-core'; +import { shouldTrackEvent } from '../helpers'; +import { AMPLITUDE_ELEMENT_RAGE_CLICKED_EVENT } from '../constants'; const RAGE_CLICK_THRESHOLD = DEFAULT_RAGE_CLICK_THRESHOLD; const RAGE_CLICK_WINDOW_MS = DEFAULT_RAGE_CLICK_WINDOW_MS; @@ -42,6 +42,11 @@ type ClickRegionBoundingBox = { isOutOfBounds?: boolean; }; +type RageClickEvent = { + rageClickEvent: EventRageClick; + time: number; +}; + function addCoordinates(regionBox: ClickRegionBoundingBox, click: ClickEvent) { const { clientX, clientY } = click.event as MouseEvent; regionBox.yMin = Math.min(regionBox.yMin ?? clientY, clientY); @@ -54,6 +59,10 @@ function addCoordinates(regionBox: ClickRegionBoundingBox, click: ClickEvent) { } function getRageClickAnalyticsEvent(clickWindow: ClickEvent[]) { + /* istanbul ignore if */ + if (clickWindow.length === 0) { + return null; + } const firstClick = clickWindow[0]; const lastClick = clickWindow[clickWindow.length - 1]; @@ -95,7 +104,13 @@ export function trackRageClicks({ allObservables: AllWindowObservables; shouldTrackRageClick: shouldTrackEvent; }) { - const { clickObservable } = allObservables; + const { clickObservable }: AllWindowObservables = allObservables; + + // TODO: take this out once it becomes a non-optional parameter + /* istanbul ignore if */ + if (!clickObservable) { + return; + } // Keep track of all clicks within the sliding window let clickWindow: ClickEvent[] = []; @@ -103,8 +118,11 @@ export function trackRageClicks({ // Keep track of the region box for all clicks, to determine when a rage click is out of bounds let clickBoundingBox: ClickRegionBoundingBox = {}; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - let triggerRageClickTimeout: any; + let pendingRageClick: { + resolve: (rageClickEvent: RageClickEvent | null) => void; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + timerId: any; + } | null = null; // helper function to reset the click window and region box function resetClickWindow(click?: ClickEvent) { @@ -116,67 +134,67 @@ export function trackRageClicks({ } } - return clickObservable - .pipe( - filter(filterOutNonTrackableEvents), - filter((click) => { - return shouldTrackRageClick('click', click.closestTrackedAncestor); - }), - map((click) => { - // reset the click wait timer if it exists - if (triggerRageClickTimeout) { - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - clearTimeout(triggerRageClickTimeout); - } - - // add click to bounding box - addCoordinates(clickBoundingBox, click); - - // if there's just one click in the window, add it and return - if (clickWindow.length === 0) { - clickWindow.push(click); - return null; - } + const rageClickObservable = asyncMap( + clickObservable.filter((click) => shouldTrackRageClick('click', click.closestTrackedAncestor)), + async (click: ClickEvent): Promise => { + // add this click's coordinates to the bounding box + addCoordinates(clickBoundingBox, click); - // if current click is: - // 1. outside the rage click window - // 2. on a new element - // 3. out of bounds - // then start a new click window - if ( - isNewElement(clickWindow, click) || - isClickOutsideRageClickWindow(clickWindow, click) || - clickBoundingBox.isOutOfBounds - ) { - const returnValue = - clickWindow.length >= RAGE_CLICK_THRESHOLD ? getRageClickAnalyticsEvent(clickWindow) : null; - resetClickWindow(click); - return returnValue; + let resolutionValue: RageClickEvent | null = null; + + // if current click is: + // 1. first click in the window + // 2. on a new element + // 3. outside the rage click time window + // 4. out of bounds + // then start a new click window + if ( + clickWindow.length === 0 || + isNewElement(clickWindow, click) || + isClickOutsideRageClickWindow(clickWindow, click) || + clickBoundingBox.isOutOfBounds + ) { + // if there was a previous Rage Click Event on deck, then send it + if (pendingRageClick) { + resolutionValue = getRageClickAnalyticsEvent(clickWindow); } - // add click to current window + resetClickWindow(click); + } else { clickWindow.push(click); + } - // if we have enough clicks to be a rage click, set a timout to trigger the rage - // click event after the time threshold is reached. - // This will be cancelled if a new click is tracked. - if (clickWindow.length >= RAGE_CLICK_THRESHOLD) { - triggerRageClickTimeout = setTimeout(() => { - const { rageClickEvent, time } = getRageClickAnalyticsEvent(clickWindow); - amplitude.track(AMPLITUDE_ELEMENT_RAGE_CLICKED_EVENT, rageClickEvent, { time }); - resetClickWindow(); - }, RAGE_CLICK_WINDOW_MS); - } + // if there was a previous Rage Click Event on deck, then resolve it + if (pendingRageClick) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + clearTimeout(pendingRageClick.timerId); + pendingRageClick.resolve(resolutionValue); + pendingRageClick = null; + } - return null; - }), - filter((result) => result !== null), - ) - .subscribe((data: { rageClickEvent: EventRageClick; time: number } | null) => { - /* istanbul ignore if */ - if (data === null) { - return; + // if we have enough clicks to be a rage click, set a timout to trigger the rage + // click event after the time threshold is reached. + // This will be cancelled if a new click is tracked within the time threshold. + if (clickWindow.length >= RAGE_CLICK_THRESHOLD) { + return new Promise((resolve) => { + pendingRageClick = { + resolve, + timerId: setTimeout(() => { + resolve(getRageClickAnalyticsEvent(clickWindow)); + }, RAGE_CLICK_WINDOW_MS), + }; + }); } - amplitude.track(AMPLITUDE_ELEMENT_RAGE_CLICKED_EVENT, data.rageClickEvent, { time: data.time }); - }); + + return null; + }, + ); + + return rageClickObservable.subscribe((data: RageClickEvent | null) => { + /* istanbul ignore if */ + if (data === null) { + return; + } + amplitude.track(AMPLITUDE_ELEMENT_RAGE_CLICKED_EVENT, data.rageClickEvent, { time: data.time }); + }); } diff --git a/packages/plugin-autocapture-browser/src/constants.ts b/packages/plugin-autocapture-browser/src/constants.ts index 2aa8e4228..5bea206b8 100644 --- a/packages/plugin-autocapture-browser/src/constants.ts +++ b/packages/plugin-autocapture-browser/src/constants.ts @@ -16,6 +16,7 @@ export const AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_LEFT = '[Amplitude] Element P export const AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_TOP = '[Amplitude] Element Position Top'; export const AMPLITUDE_EVENT_PROP_ELEMENT_ARIA_LABEL = '[Amplitude] Element Aria Label'; export const AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES = '[Amplitude] Element Attributes'; +export const AMPLITUDE_EVENT_PROP_ELEMENT_PATH = '[Amplitude] Element Path'; export const AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL = '[Amplitude] Element Parent Label'; export const AMPLITUDE_EVENT_PROP_PAGE_URL = '[Amplitude] Page URL'; @@ -23,6 +24,8 @@ export const AMPLITUDE_EVENT_PROP_PAGE_TITLE = '[Amplitude] Page Title'; export const AMPLITUDE_EVENT_PROP_VIEWPORT_HEIGHT = '[Amplitude] Viewport Height'; export const AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH = '[Amplitude] Viewport Width'; +export const AMPLITUDE_EVENT_PROP_PAGE_VIEW_ID = '[Amplitude] Page View ID'; + // Visual Tagging related constants export const AMPLITUDE_ORIGIN = 'https://app.amplitude.com'; export const AMPLITUDE_ORIGIN_EU = 'https://app.eu.amplitude.com'; @@ -43,3 +46,6 @@ export const AMPLITUDE_VISUAL_TAGGING_HIGHLIGHT_CLASS = 'amp-visual-tagging-sele export const DATA_AMP_MASK_ATTRIBUTES = 'data-amp-mask-attributes'; export const MAX_MASK_TEXT_PATTERNS = 25; + +// The key for the page view object in sessionStorage +export const PAGE_VIEW_SESSION_STORAGE_KEY = 'AMP_PAGE_VIEW'; diff --git a/packages/plugin-autocapture-browser/src/data-extractor.ts b/packages/plugin-autocapture-browser/src/data-extractor.ts index 10bdb0b49..95900f2b5 100644 --- a/packages/plugin-autocapture-browser/src/data-extractor.ts +++ b/packages/plugin-autocapture-browser/src/data-extractor.ts @@ -23,6 +23,7 @@ import type { BaseTimestampedEvent, ElementBasedTimestampedEvent, TimestampedEve import { getAncestors, getElementProperties } from './hierarchy'; import { getDataSource } from './pageActions/actions'; import { Hierarchy } from './typings/autocapture'; +import { cssPath } from './libs/element-path'; export class DataExtractor { private readonly additionalMaskTextPatterns: RegExp[]; @@ -102,6 +103,7 @@ export class DataExtractor { } const endTime = performance.now(); + /* istanbul ignore next */ this.diagnosticsClient?.recordHistogram('autocapturePlugin.getHierarchy', endTime - startTime); return hierarchy; @@ -126,6 +128,18 @@ export class DataExtractor { return this.getNearestLabel(parent); }; + getElementPath = (element: Element): string => { + const startTime = performance.now(); + + const elementPath = cssPath(element); + + const endTime = performance.now(); + /* istanbul ignore next */ + this.diagnosticsClient?.recordHistogram('autocapturePlugin.getElementPath', endTime - startTime); + + return elementPath; + }; + // Returns the Amplitude event properties for the given element. getEventProperties = (actionType: ActionType, element: Element, dataAttributePrefix: string) => { /* istanbul ignore next */ @@ -147,6 +161,7 @@ export class DataExtractor { [constants.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_LEFT]: rect.left == null ? null : Math.round(rect.left), [constants.AMPLITUDE_EVENT_PROP_ELEMENT_POSITION_TOP]: rect.top == null ? null : Math.round(rect.top), [constants.AMPLITUDE_EVENT_PROP_ELEMENT_ATTRIBUTES]: attributes, + [constants.AMPLITUDE_EVENT_PROP_ELEMENT_PATH]: this.getElementPath(element), [constants.AMPLITUDE_EVENT_PROP_ELEMENT_PARENT_LABEL]: nearestLabel, [constants.AMPLITUDE_EVENT_PROP_PAGE_URL]: getDecodeURI(window.location.href.split('?')[0]), [constants.AMPLITUDE_EVENT_PROP_PAGE_TITLE]: ( @@ -156,6 +171,21 @@ export class DataExtractor { [constants.AMPLITUDE_EVENT_PROP_VIEWPORT_WIDTH]: window.innerWidth, }; + // Attach the current [Amplitude] Page View ID if present in sessionStorage + // TODO: add test for this before merging into main branch! + /* istanbul ignore next */ + try { + const raw = window.sessionStorage?.getItem(constants.PAGE_VIEW_SESSION_STORAGE_KEY); + if (raw) { + const parsed = JSON.parse(raw) as { pageViewId?: string }; + if (typeof parsed.pageViewId === 'string') { + properties[constants.AMPLITUDE_EVENT_PROP_PAGE_VIEW_ID] = parsed.pageViewId; + } + } + } catch { + // ignore storage/JSON errors by not attaching the page view ID + } + // id is never masked, so always include it properties[constants.AMPLITUDE_EVENT_PROP_ELEMENT_ID] = element.getAttribute('id') || ''; diff --git a/packages/plugin-autocapture-browser/src/frustration-plugin.ts b/packages/plugin-autocapture-browser/src/frustration-plugin.ts index ff111ccc8..37f18cb46 100644 --- a/packages/plugin-autocapture-browser/src/frustration-plugin.ts +++ b/packages/plugin-autocapture-browser/src/frustration-plugin.ts @@ -7,23 +7,34 @@ import { DEFAULT_DATA_ATTRIBUTE_PREFIX, DEFAULT_RAGE_CLICK_ALLOWLIST, DEFAULT_DEAD_CLICK_ALLOWLIST, + multicast, + Observable, } from '@amplitude/analytics-core'; import * as constants from './constants'; -import { fromEvent, map, Observable, Subscription, share } from 'rxjs'; -import { createShouldTrackEvent, ElementBasedTimestampedEvent, NavigateEvent } from './helpers'; +import { createShouldTrackEvent, ElementBasedTimestampedEvent, NavigateEvent, TimestampedEvent } from './helpers'; import { trackDeadClick } from './autocapture/track-dead-click'; import { trackRageClicks } from './autocapture/track-rage-click'; -import { AllWindowObservables, ObservablesEnum } from './autocapture-plugin'; -import { createClickObservable, createMutationObservable } from './observables'; +import { ObservablesEnum } from './autocapture-plugin'; +import { createClickObservableZen, createMutationObservableZen } from './observables'; import { DataExtractor } from './data-extractor'; +export interface AllWindowObservables { + [ObservablesEnum.ClickObservable]: Observable>; + [ObservablesEnum.MutationObservable]: Observable>; + [ObservablesEnum.NavigateObservable]?: Observable>; +} + type BrowserEnrichmentPlugin = EnrichmentPlugin; +type Unsubscribable = { + unsubscribe: () => void; +}; + export const frustrationPlugin = (options: FrustrationInteractionsOptions = {}): BrowserEnrichmentPlugin => { const name = constants.FRUSTRATION_PLUGIN_NAME; const type = 'enrichment'; - const subscriptions: Subscription[] = []; + const subscriptions: (Unsubscribable | undefined)[] = []; const rageCssSelectors = options.rageClicks?.cssSelectorAllowlist ?? DEFAULT_RAGE_CLICK_ALLOWLIST; const deadCssSelectors = options.deadClicks?.cssSelectorAllowlist ?? DEFAULT_DEAD_CLICK_ALLOWLIST; @@ -37,9 +48,8 @@ export const frustrationPlugin = (options: FrustrationInteractionsOptions = {}): // Create observables on events on the window const createObservables = (): AllWindowObservables => { - // Create Observables from direct user events - const clickObservable = createClickObservable('pointerdown').pipe( - map((click) => { + const clickObservable = multicast( + createClickObservableZen('pointerdown').map((click) => { return dataExtractor.addAdditionalEventProperties( click, 'click', @@ -48,34 +58,46 @@ export const frustrationPlugin = (options: FrustrationInteractionsOptions = {}): true, // capture when cursor is pointer ); }), - share(), ); - // Create observable for URL changes - let navigateObservable; - /* istanbul ignore next */ + const enrichedMutationObservable = multicast>( + createMutationObservableZen().map((mutation) => + dataExtractor.addAdditionalEventProperties(mutation, 'mutation', combinedCssSelectors, dataAttributePrefix), + ), + ); + + let enrichedNavigateObservable: Observable> | undefined; + if (window.navigation) { - navigateObservable = fromEvent(window.navigation, 'navigate').pipe( - map((navigate) => - dataExtractor.addAdditionalEventProperties(navigate, 'navigate', combinedCssSelectors, dataAttributePrefix), + const navigateObservable = new Observable((observer) => { + const handler = (event: Event): void => { + observer.next({ + ...event, + type: 'navigate', + }); + }; + window.navigation.addEventListener('navigate', handler); + return () => { + window.navigation.removeEventListener('navigate', handler); + }; + }); + enrichedNavigateObservable = multicast>( + navigateObservable.map>( + (navigate) => + dataExtractor.addAdditionalEventProperties( + navigate, + 'navigate', + combinedCssSelectors, + dataAttributePrefix, + ) as TimestampedEvent, ), - share(), ); } - // Track DOM Mutations - const enrichedMutationObservable = createMutationObservable().pipe( - map((mutation) => - dataExtractor.addAdditionalEventProperties(mutation, 'mutation', combinedCssSelectors, dataAttributePrefix), - ), - share(), - ); - return { [ObservablesEnum.ClickObservable]: clickObservable as Observable>, - [ObservablesEnum.ChangeObservable]: new Observable>(), // Empty observable since we don't need change events - [ObservablesEnum.NavigateObservable]: navigateObservable, [ObservablesEnum.MutationObservable]: enrichedMutationObservable, + [ObservablesEnum.NavigateObservable]: enrichedNavigateObservable, }; }; @@ -119,7 +141,9 @@ export const frustrationPlugin = (options: FrustrationInteractionsOptions = {}): const teardown = async () => { for (const subscription of subscriptions) { - subscription.unsubscribe(); + // TODO: This ? will be unnecessary once it's not an optional method + /* istanbul ignore next */ + subscription?.unsubscribe(); } }; diff --git a/packages/plugin-autocapture-browser/src/libs/element-path.ts b/packages/plugin-autocapture-browser/src/libs/element-path.ts new file mode 100644 index 000000000..afdbd9dfa --- /dev/null +++ b/packages/plugin-autocapture-browser/src/libs/element-path.ts @@ -0,0 +1,180 @@ +/* istanbul ignore file */ +// TODO: add test for this before merging into main branch! +// Code is adapted from The Chromium Authors. +// Source: https://github.com/ChromeDevTools/devtools-frontend/blob/main/front_end/panels/elements/DOMPath.ts#L14 +// License: BSD-style license +// +// Copyright 2014 The Chromium Authors +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +class Step { + constructor(public value: string, public optimized: boolean) {} + toString() { + return this.value; + } +} + +export const cssPath = function (node: Element, optimized?: boolean): string { + // `node` is already an Element; this check is defensive. + if (node.nodeType !== Node.ELEMENT_NODE) { + return ''; + } + + const steps: Step[] = []; + let contextNode: Element | null = node; + + while (contextNode) { + const step = cssPathStep(contextNode, Boolean(optimized), contextNode === node); + if (!step) { + break; + } // bail out early + steps.push(step); + if (step.optimized) { + break; + } + contextNode = contextNode.parentElement; + } + + steps.reverse(); + return steps.join(' > '); +}; + +const cssPathStep = function (node: Element, optimized: boolean, isTargetNode: boolean): Step | null { + if (node.nodeType !== Node.ELEMENT_NODE) { + return null; + } + + const id = node.getAttribute('id'); + if (optimized) { + if (id) { + return new Step(idSelector(id), true); + } + + const nodeNameLower = node.tagName.toLowerCase(); + if (nodeNameLower === 'body' || nodeNameLower === 'head' || nodeNameLower === 'html') { + return new Step(nodeNameLower, true); + } + } + + const nodeName = node.tagName.toLowerCase(); + + if (id) { + return new Step(nodeName + idSelector(id), true); + } + + const parent = node.parentNode; + if (!parent || parent.nodeType === Node.DOCUMENT_NODE) { + return new Step(nodeName, true); + } + + function prefixedElementClassNames(el: Element): string[] { + const classAttribute = el.getAttribute('class'); + if (!classAttribute) { + return []; + } + return classAttribute + .split(/\s+/g) + .filter(Boolean) + .map(function (name) { + // The prefix is required to store "__proto__" in a object-based map. + return '$' + name; + }); + } + + function idSelector(id: string): string { + return '#' + CSS.escape(id); + } + + const prefixedOwnClassNamesArray = prefixedElementClassNames(node); + let needsClassNames = false; + let needsNthChild = false; + let ownIndex = -1; + let elementIndex = -1; + + const siblings: HTMLCollectionOf = parent.children; + + for (let i = 0; siblings && (ownIndex === -1 || !needsNthChild) && i < siblings.length; ++i) { + const sibling = siblings[i]; + if (sibling.nodeType !== Node.ELEMENT_NODE) { + continue; + } + + elementIndex += 1; + if (sibling === node) { + ownIndex = elementIndex; + continue; + } + if (needsNthChild) { + continue; + } + + if (sibling.tagName.toLowerCase() !== nodeName) { + continue; + } + + needsClassNames = true; + const ownClassNames = new Set(prefixedOwnClassNamesArray); + if (!ownClassNames.size) { + needsNthChild = true; + continue; + } + + const siblingClassNamesArray = prefixedElementClassNames(sibling); + for (let j = 0; j < siblingClassNamesArray.length; ++j) { + const siblingClass = siblingClassNamesArray[j]; + if (!ownClassNames.has(siblingClass)) { + continue; + } + ownClassNames.delete(siblingClass); + if (!ownClassNames.size) { + needsNthChild = true; + break; + } + } + } + + let result = nodeName; + if ( + isTargetNode && + nodeName.toLowerCase() === 'input' && + node.getAttribute('type') && + !node.getAttribute('id') && + !node.getAttribute('class') + ) { + result += '[type=' + CSS.escape(node.getAttribute('type') || '') + ']'; + } + if (needsNthChild) { + result += ':nth-child(' + String(ownIndex + 1) + ')'; + } else if (needsClassNames) { + for (const prefixedName of prefixedOwnClassNamesArray) { + result += '.' + CSS.escape(prefixedName.slice(1)); + } + } + + return new Step(result, false); +}; diff --git a/packages/plugin-autocapture-browser/src/libs/finder.ts b/packages/plugin-autocapture-browser/src/libs/finder.ts deleted file mode 100644 index 3fec33ded..000000000 --- a/packages/plugin-autocapture-browser/src/libs/finder.ts +++ /dev/null @@ -1,325 +0,0 @@ -/* istanbul ignore file */ - -// License: MIT -// Author: Anton Medvedev -// Source: https://github.com/antonmedv/finder - -type Knot = { - name: string; - penalty: number; - level?: number; -}; - -type Path = Knot[]; - -export type Options = { - root: Element; - idName: (name: string) => boolean; - className: (name: string) => boolean; - tagName: (name: string) => boolean; - attr: (name: string, value: string) => boolean; - seedMinLength: number; - optimizedMinLength: number; - threshold: number; - maxNumberOfTries: number; -}; - -let config: Options; -let rootDocument: Document | Element; - -export function finder(input: Element, options?: Partial) { - if (input.nodeType !== Node.ELEMENT_NODE) { - throw new Error(`Can't generate CSS selector for non-element node type.`); - } - if ('html' === input.tagName.toLowerCase()) { - return 'html'; - } - const defaults: Options = { - root: document.body, - idName: (_name: string) => true, - className: (_name: string) => true, - tagName: (_name: string) => true, - attr: (_name: string, _value: string) => false, - seedMinLength: 1, - optimizedMinLength: 2, - threshold: 1000, - maxNumberOfTries: 10000, - }; - - config = { ...defaults, ...options }; - rootDocument = findRootDocument(config.root, defaults); - - let path = bottomUpSearch(input, 'all', () => - bottomUpSearch(input, 'two', () => bottomUpSearch(input, 'one', () => bottomUpSearch(input, 'none'))), - ); - - if (path) { - const optimized = sort(optimize(path, input)); - if (optimized.length > 0) { - path = optimized[0]; - } - return selector(path); - } else { - throw new Error(`Selector was not found.`); - } -} - -function findRootDocument(rootNode: Element | Document, defaults: Options) { - if (rootNode.nodeType === Node.DOCUMENT_NODE) { - return rootNode; - } - if (rootNode === defaults.root) { - return rootNode.ownerDocument; - } - return rootNode; -} - -function bottomUpSearch( - input: Element, - limit: 'all' | 'two' | 'one' | 'none', - fallback?: () => Path | null, -): Path | null { - let path: Path | null = null; - const stack: Knot[][] = []; - let current: Element | null = input; - let i = 0; - while (current) { - let level: Knot[] = maybe(id(current)) || - maybe(...attr(current)) || - maybe(...classNames(current)) || - maybe(tagName(current)) || [any()]; - const nth = index(current); - if (limit == 'all') { - if (nth) { - level = level.concat(level.filter(dispensableNth).map((node) => nthChild(node, nth))); - } - } else if (limit == 'two') { - level = level.slice(0, 1); - if (nth) { - level = level.concat(level.filter(dispensableNth).map((node) => nthChild(node, nth))); - } - } else if (limit == 'one') { - const [node] = (level = level.slice(0, 1)); - if (nth && dispensableNth(node)) { - level = [nthChild(node, nth)]; - } - } else if (limit == 'none') { - level = [any()]; - if (nth) { - level = [nthChild(level[0], nth)]; - } - } - for (const node of level) { - node.level = i; - } - stack.push(level); - if (stack.length >= config.seedMinLength) { - path = findUniquePath(stack, fallback); - if (path) { - break; - } - } - current = current.parentElement; - i++; - } - if (!path) { - path = findUniquePath(stack, fallback); - } - if (!path && fallback) { - return fallback(); - } - return path; -} - -function findUniquePath(stack: Knot[][], fallback?: () => Path | null): Path | null { - // Check first the total number of combinations first since generating the combinations can cause memory exhaustion - const numCombinations = stack.reduce((acc, i) => acc * i.length, 1); - if (numCombinations > config.threshold) { - return fallback ? fallback() : null; - } - - const paths = sort(combinations(stack)); - for (const candidate of paths) { - if (unique(candidate)) { - return candidate; - } - } - return null; -} - -function selector(path: Path): string { - let node = path[0]; - let query = node.name; - for (let i = 1; i < path.length; i++) { - const level = path[i].level || 0; - if (node.level === level - 1) { - query = `${path[i].name} > ${query}`; - } else { - query = `${path[i].name} ${query}`; - } - node = path[i]; - } - return query; -} - -function penalty(path: Path): number { - return path.map((node) => node.penalty).reduce((acc, i) => acc + i, 0); -} - -function unique(path: Path) { - const css = selector(path); - switch (rootDocument.querySelectorAll(css).length) { - case 0: - throw new Error(`Can't select any node with this selector: ${css}`); - case 1: - return true; - default: - return false; - } -} - -function id(input: Element): Knot | null { - const elementId = input.getAttribute('id'); - if (elementId && config.idName(elementId)) { - return { - name: '#' + CSS.escape(elementId), - penalty: 0, - }; - } - return null; -} - -function attr(input: Element): Knot[] { - const attrs = Array.from(input.attributes).filter((attr) => config.attr(attr.name, attr.value)); - return attrs.map( - (attr): Knot => ({ - name: `[${CSS.escape(attr.name)}="${CSS.escape(attr.value)}"]`, - penalty: 0.5, - }), - ); -} - -function classNames(input: Element): Knot[] { - const names = Array.from(input.classList).filter(config.className); - return names.map( - (name): Knot => ({ - name: '.' + CSS.escape(name), - penalty: 1, - }), - ); -} - -function tagName(input: Element): Knot | null { - const name = input.tagName.toLowerCase(); - if (config.tagName(name)) { - return { - name, - penalty: 2, - }; - } - return null; -} - -function any(): Knot { - return { - name: '*', - penalty: 3, - }; -} - -function index(input: Element): number | null { - const parent = input.parentNode; - if (!parent) { - return null; - } - let child = parent.firstChild; - if (!child) { - return null; - } - let i = 0; - while (child) { - if (child.nodeType === Node.ELEMENT_NODE) { - i++; - } - if (child === input) { - break; - } - child = child.nextSibling; - } - return i; -} - -function nthChild(node: Knot, i: number): Knot { - return { - name: node.name + `:nth-child(${i})`, - penalty: node.penalty + 1, - }; -} - -function dispensableNth(node: Knot) { - return node.name !== 'html' && !node.name.startsWith('#'); -} - -function maybe(...level: (Knot | null)[]): Knot[] | null { - const list = level.filter(notEmpty); - if (list.length > 0) { - return list; - } - return null; -} - -function notEmpty(value: T | null | undefined): value is T { - return value !== null && value !== undefined; -} - -function* combinations(stack: Knot[][], path: Knot[] = []): Generator { - if (stack.length > 0) { - for (const node of stack[0]) { - yield* combinations(stack.slice(1, stack.length), path.concat(node)); - } - } else { - yield path; - } -} - -function sort(paths: Iterable): Path[] { - return [...paths].sort((a, b) => penalty(a) - penalty(b)); -} - -type Scope = { - counter: number; - visited: Map; -}; - -function* optimize( - path: Path, - input: Element, - scope: Scope = { - counter: 0, - visited: new Map(), - }, -): Generator { - if (path.length > 2 && path.length > config.optimizedMinLength) { - for (let i = 1; i < path.length - 1; i++) { - if (scope.counter > config.maxNumberOfTries) { - return; // Okay At least I tried! - } - scope.counter += 1; - const newPath = [...path]; - newPath.splice(i, 1); - const newPathKey = selector(newPath); - if (scope.visited.has(newPathKey)) { - return; - } - if (unique(newPath) && same(newPath, input)) { - yield newPath; - scope.visited.set(newPathKey, true); - yield* optimize(newPath, input, scope); - } - } - } -} - -function same(path: Path, input: Element) { - return rootDocument.querySelector(selector(path)) === input; -} diff --git a/packages/plugin-autocapture-browser/src/observables.ts b/packages/plugin-autocapture-browser/src/observables.ts index 816b09a80..281f58d04 100644 --- a/packages/plugin-autocapture-browser/src/observables.ts +++ b/packages/plugin-autocapture-browser/src/observables.ts @@ -1,29 +1,41 @@ -import { Observable, fromEvent } from 'rxjs'; +import { Observable as ZenObservable, getGlobalScope } from '@amplitude/analytics-core'; -/** - * Creates an observable that tracks DOM mutations on the document body. - */ -export const createMutationObservable = (): Observable => { - return new Observable((observer) => { +export const createMutationObservableZen = (): ZenObservable => { + return new ZenObservable((observer) => { const mutationObserver = new MutationObserver((mutations) => { observer.next(mutations); }); - mutationObserver.observe(document.body, { - childList: true, - attributes: true, - characterData: true, - subtree: true, - }); + if (document.body) { + mutationObserver.observe(document.body, { + childList: true, + attributes: true, + characterData: true, + subtree: true, + }); + } return () => mutationObserver.disconnect(); }); }; /** * Creates an observable that tracks click events on the document. + * TODO: This should eventually be renamed to just "createClickObservable" and replace RxJS version * @param clickType - The type of click event to track (click or pointerdown) */ -export const createClickObservable = ( +// TODO: once we're ready for ZenObservable, remove this ignore and add tests +/* istanbul ignore next */ +export const createClickObservableZen = ( clickType: 'click' | 'pointerdown' = 'click', -): Observable => { - return fromEvent(document, clickType, { capture: true }); +): ZenObservable => { + return new ZenObservable((observer) => { + const handler = (event: MouseEvent | PointerEvent) => { + observer.next(event); + }; + /* istanbul ignore next */ + getGlobalScope()?.document.addEventListener(clickType, handler, { capture: true }); + return () => { + /* istanbul ignore next */ + getGlobalScope()?.document.removeEventListener(clickType, handler, { capture: true }); + }; + }); }; diff --git a/packages/plugin-autocapture-browser/src/version.ts b/packages/plugin-autocapture-browser/src/version.ts index bf79dd0b4..f2667cf7c 100644 --- a/packages/plugin-autocapture-browser/src/version.ts +++ b/packages/plugin-autocapture-browser/src/version.ts @@ -1 +1 @@ -export const VERSION = '1.17.1'; +export const VERSION = '1.18.0-zen-plus-zoning.2'; diff --git a/packages/plugin-autocapture-browser/test/autocapture-plugin/actions.test.ts b/packages/plugin-autocapture-browser/test/autocapture-plugin/actions.test.ts index 3ef75ebac..7a14f27de 100644 --- a/packages/plugin-autocapture-browser/test/autocapture-plugin/actions.test.ts +++ b/packages/plugin-autocapture-browser/test/autocapture-plugin/actions.test.ts @@ -2,13 +2,14 @@ import { autocapturePlugin } from '../../src/autocapture-plugin'; import { type ElementBasedTimestampedEvent } from '../../src/helpers'; import { - BrowserConfig, - EnrichmentPlugin, - ILogger, ElementInteractionsOptions, LabeledEvent, Trigger, DataSource, + BrowserConfig, + EnrichmentPlugin, + ILogger, + IConfig, } from '@amplitude/analytics-core'; import { createInstance } from '@amplitude/analytics-browser'; import { getDataSource, executeActions } from '../../src/pageActions/actions'; @@ -191,7 +192,7 @@ describe('page actions', () => { }; plugin = autocapturePlugin(autocaptureConfig); - await plugin?.setup?.(config as BrowserConfig, instance); + await plugin?.setup?.(config as IConfig, instance); const button1 = document.querySelector('#product-card-1 .add-to-cart-button'); @@ -246,7 +247,7 @@ describe('page actions', () => { }; plugin = autocapturePlugin(autocaptureConfig); - await plugin?.setup?.(config as BrowserConfig, instance); + await plugin?.setup?.(config as IConfig, instance); const button3 = document.querySelector('#product-card-3 .add-to-cart-button'); @@ -278,7 +279,7 @@ describe('page actions', () => { }; plugin = autocapturePlugin(autocaptureConfig); - await plugin?.setup?.(config as BrowserConfig, instance); + await plugin?.setup?.(config as IConfig, instance); const button1 = document.querySelector('#product-card-1 .add-to-cart-button'); diff --git a/packages/plugin-autocapture-browser/test/autocapture-plugin/frustration-plugin.test.ts b/packages/plugin-autocapture-browser/test/autocapture-plugin/frustration-plugin.test.ts index 4b6b7df37..1b08d4e84 100644 --- a/packages/plugin-autocapture-browser/test/autocapture-plugin/frustration-plugin.test.ts +++ b/packages/plugin-autocapture-browser/test/autocapture-plugin/frustration-plugin.test.ts @@ -13,12 +13,10 @@ import { trackRageClicks } from '../../src/autocapture/track-rage-click'; // Mock the tracking functions jest.mock('../../src/autocapture/track-dead-click', () => ({ trackDeadClick: jest.fn(), - _overrideDeadClickConfig: jest.fn(), })); jest.mock('../../src/autocapture/track-rage-click', () => ({ trackRageClicks: jest.fn(), - _overrideRageClickConfig: jest.fn(), })); describe('frustrationPlugin', () => { @@ -36,6 +34,26 @@ describe('frustrationPlugin', () => { }; beforeEach(() => { + // mock window.navigation + (window.navigation as any) = { + _handlers: [], + addEventListener: function (type: string, listener: () => void) { + if (type === 'navigate') { + this._handlers.push(listener); + } + }, + removeEventListener: function (type: string, listener: () => void) { + if (type === 'navigate') { + this._handlers = this._handlers.filter((l: () => void) => l !== listener); + } + }, + dispatchEvent: function (event: Event) { + if (event.type === 'navigate') { + this._handlers.forEach((handler: () => void) => handler()); + } + }, + }; + instance = createMockBrowserClient(); // mock window.PointerEvent because it's not available in jsdom @@ -238,7 +256,6 @@ describe('frustrationPlugin', () => { expect(observables).toHaveProperty('clickObservable'); expect(observables).toHaveProperty('mutationObservable'); expect(observables).toHaveProperty('navigateObservable'); - expect(observables).toHaveProperty('changeObservable'); // Test click observable const clickSpy = jest.fn(); @@ -287,5 +304,30 @@ describe('frustrationPlugin', () => { mutationSubscription.unsubscribe(); document.body.removeChild(container); }); + + it('should create navigate observable', async () => { + plugin = frustrationPlugin({}); + await plugin?.setup?.(config as BrowserConfig, instance); + const rageClickCall = (trackRageClicks as jest.Mock).mock.calls[0][0]; + const observables = rageClickCall.allObservables; + + expect(observables).toHaveProperty('navigateObservable'); + + // Create and trigger a mock navigate event + const navigateSpy = jest.fn(); + const subscription = observables.navigateObservable.subscribe(navigateSpy); + + // Trigger a mock navigate event + (window.navigation as any).dispatchEvent(new Event('navigate')); + + // Verify that the navigate event was captured + expect(navigateSpy).toHaveBeenCalled(); + + // Cleanup + subscription.unsubscribe(); + + // expect no event listeners left on window.navigation + expect((window.navigation as any)._handlers.length).toBe(0); + }); }); }); diff --git a/packages/plugin-autocapture-browser/test/autocapture-plugin/track-action-clicks.test.ts b/packages/plugin-autocapture-browser/test/autocapture-plugin/track-action-clicks.test.ts index a15bdb0b7..aa2a770df 100644 --- a/packages/plugin-autocapture-browser/test/autocapture-plugin/track-action-clicks.test.ts +++ b/packages/plugin-autocapture-browser/test/autocapture-plugin/track-action-clicks.test.ts @@ -174,6 +174,7 @@ describe('action clicks:', () => { }, ], '[Amplitude] Element ID': 'addDivButton', + '[Amplitude] Element Path': 'div#addDivButton', '[Amplitude] Element Parent Label': 'Card Title', '[Amplitude] Element Position Left': 0, '[Amplitude] Element Position Top': 0, @@ -278,18 +279,46 @@ describe('action clicks:', () => { }); // Readd when jsdom has support for navigate events - // test('should track div click if it causes a navigation (popstate) change', async () => { - // await plugin?.setup(config as BrowserConfig, instance); + describe('navigation events', () => { + beforeEach(() => { + (window.navigation as any) = { + _handlers: [], + addEventListener: function (type: string, listener: () => void) { + if (type === 'navigate') { + this._handlers.push(listener); + } + }, + removeEventListener: function (type: string, listener: () => void) { + if (type === 'navigate') { + this._handlers = this._handlers.filter((l: () => void) => l !== listener); + } + }, + dispatchEvent: function (event: Event) { + if (event.type === 'navigate') { + this._handlers.forEach((handler: () => void) => handler()); + } + }, + }; + }); + + afterEach(() => { + (window.navigation as any) = undefined; + }); - // // Set initial window location - // window.location.href = 'https://www.test.com/query'; + test('should track div click if it causes a navigation (popstate) change', async () => { + await plugin?.setup?.(config as BrowserConfig, instance); + + // Set initial window location + window.location.href = 'https://www.test.com/query'; - // // trigger click event on div which is acting as a button - // document.getElementById('go-back-button')?.dispatchEvent(new Event('click')); - // await new Promise((r) => setTimeout(r, TESTING_DEBOUNCE_TIME + 503)); + // trigger click event on div which is acting as a button + document.getElementById('go-back-button')?.dispatchEvent(new Event('click')); + (window.navigation as any).dispatchEvent(new Event('navigate')); + await new Promise((r) => setTimeout(r, TESTING_DEBOUNCE_TIME + 503)); - // expect(track).toHaveBeenCalledTimes(1); - // expect(track).toHaveBeenNthCalledWith(1, '[Amplitude] Element Clicked', {}); - // }); + expect(track).toHaveBeenCalledTimes(1); + expect(track).toHaveBeenNthCalledWith(1, '[Amplitude] Element Clicked', expect.objectContaining({})); + }); + }); }); }); diff --git a/packages/plugin-autocapture-browser/test/autocapture-plugin/track-dead-click.test.ts b/packages/plugin-autocapture-browser/test/autocapture-plugin/track-dead-click.test.ts index 42a8e1028..18aecb4dd 100644 --- a/packages/plugin-autocapture-browser/test/autocapture-plugin/track-dead-click.test.ts +++ b/packages/plugin-autocapture-browser/test/autocapture-plugin/track-dead-click.test.ts @@ -1,39 +1,42 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/unbound-method */ -import { Subject } from 'rxjs'; -import { _overrideDeadClickConfig, trackDeadClick } from '../../src/autocapture/track-dead-click'; +import { BrowserClient, Observable } from '@amplitude/analytics-core'; +import { trackDeadClick } from '../../src/autocapture/track-dead-click'; import { AMPLITUDE_ELEMENT_DEAD_CLICKED_EVENT } from '../../src/constants'; -import { AllWindowObservables, ObservablesEnum } from '../../src/autocapture-plugin'; -import { BrowserClient, DEFAULT_DEAD_CLICK_WINDOW_MS } from '@amplitude/analytics-core'; +import { ObservablesEnum } from '../../src/autocapture-plugin'; +import { AllWindowObservables } from '../../src/frustration-plugin'; describe('trackDeadClick', () => { let mockAmplitude: jest.Mocked; - let clickObservable: Subject; - let mutationObservable: Subject; - let navigateObservable: Subject; + let clickObservableZen: any; + let mutationObservableZen: any; + let navigateObservableZen: any; let allObservables: AllWindowObservables; let shouldTrackDeadClick: jest.Mock; let getEventProperties: jest.Mock; - - beforeAll(() => { - // reduce the dead click timeout to 5ms to speed up the test - _overrideDeadClickConfig(5); - }); + let clickObserver: any; + let mutationObserver: any; + let navigateObserver: any; beforeEach(() => { mockAmplitude = { track: jest.fn(), } as any; - clickObservable = new Subject(); - mutationObservable = new Subject(); - navigateObservable = new Subject(); + clickObservableZen = new Observable((observer) => { + clickObserver = observer; + }); + mutationObservableZen = new Observable((observer) => { + mutationObserver = observer; + }); + navigateObservableZen = new Observable((observer) => { + navigateObserver = observer; + }); allObservables = { - [ObservablesEnum.ClickObservable]: clickObservable, - [ObservablesEnum.ChangeObservable]: new Subject(), - [ObservablesEnum.NavigateObservable]: navigateObservable, - [ObservablesEnum.MutationObservable]: mutationObservable, + [ObservablesEnum.ClickObservable]: clickObservableZen, + [ObservablesEnum.MutationObservable]: mutationObservableZen, + [ObservablesEnum.NavigateObservable]: navigateObservableZen, }; shouldTrackDeadClick = jest.fn().mockReturnValue(true); getEventProperties = jest.fn().mockReturnValue({ id: 'test-element' }); @@ -45,7 +48,7 @@ describe('trackDeadClick', () => { jest.clearAllMocks(); }); - it('should track dead click when no mutation or navigation occurs', () => { + it('should track dead click when no mutation or navigation occurs', async () => { const subscription = trackDeadClick({ amplitude: mockAmplitude, allObservables, @@ -57,7 +60,7 @@ describe('trackDeadClick', () => { const mockElement = document.createElement('div'); // Simulate a click - clickObservable.next({ + clickObserver.next({ event: { target: mockElement, clientX: 100, @@ -66,10 +69,11 @@ describe('trackDeadClick', () => { timestamp: Date.now(), closestTrackedAncestor: mockElement, targetElementProperties: { id: 'test-element' }, + type: 'click', }); // Wait for the dead click timeout - jest.advanceTimersByTime(DEFAULT_DEAD_CLICK_WINDOW_MS + 1000); + await jest.runAllTimersAsync(); expect(mockAmplitude.track).toHaveBeenCalledWith( AMPLITUDE_ELEMENT_DEAD_CLICKED_EVENT, expect.objectContaining({ @@ -79,10 +83,13 @@ describe('trackDeadClick', () => { }), expect.any(Object), ); - subscription.unsubscribe(); + + subscription?.unsubscribe(); + mutationObserver.complete(); + navigateObserver.complete(); }); - it('should not track when mutation occurs after click', () => { + it('should not track when mutation occurs after click', async () => { const subscription = trackDeadClick({ amplitude: mockAmplitude, allObservables, @@ -94,7 +101,7 @@ describe('trackDeadClick', () => { const mockElement = document.createElement('button'); // Simulate a click - clickObservable.next({ + clickObserver.next({ event: { target: mockElement, clientX: 100, @@ -106,15 +113,15 @@ describe('trackDeadClick', () => { }); // Simulate a mutation shortly after - mutationObservable.next([{ type: 'childList' }]); - jest.runAllTimers(); + mutationObserver.next([{ type: 'childList' }]); + await jest.runAllTimersAsync(); // Wait for the dead click timeout expect(mockAmplitude.track).not.toHaveBeenCalled(); - subscription.unsubscribe(); + subscription?.unsubscribe(); }); - it('should not track when navigation occurs after click', () => { + it('should not track when navigation occurs after click', async () => { const subscription = trackDeadClick({ amplitude: mockAmplitude, allObservables, @@ -126,7 +133,7 @@ describe('trackDeadClick', () => { const mockElement = document.createElement('div'); // Simulate a click - clickObservable.next({ + clickObserver.next({ event: { target: mockElement, clientX: 100, @@ -135,20 +142,19 @@ describe('trackDeadClick', () => { timestamp: Date.now(), closestTrackedAncestor: mockElement, targetElementProperties: { id: 'test-element' }, + type: 'click', }); // Simulate a navigation shortly after - jest.advanceTimersByTime(1); - navigateObservable.next({ type: 'navigate' }); - jest.runAllTimers(); - jest.advanceTimersByTime(DEFAULT_DEAD_CLICK_WINDOW_MS + 1000); + navigateObserver.next({ type: 'navigate' }); + await jest.runAllTimersAsync(); // Wait for the dead click timeout expect(mockAmplitude.track).not.toHaveBeenCalled(); - subscription.unsubscribe(); + subscription?.unsubscribe(); }); - it('should not track elements that are not in the allowed list', () => { + it('should not track elements that are not in the allowed list', async () => { shouldTrackDeadClick.mockReturnValue(false); const subscription = trackDeadClick({ @@ -161,7 +167,7 @@ describe('trackDeadClick', () => { const mockElement = document.createElement('div'); // Simulate a click - clickObservable.next({ + clickObserver.next({ event: { target: mockElement, clientX: 100, @@ -173,12 +179,12 @@ describe('trackDeadClick', () => { }); // Wait for the dead click timeout - jest.advanceTimersByTime(DEFAULT_DEAD_CLICK_WINDOW_MS + 1000); + await jest.runAllTimersAsync(); expect(mockAmplitude.track).not.toHaveBeenCalled(); - subscription.unsubscribe(); + subscription?.unsubscribe(); }); - it('should not track when target is _blank', () => { + it('should not track when target is _blank', async () => { const subscription = trackDeadClick({ amplitude: mockAmplitude, allObservables, @@ -189,7 +195,7 @@ describe('trackDeadClick', () => { const mockElement = document.createElement('a'); mockElement.setAttribute('target', '_blank'); - clickObservable.next({ + clickObserver.next({ event: { target: mockElement, }, @@ -199,13 +205,13 @@ describe('trackDeadClick', () => { }); // Wait for the dead click timeout - jest.advanceTimersByTime(DEFAULT_DEAD_CLICK_WINDOW_MS + 1000); + await jest.runAllTimersAsync(); expect(mockAmplitude.track).not.toHaveBeenCalled(); - subscription.unsubscribe(); + subscription?.unsubscribe(); }); - it('should throttle multiple dead clicks', () => { - const subscription = trackDeadClick({ + it('should throttle multiple dead clicks', async () => { + trackDeadClick({ amplitude: mockAmplitude, allObservables, getEventProperties, @@ -217,7 +223,7 @@ describe('trackDeadClick', () => { // Simulate multiple clicks for (let i = 0; i < 3; i++) { jest.advanceTimersByTime(i); - clickObservable.next({ + clickObserver.next({ event: { target: mockElement, clientX: 100, @@ -226,12 +232,12 @@ describe('trackDeadClick', () => { timestamp: Date.now(), closestTrackedAncestor: mockElement, targetElementProperties: { id: 'test-element' }, + type: 'click', }); } // Wait for the dead click timeout plus some extra time for all clicks - jest.advanceTimersByTime(100); + await jest.runAllTimersAsync(); expect(mockAmplitude.track).toHaveBeenCalledTimes(1); // Only one dead click should be tracked - subscription.unsubscribe(); }); }); diff --git a/packages/plugin-autocapture-browser/test/autocapture-plugin/track-rage-click.test.ts b/packages/plugin-autocapture-browser/test/autocapture-plugin/track-rage-click.test.ts index 10f4c4406..4a5ea9671 100644 --- a/packages/plugin-autocapture-browser/test/autocapture-plugin/track-rage-click.test.ts +++ b/packages/plugin-autocapture-browser/test/autocapture-plugin/track-rage-click.test.ts @@ -1,30 +1,37 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/unbound-method */ - -import { Subject } from 'rxjs'; +/* eslint-disable @typescript-eslint/no-empty-function */ +import { + BrowserClient, + DEFAULT_RAGE_CLICK_THRESHOLD, + DEFAULT_RAGE_CLICK_WINDOW_MS, + Observable, +} from '@amplitude/analytics-core'; import { trackRageClicks } from '../../src/autocapture/track-rage-click'; import { AMPLITUDE_ELEMENT_RAGE_CLICKED_EVENT } from '../../src/constants'; -import { AllWindowObservables, ObservablesEnum } from '../../src/autocapture-plugin'; -import { BrowserClient, DEFAULT_RAGE_CLICK_THRESHOLD, DEFAULT_RAGE_CLICK_WINDOW_MS } from '@amplitude/analytics-core'; +import { ObservablesEnum } from '../../src/autocapture-plugin'; +import { AllWindowObservables } from '../../src/frustration-plugin'; describe('trackRageClicks', () => { let mockAmplitude: jest.Mocked; - let clickObservable: Subject; + let clickObservable: Observable; let allObservables: AllWindowObservables; let shouldTrackRageClick: jest.Mock; + let clickObserver: any; beforeEach(() => { jest.useFakeTimers(); mockAmplitude = { track: jest.fn(), } as any; + clickObservable = new Observable((observer) => { + clickObserver = observer; + }); - clickObservable = new Subject(); allObservables = { [ObservablesEnum.ClickObservable]: clickObservable, - [ObservablesEnum.ChangeObservable]: new Subject(), - [ObservablesEnum.NavigateObservable]: new Subject(), - [ObservablesEnum.MutationObservable]: new Subject(), + [ObservablesEnum.NavigateObservable]: new Observable(() => {}), + [ObservablesEnum.MutationObservable]: new Observable(() => {}), }; shouldTrackRageClick = jest.fn().mockReturnValue(true); }); @@ -34,7 +41,7 @@ describe('trackRageClicks', () => { jest.useRealTimers(); }); - it('should track rage clicks when threshold is met', () => { + it('should track rage clicks when threshold is met', async () => { const subscription = trackRageClicks({ amplitude: mockAmplitude, allObservables, @@ -48,7 +55,7 @@ describe('trackRageClicks', () => { const startTime = Date.now(); // First click - clickObservable.next({ + clickObserver.next({ event: { target: mockElement, clientX: 100, @@ -61,7 +68,7 @@ describe('trackRageClicks', () => { // Add clicks that exceed the time window for (let i = 1; i < DEFAULT_RAGE_CLICK_THRESHOLD + 1; i++) { - clickObservable.next({ + clickObserver.next({ event: { target: mockElement, clientX: 100, @@ -74,7 +81,7 @@ describe('trackRageClicks', () => { } // Advance timers to trigger the event processing - jest.advanceTimersByTime(DEFAULT_RAGE_CLICK_WINDOW_MS + 100); // Short wait since we're triggering immediate detection + await jest.runAllTimersAsync(); expect(mockAmplitude.track).toHaveBeenCalledWith( AMPLITUDE_ELEMENT_RAGE_CLICKED_EVENT, @@ -90,10 +97,10 @@ describe('trackRageClicks', () => { }), expect.any(Object), ); - subscription.unsubscribe(); + subscription?.unsubscribe(); }); - it('should track rage clicks via timer when threshold is met within time window', () => { + it('should track rage clicks via timer when threshold is met within time window', async () => { const subscription = trackRageClicks({ amplitude: mockAmplitude, allObservables, @@ -106,7 +113,7 @@ describe('trackRageClicks', () => { // Simulate clicks within the time window to trigger timer-based rage click detection const startTime = Date.now(); for (let i = 0; i < DEFAULT_RAGE_CLICK_THRESHOLD; i++) { - clickObservable.next({ + clickObserver.next({ event: { target: mockElement, clientX: 100, @@ -119,7 +126,7 @@ describe('trackRageClicks', () => { } // Advance timers to complete the timer and call amplitude.track directly - jest.advanceTimersByTime(DEFAULT_RAGE_CLICK_WINDOW_MS + 100); // Wait for the timer to complete + await jest.runAllTimersAsync(); expect(mockAmplitude.track).toHaveBeenCalledWith( AMPLITUDE_ELEMENT_RAGE_CLICKED_EVENT, @@ -135,10 +142,10 @@ describe('trackRageClicks', () => { }), expect.any(Object), ); - subscription.unsubscribe(); + subscription?.unsubscribe(); }); - it('should track if clicks exceed threshold but first click is outside the rage click window', () => { + it('should track if clicks exceed threshold but first click is outside the rage click window', async () => { const subscription = trackRageClicks({ amplitude: mockAmplitude, allObservables, @@ -150,7 +157,7 @@ describe('trackRageClicks', () => { // Simulate clicks where the first click is outside the rage click window const startTime = Date.now(); - clickObservable.next({ + clickObserver.next({ event: { target: mockElement, clientX: 100, @@ -163,7 +170,7 @@ describe('trackRageClicks', () => { // Add clicks within the rage click window for (let i = 0; i < DEFAULT_RAGE_CLICK_THRESHOLD; i++) { - clickObservable.next({ + clickObserver.next({ event: { target: mockElement, clientX: 100, @@ -175,10 +182,10 @@ describe('trackRageClicks', () => { }); } - jest.advanceTimersByTime(DEFAULT_RAGE_CLICK_WINDOW_MS + 100); + await jest.runAllTimersAsync(); expect(mockAmplitude.track).toHaveBeenCalledTimes(1); - subscription.unsubscribe(); + subscription?.unsubscribe(); }); it('should not track when clicks are below threshold', () => { @@ -194,7 +201,7 @@ describe('trackRageClicks', () => { // Simulate only 3 clicks (below threshold of 4) const startTime = Date.now(); for (let i = 0; i < DEFAULT_RAGE_CLICK_THRESHOLD - 1; i++) { - clickObservable.next({ + clickObserver.next({ event: { target: mockElement, clientX: 100, @@ -209,7 +216,7 @@ describe('trackRageClicks', () => { jest.advanceTimersByTime(DEFAULT_RAGE_CLICK_WINDOW_MS + 100); expect(mockAmplitude.track).not.toHaveBeenCalled(); - subscription.unsubscribe(); + subscription?.unsubscribe(); }); it('should not track when clicks are on different elements', () => { @@ -226,7 +233,7 @@ describe('trackRageClicks', () => { // Simulate clicks alternating between elements const startTime = Date.now(); for (let i = 0; i < DEFAULT_RAGE_CLICK_THRESHOLD * 2; i++) { - clickObservable.next({ + clickObserver.next({ event: { target: i % 2 === 0 ? mockElement1 : mockElement2, clientX: 100, @@ -241,7 +248,7 @@ describe('trackRageClicks', () => { jest.advanceTimersByTime(DEFAULT_RAGE_CLICK_WINDOW_MS + 100); expect(mockAmplitude.track).not.toHaveBeenCalled(); - subscription.unsubscribe(); + subscription?.unsubscribe(); }); it('should not track untracked elements', () => { @@ -259,7 +266,7 @@ describe('trackRageClicks', () => { // Simulate 4 rapid clicks (threshold) const startTime = Date.now(); for (let i = 0; i < DEFAULT_RAGE_CLICK_THRESHOLD; i++) { - clickObservable.next({ + clickObserver.next({ event: { target: mockElement, clientX: 100, @@ -274,10 +281,10 @@ describe('trackRageClicks', () => { jest.advanceTimersByTime(DEFAULT_RAGE_CLICK_WINDOW_MS + 100); expect(mockAmplitude.track).not.toHaveBeenCalled(); - subscription.unsubscribe(); + subscription?.unsubscribe(); }); - it('should handle clicks that exceed the time window correctly', () => { + it('should handle clicks that exceed the time window correctly', async () => { const subscription = trackRageClicks({ amplitude: mockAmplitude, allObservables, @@ -292,7 +299,7 @@ describe('trackRageClicks', () => { // First set of clicks within the window for (let i = 0; i < DEFAULT_RAGE_CLICK_THRESHOLD; i++) { - clickObservable.next({ + clickObserver.next({ event: { target: mockElement, clientX: 100, @@ -304,8 +311,10 @@ describe('trackRageClicks', () => { }); } + await jest.runAllTimersAsync(); + // Add a click that exceeds the time window - clickObservable.next({ + clickObserver.next({ event: { target: mockElement, clientX: 100, @@ -316,14 +325,14 @@ describe('trackRageClicks', () => { targetElementProperties: { id: 'test-element' }, }); - jest.advanceTimersByTime(DEFAULT_RAGE_CLICK_WINDOW_MS + 200); + await jest.runAllTimersAsync(); // Should track the first rage click event expect(mockAmplitude.track).toHaveBeenCalledTimes(1); - subscription.unsubscribe(); + subscription?.unsubscribe(); }); - it('should trigger rage click when switching to different element with enough previous clicks', () => { + it('should trigger rage click when switching to different element with enough previous clicks', async () => { const subscription = trackRageClicks({ amplitude: mockAmplitude, allObservables, @@ -338,7 +347,7 @@ describe('trackRageClicks', () => { // Simulate enough clicks on the first element to meet threshold for (let i = 0; i < DEFAULT_RAGE_CLICK_THRESHOLD; i++) { - clickObservable.next({ + clickObserver.next({ event: { target: mockElement1, clientX: 100, @@ -350,8 +359,10 @@ describe('trackRageClicks', () => { }); } + await jest.runAllTimersAsync(); + // Now click on a different element - this should trigger rage click for the previous element - clickObservable.next({ + clickObserver.next({ event: { target: mockElement2, clientX: 200, @@ -362,7 +373,7 @@ describe('trackRageClicks', () => { targetElementProperties: { id: 'test-element-2' }, }); - jest.advanceTimersByTime(100); + await jest.runAllTimersAsync(); // Should track the rage click event for the first element expect(mockAmplitude.track).toHaveBeenCalledWith( @@ -379,7 +390,7 @@ describe('trackRageClicks', () => { }), expect.any(Object), ); - subscription.unsubscribe(); + subscription?.unsubscribe(); }); it('should not trigger rage click when switching to different element without enough previous clicks', () => { @@ -397,7 +408,7 @@ describe('trackRageClicks', () => { // Simulate clicks on the first element but not enough to meet threshold for (let i = 0; i < DEFAULT_RAGE_CLICK_THRESHOLD - 1; i++) { - clickObservable.next({ + clickObserver.next({ event: { target: mockElement1, clientX: 100, @@ -410,7 +421,7 @@ describe('trackRageClicks', () => { } // Now click on a different element - this should NOT trigger rage click - clickObservable.next({ + clickObserver.next({ event: { target: mockElement2, clientX: 200, @@ -425,7 +436,7 @@ describe('trackRageClicks', () => { // Should NOT track any rage click event expect(mockAmplitude.track).not.toHaveBeenCalled(); - subscription.unsubscribe(); + subscription?.unsubscribe(); }); it('should not track rage clicks when threshold is met but clicks are out of bounds', () => { @@ -442,7 +453,7 @@ describe('trackRageClicks', () => { const startTime = Date.now(); // First click - clickObservable.next({ + clickObserver.next({ event: { target: mockElement, clientX: 100, @@ -455,7 +466,7 @@ describe('trackRageClicks', () => { // Add clicks that exceed the time window for (let i = 0; i < DEFAULT_RAGE_CLICK_THRESHOLD; i++) { - clickObservable.next({ + clickObserver.next({ event: { target: mockElement, clientX: i === DEFAULT_RAGE_CLICK_THRESHOLD - 1 ? 1000 : 100, @@ -471,6 +482,43 @@ describe('trackRageClicks', () => { jest.advanceTimersByTime(DEFAULT_RAGE_CLICK_WINDOW_MS + 100); // Short wait since we're triggering immediate detection expect(mockAmplitude.track).not.toHaveBeenCalled(); - subscription.unsubscribe(); + subscription?.unsubscribe(); + }); + + it('should track rage clicks when threshold is met and next click is out of bounds', async () => { + const subscription = trackRageClicks({ + amplitude: mockAmplitude, + allObservables, + shouldTrackRageClick, + }); + + // Create a mock element + const mockElement = document.createElement('div'); + const startTime = Date.now(); + for (let i = 0; i < DEFAULT_RAGE_CLICK_THRESHOLD; i++) { + clickObserver.next({ + event: { + target: mockElement, + clientX: 100, + clientY: 100, + }, + timestamp: startTime, + closestTrackedAncestor: mockElement, + targetElementProperties: { id: 'test-element' }, + }); + } + clickObserver.next({ + event: { + target: mockElement, + clientX: 1000, + clientY: 1000, + }, + timestamp: startTime, + closestTrackedAncestor: mockElement, + targetElementProperties: { id: 'test-element' }, + }); + await jest.runAllTimersAsync(); + expect(mockAmplitude.track).toHaveBeenCalledTimes(1); + subscription?.unsubscribe(); }); }); diff --git a/packages/plugin-autocapture-browser/test/default-event-tracking-advanced.test.ts b/packages/plugin-autocapture-browser/test/default-event-tracking-advanced.test.ts index 27ec772b4..81c802673 100644 --- a/packages/plugin-autocapture-browser/test/default-event-tracking-advanced.test.ts +++ b/packages/plugin-autocapture-browser/test/default-event-tracking-advanced.test.ts @@ -215,6 +215,7 @@ describe('autoTrackingPlugin', () => { ], '[Amplitude] Element Href': 'https://www.amplitude.com/click-link', '[Amplitude] Element ID': 'my-link-id', + '[Amplitude] Element Path': 'a#my-link-id', '[Amplitude] Element Position Left': 0, '[Amplitude] Element Position Top': 0, '[Amplitude] Element Tag': 'a', @@ -400,6 +401,7 @@ describe('autoTrackingPlugin', () => { ], '[Amplitude] Element Href': 'https://www.amplitude.com/click-link', '[Amplitude] Element ID': 'my-link-id', + '[Amplitude] Element Path': 'a#my-link-id', '[Amplitude] Element Position Left': 0, '[Amplitude] Element Position Top': 0, '[Amplitude] Element Tag': 'a', @@ -500,6 +502,7 @@ describe('autoTrackingPlugin', () => { }, ], '[Amplitude] Element ID': 'my-button-id', + '[Amplitude] Element Path': 'button#my-button-id', '[Amplitude] Element Position Left': 0, '[Amplitude] Element Position Top': 0, '[Amplitude] Element Tag': 'button', @@ -571,6 +574,7 @@ describe('autoTrackingPlugin', () => { }, ], '[Amplitude] Element ID': 'my-button-id', + '[Amplitude] Element Path': 'button#my-button-id', '[Amplitude] Element Position Left': 0, '[Amplitude] Element Position Top': 0, '[Amplitude] Element Tag': 'button', @@ -932,6 +936,7 @@ describe('autoTrackingPlugin', () => { }, ], '[Amplitude] Element ID': 'my-button-id', + '[Amplitude] Element Path': 'button#my-button-id', '[Amplitude] Element Position Left': 0, '[Amplitude] Element Position Top': 0, '[Amplitude] Element Tag': 'button', @@ -1381,6 +1386,97 @@ describe('autoTrackingPlugin', () => { expect(track).toHaveBeenCalledTimes(6); }); }); + + describe('page view ID handling', () => { + // Tests for data-extractor.ts lines 160-170 which use optional chaining + // (window?.sessionStorage?.getItem) to safely access sessionStorage + test('should not throw error when sessionStorage is deleted', async () => { + const config: Partial = { + defaultTracking: false, + loggerProvider: loggerProvider, + }; + await plugin?.setup?.(config as BrowserConfig, instance); + + // Save original sessionStorage + const originalSessionStorage = window.sessionStorage; + + // Delete sessionStorage temporarily - tests window?.sessionStorage when sessionStorage is undefined + // eslint-disable-next-line @typescript-eslint/no-explicit-any + delete (window as any).sessionStorage; + + // trigger click event + const link = document.createElement('a'); + link.setAttribute('id', 'test-link-id'); + link.setAttribute('class', 'test-link-class'); + link.href = 'https://www.amplitude.com/test'; + link.text = 'test-link-text'; + document.body.appendChild(link); + + document.getElementById('test-link-id')?.dispatchEvent(new Event('click')); + jest.advanceTimersByTime(TESTING_DEBOUNCE_TIME + 3); + + expect(track).toHaveBeenCalledTimes(1); + // Verify that page view ID is not included in the event properties + expect(track).toHaveBeenNthCalledWith( + 1, + '[Amplitude] Element Clicked', + expect.not.objectContaining({ + '[Amplitude] Page View ID': expect.anything(), + }), + ); + + // Restore sessionStorage + window.sessionStorage = originalSessionStorage; + + // Cleanup + document.getElementById('test-link-id')?.remove(); + }); + + test('should not throw error when window.sessionStorage is undefined', async () => { + const config: Partial = { + defaultTracking: false, + loggerProvider: loggerProvider, + }; + await plugin?.setup?.(config as BrowserConfig, instance); + + // Save original window.sessionStorage + const originalSessionStorage = window.sessionStorage; + + // Set window.sessionStorage to undefined - tests optional chaining when window?.sessionStorage is undefined + Object.defineProperty(window, 'sessionStorage', { + value: undefined, + writable: true, + configurable: true, + }); + + // trigger click event + const link = document.createElement('a'); + link.setAttribute('id', 'test-link-id-2'); + link.setAttribute('class', 'test-link-class'); + link.href = 'https://www.amplitude.com/test'; + link.text = 'test-link-text'; + document.body.appendChild(link); + + document.getElementById('test-link-id-2')?.dispatchEvent(new Event('click')); + jest.advanceTimersByTime(TESTING_DEBOUNCE_TIME + 3); + + expect(track).toHaveBeenCalledTimes(1); + // Verify that page view ID is not included in the event properties + expect(track).toHaveBeenNthCalledWith( + 1, + '[Amplitude] Element Clicked', + expect.not.objectContaining({ + '[Amplitude] Page View ID': expect.anything(), + }), + ); + + // Restore sessionStorage + window.sessionStorage = originalSessionStorage; + + // Cleanup + document.getElementById('test-link-id-2')?.remove(); + }); + }); }); describe('teardown', () => { diff --git a/packages/plugin-global-user-properties/CHANGELOG.md b/packages/plugin-global-user-properties/CHANGELOG.md index 4c8d7103c..99a8a8c11 100644 --- a/packages/plugin-global-user-properties/CHANGELOG.md +++ b/packages/plugin-global-user-properties/CHANGELOG.md @@ -3,6 +3,40 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.2.101-zen-plus-zoning.2](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/plugin-global-user-properties@1.2.101-zen-plus-zoning.0...@amplitude/plugin-global-user-properties@1.2.101-zen-plus-zoning.2) (2025-11-20) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +## [1.2.101-zen-plus-zoning.1](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/plugin-global-user-properties@1.2.101-zen-plus-zoning.0...@amplitude/plugin-global-user-properties@1.2.101-zen-plus-zoning.1) (2025-11-19) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +## [1.2.101-zen-plus-zoning.0](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/plugin-global-user-properties@1.2.101-zen-observable-migration.1...@amplitude/plugin-global-user-properties@1.2.101-zen-plus-zoning.0) (2025-11-12) + + +### Reverts + +* Revert "chore(release): publish" ([f68b67f](https://github.com/amplitude/Amplitude-TypeScript/commit/f68b67f83fb3866b5159087702a8d122b091e0f7)) +* Revert "chore(release): publish" ([6b53d02](https://github.com/amplitude/Amplitude-TypeScript/commit/6b53d022aab0fc297fdc14652599567667c34561)) + + + + + ## [1.2.100](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/plugin-global-user-properties@1.2.99...@amplitude/plugin-global-user-properties@1.2.100) (2025-11-05) **Note:** Version bump only for package @amplitude/plugin-global-user-properties diff --git a/packages/plugin-global-user-properties/package.json b/packages/plugin-global-user-properties/package.json index 150e19180..8a3c48567 100644 --- a/packages/plugin-global-user-properties/package.json +++ b/packages/plugin-global-user-properties/package.json @@ -1,6 +1,6 @@ { "name": "@amplitude/plugin-global-user-properties", - "version": "1.2.100", + "version": "1.2.101-zen-plus-zoning.2", "description": "An event enrichment plugin that adds the experimental global user properties field to events", "author": "Amplitude Inc", "homepage": "https://github.com/amplitude/Amplitude-TypeScript", @@ -41,7 +41,7 @@ "tslib": "^2.4.1" }, "devDependencies": { - "@amplitude/analytics-browser": "^2.30.1", + "@amplitude/analytics-browser": "2.31.0-zen-plus-zoning.2", "@rollup/plugin-commonjs": "^23.0.4", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-typescript": "^10.0.1", diff --git a/packages/plugin-network-capture-browser/CHANGELOG.md b/packages/plugin-network-capture-browser/CHANGELOG.md index 4ecb5ea60..d0acc41e3 100644 --- a/packages/plugin-network-capture-browser/CHANGELOG.md +++ b/packages/plugin-network-capture-browser/CHANGELOG.md @@ -3,6 +3,39 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.6.14-zen-plus-zoning.2](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/plugin-network-capture-browser@1.6.14-zen-plus-zoning.0...@amplitude/plugin-network-capture-browser@1.6.14-zen-plus-zoning.2) (2025-11-20) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +## [1.6.14-zen-plus-zoning.1](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/plugin-network-capture-browser@1.6.14-zen-plus-zoning.0...@amplitude/plugin-network-capture-browser@1.6.14-zen-plus-zoning.1) (2025-11-19) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +## [1.6.14-zen-plus-zoning.0](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/plugin-network-capture-browser@1.7.0-zen-observable-migration.0...@amplitude/plugin-network-capture-browser@1.6.14-zen-plus-zoning.0) (2025-11-12) + + +### Reverts + +* Revert "chore(release): publish" ([f68b67f](https://github.com/amplitude/Amplitude-TypeScript/commit/f68b67f83fb3866b5159087702a8d122b091e0f7)) + + + + + ## [1.6.13](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/plugin-network-capture-browser@1.6.12...@amplitude/plugin-network-capture-browser@1.6.13) (2025-11-05) **Note:** Version bump only for package @amplitude/plugin-network-capture-browser diff --git a/packages/plugin-network-capture-browser/package.json b/packages/plugin-network-capture-browser/package.json index 12c632c42..b0eaa0aa5 100644 --- a/packages/plugin-network-capture-browser/package.json +++ b/packages/plugin-network-capture-browser/package.json @@ -1,6 +1,6 @@ { "name": "@amplitude/plugin-network-capture-browser", - "version": "1.6.13", + "version": "1.6.14-zen-plus-zoning.2", "description": "", "author": "Amplitude Inc", "homepage": "https://github.com/amplitude/Amplitude-TypeScript", @@ -40,8 +40,7 @@ "url": "https://github.com/amplitude/Amplitude-TypeScript/issues" }, "dependencies": { - "@amplitude/analytics-core": "^2.31.1", - "rxjs": "^7.8.1", + "@amplitude/analytics-core": "2.32.0-zen-plus-zoning.2", "tslib": "^2.4.1" }, "devDependencies": { diff --git a/packages/plugin-network-capture-browser/src/network-capture-plugin.ts b/packages/plugin-network-capture-browser/src/network-capture-plugin.ts index 7928bc544..70ffff729 100644 --- a/packages/plugin-network-capture-browser/src/network-capture-plugin.ts +++ b/packages/plugin-network-capture-browser/src/network-capture-plugin.ts @@ -10,16 +10,9 @@ import { ILogger, } from '@amplitude/analytics-core'; import * as constants from './constants'; -import { Observable, Subscription } from 'rxjs'; -import { HasEventTargetAddRemove } from 'rxjs/internal/observable/fromEvent'; +import { Observable, Unsubscribable } from '@amplitude/analytics-core'; import { trackNetworkEvents } from './track-network-event'; -declare global { - interface Window { - navigation: HasEventTargetAddRemove; - } -} - export type BrowserEnrichmentPlugin = EnrichmentPlugin; export enum ObservablesEnum { @@ -49,13 +42,13 @@ export interface AllWindowObservables { [ObservablesEnum.NetworkObservable]: Observable>; } +let subscription: Unsubscribable; + export const networkCapturePlugin = (options: NetworkTrackingOptions = {}): BrowserEnrichmentPlugin => { const name = constants.PLUGIN_NAME; const type = 'enrichment'; let logger: ILogger; - const subscriptions: Subscription[] = []; - const addAdditionalEventProperties = ( event: T, type: TimestampedEvent['type'], @@ -99,13 +92,12 @@ export const networkCapturePlugin = (options: NetworkTrackingOptions = {}): Brow /* istanbul ignore next */ logger = config?.loggerProvider; - const networkRequestSubscription = trackNetworkEvents({ + subscription = trackNetworkEvents({ allObservables, networkTrackingOptions: options, amplitude, loggerProvider: logger, }); - subscriptions.push(networkRequestSubscription); /* istanbul ignore next */ logger?.log(`${name} has been successfully added.`); @@ -117,9 +109,7 @@ export const networkCapturePlugin = (options: NetworkTrackingOptions = {}): Brow }; const teardown = async () => { - for (const subscription of subscriptions) { - subscription.unsubscribe(); - } + subscription.unsubscribe(); }; return { diff --git a/packages/plugin-network-capture-browser/src/track-network-event.ts b/packages/plugin-network-capture-browser/src/track-network-event.ts index 19e1861d3..9a5293cd7 100644 --- a/packages/plugin-network-capture-browser/src/track-network-event.ts +++ b/packages/plugin-network-capture-browser/src/track-network-event.ts @@ -7,11 +7,11 @@ import { isUrlMatchAllowlist, SAFE_HEADERS, ILogger, + IRequestWrapper, + Unsubscribable, } from '@amplitude/analytics-core'; -import { filter } from 'rxjs'; import { AllWindowObservables, TimestampedEvent } from './network-capture-plugin'; import { AMPLITUDE_NETWORK_REQUEST_EVENT, IS_HEADER_CAPTURE_EXPERIMENTAL } from './constants'; -import { IRequestWrapper } from '@amplitude/analytics-core'; import { BodyCaptureRule } from '@amplitude/analytics-core/lib/esm/types/network-tracking'; const DEFAULT_STATUS_CODE_RANGE = '500-599'; @@ -303,15 +303,13 @@ export function trackNetworkEvents({ networkTrackingOptions: NetworkTrackingOptions; amplitude: BrowserClient; loggerProvider?: ILogger; -}) { +}): Unsubscribable { const { networkObservable } = allObservables; - const filteredNetworkObservable = networkObservable.pipe( - filter((event: TimestampedEvent) => { - // Only track network events that should be tracked, - return shouldTrackNetworkEvent(event.event as NetworkRequestEvent, networkTrackingOptions); - }), - ); + const filteredNetworkObservable = networkObservable.filter((event: TimestampedEvent) => { + // Only track network events that should be tracked + return shouldTrackNetworkEvent(event.event as NetworkRequestEvent, networkTrackingOptions); + }); return filteredNetworkObservable.subscribe((networkEvent) => { const request = networkEvent.event; diff --git a/packages/plugin-network-capture-browser/src/version.ts b/packages/plugin-network-capture-browser/src/version.ts index ccd743f7e..66da888d6 100644 --- a/packages/plugin-network-capture-browser/src/version.ts +++ b/packages/plugin-network-capture-browser/src/version.ts @@ -1 +1 @@ -export const VERSION = '1.6.13'; +export const VERSION = '1.6.14-zen-plus-zoning.2'; diff --git a/packages/plugin-page-url-enrichment-browser/CHANGELOG.md b/packages/plugin-page-url-enrichment-browser/CHANGELOG.md index bf38b89b3..511981303 100644 --- a/packages/plugin-page-url-enrichment-browser/CHANGELOG.md +++ b/packages/plugin-page-url-enrichment-browser/CHANGELOG.md @@ -3,6 +3,39 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.5.3-zen-plus-zoning.2](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/plugin-page-url-enrichment-browser@0.5.3-zen-plus-zoning.0...@amplitude/plugin-page-url-enrichment-browser@0.5.3-zen-plus-zoning.2) (2025-11-20) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +## [0.5.3-zen-plus-zoning.1](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/plugin-page-url-enrichment-browser@0.5.3-zen-plus-zoning.0...@amplitude/plugin-page-url-enrichment-browser@0.5.3-zen-plus-zoning.1) (2025-11-19) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +## [0.5.3-zen-plus-zoning.0](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/plugin-page-url-enrichment-browser@0.5.3-zen-observable-migration.0...@amplitude/plugin-page-url-enrichment-browser@0.5.3-zen-plus-zoning.0) (2025-11-12) + + +### Reverts + +* Revert "chore(release): publish" ([f68b67f](https://github.com/amplitude/Amplitude-TypeScript/commit/f68b67f83fb3866b5159087702a8d122b091e0f7)) + + + + + ## [0.5.2](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/plugin-page-url-enrichment-browser@0.5.1...@amplitude/plugin-page-url-enrichment-browser@0.5.2) (2025-11-05) **Note:** Version bump only for package @amplitude/plugin-page-url-enrichment-browser diff --git a/packages/plugin-page-url-enrichment-browser/package.json b/packages/plugin-page-url-enrichment-browser/package.json index 64b3b1d35..e4efcdb42 100644 --- a/packages/plugin-page-url-enrichment-browser/package.json +++ b/packages/plugin-page-url-enrichment-browser/package.json @@ -1,6 +1,6 @@ { "name": "@amplitude/plugin-page-url-enrichment-browser", - "version": "0.5.2", + "version": "0.5.3-zen-plus-zoning.2", "description": "", "author": "Amplitude Inc", "homepage": "https://github.com/amplitude/Amplitude-TypeScript", @@ -37,7 +37,7 @@ "url": "https://github.com/amplitude/Amplitude-TypeScript/issues" }, "dependencies": { - "@amplitude/analytics-core": "^2.31.1", + "@amplitude/analytics-core": "2.32.0-zen-plus-zoning.2", "tslib": "^2.4.1" }, "devDependencies": { diff --git a/packages/plugin-page-view-tracking-browser/CHANGELOG.md b/packages/plugin-page-view-tracking-browser/CHANGELOG.md index 184cd062b..c0faf6110 100644 --- a/packages/plugin-page-view-tracking-browser/CHANGELOG.md +++ b/packages/plugin-page-view-tracking-browser/CHANGELOG.md @@ -3,6 +3,40 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [2.6.0-zen-plus-zoning.2](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/plugin-page-view-tracking-browser@2.6.0-zen-plus-zoning.0...@amplitude/plugin-page-view-tracking-browser@2.6.0-zen-plus-zoning.2) (2025-11-20) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +# [2.6.0-zen-plus-zoning.1](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/plugin-page-view-tracking-browser@2.6.0-zen-plus-zoning.0...@amplitude/plugin-page-view-tracking-browser@2.6.0-zen-plus-zoning.1) (2025-11-19) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +# [2.6.0-zen-plus-zoning.0](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/plugin-page-view-tracking-browser@2.5.8-zen-observable-migration.0...@amplitude/plugin-page-view-tracking-browser@2.6.0-zen-plus-zoning.0) (2025-11-12) + + +### Features + +* **analytics-browser:** add reset listener API ([#1393](https://github.com/amplitude/Amplitude-TypeScript/issues/1393)) ([7bd85e5](https://github.com/amplitude/Amplitude-TypeScript/commit/7bd85e51b01cefdb43b8474d930e8c219b739323)) +* **page-view-tracking-browser:** Track page view id in session storage ([#1379](https://github.com/amplitude/Amplitude-TypeScript/issues/1379)) ([a5d3241](https://github.com/amplitude/Amplitude-TypeScript/commit/a5d3241f175fc148d9573b619a06f74458188a3a)) + + + + + ## [2.5.7](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/plugin-page-view-tracking-browser@2.5.6...@amplitude/plugin-page-view-tracking-browser@2.5.7) (2025-11-05) **Note:** Version bump only for package @amplitude/plugin-page-view-tracking-browser diff --git a/packages/plugin-page-view-tracking-browser/package.json b/packages/plugin-page-view-tracking-browser/package.json index 7951c90f1..571df8688 100644 --- a/packages/plugin-page-view-tracking-browser/package.json +++ b/packages/plugin-page-view-tracking-browser/package.json @@ -1,6 +1,6 @@ { "name": "@amplitude/plugin-page-view-tracking-browser", - "version": "2.5.7", + "version": "2.6.0-zen-plus-zoning.2", "description": "", "author": "Amplitude Inc", "homepage": "https://github.com/amplitude/Amplitude-TypeScript", @@ -37,7 +37,7 @@ "url": "https://github.com/amplitude/Amplitude-TypeScript/issues" }, "dependencies": { - "@amplitude/analytics-core": "^2.31.1", + "@amplitude/analytics-core": "2.32.0-zen-plus-zoning.2", "tslib": "^2.4.1" }, "devDependencies": { diff --git a/packages/plugin-page-view-tracking-browser/src/page-view-tracking.ts b/packages/plugin-page-view-tracking-browser/src/page-view-tracking.ts index 470d222fc..1173810e4 100644 --- a/packages/plugin-page-view-tracking-browser/src/page-view-tracking.ts +++ b/packages/plugin-page-view-tracking-browser/src/page-view-tracking.ts @@ -11,11 +11,18 @@ import { CampaignParser, getGlobalScope, BASE_CAMPAIGN, + BrowserStorage, + UUID, } from '@amplitude/analytics-core'; import { CreatePageViewTrackingPlugin, Options } from './typings/page-view-tracking'; import { omitUndefined } from './utils'; export const defaultPageViewEvent = '[Amplitude] Page Viewed'; +export const PAGE_VIEW_SESSION_STORAGE_KEY = 'AMP_PAGE_VIEW'; + +type PageViewSessionStorage = { + pageViewId: string; +}; export const pageViewTrackingPlugin: CreatePageViewTrackingPlugin = (options: Options = {}) => { let amplitude: BrowserClient | undefined; @@ -23,6 +30,7 @@ export const pageViewTrackingPlugin: CreatePageViewTrackingPlugin = (options: Op let loggerProvider: ILogger | undefined = undefined; let isTracking = false; let localConfig: BrowserConfig; + let sessionStorage: BrowserStorage | undefined; const { trackOn, trackHistoryChanges, eventType = defaultPageViewEvent } = options; const getDecodeURI = (locationStr: string): string => { @@ -37,7 +45,7 @@ export const pageViewTrackingPlugin: CreatePageViewTrackingPlugin = (options: Op return decodedLocationStr; }; - const createPageViewEvent = async (): Promise => { + const createPageViewEvent = async (pageViewId: string | undefined): Promise => { /* istanbul ignore next */ const locationHREF = getDecodeURI((typeof location !== 'undefined' && location.href) || ''); return { @@ -51,6 +59,7 @@ export const pageViewTrackingPlugin: CreatePageViewTrackingPlugin = (options: Op /* istanbul ignore next */ (typeof location !== 'undefined' && getDecodeURI(location.pathname)) || '', '[Amplitude] Page Title': /* istanbul ignore next */ getPageTitle(replaceSensitiveString), '[Amplitude] Page URL': locationHREF.split('?')[0], + '[Amplitude] Page View ID': pageViewId, }, }; }; @@ -71,14 +80,21 @@ export const pageViewTrackingPlugin: CreatePageViewTrackingPlugin = (options: Op previousURL = newURL; if (shouldTrackPageView) { + // Generate new page view id and set it in session storage + let pageViewId: string | undefined; + if (sessionStorage) { + pageViewId = UUID(); + void sessionStorage.set(PAGE_VIEW_SESSION_STORAGE_KEY, { pageViewId }); + } + /* istanbul ignore next */ loggerProvider?.log('Tracking page view event'); - amplitude?.track(await createPageViewEvent()); + amplitude?.track(await createPageViewEvent(pageViewId)); } }; /* istanbul ignore next */ - const trackHistoryPageViewWrapper = () => { + const handlePageChange = () => { void trackHistoryPageView(); }; @@ -94,9 +110,11 @@ export const pageViewTrackingPlugin: CreatePageViewTrackingPlugin = (options: Op loggerProvider.log('Installing @amplitude/plugin-page-view-tracking-browser'); isTracking = true; - if (globalScope) { - globalScope.addEventListener('popstate', trackHistoryPageViewWrapper); + // init session storage + sessionStorage = new BrowserStorage(globalScope.sessionStorage); + + globalScope.addEventListener('popstate', handlePageChange); /* istanbul ignore next */ // There is no global browser listener for changes to history, so we have @@ -107,7 +125,7 @@ export const pageViewTrackingPlugin: CreatePageViewTrackingPlugin = (options: Op apply: (target, thisArg, [state, unused, url]) => { target.apply(thisArg, [state, unused, url]); if (isTracking) { - void trackHistoryPageView(); + handlePageChange(); } }, }); @@ -115,8 +133,15 @@ export const pageViewTrackingPlugin: CreatePageViewTrackingPlugin = (options: Op if (shouldTrackOnPageLoad()) { loggerProvider.log('Tracking page view event'); + // Generate new page view id and set it in session storage + let pageViewId: string | undefined; + + if (sessionStorage) { + pageViewId = UUID(); + void sessionStorage.set(PAGE_VIEW_SESSION_STORAGE_KEY, { pageViewId }); + } - amplitude.track(await createPageViewEvent()); + amplitude.track(await createPageViewEvent(pageViewId)); } }, @@ -124,7 +149,14 @@ export const pageViewTrackingPlugin: CreatePageViewTrackingPlugin = (options: Op if (trackOn === 'attribution' && isCampaignEvent(event)) { /* istanbul ignore next */ // loggerProvider should be defined by the time execute is invoked loggerProvider?.log('Enriching campaign event to page view event with campaign parameters'); - const pageViewEvent = await createPageViewEvent(); + // Retrieve current page view id from session storage + let pageViewId: string | undefined; + if (sessionStorage) { + const pageViewSession = await sessionStorage.get(PAGE_VIEW_SESSION_STORAGE_KEY); + pageViewId = pageViewSession?.pageViewId; + } + + const pageViewEvent = await createPageViewEvent(pageViewId); event.event_type = pageViewEvent.event_type; event.event_properties = { ...event.event_properties, @@ -145,7 +177,7 @@ export const pageViewTrackingPlugin: CreatePageViewTrackingPlugin = (options: Op teardown: async () => { if (globalScope) { - globalScope.removeEventListener('popstate', trackHistoryPageViewWrapper); + globalScope.removeEventListener('popstate', handlePageChange); isTracking = false; } }, diff --git a/packages/plugin-page-view-tracking-browser/test/page-view-tracking.test.ts b/packages/plugin-page-view-tracking-browser/test/page-view-tracking.test.ts index 8b19955c7..e04f97496 100644 --- a/packages/plugin-page-view-tracking-browser/test/page-view-tracking.test.ts +++ b/packages/plugin-page-view-tracking-browser/test/page-view-tracking.test.ts @@ -1,6 +1,31 @@ -import { Logger, UUID, BrowserClient, BrowserConfig, LogLevel } from '@amplitude/analytics-core'; -import { defaultPageViewEvent, pageViewTrackingPlugin, shouldTrackHistoryPageView } from '../src/page-view-tracking'; -import { CookieStorage, FetchTransport } from '@amplitude/analytics-client-common'; +import { + Logger, + UUID, + BrowserClient, + BrowserConfig, + LogLevel, + CookieStorage, + FetchTransport, + getGlobalScope, +} from '@amplitude/analytics-core'; +import { + defaultPageViewEvent, + pageViewTrackingPlugin, + shouldTrackHistoryPageView, + PAGE_VIEW_SESSION_STORAGE_KEY, +} from '../src/page-view-tracking'; + +jest.mock('@amplitude/analytics-core', () => { + const actual = jest.requireActual('@amplitude/analytics-core'); + return { + ...actual, + UUID: jest.fn(function (...args) { + // Call through to original + return actual.UUID(...args); + }), + getGlobalScope: jest.fn(() => (typeof window !== 'undefined' ? window : undefined)), + }; +}); // Mock BrowserClient implementation const createMockBrowserClient = (): jest.Mocked => { @@ -127,6 +152,12 @@ describe('pageViewTrackingPlugin', () => { // Block event loop for 1s before asserting await new Promise((resolve) => setTimeout(resolve, 1000)); + // Expect session storage to match the latest page view id + const sessionStorageItem = window.sessionStorage.getItem(PAGE_VIEW_SESSION_STORAGE_KEY); + expect(sessionStorageItem).toBeDefined(); + const sessionStorageItemJson = JSON.parse(sessionStorageItem as string) as { pageViewId: string }; + const pageViewIdSessionStorage = sessionStorageItemJson.pageViewId; + expect(track).toHaveBeenNthCalledWith(2, { event_properties: { '[Amplitude] Page Domain': newURL.hostname, @@ -134,6 +165,7 @@ describe('pageViewTrackingPlugin', () => { '[Amplitude] Page Path': newURL.pathname, '[Amplitude] Page Title': '', '[Amplitude] Page URL': newURL.toString(), + '[Amplitude] Page View ID': pageViewIdSessionStorage, }, event_type: '[Amplitude] Page Viewed', }); @@ -176,6 +208,7 @@ describe('pageViewTrackingPlugin', () => { '[Amplitude] Page Path': pathname, '[Amplitude] Page Title': '', '[Amplitude] Page URL': `https://${hostname}${pathname}`, + '[Amplitude] Page View ID': expect.any(String), utm_source: 'google', utm_medium: 'cpc', utm_campaign: 'brand', @@ -273,6 +306,7 @@ describe('pageViewTrackingPlugin', () => { '[Amplitude] Page Path': oldURL.pathname, '[Amplitude] Page Title': '', '[Amplitude] Page URL': oldURL.toString(), + '[Amplitude] Page View ID': expect.any(String), }, event_type: '[Amplitude] Page Viewed', }); @@ -284,6 +318,7 @@ describe('pageViewTrackingPlugin', () => { '[Amplitude] Page Path': '/home-шеллы', '[Amplitude] Page Title': '', '[Amplitude] Page URL': 'https://www.example.com/home-шеллы', + '[Amplitude] Page View ID': expect.any(String), }, event_type: '[Amplitude] Page Viewed', }); @@ -328,6 +363,7 @@ describe('pageViewTrackingPlugin', () => { '[Amplitude] Page Path': oldURL.pathname, '[Amplitude] Page Title': '', '[Amplitude] Page URL': oldURL.toString(), + '[Amplitude] Page View ID': expect.any(String), }, event_type: '[Amplitude] Page Viewed', }); @@ -339,6 +375,7 @@ describe('pageViewTrackingPlugin', () => { '[Amplitude] Page Path': malformedPath, '[Amplitude] Page Title': '', '[Amplitude] Page URL': malformedURL, + '[Amplitude] Page View ID': expect.any(String), }, event_type: '[Amplitude] Page Viewed', }); @@ -381,6 +418,7 @@ describe('pageViewTrackingPlugin', () => { '[Amplitude] Page Path': oldURL.pathname, '[Amplitude] Page Title': '', '[Amplitude] Page URL': oldURL.toString(), + '[Amplitude] Page View ID': expect.any(String), }, event_type: '[Amplitude] Page Viewed', }); @@ -392,6 +430,7 @@ describe('pageViewTrackingPlugin', () => { '[Amplitude] Page Path': newURL.pathname, '[Amplitude] Page Title': '', '[Amplitude] Page URL': newBaseURL, + '[Amplitude] Page View ID': expect.any(String), }, event_type: '[Amplitude] Page Viewed', }); @@ -459,6 +498,138 @@ describe('pageViewTrackingPlugin', () => { expect(event?.event_type).toBe('[Amplitude] Page Viewed'); }); + test('should track attribution page view when session storage is unavailable', async () => { + // Mock getGlobalScope to return undefined to simulate no global scope + const orig = (getGlobalScope as jest.Mock).getMockImplementation(); + + (getGlobalScope as jest.Mock).mockReturnValue(undefined); + + const amplitude = createMockBrowserClient(); + + const plugin = pageViewTrackingPlugin({ + trackOn: 'attribution', + }); + + await plugin.setup?.(mockConfig, amplitude); + const event = await plugin.execute?.({ + event_type: '$identify', + user_properties: { + $set: { + utm_source: 'amp-test', + }, + $setOnce: { + initial_dclid: 'EMPTY', + initial_fbclid: 'EMPTY', + initial_gbraid: 'EMPTY', + initial_gclid: 'EMPTY', + initial_ko_click_id: 'EMPTY', + initial_li_fat_id: 'EMPTY', + initial_msclkid: 'EMPTY', + initial_wbraid: 'EMPTY', + initial_referrer: 'EMPTY', + initial_referring_domain: 'EMPTY', + initial_rdt_cid: 'EMPTY', + initial_ttclid: 'EMPTY', + initial_twclid: 'EMPTY', + initial_utm_campaign: 'EMPTY', + initial_utm_content: 'EMPTY', + initial_utm_id: 'EMPTY', + initial_utm_medium: 'EMPTY', + initial_utm_source: 'amp-test', + initial_utm_term: 'EMPTY', + }, + $unset: { + dclid: '-', + fbclid: '-', + gbraid: '-', + gclid: '-', + ko_click_id: '-', + li_fat_id: '-', + msclkid: '-', + wbraid: '-', + referrer: '-', + referring_domain: '-', + rdt_cid: '-', + ttclid: '-', + twclid: '-', + utm_campaign: '-', + utm_content: '-', + utm_id: '-', + utm_medium: '-', + utm_term: '-', + }, + }, + }); + + expect(event?.event_type).toBe('[Amplitude] Page Viewed'); + expect(event?.event_properties).not.toHaveProperty('[Amplitude] Page View ID'); + (getGlobalScope as jest.Mock).mockImplementation(orig); + }); + + test('should track attribution page view when session storage is empty', async () => { + const amplitude = createMockBrowserClient(); + const plugin = pageViewTrackingPlugin({ + trackOn: 'attribution', + }); + + // Clear session storage + window.sessionStorage.setItem(PAGE_VIEW_SESSION_STORAGE_KEY, 'undefined'); + + await plugin.setup?.(mockConfig, amplitude); + const event = await plugin.execute?.({ + event_type: '$identify', + user_properties: { + $set: { + utm_source: 'amp-test', + }, + $setOnce: { + initial_dclid: 'EMPTY', + initial_fbclid: 'EMPTY', + initial_gbraid: 'EMPTY', + initial_gclid: 'EMPTY', + initial_ko_click_id: 'EMPTY', + initial_li_fat_id: 'EMPTY', + initial_msclkid: 'EMPTY', + initial_wbraid: 'EMPTY', + initial_referrer: 'EMPTY', + initial_referring_domain: 'EMPTY', + initial_rdt_cid: 'EMPTY', + initial_ttclid: 'EMPTY', + initial_twclid: 'EMPTY', + initial_utm_campaign: 'EMPTY', + initial_utm_content: 'EMPTY', + initial_utm_id: 'EMPTY', + initial_utm_medium: 'EMPTY', + initial_utm_source: 'amp-test', + initial_utm_term: 'EMPTY', + }, + $unset: { + dclid: '-', + fbclid: '-', + gbraid: '-', + gclid: '-', + ko_click_id: '-', + li_fat_id: '-', + msclkid: '-', + wbraid: '-', + referrer: '-', + referring_domain: '-', + rdt_cid: '-', + ttclid: '-', + twclid: '-', + utm_campaign: '-', + utm_content: '-', + utm_id: '-', + utm_medium: '-', + utm_term: '-', + }, + }, + }); + + expect(event?.event_type).toBe('[Amplitude] Page Viewed'); + expect(event?.event_properties).not.toHaveProperty('[Amplitude] Page View ID'); + }); + test('should return same event if it is not attribution event', async () => { const plugin = pageViewTrackingPlugin({ trackOn: 'attribution', diff --git a/packages/plugin-session-replay-browser/CHANGELOG.md b/packages/plugin-session-replay-browser/CHANGELOG.md index 517117dcb..68dab0c0e 100644 --- a/packages/plugin-session-replay-browser/CHANGELOG.md +++ b/packages/plugin-session-replay-browser/CHANGELOG.md @@ -3,6 +3,40 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.23.3-zen-plus-zoning.2](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/plugin-session-replay-browser@1.23.3-zen-plus-zoning.0...@amplitude/plugin-session-replay-browser@1.23.3-zen-plus-zoning.2) (2025-11-20) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +## [1.23.3-zen-plus-zoning.1](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/plugin-session-replay-browser@1.23.3-zen-plus-zoning.0...@amplitude/plugin-session-replay-browser@1.23.3-zen-plus-zoning.1) (2025-11-19) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +## [1.23.3-zen-plus-zoning.0](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/plugin-session-replay-browser@1.23.3-zen-observable-migration.1...@amplitude/plugin-session-replay-browser@1.23.3-zen-plus-zoning.0) (2025-11-12) + + +### Reverts + +* Revert "chore(release): publish" ([f68b67f](https://github.com/amplitude/Amplitude-TypeScript/commit/f68b67f83fb3866b5159087702a8d122b091e0f7)) +* Revert "chore(release): publish" ([6b53d02](https://github.com/amplitude/Amplitude-TypeScript/commit/6b53d022aab0fc297fdc14652599567667c34561)) + + + + + ## [1.23.2](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/plugin-session-replay-browser@1.23.1...@amplitude/plugin-session-replay-browser@1.23.2) (2025-11-05) **Note:** Version bump only for package @amplitude/plugin-session-replay-browser diff --git a/packages/plugin-session-replay-browser/package.json b/packages/plugin-session-replay-browser/package.json index 381d3aefa..ac5f19521 100644 --- a/packages/plugin-session-replay-browser/package.json +++ b/packages/plugin-session-replay-browser/package.json @@ -1,6 +1,6 @@ { "name": "@amplitude/plugin-session-replay-browser", - "version": "1.23.2", + "version": "1.23.3-zen-plus-zoning.2", "description": "", "author": "Amplitude Inc", "homepage": "https://github.com/amplitude/Amplitude-TypeScript", @@ -39,15 +39,15 @@ "url": "https://github.com/amplitude/Amplitude-TypeScript/issues" }, "dependencies": { - "@amplitude/analytics-client-common": "^2.4.12", - "@amplitude/analytics-core": "^2.31.1", + "@amplitude/analytics-client-common": "2.4.13-zen-plus-zoning.2", + "@amplitude/analytics-core": "2.32.0-zen-plus-zoning.2", "@amplitude/analytics-types": "^2.11.0", - "@amplitude/session-replay-browser": "^1.29.4", + "@amplitude/session-replay-browser": "1.29.5-zen-plus-zoning.2", "idb-keyval": "^6.2.1", "tslib": "^2.4.1" }, "devDependencies": { - "@amplitude/analytics-browser": "^2.30.1", + "@amplitude/analytics-browser": "2.31.0-zen-plus-zoning.2", "@rollup/plugin-commonjs": "^23.0.4", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-typescript": "^10.0.1", diff --git a/packages/plugin-session-replay-browser/src/version.ts b/packages/plugin-session-replay-browser/src/version.ts index e5e892893..421d2667b 100644 --- a/packages/plugin-session-replay-browser/src/version.ts +++ b/packages/plugin-session-replay-browser/src/version.ts @@ -1,2 +1,2 @@ // Autogenerated by `yarn version-file`. DO NOT EDIT -export const VERSION = '1.23.2'; +export const VERSION = '1.23.3-zen-plus-zoning.2'; diff --git a/packages/plugin-session-replay-browser/test/jsdom-extended.js b/packages/plugin-session-replay-browser/test/jsdom-extended.js index c7212fd3d..5d430d889 100644 --- a/packages/plugin-session-replay-browser/test/jsdom-extended.js +++ b/packages/plugin-session-replay-browser/test/jsdom-extended.js @@ -5,6 +5,7 @@ class JSDOMEnvironmentExtended extends JSDOMEnvironment { super(...args); this.global.ReadableStream = ReadableStream; + this.global.WritableStream = WritableStream; this.global.TextDecoder = TextDecoder; this.global.TextEncoder = TextEncoder; this.global.BroadcastChannel = BroadcastChannel; diff --git a/packages/plugin-stub-browser/package.json b/packages/plugin-stub-browser/package.json index 49b283406..2d247a799 100644 --- a/packages/plugin-stub-browser/package.json +++ b/packages/plugin-stub-browser/package.json @@ -42,7 +42,6 @@ }, "dependencies": { "@amplitude/analytics-core": "^2.12.0", - "rxjs": "^7.8.1", "tslib": "^2.4.1" }, "devDependencies": { diff --git a/packages/plugin-web-attribution-browser/CHANGELOG.md b/packages/plugin-web-attribution-browser/CHANGELOG.md index 13f12d885..8d5162fc9 100644 --- a/packages/plugin-web-attribution-browser/CHANGELOG.md +++ b/packages/plugin-web-attribution-browser/CHANGELOG.md @@ -3,6 +3,40 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.1.94-zen-plus-zoning.2](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/plugin-web-attribution-browser@2.1.94-zen-plus-zoning.0...@amplitude/plugin-web-attribution-browser@2.1.94-zen-plus-zoning.2) (2025-11-20) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +## [2.1.94-zen-plus-zoning.1](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/plugin-web-attribution-browser@2.1.94-zen-plus-zoning.0...@amplitude/plugin-web-attribution-browser@2.1.94-zen-plus-zoning.1) (2025-11-19) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +## [2.1.94-zen-plus-zoning.0](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/plugin-web-attribution-browser@2.1.94-zen-observable-migration.1...@amplitude/plugin-web-attribution-browser@2.1.94-zen-plus-zoning.0) (2025-11-12) + + +### Reverts + +* Revert "chore(release): publish" ([f68b67f](https://github.com/amplitude/Amplitude-TypeScript/commit/f68b67f83fb3866b5159087702a8d122b091e0f7)) +* Revert "chore(release): publish" ([6b53d02](https://github.com/amplitude/Amplitude-TypeScript/commit/6b53d022aab0fc297fdc14652599567667c34561)) + + + + + ## [2.1.93](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/plugin-web-attribution-browser@2.1.92...@amplitude/plugin-web-attribution-browser@2.1.93) (2025-11-05) **Note:** Version bump only for package @amplitude/plugin-web-attribution-browser diff --git a/packages/plugin-web-attribution-browser/package.json b/packages/plugin-web-attribution-browser/package.json index f95f85714..5e9ca342f 100644 --- a/packages/plugin-web-attribution-browser/package.json +++ b/packages/plugin-web-attribution-browser/package.json @@ -1,6 +1,6 @@ { "name": "@amplitude/plugin-web-attribution-browser", - "version": "2.1.93", + "version": "2.1.94-zen-plus-zoning.2", "description": "", "author": "Amplitude Inc", "homepage": "https://github.com/amplitude/Amplitude-TypeScript", @@ -37,13 +37,13 @@ "url": "https://github.com/amplitude/Amplitude-TypeScript/issues" }, "dependencies": { - "@amplitude/analytics-client-common": "^2.4.12", - "@amplitude/analytics-core": "^2.31.1", + "@amplitude/analytics-client-common": "2.4.13-zen-plus-zoning.2", + "@amplitude/analytics-core": "2.32.0-zen-plus-zoning.2", "@amplitude/analytics-types": "^2.11.0", "tslib": "^2.4.1" }, "devDependencies": { - "@amplitude/analytics-browser": "^2.30.1", + "@amplitude/analytics-browser": "2.31.0-zen-plus-zoning.2", "@rollup/plugin-commonjs": "^23.0.4", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-typescript": "^10.0.1", diff --git a/packages/plugin-web-vitals-browser/CHANGELOG.md b/packages/plugin-web-vitals-browser/CHANGELOG.md index e386eed07..d8c3b0384 100644 --- a/packages/plugin-web-vitals-browser/CHANGELOG.md +++ b/packages/plugin-web-vitals-browser/CHANGELOG.md @@ -3,6 +3,36 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.0.1-zen-plus-zoning.2](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/plugin-web-vitals-browser@1.0.1-zen-plus-zoning.0...@amplitude/plugin-web-vitals-browser@1.0.1-zen-plus-zoning.2) (2025-11-20) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +## [1.0.1-zen-plus-zoning.1](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/plugin-web-vitals-browser@1.0.1-zen-plus-zoning.0...@amplitude/plugin-web-vitals-browser@1.0.1-zen-plus-zoning.1) (2025-11-19) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +## [1.0.1-zen-plus-zoning.0](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/plugin-web-vitals-browser@0.1.0-zen-observable-migration.0...@amplitude/plugin-web-vitals-browser@1.0.1-zen-plus-zoning.0) (2025-11-12) + +**Note:** Version bump only for package @amplitude/plugin-web-vitals-browser + + + + + # [0.1.0-beta.35](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/plugin-web-vitals-browser@0.1.0-beta.34...@amplitude/plugin-web-vitals-browser@0.1.0-beta.35) (2025-11-05) **Note:** Version bump only for package @amplitude/plugin-web-vitals-browser diff --git a/packages/plugin-web-vitals-browser/package.json b/packages/plugin-web-vitals-browser/package.json index 83ec178c1..d9f3ecfd6 100644 --- a/packages/plugin-web-vitals-browser/package.json +++ b/packages/plugin-web-vitals-browser/package.json @@ -1,6 +1,6 @@ { "name": "@amplitude/plugin-web-vitals-browser", - "version": "1.0.0", + "version": "1.0.1-zen-plus-zoning.2", "description": "", "author": "Amplitude Inc", "homepage": "https://github.com/amplitude/Amplitude-TypeScript", @@ -39,8 +39,7 @@ "url": "https://github.com/amplitude/Amplitude-TypeScript/issues" }, "dependencies": { - "@amplitude/analytics-core": "^2.31.1", - "rxjs": "^7.8.1", + "@amplitude/analytics-core": "2.32.0-zen-plus-zoning.2", "tslib": "^2.4.1", "web-vitals": "^5.0.1" }, diff --git a/packages/plugin-web-vitals-browser/src/version.ts b/packages/plugin-web-vitals-browser/src/version.ts index 0258a4bf5..b5f3b96d5 100644 --- a/packages/plugin-web-vitals-browser/src/version.ts +++ b/packages/plugin-web-vitals-browser/src/version.ts @@ -1 +1 @@ -export const VERSION = '0.1.0-beta.35'; +export const VERSION = '1.0.1-zen-plus-zoning.2'; diff --git a/packages/segment-session-replay-plugin/CHANGELOG.md b/packages/segment-session-replay-plugin/CHANGELOG.md index 7cb9df365..a0f5bcc6f 100644 --- a/packages/segment-session-replay-plugin/CHANGELOG.md +++ b/packages/segment-session-replay-plugin/CHANGELOG.md @@ -3,6 +3,39 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [0.0.0-zen-plus-zoning.2](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/segment-session-replay-plugin@0.0.0-zen-plus-zoning.0...@amplitude/segment-session-replay-plugin@0.0.0-zen-plus-zoning.2) (2025-11-20) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +# [0.0.0-zen-plus-zoning.1](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/segment-session-replay-plugin@0.0.0-zen-plus-zoning.0...@amplitude/segment-session-replay-plugin@0.0.0-zen-plus-zoning.1) (2025-11-19) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +# [0.0.0-zen-plus-zoning.0](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/segment-session-replay-plugin@0.0.0-zen-observable-migration.0...@amplitude/segment-session-replay-plugin@0.0.0-zen-plus-zoning.0) (2025-11-12) + + +### Reverts + +* Revert "chore(release): publish" ([f68b67f](https://github.com/amplitude/Amplitude-TypeScript/commit/f68b67f83fb3866b5159087702a8d122b091e0f7)) + + + + + # [0.0.0-beta.45](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/segment-session-replay-plugin@0.0.0-beta.44...@amplitude/segment-session-replay-plugin@0.0.0-beta.45) (2025-11-05) **Note:** Version bump only for package @amplitude/segment-session-replay-plugin diff --git a/packages/segment-session-replay-plugin/package.json b/packages/segment-session-replay-plugin/package.json index e3faee1c1..43f6654c8 100644 --- a/packages/segment-session-replay-plugin/package.json +++ b/packages/segment-session-replay-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@amplitude/segment-session-replay-plugin", - "version": "0.0.0-beta.45", + "version": "0.0.0-zen-plus-zoning.2", "description": "Plugin for Segment's analytics.js library to support Amplitude's Session Replay.", "keywords": [ "amplitude", @@ -47,7 +47,7 @@ "version-file": "echo '// Autogenerated by `yarn version-file`. DO NOT EDIT' > src/version.ts && node -p \"'export const VERSION = \\'' + require('./package.json').version + '\\';'\" >> src/version.ts" }, "dependencies": { - "@amplitude/session-replay-browser": "^1.29.4", + "@amplitude/session-replay-browser": "1.29.5-zen-plus-zoning.2", "@segment/analytics-next": "^1.81.0", "js-cookie": "^3.0.5" }, diff --git a/packages/segment-session-replay-plugin/src/version.ts b/packages/segment-session-replay-plugin/src/version.ts index 07a792c8d..4c507ad83 100644 --- a/packages/segment-session-replay-plugin/src/version.ts +++ b/packages/segment-session-replay-plugin/src/version.ts @@ -1,2 +1,2 @@ // Autogenerated by `yarn version-file`. DO NOT EDIT -export const VERSION = '0.0.0-beta.45'; +export const VERSION = '0.0.0-zen-plus-zoning.2'; diff --git a/packages/session-replay-browser/CHANGELOG.md b/packages/session-replay-browser/CHANGELOG.md index 0a34619e7..e158448cc 100644 --- a/packages/session-replay-browser/CHANGELOG.md +++ b/packages/session-replay-browser/CHANGELOG.md @@ -3,6 +3,39 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [1.29.5-zen-plus-zoning.2](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/session-replay-browser@1.29.5-zen-plus-zoning.0...@amplitude/session-replay-browser@1.29.5-zen-plus-zoning.2) (2025-11-20) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +## [1.29.5-zen-plus-zoning.1](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/session-replay-browser@1.29.5-zen-plus-zoning.0...@amplitude/session-replay-browser@1.29.5-zen-plus-zoning.1) (2025-11-19) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +## [1.29.5-zen-plus-zoning.0](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/session-replay-browser@1.29.5-zen-observable-migration.0...@amplitude/session-replay-browser@1.29.5-zen-plus-zoning.0) (2025-11-12) + + +### Reverts + +* Revert "chore(release): publish" ([f68b67f](https://github.com/amplitude/Amplitude-TypeScript/commit/f68b67f83fb3866b5159087702a8d122b091e0f7)) + + + + + ## [1.29.4](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/session-replay-browser@1.29.3...@amplitude/session-replay-browser@1.29.4) (2025-11-05) diff --git a/packages/session-replay-browser/package.json b/packages/session-replay-browser/package.json index 112cc721b..07f57b014 100644 --- a/packages/session-replay-browser/package.json +++ b/packages/session-replay-browser/package.json @@ -1,6 +1,6 @@ { "name": "@amplitude/session-replay-browser", - "version": "1.29.4", + "version": "1.29.5-zen-plus-zoning.2", "description": "", "author": "Amplitude Inc", "homepage": "https://github.com/amplitude/Amplitude-TypeScript", @@ -40,8 +40,8 @@ "url": "https://github.com/amplitude/Amplitude-TypeScript/issues" }, "dependencies": { - "@amplitude/analytics-client-common": "^2.4.12", - "@amplitude/analytics-core": "^2.31.1", + "@amplitude/analytics-client-common": "2.4.13-zen-plus-zoning.2", + "@amplitude/analytics-core": "2.32.0-zen-plus-zoning.2", "@amplitude/analytics-types": "^2.11.0", "@amplitude/rrweb-packer": "2.0.0-alpha.32", "@amplitude/rrweb-plugin-console-record": "2.0.0-alpha.32", diff --git a/packages/session-replay-browser/src/version.ts b/packages/session-replay-browser/src/version.ts index d6d755d68..bfaa0ac06 100644 --- a/packages/session-replay-browser/src/version.ts +++ b/packages/session-replay-browser/src/version.ts @@ -1,2 +1,2 @@ // Autogenerated by `yarn version-file`. DO NOT EDIT -export const VERSION = '1.29.4'; +export const VERSION = '1.29.5-zen-plus-zoning.2'; diff --git a/packages/unified/CHANGELOG.md b/packages/unified/CHANGELOG.md index 0b1c6d020..3e0f37cba 100644 --- a/packages/unified/CHANGELOG.md +++ b/packages/unified/CHANGELOG.md @@ -3,6 +3,40 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.0.0-zen-plus-zoning.2](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/unified@1.0.0-zen-plus-zoning.0...@amplitude/unified@1.0.0-zen-plus-zoning.2) (2025-11-20) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +# [1.0.0-zen-plus-zoning.1](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/unified@1.0.0-zen-plus-zoning.0...@amplitude/unified@1.0.0-zen-plus-zoning.1) (2025-11-19) + + +### Reverts + +* Revert "chore(release): publish" ([da9ba2f](https://github.com/amplitude/Amplitude-TypeScript/commit/da9ba2fc063566f871289110bfd3238b6d181671)) + + + + + +# [1.0.0-zen-plus-zoning.0](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/unified@1.0.0-zen-observable-migration.1...@amplitude/unified@1.0.0-zen-plus-zoning.0) (2025-11-12) + + +### Reverts + +* Revert "chore(release): publish" ([f68b67f](https://github.com/amplitude/Amplitude-TypeScript/commit/f68b67f83fb3866b5159087702a8d122b091e0f7)) +* Revert "chore(release): publish" ([6b53d02](https://github.com/amplitude/Amplitude-TypeScript/commit/6b53d022aab0fc297fdc14652599567667c34561)) + + + + + # [1.0.0-beta.15](https://github.com/amplitude/Amplitude-TypeScript/compare/@amplitude/unified@1.0.0-beta.14...@amplitude/unified@1.0.0-beta.15) (2025-11-05) **Note:** Version bump only for package @amplitude/unified diff --git a/packages/unified/package.json b/packages/unified/package.json index 56334e888..e26a3e7bb 100644 --- a/packages/unified/package.json +++ b/packages/unified/package.json @@ -1,6 +1,6 @@ { "name": "@amplitude/unified", - "version": "1.0.0-beta.15", + "version": "1.0.0-zen-plus-zoning.2", "description": "Official Amplitude SDK for Web analytics, experiment, session replay, and more.", "keywords": [ "amplitude", @@ -47,11 +47,11 @@ "version-file": "echo '// Autogenerated by `yarn version-file`. DO NOT EDIT' > src/version.ts && node -p \"'export const VERSION = \\'' + require('./package.json').version + '\\';'\" >> src/version.ts" }, "dependencies": { - "@amplitude/analytics-browser": "^2.30.1", - "@amplitude/analytics-core": "^2.31.1", + "@amplitude/analytics-browser": "2.31.0-zen-plus-zoning.2", + "@amplitude/analytics-core": "2.32.0-zen-plus-zoning.2", "@amplitude/engagement-browser": "^1.0.3", "@amplitude/plugin-experiment-browser": "^1.0.0-beta.0", - "@amplitude/plugin-session-replay-browser": "^1.23.2" + "@amplitude/plugin-session-replay-browser": "1.23.3-zen-plus-zoning.2" }, "devDependencies": { "rollup": "^2.79.1" diff --git a/packages/unified/src/version.ts b/packages/unified/src/version.ts index 152f1429b..6b93e7755 100644 --- a/packages/unified/src/version.ts +++ b/packages/unified/src/version.ts @@ -1,2 +1,2 @@ // Autogenerated by `yarn version-file`. DO NOT EDIT -export const VERSION = '1.0.0-beta.15'; +export const VERSION = '1.0.0-zen-plus-zoning.2'; diff --git a/test-server/attribution/default-tracking.html b/test-server/attribution/default-tracking.html new file mode 100644 index 000000000..30bb4d895 --- /dev/null +++ b/test-server/attribution/default-tracking.html @@ -0,0 +1,117 @@ + + + + + + + + Attribution Test + + + +
+

Attribution bug test

+
+ + + In incognito open + http://localhost:5173/attribution/default-tracking.html?utm_campaign=helloworld224 + + \ No newline at end of file diff --git a/test-server/autocapture/element-interactions.html b/test-server/autocapture/element-interactions.html index 33c0993ff..75612d172 100644 --- a/test-server/autocapture/element-interactions.html +++ b/test-server/autocapture/element-interactions.html @@ -216,6 +216,7 @@

Buttons

+
@@ -245,9 +246,11 @@

Clickable Elements

Content Changing Button

+ +
Change Content
-

This content will change when you click the button above.

+

This content will change when you click the button or div above.

@@ -269,7 +272,9 @@

Content Changing Button

identify, fetchRemoteConfig: false, autocapture: { - elementInteractions: true, + elementInteractions: { + debounceTime: 1000, + }, frustrationInteractions, sessions: true, }, @@ -292,6 +297,14 @@

Content Changing Button

display.innerHTML = `

Content changed at ${timeString}!

`; }); + // Add click handler for the content changer div + document.getElementById('content-changer-div').addEventListener('click', () => { + const display = document.getElementById('content-display'); + const now = new Date(); + const timeString = now.toLocaleTimeString(); + display.innerHTML = `

Content changed at ${timeString}!

`; + }); + // Prevent form submission from refreshing the page document.getElementById('test-form').addEventListener('submit', (event) => { event.preventDefault(); diff --git a/yarn.lock b/yarn.lock index ca14d2bc8..023606713 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13,9 +13,9 @@ integrity sha512-RiMPHBqdrJ8ktTqG+Wzj2htnN/PCG9jGZG0SXtTFnWwVvcAJYbYm55/nrP1TTyrx1OlLhvF2VG3lVUP/xGAU8w== "@amplitude/engagement-browser@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@amplitude/engagement-browser/-/engagement-browser-1.0.3.tgz#9406cfe4c0100b60d3019a5875c0fba741bcd603" - integrity sha512-2OvjNNHNwNhj+Oc4vyZlOb6t4z6JNFKIUhji4+U3kFPrrqGOQj6WPnMTxjI4j4e5DFeIRMcg739k26y5QSqgQw== + version "1.0.5" + resolved "https://registry.yarnpkg.com/@amplitude/engagement-browser/-/engagement-browser-1.0.5.tgz#0746b9df0a4b9f7df8671c6bc730e4c3c376b874" + integrity sha512-Sr+smknZFWpvylnGE2EtTn/alCZN9hp0j8q57R+Q5qGgCJddUaJbd0oouawfOEvpV1L2eXrdj4xzi9lrgvA0Gw== dependencies: "@amplitude/analytics-types" "^1.0.0" @@ -35,30 +35,30 @@ dependencies: js-base64 "^3.7.5" -"@amplitude/experiment-core@^0.11.0": - version "0.11.0" - resolved "https://registry.yarnpkg.com/@amplitude/experiment-core/-/experiment-core-0.11.0.tgz#a4aa408b0f2f087dbaaa0452eb8e91591f03a5a1" - integrity sha512-egqb/eWFUU+gn6w3t9/L8PHpivAZrIVOX6dTk0NUVNfG3jeN4VuB77BOvu51xxfNF3Hvs6J49do9hRtE/LdvSw== +"@amplitude/experiment-core@^0.11.1": + version "0.11.1" + resolved "https://registry.yarnpkg.com/@amplitude/experiment-core/-/experiment-core-0.11.1.tgz#31eb485dc40b65f4cc2f15adab9b62f0df622065" + integrity sha512-fHVJazCwwgjUcj49N+yFSLMSroyY0eHImrsmd1ipIjIT1Cez8mh+TvwJQ0LGSdyYvL2NAZM2J5vpXrR1nHgdzg== dependencies: js-base64 "^3.7.5" "@amplitude/experiment-js-client@^1.15.5": - version "1.17.0" - resolved "https://registry.yarnpkg.com/@amplitude/experiment-js-client/-/experiment-js-client-1.17.0.tgz#ed7ff86f12acf2424352e531c2d0e4e59e9847ad" - integrity sha512-iQ3x9I8vj7uIrGhKRXlrOTr6lxJKh6wnWQcNxoLzaWMTwCed7uqFL8uGr3rUEEp7o3LzAOi/CD6hHyV9lNqUeg== + version "1.19.0" + resolved "https://registry.yarnpkg.com/@amplitude/experiment-js-client/-/experiment-js-client-1.19.0.tgz#5609eb603322cc1292f79185304c93977d27cad5" + integrity sha512-CBYQfMHJpRgVzyKCBsR8af26PTEnBy4/G1b+V8FvVnKmbPWpMCN23oFXo8RWdc1WdkcY4htGxSsHHZGggOfeiw== dependencies: "@amplitude/analytics-connector" "^1.6.4" - "@amplitude/experiment-core" "^0.11.0" + "@amplitude/experiment-core" "^0.11.1" "@amplitude/ua-parser-js" "^0.7.31" base64-js "1.5.1" unfetch "4.1.0" -"@amplitude/rrdom@^2.0.0-alpha.32": - version "2.0.0-alpha.32" - resolved "https://registry.yarnpkg.com/@amplitude/rrdom/-/rrdom-2.0.0-alpha.32.tgz#f86c13ee05da3ff94fdc07323cb23c5830f03f5c" - integrity sha512-FvEoclQ/wHBh9if060V1eaDexUJMUWUV1g3w7+mKfz9yO1aT0XmY+UAqE7mvaEB2GnWyIPYMlFrKTZ25JZ8z+w== +"@amplitude/rrdom@^2.0.0-alpha.33": + version "2.0.0-alpha.33" + resolved "https://registry.yarnpkg.com/@amplitude/rrdom/-/rrdom-2.0.0-alpha.33.tgz#dfba53077736f16dceb611f2f18125f818a94986" + integrity sha512-uu+1w1RGEJ7QcGPwCC898YBR47DpNYOZTnQMY9/IgMzTXQ0+Hh1/JLsQfMnBBtAePhvCS0BlHd/qGD5w0taIcg== dependencies: - "@amplitude/rrweb-snapshot" "^2.0.0-alpha.32" + "@amplitude/rrweb-snapshot" "^2.0.0-alpha.33" "@amplitude/rrweb-packer@2.0.0-alpha.32": version "2.0.0-alpha.32" @@ -81,32 +81,42 @@ "@amplitude/rrweb" "^2.0.0-alpha.32" "@amplitude/rrweb-types" "^2.0.0-alpha.32" -"@amplitude/rrweb-snapshot@^2.0.0-alpha.32": - version "2.0.0-alpha.32" - resolved "https://registry.yarnpkg.com/@amplitude/rrweb-snapshot/-/rrweb-snapshot-2.0.0-alpha.32.tgz#7793a59cc5ae72146afa92d14c4afcc9606fcd50" - integrity sha512-7kBfo965IS0HxGsB8yMClIARGbUMMdnu+7TkKwvnWRkfBiKLGu1DbYiE6wr3dBsScpyy/orPRoLDbxGVFctaZg== +"@amplitude/rrweb-snapshot@^2.0.0-alpha.33": + version "2.0.0-alpha.33" + resolved "https://registry.yarnpkg.com/@amplitude/rrweb-snapshot/-/rrweb-snapshot-2.0.0-alpha.33.tgz#2a1e6dfcfed95d5912519b14b92c163ab432a391" + integrity sha512-06CgbRFS+cYDo1tUa+Fe8eo4QA9qmYv9Azio3UYlYxqJf4BtAYSL0eXuzVBuqt3ZXnQwzBlsUj/8QWKKySkO7A== dependencies: postcss "^8.4.38" -"@amplitude/rrweb-types@2.0.0-alpha.32", "@amplitude/rrweb-types@^2.0.0-alpha.32": +"@amplitude/rrweb-types@2.0.0-alpha.32": version "2.0.0-alpha.32" resolved "https://registry.yarnpkg.com/@amplitude/rrweb-types/-/rrweb-types-2.0.0-alpha.32.tgz#c880e085df841e1f0ca6381f7410508ffb1f537d" integrity sha512-tDs8uizkG+UwE2GKjXh+gH8WhUz0C3y7WfTwrtWi1TnsVc00sXaKSUo5G2h4YF4PGK6dpnLgJBqTwrqCZ211AQ== -"@amplitude/rrweb-utils@2.0.0-alpha.32", "@amplitude/rrweb-utils@^2.0.0-alpha.32": +"@amplitude/rrweb-types@^2.0.0-alpha.32", "@amplitude/rrweb-types@^2.0.0-alpha.33": + version "2.0.0-alpha.33" + resolved "https://registry.yarnpkg.com/@amplitude/rrweb-types/-/rrweb-types-2.0.0-alpha.33.tgz#9fc43c74c1bc010453d3d0bd57d66ab6860ecb11" + integrity sha512-OTUqndbcuXDZczf99NUq2PqQWTZ4JHK7oF8YT7aOXh1pJVEWhfe6S+J0idHd3YFCy1TD9gtOcdnz5nDJN68Wnw== + +"@amplitude/rrweb-utils@2.0.0-alpha.32": version "2.0.0-alpha.32" resolved "https://registry.yarnpkg.com/@amplitude/rrweb-utils/-/rrweb-utils-2.0.0-alpha.32.tgz#8d243b8f565d74c72c34704a7fbaf468a6b70a4b" integrity sha512-DCCQjuNACkIMkdY5/KBaEgL4znRHU694ClW3RIjqFXJ6j6pqGyjEhCqtlCes+XwdgwOQKnJGMNka3J9rmrSqHg== +"@amplitude/rrweb-utils@^2.0.0-alpha.33": + version "2.0.0-alpha.33" + resolved "https://registry.yarnpkg.com/@amplitude/rrweb-utils/-/rrweb-utils-2.0.0-alpha.33.tgz#fddb3fb31651f20b959e9463438cf34f1d3e4dd5" + integrity sha512-brK6csN0Tj1W5gYERFhamWEPeFLbz9nYokdaUtd8PL/Y0owWXNX11KGP4pMWvl/f1bElDU0vcu3uYAzM4YGLQw== + "@amplitude/rrweb@^2.0.0-alpha.32": - version "2.0.0-alpha.32" - resolved "https://registry.yarnpkg.com/@amplitude/rrweb/-/rrweb-2.0.0-alpha.32.tgz#1a9109974fbdf7c94328608de703657bd02b09f1" - integrity sha512-hpQTvFTTpRcz8ZODSR7WYEe02IXE5pXdPZivFbScr6UihiXvAApr41eVDP0tEQlg+JvahOYtuf8kyU89p+NIqg== - dependencies: - "@amplitude/rrdom" "^2.0.0-alpha.32" - "@amplitude/rrweb-snapshot" "^2.0.0-alpha.32" - "@amplitude/rrweb-types" "^2.0.0-alpha.32" - "@amplitude/rrweb-utils" "^2.0.0-alpha.32" + version "2.0.0-alpha.33" + resolved "https://registry.yarnpkg.com/@amplitude/rrweb/-/rrweb-2.0.0-alpha.33.tgz#c04174aa018542822154b0b1847ea95f8065d105" + integrity sha512-vMuk/3HzDWaUzBLFxKd7IpA8TEWjyPZBuLiLexMd/mOfTt/+JkVLsfXiJOyltJfR98LpmMTp1q51dtq357Dnfg== + dependencies: + "@amplitude/rrdom" "^2.0.0-alpha.33" + "@amplitude/rrweb-snapshot" "^2.0.0-alpha.33" + "@amplitude/rrweb-types" "^2.0.0-alpha.33" + "@amplitude/rrweb-utils" "^2.0.0-alpha.33" "@types/css-font-loading-module" "0.0.7" "@xstate/fsm" "^1.4.0" base64-arraybuffer "^1.0.1" @@ -186,444 +196,443 @@ tslib "^2.6.2" "@aws-sdk/client-s3@^3.229.0": - version "3.896.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.896.0.tgz#a9b0b0b8f08aab26cb653db82bed612900f6d038" - integrity sha512-UETVuMLQRqgrWxTnavotY0TlB/jaR9sL3hkIFPx4KtjmigNBdwRaiVfOuTnIXKd+w9RPINYG//nnrK+5gIyZkA== + version "3.929.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-s3/-/client-s3-3.929.0.tgz#9d34ffa708f5e3a0bc39859df51cb55b051054ad" + integrity sha512-M6G+1CBTowN+m0Jrww5/AXMqlk4nIJqwaa/vOw+EbvLD7ROpBs6bStSai9esP9PkIVW6KMu4zCIgHzKhGa3R2A== 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.896.0" - "@aws-sdk/credential-provider-node" "3.896.0" - "@aws-sdk/middleware-bucket-endpoint" "3.893.0" - "@aws-sdk/middleware-expect-continue" "3.893.0" - "@aws-sdk/middleware-flexible-checksums" "3.896.0" - "@aws-sdk/middleware-host-header" "3.893.0" - "@aws-sdk/middleware-location-constraint" "3.893.0" - "@aws-sdk/middleware-logger" "3.893.0" - "@aws-sdk/middleware-recursion-detection" "3.893.0" - "@aws-sdk/middleware-sdk-s3" "3.896.0" - "@aws-sdk/middleware-ssec" "3.893.0" - "@aws-sdk/middleware-user-agent" "3.896.0" - "@aws-sdk/region-config-resolver" "3.893.0" - "@aws-sdk/signature-v4-multi-region" "3.896.0" - "@aws-sdk/types" "3.893.0" - "@aws-sdk/util-endpoints" "3.895.0" - "@aws-sdk/util-user-agent-browser" "3.893.0" - "@aws-sdk/util-user-agent-node" "3.896.0" - "@aws-sdk/xml-builder" "3.894.0" - "@smithy/config-resolver" "^4.2.2" - "@smithy/core" "^3.12.0" - "@smithy/eventstream-serde-browser" "^4.1.1" - "@smithy/eventstream-serde-config-resolver" "^4.2.1" - "@smithy/eventstream-serde-node" "^4.1.1" - "@smithy/fetch-http-handler" "^5.2.1" - "@smithy/hash-blob-browser" "^4.1.1" - "@smithy/hash-node" "^4.1.1" - "@smithy/hash-stream-node" "^4.1.1" - "@smithy/invalid-dependency" "^4.1.1" - "@smithy/md5-js" "^4.1.1" - "@smithy/middleware-content-length" "^4.1.1" - "@smithy/middleware-endpoint" "^4.2.4" - "@smithy/middleware-retry" "^4.3.0" - "@smithy/middleware-serde" "^4.1.1" - "@smithy/middleware-stack" "^4.1.1" - "@smithy/node-config-provider" "^4.2.2" - "@smithy/node-http-handler" "^4.2.1" - "@smithy/protocol-http" "^5.2.1" - "@smithy/smithy-client" "^4.6.4" - "@smithy/types" "^4.5.0" - "@smithy/url-parser" "^4.1.1" - "@smithy/util-base64" "^4.1.0" - "@smithy/util-body-length-browser" "^4.1.0" - "@smithy/util-body-length-node" "^4.1.0" - "@smithy/util-defaults-mode-browser" "^4.1.4" - "@smithy/util-defaults-mode-node" "^4.1.4" - "@smithy/util-endpoints" "^3.1.2" - "@smithy/util-middleware" "^4.1.1" - "@smithy/util-retry" "^4.1.2" - "@smithy/util-stream" "^4.3.2" - "@smithy/util-utf8" "^4.1.0" - "@smithy/util-waiter" "^4.1.1" - "@smithy/uuid" "^1.0.0" + "@aws-sdk/core" "3.928.0" + "@aws-sdk/credential-provider-node" "3.929.0" + "@aws-sdk/middleware-bucket-endpoint" "3.922.0" + "@aws-sdk/middleware-expect-continue" "3.922.0" + "@aws-sdk/middleware-flexible-checksums" "3.928.0" + "@aws-sdk/middleware-host-header" "3.922.0" + "@aws-sdk/middleware-location-constraint" "3.922.0" + "@aws-sdk/middleware-logger" "3.922.0" + "@aws-sdk/middleware-recursion-detection" "3.922.0" + "@aws-sdk/middleware-sdk-s3" "3.928.0" + "@aws-sdk/middleware-ssec" "3.922.0" + "@aws-sdk/middleware-user-agent" "3.928.0" + "@aws-sdk/region-config-resolver" "3.925.0" + "@aws-sdk/signature-v4-multi-region" "3.928.0" + "@aws-sdk/types" "3.922.0" + "@aws-sdk/util-endpoints" "3.922.0" + "@aws-sdk/util-user-agent-browser" "3.922.0" + "@aws-sdk/util-user-agent-node" "3.928.0" + "@aws-sdk/xml-builder" "3.921.0" + "@smithy/config-resolver" "^4.4.2" + "@smithy/core" "^3.17.2" + "@smithy/eventstream-serde-browser" "^4.2.4" + "@smithy/eventstream-serde-config-resolver" "^4.3.4" + "@smithy/eventstream-serde-node" "^4.2.4" + "@smithy/fetch-http-handler" "^5.3.5" + "@smithy/hash-blob-browser" "^4.2.5" + "@smithy/hash-node" "^4.2.4" + "@smithy/hash-stream-node" "^4.2.4" + "@smithy/invalid-dependency" "^4.2.4" + "@smithy/md5-js" "^4.2.4" + "@smithy/middleware-content-length" "^4.2.4" + "@smithy/middleware-endpoint" "^4.3.6" + "@smithy/middleware-retry" "^4.4.6" + "@smithy/middleware-serde" "^4.2.4" + "@smithy/middleware-stack" "^4.2.4" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/node-http-handler" "^4.4.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/smithy-client" "^4.9.2" + "@smithy/types" "^4.8.1" + "@smithy/url-parser" "^4.2.4" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-body-length-browser" "^4.2.0" + "@smithy/util-body-length-node" "^4.2.1" + "@smithy/util-defaults-mode-browser" "^4.3.5" + "@smithy/util-defaults-mode-node" "^4.2.8" + "@smithy/util-endpoints" "^3.2.4" + "@smithy/util-middleware" "^4.2.4" + "@smithy/util-retry" "^4.2.4" + "@smithy/util-stream" "^4.5.5" + "@smithy/util-utf8" "^4.2.0" + "@smithy/util-waiter" "^4.2.4" + "@smithy/uuid" "^1.1.0" tslib "^2.6.2" -"@aws-sdk/client-sso@3.896.0": - version "3.896.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.896.0.tgz#a93eb9043e28156345676c5e35035365f67897d9" - integrity sha512-mpE3mrNili1dcvEvxaYjyoib8HlRXkb2bY5a3WeK++KObFY+HUujKtgQmiNSRX5YwQszm//fTrmGMmv9zpMcKg== +"@aws-sdk/client-sso@3.929.0": + version "3.929.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.929.0.tgz#82f85ac8a15ed296b94f391477a5f417bbc31549" + integrity sha512-CE1T7PvN2MDRCw96BTUz2Zcnb6Lae3Dl4w3TPB5auBv2sAiIPbQegFUwT2C8teMDGCNXyndzoTvAd4wmO9AcpA== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.896.0" - "@aws-sdk/middleware-host-header" "3.893.0" - "@aws-sdk/middleware-logger" "3.893.0" - "@aws-sdk/middleware-recursion-detection" "3.893.0" - "@aws-sdk/middleware-user-agent" "3.896.0" - "@aws-sdk/region-config-resolver" "3.893.0" - "@aws-sdk/types" "3.893.0" - "@aws-sdk/util-endpoints" "3.895.0" - "@aws-sdk/util-user-agent-browser" "3.893.0" - "@aws-sdk/util-user-agent-node" "3.896.0" - "@smithy/config-resolver" "^4.2.2" - "@smithy/core" "^3.12.0" - "@smithy/fetch-http-handler" "^5.2.1" - "@smithy/hash-node" "^4.1.1" - "@smithy/invalid-dependency" "^4.1.1" - "@smithy/middleware-content-length" "^4.1.1" - "@smithy/middleware-endpoint" "^4.2.4" - "@smithy/middleware-retry" "^4.3.0" - "@smithy/middleware-serde" "^4.1.1" - "@smithy/middleware-stack" "^4.1.1" - "@smithy/node-config-provider" "^4.2.2" - "@smithy/node-http-handler" "^4.2.1" - "@smithy/protocol-http" "^5.2.1" - "@smithy/smithy-client" "^4.6.4" - "@smithy/types" "^4.5.0" - "@smithy/url-parser" "^4.1.1" - "@smithy/util-base64" "^4.1.0" - "@smithy/util-body-length-browser" "^4.1.0" - "@smithy/util-body-length-node" "^4.1.0" - "@smithy/util-defaults-mode-browser" "^4.1.4" - "@smithy/util-defaults-mode-node" "^4.1.4" - "@smithy/util-endpoints" "^3.1.2" - "@smithy/util-middleware" "^4.1.1" - "@smithy/util-retry" "^4.1.2" - "@smithy/util-utf8" "^4.1.0" + "@aws-sdk/core" "3.928.0" + "@aws-sdk/middleware-host-header" "3.922.0" + "@aws-sdk/middleware-logger" "3.922.0" + "@aws-sdk/middleware-recursion-detection" "3.922.0" + "@aws-sdk/middleware-user-agent" "3.928.0" + "@aws-sdk/region-config-resolver" "3.925.0" + "@aws-sdk/types" "3.922.0" + "@aws-sdk/util-endpoints" "3.922.0" + "@aws-sdk/util-user-agent-browser" "3.922.0" + "@aws-sdk/util-user-agent-node" "3.928.0" + "@smithy/config-resolver" "^4.4.2" + "@smithy/core" "^3.17.2" + "@smithy/fetch-http-handler" "^5.3.5" + "@smithy/hash-node" "^4.2.4" + "@smithy/invalid-dependency" "^4.2.4" + "@smithy/middleware-content-length" "^4.2.4" + "@smithy/middleware-endpoint" "^4.3.6" + "@smithy/middleware-retry" "^4.4.6" + "@smithy/middleware-serde" "^4.2.4" + "@smithy/middleware-stack" "^4.2.4" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/node-http-handler" "^4.4.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/smithy-client" "^4.9.2" + "@smithy/types" "^4.8.1" + "@smithy/url-parser" "^4.2.4" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-body-length-browser" "^4.2.0" + "@smithy/util-body-length-node" "^4.2.1" + "@smithy/util-defaults-mode-browser" "^4.3.5" + "@smithy/util-defaults-mode-node" "^4.2.8" + "@smithy/util-endpoints" "^3.2.4" + "@smithy/util-middleware" "^4.2.4" + "@smithy/util-retry" "^4.2.4" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/core@3.896.0": - version "3.896.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.896.0.tgz#883360ca8035e0844372370501c62409c0c8ce12" - integrity sha512-uJaoyWKeGNyCyeI+cIJrD7LEB4iF/W8/x2ij7zg32OFpAAJx96N34/e+XSKp/xkJpO5FKiBOskKLnHeUsJsAPA== - dependencies: - "@aws-sdk/types" "3.893.0" - "@aws-sdk/xml-builder" "3.894.0" - "@smithy/core" "^3.12.0" - "@smithy/node-config-provider" "^4.2.2" - "@smithy/property-provider" "^4.1.1" - "@smithy/protocol-http" "^5.2.1" - "@smithy/signature-v4" "^5.2.1" - "@smithy/smithy-client" "^4.6.4" - "@smithy/types" "^4.5.0" - "@smithy/util-base64" "^4.1.0" - "@smithy/util-middleware" "^4.1.1" - "@smithy/util-utf8" "^4.1.0" +"@aws-sdk/core@3.928.0": + version "3.928.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.928.0.tgz#abbb1ad9e6f1ab0ea951245aa90a92f59f8722c5" + integrity sha512-e28J2uKjy2uub4u41dNnmzAu0AN3FGB+LRcLN2Qnwl9Oq3kIcByl5sM8ZD+vWpNG+SFUrUasBCq8cMnHxwXZ4w== + dependencies: + "@aws-sdk/types" "3.922.0" + "@aws-sdk/xml-builder" "3.921.0" + "@smithy/core" "^3.17.2" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/property-provider" "^4.2.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/signature-v4" "^5.3.4" + "@smithy/smithy-client" "^4.9.2" + "@smithy/types" "^4.8.1" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-middleware" "^4.2.4" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/credential-provider-env@3.896.0": - version "3.896.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.896.0.tgz#f385c8395fee16abdda5f73c391dee78dd326157" - integrity sha512-Cnqhupdkp825ICySrz4QTI64Nq3AmUAscPW8dueanni0avYBDp7RBppX4H0+6icqN569B983XNfQ0YSImQhfhg== +"@aws-sdk/credential-provider-env@3.928.0": + version "3.928.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.928.0.tgz#4f6f59ee3504b208e2b36af66dcd56b1d0e9aa2f" + integrity sha512-tB8F9Ti0/NFyFVQX8UQtgRik88evtHpyT6WfXOB4bAY6lEnEHA0ubJZmk9y+aUeoE+OsGLx70dC3JUsiiCPJkQ== dependencies: - "@aws-sdk/core" "3.896.0" - "@aws-sdk/types" "3.893.0" - "@smithy/property-provider" "^4.1.1" - "@smithy/types" "^4.5.0" + "@aws-sdk/core" "3.928.0" + "@aws-sdk/types" "3.922.0" + "@smithy/property-provider" "^4.2.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-http@3.896.0": - version "3.896.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.896.0.tgz#4715b4205c42c4adf0b6efb3e228639f1e038802" - integrity sha512-CN0fTCKCUA1OTSx1c76o8XyJCy2WoI/av3J8r8mL6GmxTerhLRyzDy/MwxzPjTYPoL+GLEg6V4a9fRkWj1hBUA== - dependencies: - "@aws-sdk/core" "3.896.0" - "@aws-sdk/types" "3.893.0" - "@smithy/fetch-http-handler" "^5.2.1" - "@smithy/node-http-handler" "^4.2.1" - "@smithy/property-provider" "^4.1.1" - "@smithy/protocol-http" "^5.2.1" - "@smithy/smithy-client" "^4.6.4" - "@smithy/types" "^4.5.0" - "@smithy/util-stream" "^4.3.2" +"@aws-sdk/credential-provider-http@3.928.0": + version "3.928.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.928.0.tgz#6ca904bcda2e89c866a4209e2f5feff238da258e" + integrity sha512-67ynC/8UW9Y8Gn1ZZtC3OgcQDGWrJelHmkbgpmmxYUrzVhp+NINtz3wiTzrrBFhPH/8Uy6BxvhMfXhn0ptcMEQ== + dependencies: + "@aws-sdk/core" "3.928.0" + "@aws-sdk/types" "3.922.0" + "@smithy/fetch-http-handler" "^5.3.5" + "@smithy/node-http-handler" "^4.4.4" + "@smithy/property-provider" "^4.2.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/smithy-client" "^4.9.2" + "@smithy/types" "^4.8.1" + "@smithy/util-stream" "^4.5.5" tslib "^2.6.2" -"@aws-sdk/credential-provider-ini@3.896.0": - version "3.896.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.896.0.tgz#8e4eaa85ad10ce5988381ee19f6bf96d14cbcab0" - integrity sha512-+rbYG98czzwZLTYHJasK+VBjnIeXk73mRpZXHvaa4kDNxBezdN2YsoGNpLlPSxPdbpq18LY3LRtkdFTaT6DIQA== - dependencies: - "@aws-sdk/core" "3.896.0" - "@aws-sdk/credential-provider-env" "3.896.0" - "@aws-sdk/credential-provider-http" "3.896.0" - "@aws-sdk/credential-provider-process" "3.896.0" - "@aws-sdk/credential-provider-sso" "3.896.0" - "@aws-sdk/credential-provider-web-identity" "3.896.0" - "@aws-sdk/nested-clients" "3.896.0" - "@aws-sdk/types" "3.893.0" - "@smithy/credential-provider-imds" "^4.1.2" - "@smithy/property-provider" "^4.1.1" - "@smithy/shared-ini-file-loader" "^4.2.0" - "@smithy/types" "^4.5.0" +"@aws-sdk/credential-provider-ini@3.929.0": + version "3.929.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.929.0.tgz#45e08e5163ac6bdbb279892f56ec104508bd71f5" + integrity sha512-XIzWsJUYeS/DjggHFB53sGGjXdlN/BA6x+Y/JvLbpdkGD2yLISU34/cDPbK/O8BAQCRTCQ69VPa/1AdNgZZRQw== + dependencies: + "@aws-sdk/core" "3.928.0" + "@aws-sdk/credential-provider-env" "3.928.0" + "@aws-sdk/credential-provider-http" "3.928.0" + "@aws-sdk/credential-provider-process" "3.928.0" + "@aws-sdk/credential-provider-sso" "3.929.0" + "@aws-sdk/credential-provider-web-identity" "3.929.0" + "@aws-sdk/nested-clients" "3.929.0" + "@aws-sdk/types" "3.922.0" + "@smithy/credential-provider-imds" "^4.2.4" + "@smithy/property-provider" "^4.2.4" + "@smithy/shared-ini-file-loader" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-node@3.896.0": - version "3.896.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.896.0.tgz#6b25a92b18d051d04b88d31ed36ff5025cfe7c10" - integrity sha512-J0Jm+56MNngk1PIyqoJFf5FC2fjA4CYXlqODqNRDtid7yk7HB9W3UTtvxofmii5KJOLcHGNPdGnHWKkUc+xYgw== - dependencies: - "@aws-sdk/credential-provider-env" "3.896.0" - "@aws-sdk/credential-provider-http" "3.896.0" - "@aws-sdk/credential-provider-ini" "3.896.0" - "@aws-sdk/credential-provider-process" "3.896.0" - "@aws-sdk/credential-provider-sso" "3.896.0" - "@aws-sdk/credential-provider-web-identity" "3.896.0" - "@aws-sdk/types" "3.893.0" - "@smithy/credential-provider-imds" "^4.1.2" - "@smithy/property-provider" "^4.1.1" - "@smithy/shared-ini-file-loader" "^4.2.0" - "@smithy/types" "^4.5.0" +"@aws-sdk/credential-provider-node@3.929.0": + version "3.929.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.929.0.tgz#83eddbee1a6c6b84ef1dc7b9244898effa1324c1" + integrity sha512-GhNZEacpa7fh8GNggshm5S93UK25bCV5aDK8c2vfe7Y3OxBiL89Ox5GUKCu0xIOqiBdfYkI9wvWCFsQRRn7Bjw== + dependencies: + "@aws-sdk/credential-provider-env" "3.928.0" + "@aws-sdk/credential-provider-http" "3.928.0" + "@aws-sdk/credential-provider-ini" "3.929.0" + "@aws-sdk/credential-provider-process" "3.928.0" + "@aws-sdk/credential-provider-sso" "3.929.0" + "@aws-sdk/credential-provider-web-identity" "3.929.0" + "@aws-sdk/types" "3.922.0" + "@smithy/credential-provider-imds" "^4.2.4" + "@smithy/property-provider" "^4.2.4" + "@smithy/shared-ini-file-loader" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-process@3.896.0": - version "3.896.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.896.0.tgz#008a1e09f7d276336bead54a9b7572ab2a7b8b3e" - integrity sha512-UfWVMQPZy7dus40c4LWxh5vQ+I51z0q4vf09Eqas5848e9DrGRG46GYIuc/gy+4CqEypjbg/XNMjnZfGLHxVnQ== +"@aws-sdk/credential-provider-process@3.928.0": + version "3.928.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.928.0.tgz#47771efe637d08ae7dd9ece8afbc52d2b0e92f39" + integrity sha512-XL0juran8yhqwn0mreV+NJeHJOkcRBaExsvVn9fXWW37A4gLh4esSJxM2KbSNh0t+/Bk3ehBI5sL9xad+yRDuw== dependencies: - "@aws-sdk/core" "3.896.0" - "@aws-sdk/types" "3.893.0" - "@smithy/property-provider" "^4.1.1" - "@smithy/shared-ini-file-loader" "^4.2.0" - "@smithy/types" "^4.5.0" + "@aws-sdk/core" "3.928.0" + "@aws-sdk/types" "3.922.0" + "@smithy/property-provider" "^4.2.4" + "@smithy/shared-ini-file-loader" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-sso@3.896.0": - version "3.896.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.896.0.tgz#78609a50ed292675b691fef11f87281f4d844ad4" - integrity sha512-77Te8WrVdLABKlv7QyetXP6aYEX1UORiahLA1PXQb/p66aFBw18Xc6JiN/6zJ4RqdyV1Xr9rwYBwGYua93ANIA== - dependencies: - "@aws-sdk/client-sso" "3.896.0" - "@aws-sdk/core" "3.896.0" - "@aws-sdk/token-providers" "3.896.0" - "@aws-sdk/types" "3.893.0" - "@smithy/property-provider" "^4.1.1" - "@smithy/shared-ini-file-loader" "^4.2.0" - "@smithy/types" "^4.5.0" +"@aws-sdk/credential-provider-sso@3.929.0": + version "3.929.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.929.0.tgz#6390e8b3a06c95c1a6301d1658455f2881df4258" + integrity sha512-aADe6cLo4+9MUOe0GnC5kUn8IduEKnTxqBlsciZOplU0/0+Rdp9rRh/e9ZBskeIXZ33eO2HG+KDAf1lvtPT7dA== + dependencies: + "@aws-sdk/client-sso" "3.929.0" + "@aws-sdk/core" "3.928.0" + "@aws-sdk/token-providers" "3.929.0" + "@aws-sdk/types" "3.922.0" + "@smithy/property-provider" "^4.2.4" + "@smithy/shared-ini-file-loader" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/credential-provider-web-identity@3.896.0": - version "3.896.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.896.0.tgz#b80271e417bd2f26f349bec5a718301a16af9772" - integrity sha512-gwMwZWumo+V0xJplO8j2HIb1TfPsF9fbcRGXS0CanEvjg4fF2Xs1pOQl2oCw3biPZpxHB0plNZjqSF2eneGg9g== - dependencies: - "@aws-sdk/core" "3.896.0" - "@aws-sdk/nested-clients" "3.896.0" - "@aws-sdk/types" "3.893.0" - "@smithy/property-provider" "^4.1.1" - "@smithy/shared-ini-file-loader" "^4.2.0" - "@smithy/types" "^4.5.0" +"@aws-sdk/credential-provider-web-identity@3.929.0": + version "3.929.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.929.0.tgz#588070995f1756fc2818494ed8ae32ed6b6fed6a" + integrity sha512-L18JtW28xUZVTRHblgqZ8QTVGQfxpMLIuVYgQXrVWiY9Iz9EF4XrfZo3ywCAgqfgLi5pgg3fCxx/pe7uiMOs2w== + dependencies: + "@aws-sdk/core" "3.928.0" + "@aws-sdk/nested-clients" "3.929.0" + "@aws-sdk/types" "3.922.0" + "@smithy/property-provider" "^4.2.4" + "@smithy/shared-ini-file-loader" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/middleware-bucket-endpoint@3.893.0": - version "3.893.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.893.0.tgz#cf1b55edd6eb48a5e02cae57eddb2e467bb8ecd5" - integrity sha512-H+wMAoFC73T7M54OFIezdHXR9/lH8TZ3Cx1C3MEBb2ctlzQrVCd8LX8zmOtcGYC8plrRwV+8rNPe0FMqecLRew== +"@aws-sdk/middleware-bucket-endpoint@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.922.0.tgz#417efd18e8af948e694c5be751bde6d631138b3d" + integrity sha512-Dpr2YeOaLFqt3q1hocwBesynE3x8/dXZqXZRuzSX/9/VQcwYBFChHAm4mTAl4zuvArtDbLrwzWSxmOWYZGtq5w== dependencies: - "@aws-sdk/types" "3.893.0" + "@aws-sdk/types" "3.922.0" "@aws-sdk/util-arn-parser" "3.893.0" - "@smithy/node-config-provider" "^4.2.2" - "@smithy/protocol-http" "^5.2.1" - "@smithy/types" "^4.5.0" - "@smithy/util-config-provider" "^4.1.0" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/types" "^4.8.1" + "@smithy/util-config-provider" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/middleware-expect-continue@3.893.0": - version "3.893.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.893.0.tgz#af9e96f24d9323afe833db1e6c03a7791a24dd09" - integrity sha512-PEZkvD6k0X9sacHkvkVF4t2QyQEAzd35OJ2bIrjWCfc862TwukMMJ1KErRmQ1WqKXHKF4L0ed5vtWaO/8jVLNA== +"@aws-sdk/middleware-expect-continue@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.922.0.tgz#02f0b0402fcb8974765b3e7d20f43753bd05738c" + integrity sha512-xmnLWMtmHJHJBupSWMUEW1gyxuRIeQ1Ov2xa8Tqq77fPr4Ft2AluEwiDMaZIMHoAvpxWKEEt9Si59Li7GIA+bQ== dependencies: - "@aws-sdk/types" "3.893.0" - "@smithy/protocol-http" "^5.2.1" - "@smithy/types" "^4.5.0" + "@aws-sdk/types" "3.922.0" + "@smithy/protocol-http" "^5.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/middleware-flexible-checksums@3.896.0": - version "3.896.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.896.0.tgz#4cf407863ee3fda574fd8d42b0d07caa2c579fee" - integrity sha512-bB3W/IFG7HNNziACOp1aZVGGnrIahXc0PxZoU055JirEGQtDFIU1ZD7S9zLKmy9FFUvQsAeRL9nDFHbx8cwx/w== +"@aws-sdk/middleware-flexible-checksums@3.928.0": + version "3.928.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.928.0.tgz#3e62b563e671fb970b860090283445ed6b8b0608" + integrity sha512-9+aCRt7teItSIMbnGvOY+FhtJnW2ZBUbfD+ug29a/ZbobDfTwmtrmtgEIWdXryFaRbT03HHfaJ3a++lTw4osuw== dependencies: "@aws-crypto/crc32" "5.2.0" "@aws-crypto/crc32c" "5.2.0" "@aws-crypto/util" "5.2.0" - "@aws-sdk/core" "3.896.0" - "@aws-sdk/types" "3.893.0" - "@smithy/is-array-buffer" "^4.1.0" - "@smithy/node-config-provider" "^4.2.2" - "@smithy/protocol-http" "^5.2.1" - "@smithy/types" "^4.5.0" - "@smithy/util-middleware" "^4.1.1" - "@smithy/util-stream" "^4.3.2" - "@smithy/util-utf8" "^4.1.0" + "@aws-sdk/core" "3.928.0" + "@aws-sdk/types" "3.922.0" + "@smithy/is-array-buffer" "^4.2.0" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/types" "^4.8.1" + "@smithy/util-middleware" "^4.2.4" + "@smithy/util-stream" "^4.5.5" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/middleware-host-header@3.893.0": - version "3.893.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.893.0.tgz#1a4b14c11cff158b383e2b859be5c468d2c2c162" - integrity sha512-qL5xYRt80ahDfj9nDYLhpCNkDinEXvjLe/Qen/Y/u12+djrR2MB4DRa6mzBCkLkdXDtf0WAoW2EZsNCfGrmOEQ== +"@aws-sdk/middleware-host-header@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.922.0.tgz#f19621fd19764f7eb0a33795ce0f43402080e394" + integrity sha512-HPquFgBnq/KqKRVkiuCt97PmWbKtxQ5iUNLEc6FIviqOoZTmaYG3EDsIbuFBz9C4RHJU4FKLmHL2bL3FEId6AA== dependencies: - "@aws-sdk/types" "3.893.0" - "@smithy/protocol-http" "^5.2.1" - "@smithy/types" "^4.5.0" + "@aws-sdk/types" "3.922.0" + "@smithy/protocol-http" "^5.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/middleware-location-constraint@3.893.0": - version "3.893.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.893.0.tgz#4c032b7b4f7dab699ca78a47054551fd8e18dfb3" - integrity sha512-MlbBc7Ttb1ekbeeeFBU4DeEZOLb5s0Vl4IokvO17g6yJdLk4dnvZro9zdXl3e7NXK+kFxHRBFZe55p/42mVgDA== +"@aws-sdk/middleware-location-constraint@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.922.0.tgz#c455d40e3ab49014a1193fbcb2bf29885d345b7c" + integrity sha512-T4iqd7WQ2DDjCH/0s50mnhdoX+IJns83ZE+3zj9IDlpU0N2aq8R91IG890qTfYkUEdP9yRm0xir/CNed+v6Dew== dependencies: - "@aws-sdk/types" "3.893.0" - "@smithy/types" "^4.5.0" + "@aws-sdk/types" "3.922.0" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/middleware-logger@3.893.0": - version "3.893.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.893.0.tgz#4ecb20ee0771a2f3afdc07c1310b97251d3854e2" - integrity sha512-ZqzMecjju5zkBquSIfVfCORI/3Mge21nUY4nWaGQy+NUXehqCGG4W7AiVpiHGOcY2cGJa7xeEkYcr2E2U9U0AA== +"@aws-sdk/middleware-logger@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.922.0.tgz#3a43e2b7ec72b043751a7fd45f0514db77756be9" + integrity sha512-AkvYO6b80FBm5/kk2E636zNNcNgjztNNUxpqVx+huyGn9ZqGTzS4kLqW2hO6CBe5APzVtPCtiQsXL24nzuOlAg== dependencies: - "@aws-sdk/types" "3.893.0" - "@smithy/types" "^4.5.0" + "@aws-sdk/types" "3.922.0" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/middleware-recursion-detection@3.893.0": - version "3.893.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.893.0.tgz#9fde6f10e72fcbd8ce4f0eea629c07ca64ce86ba" - integrity sha512-H7Zotd9zUHQAr/wr3bcWHULYhEeoQrF54artgsoUGIf/9emv6LzY89QUccKIxYd6oHKNTrTyXm9F0ZZrzXNxlg== +"@aws-sdk/middleware-recursion-detection@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.922.0.tgz#cca89bd926ad05893f9b99b253fa50a6b6c7b829" + integrity sha512-TtSCEDonV/9R0VhVlCpxZbp/9sxQvTTRKzIf8LxW3uXpby6Wl8IxEciBJlxmSkoqxh542WRcko7NYODlvL/gDA== dependencies: - "@aws-sdk/types" "3.893.0" - "@aws/lambda-invoke-store" "^0.0.1" - "@smithy/protocol-http" "^5.2.1" - "@smithy/types" "^4.5.0" + "@aws-sdk/types" "3.922.0" + "@aws/lambda-invoke-store" "^0.1.1" + "@smithy/protocol-http" "^5.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/middleware-sdk-s3@3.896.0": - version "3.896.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.896.0.tgz#419d558892d49b63db68265577b6ca6a1e35516e" - integrity sha512-hlPu/AZ5Afa4ZafP+aXIjRtKm7BX57lurA+TJ+7nXm1Az8Du3Sg2tZXP2/GfqTztLIFQYj/Jy5smkJ0+1HNAPQ== +"@aws-sdk/middleware-sdk-s3@3.928.0": + version "3.928.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.928.0.tgz#576fe6763ad5065cdc839a32f160210d96e8d337" + integrity sha512-LTkjS6cpJ2PEtsottTKq7JxZV0oH+QJ12P/dGNPZL4URayjEMBVR/dp4zh835X/FPXzijga3sdotlIKzuFy9FA== dependencies: - "@aws-sdk/core" "3.896.0" - "@aws-sdk/types" "3.893.0" + "@aws-sdk/core" "3.928.0" + "@aws-sdk/types" "3.922.0" "@aws-sdk/util-arn-parser" "3.893.0" - "@smithy/core" "^3.12.0" - "@smithy/node-config-provider" "^4.2.2" - "@smithy/protocol-http" "^5.2.1" - "@smithy/signature-v4" "^5.2.1" - "@smithy/smithy-client" "^4.6.4" - "@smithy/types" "^4.5.0" - "@smithy/util-config-provider" "^4.1.0" - "@smithy/util-middleware" "^4.1.1" - "@smithy/util-stream" "^4.3.2" - "@smithy/util-utf8" "^4.1.0" + "@smithy/core" "^3.17.2" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/signature-v4" "^5.3.4" + "@smithy/smithy-client" "^4.9.2" + "@smithy/types" "^4.8.1" + "@smithy/util-config-provider" "^4.2.0" + "@smithy/util-middleware" "^4.2.4" + "@smithy/util-stream" "^4.5.5" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/middleware-ssec@3.893.0": - version "3.893.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.893.0.tgz#34ebc4e834d6412a64ce85376d7712a996b2d4db" - integrity sha512-e4ccCiAnczv9mMPheKjgKxZQN473mcup+3DPLVNnIw5GRbQoDqPSB70nUzfORKZvM7ar7xLMPxNR8qQgo1C8Rg== +"@aws-sdk/middleware-ssec@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.922.0.tgz#1c56b2619cdd604e97203148030f299980494008" + integrity sha512-eHvSJZTSRJO+/tjjGD6ocnPc8q9o3m26+qbwQTu/4V6yOJQ1q+xkDZNqwJQphL+CodYaQ7uljp8g1Ji/AN3D9w== dependencies: - "@aws-sdk/types" "3.893.0" - "@smithy/types" "^4.5.0" + "@aws-sdk/types" "3.922.0" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/middleware-user-agent@3.896.0": - version "3.896.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.896.0.tgz#be459f4b652e200cfded484f87353ac69fbef69f" - integrity sha512-so/3tZH34YIeqG/QJgn5ZinnmHRdXV1ehsj4wVUrezL/dVW86jfwIkQIwpw8roOC657UoUf91c9FDhCxs3J5aQ== - dependencies: - "@aws-sdk/core" "3.896.0" - "@aws-sdk/types" "3.893.0" - "@aws-sdk/util-endpoints" "3.895.0" - "@smithy/core" "^3.12.0" - "@smithy/protocol-http" "^5.2.1" - "@smithy/types" "^4.5.0" +"@aws-sdk/middleware-user-agent@3.928.0": + version "3.928.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.928.0.tgz#51fb98b44849712fe01e655182c9b9d9cb1d9630" + integrity sha512-ESvcfLx5PtpdUM3ptCwb80toBTd3y5I4w5jaeOPHihiZr7jkRLE/nsaCKzlqscPs6UQ8xI0maav04JUiTskcHw== + dependencies: + "@aws-sdk/core" "3.928.0" + "@aws-sdk/types" "3.922.0" + "@aws-sdk/util-endpoints" "3.922.0" + "@smithy/core" "^3.17.2" + "@smithy/protocol-http" "^5.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/nested-clients@3.896.0": - version "3.896.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.896.0.tgz#5fb0f31ca8a4a26d92b812e946e068d9b3c63bc6" - integrity sha512-KaHALB6DIXScJL/ExmonADr3jtTV6dpOHoEeTRSskJ/aW+rhZo7kH8SLmrwOT/qX8d5tza17YyR/oRkIKY6Eaw== +"@aws-sdk/nested-clients@3.929.0": + version "3.929.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.929.0.tgz#e8781115e6e237021e54830a7febcef840d808cc" + integrity sha512-emR4LTSupxPed1ni0zVxz5msezz/gA1YYXooiW567+NyhvLgSzDvNjK7GPU1waLCj1LrRFe7NkXX1pwa5sPrpw== dependencies: "@aws-crypto/sha256-browser" "5.2.0" "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.896.0" - "@aws-sdk/middleware-host-header" "3.893.0" - "@aws-sdk/middleware-logger" "3.893.0" - "@aws-sdk/middleware-recursion-detection" "3.893.0" - "@aws-sdk/middleware-user-agent" "3.896.0" - "@aws-sdk/region-config-resolver" "3.893.0" - "@aws-sdk/types" "3.893.0" - "@aws-sdk/util-endpoints" "3.895.0" - "@aws-sdk/util-user-agent-browser" "3.893.0" - "@aws-sdk/util-user-agent-node" "3.896.0" - "@smithy/config-resolver" "^4.2.2" - "@smithy/core" "^3.12.0" - "@smithy/fetch-http-handler" "^5.2.1" - "@smithy/hash-node" "^4.1.1" - "@smithy/invalid-dependency" "^4.1.1" - "@smithy/middleware-content-length" "^4.1.1" - "@smithy/middleware-endpoint" "^4.2.4" - "@smithy/middleware-retry" "^4.3.0" - "@smithy/middleware-serde" "^4.1.1" - "@smithy/middleware-stack" "^4.1.1" - "@smithy/node-config-provider" "^4.2.2" - "@smithy/node-http-handler" "^4.2.1" - "@smithy/protocol-http" "^5.2.1" - "@smithy/smithy-client" "^4.6.4" - "@smithy/types" "^4.5.0" - "@smithy/url-parser" "^4.1.1" - "@smithy/util-base64" "^4.1.0" - "@smithy/util-body-length-browser" "^4.1.0" - "@smithy/util-body-length-node" "^4.1.0" - "@smithy/util-defaults-mode-browser" "^4.1.4" - "@smithy/util-defaults-mode-node" "^4.1.4" - "@smithy/util-endpoints" "^3.1.2" - "@smithy/util-middleware" "^4.1.1" - "@smithy/util-retry" "^4.1.2" - "@smithy/util-utf8" "^4.1.0" + "@aws-sdk/core" "3.928.0" + "@aws-sdk/middleware-host-header" "3.922.0" + "@aws-sdk/middleware-logger" "3.922.0" + "@aws-sdk/middleware-recursion-detection" "3.922.0" + "@aws-sdk/middleware-user-agent" "3.928.0" + "@aws-sdk/region-config-resolver" "3.925.0" + "@aws-sdk/types" "3.922.0" + "@aws-sdk/util-endpoints" "3.922.0" + "@aws-sdk/util-user-agent-browser" "3.922.0" + "@aws-sdk/util-user-agent-node" "3.928.0" + "@smithy/config-resolver" "^4.4.2" + "@smithy/core" "^3.17.2" + "@smithy/fetch-http-handler" "^5.3.5" + "@smithy/hash-node" "^4.2.4" + "@smithy/invalid-dependency" "^4.2.4" + "@smithy/middleware-content-length" "^4.2.4" + "@smithy/middleware-endpoint" "^4.3.6" + "@smithy/middleware-retry" "^4.4.6" + "@smithy/middleware-serde" "^4.2.4" + "@smithy/middleware-stack" "^4.2.4" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/node-http-handler" "^4.4.4" + "@smithy/protocol-http" "^5.3.4" + "@smithy/smithy-client" "^4.9.2" + "@smithy/types" "^4.8.1" + "@smithy/url-parser" "^4.2.4" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-body-length-browser" "^4.2.0" + "@smithy/util-body-length-node" "^4.2.1" + "@smithy/util-defaults-mode-browser" "^4.3.5" + "@smithy/util-defaults-mode-node" "^4.2.8" + "@smithy/util-endpoints" "^3.2.4" + "@smithy/util-middleware" "^4.2.4" + "@smithy/util-retry" "^4.2.4" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@aws-sdk/region-config-resolver@3.893.0": - version "3.893.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.893.0.tgz#570dfd2314b3f71eb263557bb06fea36b5188cd6" - integrity sha512-/cJvh3Zsa+Of0Zbg7vl9wp/kZtdb40yk/2+XcroAMVPO9hPvmS9r/UOm6tO7FeX4TtkRFwWaQJiTZTgSdsPY+Q== - dependencies: - "@aws-sdk/types" "3.893.0" - "@smithy/node-config-provider" "^4.2.2" - "@smithy/types" "^4.5.0" - "@smithy/util-config-provider" "^4.1.0" - "@smithy/util-middleware" "^4.1.1" +"@aws-sdk/region-config-resolver@3.925.0": + version "3.925.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.925.0.tgz#789fab5b277ec21753b908c78cee18bd70998475" + integrity sha512-FOthcdF9oDb1pfQBRCfWPZhJZT5wqpvdAS5aJzB1WDZ+6EuaAhLzLH/fW1slDunIqq1PSQGG3uSnVglVVOvPHQ== + dependencies: + "@aws-sdk/types" "3.922.0" + "@smithy/config-resolver" "^4.4.2" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/signature-v4-multi-region@3.896.0": - version "3.896.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.896.0.tgz#2aa0ca3055dc000f6d68fe48adcee612ce814d36" - integrity sha512-txiQDEZXL9tlNP8mbnNaDtuHBYc/FCqaZ8Y76qnfM3o6CTIn0t0tTAlnx1CyFe4EaikVBgQuZvj5KfNA8PmlzA== +"@aws-sdk/signature-v4-multi-region@3.928.0": + version "3.928.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.928.0.tgz#4de26dbdfcc9a8db536c4e4ed6367728a37e0a64" + integrity sha512-1+Ic8+MyqQy+OE6QDoQKVCIcSZO+ETmLLLpVS5yu0fihBU85B5HHU7iaKX1qX7lEaGPMpSN/mbHW0VpyQ0Xqaw== dependencies: - "@aws-sdk/middleware-sdk-s3" "3.896.0" - "@aws-sdk/types" "3.893.0" - "@smithy/protocol-http" "^5.2.1" - "@smithy/signature-v4" "^5.2.1" - "@smithy/types" "^4.5.0" + "@aws-sdk/middleware-sdk-s3" "3.928.0" + "@aws-sdk/types" "3.922.0" + "@smithy/protocol-http" "^5.3.4" + "@smithy/signature-v4" "^5.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/token-providers@3.896.0": - version "3.896.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.896.0.tgz#760cdca947129cd422ca636218addefffa932420" - integrity sha512-WBoD+RY7tUfW9M+wGrZ2vdveR+ziZOjGHWFY3lcGnDvI8KE+fcSccEOTxgJBNBS5Z8B+WHKU2sZjb+Z7QqGwjw== - dependencies: - "@aws-sdk/core" "3.896.0" - "@aws-sdk/nested-clients" "3.896.0" - "@aws-sdk/types" "3.893.0" - "@smithy/property-provider" "^4.1.1" - "@smithy/shared-ini-file-loader" "^4.2.0" - "@smithy/types" "^4.5.0" +"@aws-sdk/token-providers@3.929.0": + version "3.929.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.929.0.tgz#cc15bf597ad499f2e639a8ef15daeee169a2951f" + integrity sha512-78kph1R6TVJ53VXDKUmt64HMqWjTECLymJ7kLguz2QJiWh2ZdLvpyYGvaueEwwhisHYBh2qef1tGIf/PpEb8SQ== + dependencies: + "@aws-sdk/core" "3.928.0" + "@aws-sdk/nested-clients" "3.929.0" + "@aws-sdk/types" "3.922.0" + "@smithy/property-provider" "^4.2.4" + "@smithy/shared-ini-file-loader" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/types@3.893.0", "@aws-sdk/types@^3.222.0": - version "3.893.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.893.0.tgz#1afbdb9d62bf86caeac380e3cac11a051076400a" - integrity sha512-Aht1nn5SnA0N+Tjv0dzhAY7CQbxVtmq1bBR6xI0MhG7p2XYVh1wXuKTzrldEvQWwA3odOYunAfT9aBiKZx9qIg== +"@aws-sdk/types@3.922.0", "@aws-sdk/types@^3.222.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.922.0.tgz#e92daf55272171caac8dba9d425786646466d935" + integrity sha512-eLA6XjVobAUAMivvM7DBL79mnHyrm+32TkXNWZua5mnxF+6kQCfblKKJvxMZLGosO53/Ex46ogim8IY5Nbqv2w== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.8.1" tslib "^2.6.2" "@aws-sdk/util-arn-parser@3.893.0": @@ -633,15 +642,15 @@ dependencies: tslib "^2.6.2" -"@aws-sdk/util-endpoints@3.895.0": - version "3.895.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.895.0.tgz#d3881250cecc40fa9d721a33661c1aaa64aba643" - integrity sha512-MhxBvWbwxmKknuggO2NeMwOVkHOYL98pZ+1ZRI5YwckoCL3AvISMnPJgfN60ww6AIXHGpkp+HhpFdKOe8RHSEg== +"@aws-sdk/util-endpoints@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.922.0.tgz#817457d6a78ce366bdb7b201c638dba5ffdbfe60" + integrity sha512-4ZdQCSuNMY8HMlR1YN4MRDdXuKd+uQTeKIr5/pIM+g3TjInZoj8imvXudjcrFGA63UF3t92YVTkBq88mg58RXQ== dependencies: - "@aws-sdk/types" "3.893.0" - "@smithy/types" "^4.5.0" - "@smithy/url-parser" "^4.1.1" - "@smithy/util-endpoints" "^3.1.2" + "@aws-sdk/types" "3.922.0" + "@smithy/types" "^4.8.1" + "@smithy/url-parser" "^4.2.4" + "@smithy/util-endpoints" "^3.2.4" tslib "^2.6.2" "@aws-sdk/util-locate-window@^3.0.0": @@ -651,40 +660,40 @@ dependencies: tslib "^2.6.2" -"@aws-sdk/util-user-agent-browser@3.893.0": - version "3.893.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.893.0.tgz#be0aac5c73a30c2a03aedb2e3501bb277bad79a1" - integrity sha512-PE9NtbDBW6Kgl1bG6A5fF3EPo168tnkj8TgMcT0sg4xYBWsBpq0bpJZRh+Jm5Bkwiw9IgTCLjEU7mR6xWaMB9w== +"@aws-sdk/util-user-agent-browser@3.922.0": + version "3.922.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.922.0.tgz#734bbe74d34c3fbdb96aca80a151d3d7e7e87c30" + integrity sha512-qOJAERZ3Plj1st7M4Q5henl5FRpE30uLm6L9edZqZXGR6c7ry9jzexWamWVpQ4H4xVAVmiO9dIEBAfbq4mduOA== dependencies: - "@aws-sdk/types" "3.893.0" - "@smithy/types" "^4.5.0" + "@aws-sdk/types" "3.922.0" + "@smithy/types" "^4.8.1" bowser "^2.11.0" tslib "^2.6.2" -"@aws-sdk/util-user-agent-node@3.896.0": - version "3.896.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.896.0.tgz#190a8aa7ffae3f8d29bacdd3835b901daf116195" - integrity sha512-jegizucAwoxyBddKl0kRGNEgRHcfGuMeyhP1Nf+wIUmHz/9CxobIajqcVk/KRNLdZY5mSn7YG2VtP3z0BcBb0w== +"@aws-sdk/util-user-agent-node@3.928.0": + version "3.928.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.928.0.tgz#adcd93ae10d484e6c172369d6140ec6d09a2eb5c" + integrity sha512-s0jP67nQLLWVWfBtqTkZUkSWK5e6OI+rs+wFya2h9VLyWBFir17XSDI891s8HZKIVCEl8eBrup+hhywm4nsIAA== dependencies: - "@aws-sdk/middleware-user-agent" "3.896.0" - "@aws-sdk/types" "3.893.0" - "@smithy/node-config-provider" "^4.2.2" - "@smithy/types" "^4.5.0" + "@aws-sdk/middleware-user-agent" "3.928.0" + "@aws-sdk/types" "3.922.0" + "@smithy/node-config-provider" "^4.3.4" + "@smithy/types" "^4.8.1" tslib "^2.6.2" -"@aws-sdk/xml-builder@3.894.0": - version "3.894.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.894.0.tgz#7110e86622345d3da220a2ed5259a30a91dec4bc" - integrity sha512-E6EAMc9dT1a2DOdo4zyOf3fp5+NJ2wI+mcm7RaW1baFIWDwcb99PpvWoV7YEiK7oaBDshuOEGWKUSYXdW+JYgA== +"@aws-sdk/xml-builder@3.921.0": + version "3.921.0" + resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.921.0.tgz#e4d4d21b09341648b598d720c602ee76d7a84594" + integrity sha512-LVHg0jgjyicKKvpNIEMXIMr1EBViESxcPkqfOlT+X1FkmUMTNZEEVF18tOJg4m4hV5vxtkWcqtr4IEeWa1C41Q== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.8.1" fast-xml-parser "5.2.5" tslib "^2.6.2" -"@aws/lambda-invoke-store@^0.0.1": - version "0.0.1" - resolved "https://registry.yarnpkg.com/@aws/lambda-invoke-store/-/lambda-invoke-store-0.0.1.tgz#92d792a7dda250dfcb902e13228f37a81be57c8f" - integrity sha512-ORHRQ2tmvnBXc8t/X9Z8IcSbBA4xTLKuN873FopzklHMeqBst7YG0d+AX97inkvDX+NChYtSr+qGfcqGFaI8Zw== +"@aws/lambda-invoke-store@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@aws/lambda-invoke-store/-/lambda-invoke-store-0.1.1.tgz#2e67f17040b930bde00a79ffb484eb9e77472b06" + integrity sha512-RcLam17LdlbSOSp9VxmUu1eI6Mwxp+OwhD2QhiSNmNCzoDb0EeUXTD2n/WbcnrAYMGlmf05th6QYq23VqvJqpA== "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.27.1": version "7.27.1" @@ -695,25 +704,25 @@ js-tokens "^4.0.0" picocolors "^1.1.1" -"@babel/compat-data@^7.20.5", "@babel/compat-data@^7.27.2", "@babel/compat-data@^7.27.7", "@babel/compat-data@^7.28.0": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.4.tgz#96fdf1af1b8859c8474ab39c295312bfb7c24b04" - integrity sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw== +"@babel/compat-data@^7.20.5", "@babel/compat-data@^7.27.2", "@babel/compat-data@^7.27.7", "@babel/compat-data@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.5.tgz#a8a4962e1567121ac0b3b487f52107443b455c7f" + integrity sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA== "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.13.16", "@babel/core@^7.14.0", "@babel/core@^7.18.5", "@babel/core@^7.20.0", "@babel/core@^7.23.9", "@babel/core@^7.24.7": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.4.tgz#12a550b8794452df4c8b084f95003bce1742d496" - integrity sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA== + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.5.tgz#4c81b35e51e1b734f510c99b07dfbc7bbbb48f7e" + integrity sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw== dependencies: "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.28.3" + "@babel/generator" "^7.28.5" "@babel/helper-compilation-targets" "^7.27.2" "@babel/helper-module-transforms" "^7.28.3" "@babel/helpers" "^7.28.4" - "@babel/parser" "^7.28.4" + "@babel/parser" "^7.28.5" "@babel/template" "^7.27.2" - "@babel/traverse" "^7.28.4" - "@babel/types" "^7.28.4" + "@babel/traverse" "^7.28.5" + "@babel/types" "^7.28.5" "@jridgewell/remapping" "^2.3.5" convert-source-map "^2.0.0" debug "^4.1.0" @@ -721,13 +730,13 @@ json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.14.0", "@babel/generator@^7.20.0", "@babel/generator@^7.28.3", "@babel/generator@^7.7.2": - version "7.28.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.3.tgz#9626c1741c650cbac39121694a0f2d7451b8ef3e" - integrity sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw== +"@babel/generator@^7.14.0", "@babel/generator@^7.20.0", "@babel/generator@^7.28.5", "@babel/generator@^7.7.2": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.28.5.tgz#712722d5e50f44d07bc7ac9fe84438742dd61298" + integrity sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ== dependencies: - "@babel/parser" "^7.28.3" - "@babel/types" "^7.28.2" + "@babel/parser" "^7.28.5" + "@babel/types" "^7.28.5" "@jridgewell/gen-mapping" "^0.3.12" "@jridgewell/trace-mapping" "^0.3.28" jsesc "^3.0.2" @@ -750,26 +759,26 @@ lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.27.1", "@babel/helper-create-class-features-plugin@^7.28.3": - version "7.28.3" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.3.tgz#3e747434ea007910c320c4d39a6b46f20f371d46" - integrity sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg== +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.27.1", "@babel/helper-create-class-features-plugin@^7.28.3", "@babel/helper-create-class-features-plugin@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz#472d0c28028850968979ad89f173594a6995da46" + integrity sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ== dependencies: "@babel/helper-annotate-as-pure" "^7.27.3" - "@babel/helper-member-expression-to-functions" "^7.27.1" + "@babel/helper-member-expression-to-functions" "^7.28.5" "@babel/helper-optimise-call-expression" "^7.27.1" "@babel/helper-replace-supers" "^7.27.1" "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" - "@babel/traverse" "^7.28.3" + "@babel/traverse" "^7.28.5" semver "^6.3.1" "@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz#05b0882d97ba1d4d03519e4bce615d70afa18c53" - integrity sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ== + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz#7c1ddd64b2065c7f78034b25b43346a7e19ed997" + integrity sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw== dependencies: - "@babel/helper-annotate-as-pure" "^7.27.1" - regexpu-core "^6.2.0" + "@babel/helper-annotate-as-pure" "^7.27.3" + regexpu-core "^6.3.1" semver "^6.3.1" "@babel/helper-define-polyfill-provider@^0.6.5": @@ -795,13 +804,13 @@ resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz#b9430df2aa4e17bc28665eadeae8aa1d985e6674" integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== -"@babel/helper-member-expression-to-functions@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz#ea1211276be93e798ce19037da6f06fbb994fa44" - integrity sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA== +"@babel/helper-member-expression-to-functions@^7.27.1", "@babel/helper-member-expression-to-functions@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz#f3e07a10be37ed7a63461c63e6929575945a6150" + integrity sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg== dependencies: - "@babel/traverse" "^7.27.1" - "@babel/types" "^7.27.1" + "@babel/traverse" "^7.28.5" + "@babel/types" "^7.28.5" "@babel/helper-module-imports@^7.27.1": version "7.27.1" @@ -863,10 +872,10 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== -"@babel/helper-validator-identifier@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8" - integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== +"@babel/helper-validator-identifier@^7.27.1", "@babel/helper-validator-identifier@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" + integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== "@babel/helper-validator-option@^7.27.1": version "7.27.1" @@ -890,20 +899,20 @@ "@babel/template" "^7.27.2" "@babel/types" "^7.28.4" -"@babel/parser@^7.1.0", "@babel/parser@^7.13.16", "@babel/parser@^7.14.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.0", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.27.2", "@babel/parser@^7.28.3", "@babel/parser@^7.28.4": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.4.tgz#da25d4643532890932cc03f7705fe19637e03fa8" - integrity sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg== +"@babel/parser@^7.1.0", "@babel/parser@^7.13.16", "@babel/parser@^7.14.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.0", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.27.2", "@babel/parser@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.5.tgz#0b0225ee90362f030efd644e8034c99468893b08" + integrity sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ== dependencies: - "@babel/types" "^7.28.4" + "@babel/types" "^7.28.5" -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz#61dd8a8e61f7eb568268d1b5f129da3eee364bf9" - integrity sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA== +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz#fbde57974707bbfa0376d34d425ff4fa6c732421" + integrity sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q== dependencies: "@babel/helper-plugin-utils" "^7.27.1" - "@babel/traverse" "^7.27.1" + "@babel/traverse" "^7.28.5" "@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.27.1": version "7.27.1" @@ -1197,10 +1206,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-block-scoping@^7.0.0", "@babel/plugin-transform-block-scoping@^7.28.0": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.4.tgz#e19ac4ddb8b7858bac1fd5c1be98a994d9726410" - integrity sha512-1yxmvN0MJHOhPVmAsmoW5liWwoILobu/d/ShymZmj867bAdxGbehIrew1DuLpw2Ukv+qDSSPQdYW1dLNE7t11A== +"@babel/plugin-transform-block-scoping@^7.0.0", "@babel/plugin-transform-block-scoping@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.5.tgz#e0d3af63bd8c80de2e567e690a54e84d85eb16f6" + integrity sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g== dependencies: "@babel/helper-plugin-utils" "^7.27.1" @@ -1220,7 +1229,7 @@ "@babel/helper-create-class-features-plugin" "^7.28.3" "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.28.3": +"@babel/plugin-transform-classes@^7.0.0", "@babel/plugin-transform-classes@^7.28.4": version "7.28.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz#75d66175486788c56728a73424d67cbc7473495c" integrity sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA== @@ -1240,13 +1249,13 @@ "@babel/helper-plugin-utils" "^7.27.1" "@babel/template" "^7.27.1" -"@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.20.0", "@babel/plugin-transform-destructuring@^7.28.0": - version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.0.tgz#0f156588f69c596089b7d5b06f5af83d9aa7f97a" - integrity sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A== +"@babel/plugin-transform-destructuring@^7.0.0", "@babel/plugin-transform-destructuring@^7.20.0", "@babel/plugin-transform-destructuring@^7.28.0", "@babel/plugin-transform-destructuring@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz#b8402764df96179a2070bb7b501a1586cf8ad7a7" + integrity sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw== dependencies: "@babel/helper-plugin-utils" "^7.27.1" - "@babel/traverse" "^7.28.0" + "@babel/traverse" "^7.28.5" "@babel/plugin-transform-dotall-regex@^7.27.1": version "7.27.1" @@ -1286,10 +1295,10 @@ "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-destructuring" "^7.28.0" -"@babel/plugin-transform-exponentiation-operator@^7.0.0", "@babel/plugin-transform-exponentiation-operator@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz#fc497b12d8277e559747f5a3ed868dd8064f83e1" - integrity sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ== +"@babel/plugin-transform-exponentiation-operator@^7.0.0", "@babel/plugin-transform-exponentiation-operator@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.5.tgz#7cc90a8170e83532676cfa505278e147056e94fe" + integrity sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw== dependencies: "@babel/helper-plugin-utils" "^7.27.1" @@ -1339,10 +1348,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-logical-assignment-operators@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz#890cb20e0270e0e5bebe3f025b434841c32d5baa" - integrity sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw== +"@babel/plugin-transform-logical-assignment-operators@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.5.tgz#d028fd6db8c081dee4abebc812c2325e24a85b0e" + integrity sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA== dependencies: "@babel/helper-plugin-utils" "^7.27.1" @@ -1369,15 +1378,15 @@ "@babel/helper-module-transforms" "^7.27.1" "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-modules-systemjs@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz#00e05b61863070d0f3292a00126c16c0e024c4ed" - integrity sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA== +"@babel/plugin-transform-modules-systemjs@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz#7439e592a92d7670dfcb95d0cbc04bd3e64801d2" + integrity sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew== dependencies: - "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-module-transforms" "^7.28.3" "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-validator-identifier" "^7.27.1" - "@babel/traverse" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" + "@babel/traverse" "^7.28.5" "@babel/plugin-transform-modules-umd@^7.27.1": version "7.27.1" @@ -1416,7 +1425,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-object-rest-spread@^7.28.0": +"@babel/plugin-transform-object-rest-spread@^7.28.4": version "7.28.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz#9ee1ceca80b3e6c4bac9247b2149e36958f7f98d" integrity sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew== @@ -1442,10 +1451,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-optional-chaining@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz#874ce3c4f06b7780592e946026eb76a32830454f" - integrity sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg== +"@babel/plugin-transform-optional-chaining@^7.27.1", "@babel/plugin-transform-optional-chaining@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.5.tgz#8238c785f9d5c1c515a90bf196efb50d075a4b26" + integrity sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" @@ -1481,7 +1490,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-react-display-name@^7.0.0", "@babel/plugin-transform-react-display-name@^7.27.1": +"@babel/plugin-transform-react-display-name@^7.0.0", "@babel/plugin-transform-react-display-name@^7.28.0": version "7.28.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz#6f20a7295fea7df42eb42fed8f896813f5b934de" integrity sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA== @@ -1528,7 +1537,7 @@ "@babel/helper-annotate-as-pure" "^7.27.1" "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-regenerator@^7.28.3": +"@babel/plugin-transform-regenerator@^7.28.4": version "7.28.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz#9d3fa3bebb48ddd0091ce5729139cd99c67cea51" integrity sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA== @@ -1551,9 +1560,9 @@ "@babel/helper-plugin-utils" "^7.27.1" "@babel/plugin-transform-runtime@^7.0.0": - version "7.28.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.3.tgz#f5990a1b2d2bde950ed493915e0719841c8d0eaa" - integrity sha512-Y6ab1kGqZ0u42Zv/4a7l0l72n9DKP/MKoKWaUSBylrhNZO2prYuqFOLbn5aW5SIFXwSH93yfjbgllL8lxuGKLg== + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.5.tgz#ae3e21fbefe2831ebac04dfa6b463691696afe17" + integrity sha512-20NUVgOrinudkIBzQ2bNxP08YpKprUkRTiRSd2/Z5GOdPImJGkoN4Z7IQe1T5AdyKI1i5L6RBmluqdSzvaq9/w== dependencies: "@babel/helper-module-imports" "^7.27.1" "@babel/helper-plugin-utils" "^7.27.1" @@ -1598,13 +1607,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.27.1" -"@babel/plugin-transform-typescript@^7.27.1", "@babel/plugin-transform-typescript@^7.5.0": - version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.0.tgz#796cbd249ab56c18168b49e3e1d341b72af04a6b" - integrity sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg== +"@babel/plugin-transform-typescript@^7.28.5", "@babel/plugin-transform-typescript@^7.5.0": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.5.tgz#441c5f9a4a1315039516c6c612fc66d5f4594e72" + integrity sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA== dependencies: "@babel/helper-annotate-as-pure" "^7.27.3" - "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-create-class-features-plugin" "^7.28.5" "@babel/helper-plugin-utils" "^7.27.1" "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" "@babel/plugin-syntax-typescript" "^7.27.1" @@ -1641,15 +1650,15 @@ "@babel/helper-plugin-utils" "^7.27.1" "@babel/preset-env@^7.18.2": - version "7.28.3" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.28.3.tgz#2b18d9aff9e69643789057ae4b942b1654f88187" - integrity sha512-ROiDcM+GbYVPYBOeCR6uBXKkQpBExLl8k9HO1ygXEyds39j+vCCsjmj7S8GOniZQlEs81QlkdJZe76IpLSiqpg== + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.28.5.tgz#82dd159d1563f219a1ce94324b3071eb89e280b0" + integrity sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg== dependencies: - "@babel/compat-data" "^7.28.0" + "@babel/compat-data" "^7.28.5" "@babel/helper-compilation-targets" "^7.27.2" "@babel/helper-plugin-utils" "^7.27.1" "@babel/helper-validator-option" "^7.27.1" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.27.1" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.28.5" "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.27.1" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.27.1" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.27.1" @@ -1662,42 +1671,42 @@ "@babel/plugin-transform-async-generator-functions" "^7.28.0" "@babel/plugin-transform-async-to-generator" "^7.27.1" "@babel/plugin-transform-block-scoped-functions" "^7.27.1" - "@babel/plugin-transform-block-scoping" "^7.28.0" + "@babel/plugin-transform-block-scoping" "^7.28.5" "@babel/plugin-transform-class-properties" "^7.27.1" "@babel/plugin-transform-class-static-block" "^7.28.3" - "@babel/plugin-transform-classes" "^7.28.3" + "@babel/plugin-transform-classes" "^7.28.4" "@babel/plugin-transform-computed-properties" "^7.27.1" - "@babel/plugin-transform-destructuring" "^7.28.0" + "@babel/plugin-transform-destructuring" "^7.28.5" "@babel/plugin-transform-dotall-regex" "^7.27.1" "@babel/plugin-transform-duplicate-keys" "^7.27.1" "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.27.1" "@babel/plugin-transform-dynamic-import" "^7.27.1" "@babel/plugin-transform-explicit-resource-management" "^7.28.0" - "@babel/plugin-transform-exponentiation-operator" "^7.27.1" + "@babel/plugin-transform-exponentiation-operator" "^7.28.5" "@babel/plugin-transform-export-namespace-from" "^7.27.1" "@babel/plugin-transform-for-of" "^7.27.1" "@babel/plugin-transform-function-name" "^7.27.1" "@babel/plugin-transform-json-strings" "^7.27.1" "@babel/plugin-transform-literals" "^7.27.1" - "@babel/plugin-transform-logical-assignment-operators" "^7.27.1" + "@babel/plugin-transform-logical-assignment-operators" "^7.28.5" "@babel/plugin-transform-member-expression-literals" "^7.27.1" "@babel/plugin-transform-modules-amd" "^7.27.1" "@babel/plugin-transform-modules-commonjs" "^7.27.1" - "@babel/plugin-transform-modules-systemjs" "^7.27.1" + "@babel/plugin-transform-modules-systemjs" "^7.28.5" "@babel/plugin-transform-modules-umd" "^7.27.1" "@babel/plugin-transform-named-capturing-groups-regex" "^7.27.1" "@babel/plugin-transform-new-target" "^7.27.1" "@babel/plugin-transform-nullish-coalescing-operator" "^7.27.1" "@babel/plugin-transform-numeric-separator" "^7.27.1" - "@babel/plugin-transform-object-rest-spread" "^7.28.0" + "@babel/plugin-transform-object-rest-spread" "^7.28.4" "@babel/plugin-transform-object-super" "^7.27.1" "@babel/plugin-transform-optional-catch-binding" "^7.27.1" - "@babel/plugin-transform-optional-chaining" "^7.27.1" + "@babel/plugin-transform-optional-chaining" "^7.28.5" "@babel/plugin-transform-parameters" "^7.27.7" "@babel/plugin-transform-private-methods" "^7.27.1" "@babel/plugin-transform-private-property-in-object" "^7.27.1" "@babel/plugin-transform-property-literals" "^7.27.1" - "@babel/plugin-transform-regenerator" "^7.28.3" + "@babel/plugin-transform-regenerator" "^7.28.4" "@babel/plugin-transform-regexp-modifiers" "^7.27.1" "@babel/plugin-transform-reserved-words" "^7.27.1" "@babel/plugin-transform-shorthand-properties" "^7.27.1" @@ -1735,27 +1744,27 @@ esutils "^2.0.2" "@babel/preset-react@^7.17.12": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.27.1.tgz#86ea0a5ca3984663f744be2fd26cb6747c3fd0ec" - integrity sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA== + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.28.5.tgz#6fcc0400fa79698433d653092c3919bb4b0878d9" + integrity sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/helper-validator-option" "^7.27.1" - "@babel/plugin-transform-react-display-name" "^7.27.1" + "@babel/plugin-transform-react-display-name" "^7.28.0" "@babel/plugin-transform-react-jsx" "^7.27.1" "@babel/plugin-transform-react-jsx-development" "^7.27.1" "@babel/plugin-transform-react-pure-annotations" "^7.27.1" "@babel/preset-typescript@^7.13.0", "@babel/preset-typescript@^7.17.12": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz#190742a6428d282306648a55b0529b561484f912" - integrity sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ== + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz#540359efa3028236958466342967522fd8f2a60c" + integrity sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g== dependencies: "@babel/helper-plugin-utils" "^7.27.1" "@babel/helper-validator-option" "^7.27.1" "@babel/plugin-syntax-jsx" "^7.27.1" "@babel/plugin-transform-modules-commonjs" "^7.27.1" - "@babel/plugin-transform-typescript" "^7.27.1" + "@babel/plugin-transform-typescript" "^7.28.5" "@babel/register@^7.13.16": version "7.28.3" @@ -1782,46 +1791,32 @@ "@babel/parser" "^7.27.2" "@babel/types" "^7.27.1" -"@babel/traverse@^7.14.0", "@babel/traverse@^7.20.0", "@babel/traverse@^7.27.1", "@babel/traverse@^7.28.0", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.4": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.4.tgz#8d456101b96ab175d487249f60680221692b958b" - integrity sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ== +"@babel/traverse@^7.14.0", "@babel/traverse@^7.20.0", "@babel/traverse@^7.27.1", "@babel/traverse@^7.28.0", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.4", "@babel/traverse@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.5.tgz#450cab9135d21a7a2ca9d2d35aa05c20e68c360b" + integrity sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ== dependencies: "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.28.3" + "@babel/generator" "^7.28.5" "@babel/helper-globals" "^7.28.0" - "@babel/parser" "^7.28.4" + "@babel/parser" "^7.28.5" "@babel/template" "^7.27.2" - "@babel/types" "^7.28.4" + "@babel/types" "^7.28.5" debug "^4.3.1" -"@babel/types@^7.0.0", "@babel/types@^7.20.0", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.28.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.4.tgz#0a4e618f4c60a7cd6c11cb2d48060e4dbe38ac3a" - integrity sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q== +"@babel/types@^7.0.0", "@babel/types@^7.20.0", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.28.5", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.5.tgz#10fc405f60897c35f07e85493c932c7b5ca0592b" + integrity sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA== dependencies: "@babel/helper-string-parser" "^7.27.1" - "@babel/helper-validator-identifier" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== -"@bundled-es-modules/cookie@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@bundled-es-modules/cookie/-/cookie-2.0.1.tgz#b41376af6a06b3e32a15241d927b840a9b4de507" - integrity sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw== - dependencies: - cookie "^0.7.2" - -"@bundled-es-modules/statuses@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@bundled-es-modules/statuses/-/statuses-1.0.1.tgz#761d10f44e51a94902c4da48675b71a76cc98872" - integrity sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg== - dependencies: - statuses "^2.0.1" - "@commitlint/cli@^17.3.0": version "17.8.1" resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-17.8.1.tgz#10492114a022c91dcfb1d84dac773abb3db76d33" @@ -1991,17 +1986,17 @@ "@jridgewell/trace-mapping" "0.3.9" "@emnapi/core@^1.1.0", "@emnapi/core@^1.4.3": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.5.0.tgz#85cd84537ec989cebb2343606a1ee663ce4edaf0" - integrity sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg== + version "1.7.0" + resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.7.0.tgz#135de4e8858763989112281bdf38ca02439db7c3" + integrity sha512-pJdKGq/1iquWYtv1RRSljZklxHCOCAJFJrImO5ZLKPJVJlVUcs8yFwNQlqS0Lo8xT1VAXXTCZocF9n26FWEKsw== dependencies: "@emnapi/wasi-threads" "1.1.0" tslib "^2.4.0" "@emnapi/runtime@^1.1.0", "@emnapi/runtime@^1.4.3": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.5.0.tgz#9aebfcb9b17195dce3ab53c86787a6b7d058db73" - integrity sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ== + version "1.7.0" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.7.0.tgz#d7ef3832df8564fe5903bf0567aedbd19538ecbe" + integrity sha512-oAYoQnCYaQZKVS53Fq23ceWMRxq5EhQsE0x0RdQ55jT7wagMu5k+fS39v1fiSLrtrLQlXwVINenqhLMtTrV/1Q== dependencies: tslib "^2.4.0" @@ -2012,135 +2007,135 @@ dependencies: tslib "^2.4.0" -"@esbuild/aix-ppc64@0.25.10": - version "0.25.10" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.10.tgz#ee6b7163a13528e099ecf562b972f2bcebe0aa97" - integrity sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw== - -"@esbuild/android-arm64@0.25.10": - version "0.25.10" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.10.tgz#115fc76631e82dd06811bfaf2db0d4979c16e2cb" - integrity sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg== - -"@esbuild/android-arm@0.25.10": - version "0.25.10" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.10.tgz#8d5811912da77f615398611e5bbc1333fe321aa9" - integrity sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w== - -"@esbuild/android-x64@0.25.10": - version "0.25.10" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.10.tgz#e3e96516b2d50d74105bb92594c473e30ddc16b1" - integrity sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg== - -"@esbuild/darwin-arm64@0.25.10": - version "0.25.10" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.10.tgz#6af6bb1d05887dac515de1b162b59dc71212ed76" - integrity sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA== - -"@esbuild/darwin-x64@0.25.10": - version "0.25.10" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.10.tgz#99ae82347fbd336fc2d28ffd4f05694e6e5b723d" - integrity sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg== - -"@esbuild/freebsd-arm64@0.25.10": - version "0.25.10" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.10.tgz#0c6d5558a6322b0bdb17f7025c19bd7d2359437d" - integrity sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg== - -"@esbuild/freebsd-x64@0.25.10": - version "0.25.10" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.10.tgz#8c35873fab8c0857a75300a3dcce4324ca0b9844" - integrity sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA== - -"@esbuild/linux-arm64@0.25.10": - version "0.25.10" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.10.tgz#3edc2f87b889a15b4cedaf65f498c2bed7b16b90" - integrity sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ== - -"@esbuild/linux-arm@0.25.10": - version "0.25.10" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.10.tgz#86501cfdfb3d110176d80c41b27ed4611471cde7" - integrity sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg== - -"@esbuild/linux-ia32@0.25.10": - version "0.25.10" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.10.tgz#e6589877876142537c6864680cd5d26a622b9d97" - integrity sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ== - -"@esbuild/linux-loong64@0.25.10": - version "0.25.10" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.10.tgz#11119e18781f136d8083ea10eb6be73db7532de8" - integrity sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg== - -"@esbuild/linux-mips64el@0.25.10": - version "0.25.10" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.10.tgz#3052f5436b0c0c67a25658d5fc87f045e7def9e6" - integrity sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA== - -"@esbuild/linux-ppc64@0.25.10": - version "0.25.10" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.10.tgz#2f098920ee5be2ce799f35e367b28709925a8744" - integrity sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA== - -"@esbuild/linux-riscv64@0.25.10": - version "0.25.10" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.10.tgz#fa51d7fd0a22a62b51b4b94b405a3198cf7405dd" - integrity sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA== - -"@esbuild/linux-s390x@0.25.10": - version "0.25.10" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.10.tgz#a27642e36fc282748fdb38954bd3ef4f85791e8a" - integrity sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew== - -"@esbuild/linux-x64@0.25.10": - version "0.25.10" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.10.tgz#9d9b09c0033d17529570ced6d813f98315dfe4e9" - integrity sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA== - -"@esbuild/netbsd-arm64@0.25.10": - version "0.25.10" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.10.tgz#25c09a659c97e8af19e3f2afd1c9190435802151" - integrity sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A== - -"@esbuild/netbsd-x64@0.25.10": - version "0.25.10" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.10.tgz#7fa5f6ffc19be3a0f6f5fd32c90df3dc2506937a" - integrity sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig== - -"@esbuild/openbsd-arm64@0.25.10": - version "0.25.10" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.10.tgz#8faa6aa1afca0c6d024398321d6cb1c18e72a1c3" - integrity sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw== - -"@esbuild/openbsd-x64@0.25.10": - version "0.25.10" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.10.tgz#a42979b016f29559a8453d32440d3c8cd420af5e" - integrity sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw== - -"@esbuild/openharmony-arm64@0.25.10": - version "0.25.10" - resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.10.tgz#fd87bfeadd7eeb3aa384bbba907459ffa3197cb1" - integrity sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag== - -"@esbuild/sunos-x64@0.25.10": - version "0.25.10" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.10.tgz#3a18f590e36cb78ae7397976b760b2b8c74407f4" - integrity sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ== - -"@esbuild/win32-arm64@0.25.10": - version "0.25.10" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.10.tgz#e71741a251e3fd971408827a529d2325551f530c" - integrity sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw== - -"@esbuild/win32-ia32@0.25.10": - version "0.25.10" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.10.tgz#c6f010b5d3b943d8901a0c87ea55f93b8b54bf94" - integrity sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw== - -"@esbuild/win32-x64@0.25.10": - version "0.25.10" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.10.tgz#e4b3e255a1b4aea84f6e1d2ae0b73f826c3785bd" - integrity sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw== +"@esbuild/aix-ppc64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz#80fcbe36130e58b7670511e888b8e88a259ed76c" + integrity sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA== + +"@esbuild/android-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz#8aa4965f8d0a7982dc21734bf6601323a66da752" + integrity sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg== + +"@esbuild/android-arm@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.12.tgz#300712101f7f50f1d2627a162e6e09b109b6767a" + integrity sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg== + +"@esbuild/android-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.12.tgz#87dfb27161202bdc958ef48bb61b09c758faee16" + integrity sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg== + +"@esbuild/darwin-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz#79197898ec1ff745d21c071e1c7cc3c802f0c1fd" + integrity sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg== + +"@esbuild/darwin-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz#146400a8562133f45c4d2eadcf37ddd09718079e" + integrity sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA== + +"@esbuild/freebsd-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz#1c5f9ba7206e158fd2b24c59fa2d2c8bb47ca0fe" + integrity sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg== + +"@esbuild/freebsd-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz#ea631f4a36beaac4b9279fa0fcc6ca29eaeeb2b3" + integrity sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ== + +"@esbuild/linux-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz#e1066bce58394f1b1141deec8557a5f0a22f5977" + integrity sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ== + +"@esbuild/linux-arm@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz#452cd66b20932d08bdc53a8b61c0e30baf4348b9" + integrity sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw== + +"@esbuild/linux-ia32@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz#b24f8acc45bcf54192c7f2f3be1b53e6551eafe0" + integrity sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA== + +"@esbuild/linux-loong64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz#f9cfffa7fc8322571fbc4c8b3268caf15bd81ad0" + integrity sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng== + +"@esbuild/linux-mips64el@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz#575a14bd74644ffab891adc7d7e60d275296f2cd" + integrity sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw== + +"@esbuild/linux-ppc64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz#75b99c70a95fbd5f7739d7692befe60601591869" + integrity sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA== + +"@esbuild/linux-riscv64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz#2e3259440321a44e79ddf7535c325057da875cd6" + integrity sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w== + +"@esbuild/linux-s390x@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz#17676cabbfe5928da5b2a0d6df5d58cd08db2663" + integrity sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg== + +"@esbuild/linux-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz#0583775685ca82066d04c3507f09524d3cd7a306" + integrity sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw== + +"@esbuild/netbsd-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz#f04c4049cb2e252fe96b16fed90f70746b13f4a4" + integrity sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg== + +"@esbuild/netbsd-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz#77da0d0a0d826d7c921eea3d40292548b258a076" + integrity sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ== + +"@esbuild/openbsd-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz#6296f5867aedef28a81b22ab2009c786a952dccd" + integrity sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A== + +"@esbuild/openbsd-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz#f8d23303360e27b16cf065b23bbff43c14142679" + integrity sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw== + +"@esbuild/openharmony-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz#49e0b768744a3924be0d7fd97dd6ce9b2923d88d" + integrity sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg== + +"@esbuild/sunos-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz#a6ed7d6778d67e528c81fb165b23f4911b9b13d6" + integrity sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w== + +"@esbuild/win32-arm64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz#9ac14c378e1b653af17d08e7d3ce34caef587323" + integrity sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg== + +"@esbuild/win32-ia32@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz#918942dcbbb35cc14fca39afb91b5e6a3d127267" + integrity sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ== + +"@esbuild/win32-x64@0.25.12": + version "0.25.12" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz#9bdad8176be7811ad148d1f8772359041f46c6c5" + integrity sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA== "@eslint-community/eslint-utils@^4.2.0": version "4.9.0" @@ -2150,9 +2145,9 @@ eslint-visitor-keys "^3.4.3" "@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": - version "4.12.1" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" - integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== + version "4.12.2" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b" + integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew== "@eslint/eslintrc@^2.1.4": version "2.1.4" @@ -2210,187 +2205,150 @@ resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" integrity sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q== -"@inquirer/ansi@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@inquirer/ansi/-/ansi-1.0.0.tgz#29525c673caf36c12e719712830705b9c31f0462" - integrity sha512-JWaTfCxI1eTmJ1BIv86vUfjVatOdxwD0DAVKYevY8SazeUUZtW+tNbsdejVO1GYE0GXJW1N1ahmiC3TFd+7wZA== - -"@inquirer/ansi@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@inquirer/ansi/-/ansi-1.0.1.tgz#994f7dd16a00c547a7b110e04bf4f4eca1857929" - integrity sha512-yqq0aJW/5XPhi5xOAL1xRCpe1eh8UFVgYFpFsjEqmIR8rKLyP+HINvFXwUaxYICflJrVlxnp7lLN6As735kVpw== - -"@inquirer/checkbox@^4.3.0": - version "4.3.0" - resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-4.3.0.tgz#747ab0ec9b385dd77d3215a51fc9abe25f556a4b" - integrity sha512-5+Q3PKH35YsnoPTh75LucALdAxom6xh5D1oeY561x4cqBuH24ZFVyFREPe14xgnrtmGu3EEt1dIi60wRVSnGCw== - dependencies: - "@inquirer/ansi" "^1.0.1" - "@inquirer/core" "^10.3.0" - "@inquirer/figures" "^1.0.14" - "@inquirer/type" "^3.0.9" - yoctocolors-cjs "^2.1.2" - -"@inquirer/confirm@^5.0.0": - version "5.1.18" - resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.18.tgz#0b76e5082d834c0e3528023705b867fc1222d535" - integrity sha512-MilmWOzHa3Ks11tzvuAmFoAd/wRuaP3SwlT1IZhyMke31FKLxPiuDWcGXhU+PKveNOpAc4axzAgrgxuIJJRmLw== - dependencies: - "@inquirer/core" "^10.2.2" - "@inquirer/type" "^3.0.8" - -"@inquirer/confirm@^5.1.19": - version "5.1.19" - resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.19.tgz#bf28b420898999eb7479ab55623a3fbaf1453ff4" - integrity sha512-wQNz9cfcxrtEnUyG5PndC8g3gZ7lGDBzmWiXZkX8ot3vfZ+/BLjR8EvyGX4YzQLeVqtAlY/YScZpW7CW8qMoDQ== - dependencies: - "@inquirer/core" "^10.3.0" - "@inquirer/type" "^3.0.9" - -"@inquirer/core@^10.2.2": - version "10.2.2" - resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-10.2.2.tgz#d31eb50ba0c76b26e7703c2c0d1d0518144c23ab" - integrity sha512-yXq/4QUnk4sHMtmbd7irwiepjB8jXU0kkFRL4nr/aDBA2mDz13cMakEWdDwX3eSCTkk03kwcndD1zfRAIlELxA== - dependencies: - "@inquirer/ansi" "^1.0.0" - "@inquirer/figures" "^1.0.13" - "@inquirer/type" "^3.0.8" - cli-width "^4.1.0" - mute-stream "^2.0.0" - signal-exit "^4.1.0" - wrap-ansi "^6.2.0" - yoctocolors-cjs "^2.1.2" +"@inquirer/ansi@^1.0.0", "@inquirer/ansi@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@inquirer/ansi/-/ansi-1.0.2.tgz#674a4c4d81ad460695cb2a1fc69d78cd187f337e" + integrity sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ== -"@inquirer/core@^10.3.0": - version "10.3.0" - resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-10.3.0.tgz#342e4fd62cbd33ea62089364274995dbec1f2ffe" - integrity sha512-Uv2aPPPSK5jeCplQmQ9xadnFx2Zhj9b5Dj7bU6ZeCdDNNY11nhYy4btcSdtDguHqCT2h5oNeQTcUNSGGLA7NTA== - dependencies: - "@inquirer/ansi" "^1.0.1" - "@inquirer/figures" "^1.0.14" - "@inquirer/type" "^3.0.9" +"@inquirer/checkbox@^4.3.1": + version "4.3.1" + resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-4.3.1.tgz#92835525f0c69684a5b20c8e0c78ae3c91ed46f1" + integrity sha512-rOcLotrptYIy59SGQhKlU0xBg1vvcVl2FdPIEclUvKHh0wo12OfGkId/01PIMJ/V+EimJ77t085YabgnQHBa5A== + dependencies: + "@inquirer/ansi" "^1.0.2" + "@inquirer/core" "^10.3.1" + "@inquirer/figures" "^1.0.15" + "@inquirer/type" "^3.0.10" + yoctocolors-cjs "^2.1.3" + +"@inquirer/confirm@^5.0.0", "@inquirer/confirm@^5.1.20": + version "5.1.20" + resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-5.1.20.tgz#8e85662584f162b8b9f6a7c9edcb430fd79f56ad" + integrity sha512-HDGiWh2tyRZa0M1ZnEIUCQro25gW/mN8ODByicQrbR1yHx4hT+IOpozCMi5TgBtUdklLwRI2mv14eNpftDluEw== + dependencies: + "@inquirer/core" "^10.3.1" + "@inquirer/type" "^3.0.10" + +"@inquirer/core@^10.2.2", "@inquirer/core@^10.3.1": + version "10.3.1" + resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-10.3.1.tgz#09bba1c6e0c45cfd3975c0c85c784c61b916baa8" + integrity sha512-hzGKIkfomGFPgxKmnKEKeA+uCYBqC+TKtRx5LgyHRCrF6S2MliwRIjp3sUaWwVzMp7ZXVs8elB0Tfe682Rpg4w== + dependencies: + "@inquirer/ansi" "^1.0.2" + "@inquirer/figures" "^1.0.15" + "@inquirer/type" "^3.0.10" cli-width "^4.1.0" - mute-stream "^2.0.0" + mute-stream "^3.0.0" signal-exit "^4.1.0" wrap-ansi "^6.2.0" - yoctocolors-cjs "^2.1.2" + yoctocolors-cjs "^2.1.3" -"@inquirer/editor@^4.2.21": - version "4.2.21" - resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-4.2.21.tgz#9ffe641760a1a1f7722c39be00143060537adcc7" - integrity sha512-MjtjOGjr0Kh4BciaFShYpZ1s9400idOdvQ5D7u7lE6VztPFoyLcVNE5dXBmEEIQq5zi4B9h2kU+q7AVBxJMAkQ== +"@inquirer/editor@^4.2.22": + version "4.2.22" + resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-4.2.22.tgz#5e5e44121e353c903c54601c5fb9177d585a2de0" + integrity sha512-8yYZ9TCbBKoBkzHtVNMF6PV1RJEUvMlhvmS3GxH4UvXMEHlS45jFyqFy0DU+K42jBs5slOaA78xGqqqWAx3u6A== dependencies: - "@inquirer/core" "^10.3.0" - "@inquirer/external-editor" "^1.0.2" - "@inquirer/type" "^3.0.9" + "@inquirer/core" "^10.3.1" + "@inquirer/external-editor" "^1.0.3" + "@inquirer/type" "^3.0.10" -"@inquirer/expand@^4.0.21": - version "4.0.21" - resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-4.0.21.tgz#3b22eb3d9961bdbad6edb2a956cfcadc15be9128" - integrity sha512-+mScLhIcbPFmuvU3tAGBed78XvYHSvCl6dBiYMlzCLhpr0bzGzd8tfivMMeqND6XZiaZ1tgusbUHJEfc6YzOdA== +"@inquirer/expand@^4.0.22": + version "4.0.22" + resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-4.0.22.tgz#9780de797eac3592c7a1801d0296b1c577d62b70" + integrity sha512-9XOjCjvioLjwlq4S4yXzhvBmAXj5tG+jvva0uqedEsQ9VD8kZ+YT7ap23i0bIXOtow+di4+u3i6u26nDqEfY4Q== dependencies: - "@inquirer/core" "^10.3.0" - "@inquirer/type" "^3.0.9" - yoctocolors-cjs "^2.1.2" + "@inquirer/core" "^10.3.1" + "@inquirer/type" "^3.0.10" + yoctocolors-cjs "^2.1.3" -"@inquirer/external-editor@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@inquirer/external-editor/-/external-editor-1.0.2.tgz#dc16e7064c46c53be09918db639ff780718c071a" - integrity sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ== +"@inquirer/external-editor@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@inquirer/external-editor/-/external-editor-1.0.3.tgz#c23988291ee676290fdab3fd306e64010a6d13b8" + integrity sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA== dependencies: - chardet "^2.1.0" + chardet "^2.1.1" iconv-lite "^0.7.0" -"@inquirer/figures@^1.0.13": - version "1.0.13" - resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.13.tgz#ad0afd62baab1c23175115a9b62f511b6a751e45" - integrity sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw== - -"@inquirer/figures@^1.0.14": - version "1.0.14" - resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.14.tgz#12a7bfd344a83ae6cc5d6004b389ed11f6db6be4" - integrity sha512-DbFgdt+9/OZYFM+19dbpXOSeAstPy884FPy1KjDu4anWwymZeOYhMY1mdFri172htv6mvc/uvIAAi7b7tvjJBQ== +"@inquirer/figures@^1.0.15": + version "1.0.15" + resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.15.tgz#dbb49ed80df11df74268023b496ac5d9acd22b3a" + integrity sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g== -"@inquirer/input@^4.2.5": - version "4.2.5" - resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-4.2.5.tgz#40fe0a4b585c367089b57ef455da4980fbc5480f" - integrity sha512-7GoWev7P6s7t0oJbenH0eQ0ThNdDJbEAEtVt9vsrYZ9FulIokvd823yLyhQlWHJPGce1wzP53ttfdCZmonMHyA== +"@inquirer/input@^4.3.0": + version "4.3.0" + resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-4.3.0.tgz#e31ad67f7f625063a3a6c562075b9feab1afeaa6" + integrity sha512-h4fgse5zeGsBSW3cRQqu9a99OXRdRsNCvHoBqVmz40cjYjYFzcfwD0KA96BHIPlT7rZw0IpiefQIqXrjbzjS4Q== dependencies: - "@inquirer/core" "^10.3.0" - "@inquirer/type" "^3.0.9" + "@inquirer/core" "^10.3.1" + "@inquirer/type" "^3.0.10" -"@inquirer/number@^3.0.21": - version "3.0.21" - resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-3.0.21.tgz#fb8fac4c8bd08471b1068dc89f42d61fe3a43ca9" - integrity sha512-5QWs0KGaNMlhbdhOSCFfKsW+/dcAVC2g4wT/z2MCiZM47uLgatC5N20kpkDQf7dHx+XFct/MJvvNGy6aYJn4Pw== +"@inquirer/number@^3.0.22": + version "3.0.22" + resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-3.0.22.tgz#1bd82227990fb24af71d87e3f2b3af35206193bd" + integrity sha512-oAdMJXz++fX58HsIEYmvuf5EdE8CfBHHXjoi9cTcQzgFoHGZE+8+Y3P38MlaRMeBvAVnkWtAxMUF6urL2zYsbg== dependencies: - "@inquirer/core" "^10.3.0" - "@inquirer/type" "^3.0.9" + "@inquirer/core" "^10.3.1" + "@inquirer/type" "^3.0.10" -"@inquirer/password@^4.0.21": - version "4.0.21" - resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-4.0.21.tgz#b3422a19621290f2270f9b2ef8eeded8cf85db4f" - integrity sha512-xxeW1V5SbNFNig2pLfetsDb0svWlKuhmr7MPJZMYuDnCTkpVBI+X/doudg4pznc1/U+yYmWFFOi4hNvGgUo7EA== +"@inquirer/password@^4.0.22": + version "4.0.22" + resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-4.0.22.tgz#dcf01f7b60d21bc4c2c067fc6e736335223467a6" + integrity sha512-CbdqK1ioIr0Y3akx03k/+Twf+KSlHjn05hBL+rmubMll7PsDTGH0R4vfFkr+XrkB0FOHrjIwVP9crt49dgt+1g== dependencies: - "@inquirer/ansi" "^1.0.1" - "@inquirer/core" "^10.3.0" - "@inquirer/type" "^3.0.9" + "@inquirer/ansi" "^1.0.2" + "@inquirer/core" "^10.3.1" + "@inquirer/type" "^3.0.10" "@inquirer/prompts@^7.8.6": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-7.9.0.tgz#497718b2ac43b15cac636d8f7b501efd1574e1cd" - integrity sha512-X7/+dG9SLpSzRkwgG5/xiIzW0oMrV3C0HOa7YHG1WnrLK+vCQHfte4k/T80059YBdei29RBC3s+pSMvPJDU9/A== - dependencies: - "@inquirer/checkbox" "^4.3.0" - "@inquirer/confirm" "^5.1.19" - "@inquirer/editor" "^4.2.21" - "@inquirer/expand" "^4.0.21" - "@inquirer/input" "^4.2.5" - "@inquirer/number" "^3.0.21" - "@inquirer/password" "^4.0.21" - "@inquirer/rawlist" "^4.1.9" - "@inquirer/search" "^3.2.0" - "@inquirer/select" "^4.4.0" - -"@inquirer/rawlist@^4.1.9": - version "4.1.9" - resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-4.1.9.tgz#b4641cb54e130049a13bd1b7621ac766c6d531f2" - integrity sha512-AWpxB7MuJrRiSfTKGJ7Y68imYt8P9N3Gaa7ySdkFj1iWjr6WfbGAhdZvw/UnhFXTHITJzxGUI9k8IX7akAEBCg== - dependencies: - "@inquirer/core" "^10.3.0" - "@inquirer/type" "^3.0.9" - yoctocolors-cjs "^2.1.2" - -"@inquirer/search@^3.2.0": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-3.2.0.tgz#fef378965592e9f407cd4f1f782ca40df1b3ed5e" - integrity sha512-a5SzB/qrXafDX1Z4AZW3CsVoiNxcIYCzYP7r9RzrfMpaLpB+yWi5U8BWagZyLmwR0pKbbL5umnGRd0RzGVI8bQ== + version "7.10.0" + resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-7.10.0.tgz#5d9e00b562e335b732c2f682a066d2529ecb6902" + integrity sha512-X2HAjY9BClfFkJ2RP3iIiFxlct5JJVdaYYXhA7RKxsbc9KL+VbId79PSoUGH/OLS011NFbHHDMDcBKUj3T89+Q== + dependencies: + "@inquirer/checkbox" "^4.3.1" + "@inquirer/confirm" "^5.1.20" + "@inquirer/editor" "^4.2.22" + "@inquirer/expand" "^4.0.22" + "@inquirer/input" "^4.3.0" + "@inquirer/number" "^3.0.22" + "@inquirer/password" "^4.0.22" + "@inquirer/rawlist" "^4.1.10" + "@inquirer/search" "^3.2.1" + "@inquirer/select" "^4.4.1" + +"@inquirer/rawlist@^4.1.10": + version "4.1.10" + resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-4.1.10.tgz#e0f00098297b0770d22f84b7826ba782b51de1e9" + integrity sha512-Du4uidsgTMkoH5izgpfyauTL/ItVHOLsVdcY+wGeoGaG56BV+/JfmyoQGniyhegrDzXpfn3D+LFHaxMDRygcAw== + dependencies: + "@inquirer/core" "^10.3.1" + "@inquirer/type" "^3.0.10" + yoctocolors-cjs "^2.1.3" + +"@inquirer/search@^3.2.1": + version "3.2.1" + resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-3.2.1.tgz#e3e8c4ef893f1de05ef7b1930432f5bd9a08b545" + integrity sha512-cKiuUvETublmTmaOneEermfG2tI9ABpb7fW/LqzZAnSv4ZaJnbEis05lOkiBuYX5hNdnX0Q9ryOQyrNidb55WA== dependencies: - "@inquirer/core" "^10.3.0" - "@inquirer/figures" "^1.0.14" - "@inquirer/type" "^3.0.9" - yoctocolors-cjs "^2.1.2" + "@inquirer/core" "^10.3.1" + "@inquirer/figures" "^1.0.15" + "@inquirer/type" "^3.0.10" + yoctocolors-cjs "^2.1.3" -"@inquirer/select@^4.4.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-4.4.0.tgz#e19d0d0fbfcd5cb4a20f292e62c88aa8155cc6dc" - integrity sha512-kaC3FHsJZvVyIjYBs5Ih8y8Bj4P/QItQWrZW22WJax7zTN+ZPXVGuOM55vzbdCP9zKUiBd9iEJVdesujfF+cAA== +"@inquirer/select@^4.4.1": + version "4.4.1" + resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-4.4.1.tgz#0d047b764cfe91b68c6a208da1b96abc8017db6c" + integrity sha512-E9hbLU4XsNe2SAOSsFrtYtYQDVi1mfbqJrPDvXKnGlnRiApBdWMJz7r3J2Ff38AqULkPUD3XjQMD4492TymD7Q== dependencies: - "@inquirer/ansi" "^1.0.1" - "@inquirer/core" "^10.3.0" - "@inquirer/figures" "^1.0.14" - "@inquirer/type" "^3.0.9" - yoctocolors-cjs "^2.1.2" - -"@inquirer/type@^3.0.8": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-3.0.8.tgz#efc293ba0ed91e90e6267f1aacc1c70d20b8b4e8" - integrity sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw== + "@inquirer/ansi" "^1.0.2" + "@inquirer/core" "^10.3.1" + "@inquirer/figures" "^1.0.15" + "@inquirer/type" "^3.0.10" + yoctocolors-cjs "^2.1.3" -"@inquirer/type@^3.0.9": - version "3.0.9" - resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-3.0.9.tgz#f7f9696e9276e4e1ae9332767afb9199992e31d9" - integrity sha512-QPaNt/nmE2bLGQa9b7wwyRJoLZ7pN6rcyXvzU0YCmivmJyq1BVo94G98tStRWkoD1RgDX5C+dPlhhHzNdu/W/w== +"@inquirer/type@^3.0.10", "@inquirer/type@^3.0.8": + version "3.0.10" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-3.0.10.tgz#11ed564ec78432a200ea2601a212d24af8150d50" + integrity sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA== "@isaacs/balanced-match@^4.0.1": version "4.0.1" @@ -2829,10 +2787,10 @@ dependencies: "@lukeed/csprng" "^1.1.0" -"@mswjs/interceptors@^0.39.1": - version "0.39.7" - resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.39.7.tgz#a8860285ebe228c3043cde32c1843dd088e5276a" - integrity sha512-sURvQbbKsq5f8INV54YJgJEdk8oxBanqkTiXXd33rKmofFCwZLhLRszPduMZ9TA9b8/1CHc/IJmOlBHJk2Q5AQ== +"@mswjs/interceptors@^0.40.0": + version "0.40.0" + resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.40.0.tgz#1b45f215ba8c2983ed133763ca03af92896083d6" + integrity sha512-EFd6cVbHsgLa6wa4RljGj6Wk75qoHxUSyc5asLyyPSyuhIcdS2Q3Phw6ImS1q+CkALthJRShiYfKANcQMuMqsQ== dependencies: "@open-draft/deferred-promise" "^2.2.0" "@open-draft/logger" "^0.3.0" @@ -2996,14 +2954,14 @@ minimatch "^9.0.0" "@npmcli/metavuln-calculator@^9.0.0": - version "9.0.2" - resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-9.0.2.tgz#3dcb1bdd5b9f4c886ddff0e09b3b045c63d7fd18" - integrity sha512-eESzlCRLuD30qYefT2jYZTUepgu9DNJQdXABGGxjkir055x2UtnpNfDZCA6OJxButQNgxNKc9AeTchYxSgbMCw== + version "9.0.3" + resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-9.0.3.tgz#57b330f3fb8ca34db2782ad5349ea4384bed9c96" + integrity sha512-94GLSYhLXF2t2LAC7pDwLaM4uCARzxShyAQKsirmlNcpidH89VA4/+K1LbJmRMgz5gy65E/QBBWQdUvGLe2Frg== dependencies: cacache "^20.0.0" - json-parse-even-better-errors "^4.0.0" + json-parse-even-better-errors "^5.0.0" pacote "^21.0.0" - proc-log "^5.0.0" + proc-log "^6.0.0" semver "^7.3.5" "@npmcli/name-from-folder@^3.0.0": @@ -3016,6 +2974,11 @@ resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-4.0.0.tgz#01f900bae62f0f27f9a5a127b40d443ddfb9d4c6" integrity sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA== +"@npmcli/node-gyp@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-5.0.0.tgz#35475a58b5d791764a7252231197a14deefe8e47" + integrity sha512-uuG5HZFXLfyFKqg8QypsmgLQW7smiRjVc45bqD/ofZZcR/uxEjgQU8qDPv0s9TEeMUiAAU/GC5bR6++UdTirIQ== + "@npmcli/package-json@7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-7.0.0.tgz#d429eb2e190b600e43318abaf978931dca5760fa" @@ -3043,15 +3006,15 @@ validate-npm-package-license "^3.0.4" "@npmcli/package-json@^7.0.0": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-7.0.1.tgz#709e852298777f6f1251afa2f200d3843f65caf3" - integrity sha512-956YUeI0YITbk2+KnirCkD19HLzES0habV+Els+dyZaVsaM6VGSiNwnRu6t3CZaqDLz4KXy2zx+0N/Zy6YjlAA== + version "7.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-7.0.2.tgz#9ac89c08d6a637bd0db8a73717d53ec45d87fa5c" + integrity sha512-0ylN3U5htO1SJTmy2YI78PZZjLkKUGg7EKgukb2CRi0kzyoDr0cfjHAzi7kozVhj2V3SxN1oyKqZ2NSo40z00g== dependencies: "@npmcli/git" "^7.0.0" glob "^11.0.3" hosted-git-info "^9.0.0" - json-parse-even-better-errors "^4.0.0" - proc-log "^5.0.0" + json-parse-even-better-errors "^5.0.0" + proc-log "^6.0.0" semver "^7.5.3" validate-npm-package-license "^3.0.4" @@ -3062,6 +3025,13 @@ dependencies: which "^5.0.0" +"@npmcli/promise-spawn@^9.0.0": + version "9.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-9.0.0.tgz#2a01fd00c612de7ea3d3e16910accc99b4122542" + integrity sha512-qxvGj3ZM6Zuk8YeVMY0gZHY19WN6g3OGxwR4MBaxHImfD/4zD0HpgBHNOSayEaisj/p3PyQjdQlO9tbl5ZBFZg== + dependencies: + which "^5.0.0" + "@npmcli/query@^4.0.0": version "4.0.1" resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-4.0.1.tgz#f8a538807f2d0059c0bee7f4a1f712b73ae47603" @@ -3074,7 +3044,7 @@ resolved "https://registry.yarnpkg.com/@npmcli/redact/-/redact-3.2.2.tgz#4a6745e0ae269120ad223780ce374d6c59ae34cd" integrity sha512-7VmYAmk4csGv08QzrDKScdzn11jHPFGyqJW39FyPgPuAp3zIaUmuCo1yxw9aGs+NEJuTGQ9Gwqpt93vtJubucg== -"@npmcli/run-script@10.0.0", "@npmcli/run-script@^10.0.0": +"@npmcli/run-script@10.0.0": version "10.0.0" resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-10.0.0.tgz#7ded3a1f7a1faee52453c6b12c429d5fbc32c6f6" integrity sha512-vaQj4nccJbAslopIvd49pQH2NhUp7G9pY4byUtmwhe37ZZuubGrx0eB9hW2F37uVNRuDDK6byFGXF+7JCuMSZg== @@ -3086,6 +3056,18 @@ proc-log "^5.0.0" which "^5.0.0" +"@npmcli/run-script@^10.0.0": + version "10.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-10.0.2.tgz#aa00b1c002138cb83b0fe034cad58bcfa24070c4" + integrity sha512-9lCTqxaoa9c9cdkzSSx+q/qaYrCrUPEwTWzLkVYg1/T8ESH3BG9vmb1zRc6ODsBVB0+gnGRSqSr01pxTS1yX3A== + dependencies: + "@npmcli/node-gyp" "^5.0.0" + "@npmcli/package-json" "^7.0.0" + "@npmcli/promise-spawn" "^9.0.0" + node-gyp "^11.0.0" + proc-log "^6.0.0" + which "^5.0.0" + "@npmcli/run-script@^9.0.1": version "9.1.0" resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-9.1.0.tgz#6168c2be4703fe5ed31acb08a2151cb620ed30a4" @@ -3098,24 +3080,10 @@ proc-log "^5.0.0" which "^5.0.0" -"@nx/devkit@21.5.3": - version "21.5.3" - resolved "https://registry.yarnpkg.com/@nx/devkit/-/devkit-21.5.3.tgz#1d0d3781224e6c52470461f3d9a6ff3160b07a85" - integrity sha512-ETfoL+fsr7cHonRzI6mX0nsFU/Tna4sxP4rqlE/uix8QjXsp3fbalCS9gUyJ/M/eOQnrKcbSCbsS8E8lbY6tvg== - dependencies: - ejs "^3.1.7" - enquirer "~2.3.6" - ignore "^5.0.4" - minimatch "9.0.3" - semver "^7.5.3" - tmp "~0.2.1" - tslib "^2.3.0" - yargs-parser "21.1.1" - -"@nx/devkit@>=21.5.2 < 22.0.0": - version "21.6.5" - resolved "https://registry.yarnpkg.com/@nx/devkit/-/devkit-21.6.5.tgz#adcf6cc8992aa05062ef43178569711105122d50" - integrity sha512-cJQoPd2/FNFiFgn93o0nR7XA26q1Sg+hKSgWr6YKus622UCYeST3M/h2NHNXpIfz2h6L7puBRrGwWiQC7cHWJQ== +"@nx/devkit@21.6.8", "@nx/devkit@>=21.5.2 < 22.0.0": + version "21.6.8" + resolved "https://registry.yarnpkg.com/@nx/devkit/-/devkit-21.6.8.tgz#c86f6b817ac2c92afb2d866db8181d9956b90d5b" + integrity sha512-N0cj0NqdxY2pcI0IJV+fAu362B6tppdv2ohSBNGacNeSqxfAlJxO5TFZePDmxX5nt0t9hAqT+iasfu4BSYGfZw== dependencies: ejs "^3.1.7" enquirer "~2.3.6" @@ -3125,116 +3093,66 @@ tslib "^2.3.0" yargs-parser "21.1.1" -"@nx/nx-darwin-arm64@21.5.3": - version "21.5.3" - resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-21.5.3.tgz#6983dbf90a42c19a3e8fee085ca7f2aac8ee31ef" - integrity sha512-XKOaBpkBzPd5l9in1ax7KQrAiqm4hi46pzQ/qq4Jo20/RKTpc2ZZSFujjuI8wF75oZ6+iV+cvuxSbwbuX6AxQQ== - -"@nx/nx-darwin-arm64@21.6.5": - version "21.6.5" - resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-21.6.5.tgz#4ddcb658ebbf5cf4ffe498dfc888aad2586b797e" - integrity sha512-TFIQPKsKZrLeWN8JMaTuwnLq+QE/vh7TjinlXUjdalH6uTczPKWC9ViNmdfNUBblZWQjOGxc4aQ5rVs8YvUIbw== - -"@nx/nx-darwin-x64@21.5.3": - version "21.5.3" - resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-21.5.3.tgz#7a845873505a7fcba5d1af6d0e89059613ffe3b7" - integrity sha512-auGY/gvB5B2In25gozlNV6lb4so14OIpIh/dPgXXrHL5YTuky2i6NFiTOq2D1RWtv5kkoK73rQXDbffDXUS6SA== - -"@nx/nx-darwin-x64@21.6.5": - version "21.6.5" - resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-21.6.5.tgz#d62ba2fa503cc7c156f11f201df94099c468baf7" - integrity sha512-S/uW1tznZ5p93fOwcG+s+tuYI3aVIJKWTWI366XlusOj8yAHsDl1lI8dTp9ImN9kIdcgfF7/fr/zEMHpLLVvLg== - -"@nx/nx-freebsd-x64@21.5.3": - version "21.5.3" - resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-21.5.3.tgz#28bd4c121eb5a07664a5c6089ecaa2ed39b49db5" - integrity sha512-IsPCC8CpIRd7dzcRQ+j1zAEZObKVkSLQ3GI7rqybEf0/vWZz6T7UbxGHNtFB7AlaecCbHshZ3Mg5mPVXYSR+iA== - -"@nx/nx-freebsd-x64@21.6.5": - version "21.6.5" - resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-21.6.5.tgz#38154871b276ef2a1d409b5da8563c88a0a872a4" - integrity sha512-DTSTXWiy381u6u4YEuJK8sFFnlRojuPqmWd8sxhVHzxE5gShm2lcZmuCmmPHm/p2cqW929a07rMpjJfgcJyjIA== - -"@nx/nx-linux-arm-gnueabihf@21.5.3": - version "21.5.3" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-21.5.3.tgz#df238c08fc3fa594bd6bfbf2cd5a95befd938242" - integrity sha512-IDW5wy2x7KNFK5u8v94KarJ0h4Fk49pVMKcAI6imeQOJnc0lh0TwID4cqVTCg73BLJXbIV3+Ok01jDKrDsTL/w== - -"@nx/nx-linux-arm-gnueabihf@21.6.5": - version "21.6.5" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-21.6.5.tgz#520c6add1d1106ab0bce7ffe7dfffd5707d4b6f1" - integrity sha512-GEZXLowEaJb0ug4HgPSx6Cmc6EBP2WI7horw69aQ2bH7VeXEvxg758C5JDPSK33LQliJTGw4eaMzJqfEutvsuA== - -"@nx/nx-linux-arm64-gnu@21.5.3": - version "21.5.3" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-21.5.3.tgz#3af7524a8ba825cb868aaeb02c2a72f518706560" - integrity sha512-GQF/xjGeqt4tYWf9jT1D0GRPrcAjajTB1QpSavUaiT1jDkByuN11WvuWeTfBdPJpYWFxvH887+r+uMEg8zRE4A== - -"@nx/nx-linux-arm64-gnu@21.6.5": - version "21.6.5" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-21.6.5.tgz#14049fd981cc13b9be1c062e32a280c9877476c3" - integrity sha512-iGIyx7jZvgOfs4e8jMZbEZ0b8jqsnVBwcU0s+5XltMxUuVNiDmnzRnj+lyYFxO5DuFEKyO5YGDtI9nLeBuzDkg== - -"@nx/nx-linux-arm64-musl@21.5.3": - version "21.5.3" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-21.5.3.tgz#d2895587002547ae15705eed8f8025c34eb17752" - integrity sha512-C5j2pzfe0zoAJelHXzPdTGeU19VvvHVaoesiKPeH9EvJwLLb9FoeIn+6//x3jDUNUqIHdn4+63kMA6mdBQSpMQ== - -"@nx/nx-linux-arm64-musl@21.6.5": - version "21.6.5" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-21.6.5.tgz#afbd6a7e1cc07525853f56de7b23f963f3202125" - integrity sha512-miz+U1g9pRfKV3sofzXOb8MzX/wpc09NLJ0P/IH5vfxHe5URk9ipk3tKrnoWnd0GaZxJTfdQcoAAOzBSOOyP/A== - -"@nx/nx-linux-x64-gnu@21.5.3": - version "21.5.3" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-21.5.3.tgz#efbd47e8b13a4fc0c15e6729589b102b2bd0313d" - integrity sha512-HI+tdkvzFcnJQpU9m1FjvlxW7ZsJeF4os8OG4HSLRTQfFT8HCXXzp6b9sojTr+4Nfvp5r3T/J/UJM9tOJXW9Aw== - -"@nx/nx-linux-x64-gnu@21.6.5": - version "21.6.5" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-21.6.5.tgz#f7fac4e8ac7f78936047df58efe0e8267691a19b" - integrity sha512-mn9INnIDPHxm2lN7dMPydoYR/Z0t7VmekIZIQx1TlkOvJJfC+B1UeQ/VDvOqs6bhNv+WCPw7b7Kq7gBC4hbgMw== - -"@nx/nx-linux-x64-musl@21.5.3": - version "21.5.3" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-21.5.3.tgz#d9b7a574a739617a6509ca327529e6cca6ed7920" - integrity sha512-ntlBqcO9wVajUjYwzBU5ru2iBORttO4nurKvjnpBbyCF1mOjSJ3uFcFMzktbp2cxpRE5JRAadGq9/pZisez1AQ== - -"@nx/nx-linux-x64-musl@21.6.5": - version "21.6.5" - resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-21.6.5.tgz#94bc8b24360f55dca890ed033e53b69ac1463ed4" - integrity sha512-1CudJ4QEvbrD5fj7udOLrApPWcx0BqZ7KIBdp3CqJ6De8oXUAmNgcf1NjD+DhJt0efVOGtaDPK60Sshkm9wjSA== - -"@nx/nx-win32-arm64-msvc@21.5.3": - version "21.5.3" - resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-21.5.3.tgz#86dda694879bf0d6ee7365d41fad898a62620e64" - integrity sha512-VgX1VnKDRgWcjIMJ0V3zZ6OPuYkvA7rzgn8wbZWyBh2/1GFFffypJJsGeXRPCZBFHjF3UFYcwjzCMoStZ35b5g== - -"@nx/nx-win32-arm64-msvc@21.6.5": - version "21.6.5" - resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-21.6.5.tgz#8470b77cad5846d6d24ee4ca177e14f2b3d86569" - integrity sha512-dFNNfqNZUi4Hqox8NPlVjjQw5dqOlmBERZ4he1CRQ0OC4SAFV7uX8c+U9y8ndghU2R5AnCztu63aHfZOQiTfBw== - -"@nx/nx-win32-x64-msvc@21.5.3": - version "21.5.3" - resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-21.5.3.tgz#76e86d74191b5a36d00aff71962e045d294d0cb8" - integrity sha512-bEQxvsglGInSi51HJUJ7X1lqekzn5xAOddY4tpmOzBXVadx4fuMT8X/PLDLorAAShNZ36g/7sYbtWaBuJNz3tQ== - -"@nx/nx-win32-x64-msvc@21.6.5": - version "21.6.5" - resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-21.6.5.tgz#4faf93c61add4ed808d0efe477acb7a5a84c1e93" - integrity sha512-KC0nK82N2suok1Q2J4sNavtAvVnF9QVivGs/7Wj4Gx3L14lyt/mq6I9f8eOyI1JAeSCRf0a7RhQKfDv8Qac4mQ== +"@nx/nx-darwin-arm64@21.6.8": + version "21.6.8" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-21.6.8.tgz#8c32bca28480a54d15d8f671384fef7beb36e086" + integrity sha512-MG5bhSYhG49r+e0mLuztQVHz1sEy7cs8BvZJ56mm7JNQ1VfbaTyLAR7VcNw8O/1mJA8jYcg9fmxOIZOUnY1cEQ== + +"@nx/nx-darwin-x64@21.6.8": + version "21.6.8" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-21.6.8.tgz#c31383a0e8bf070d6861623d4e1dad39fa8e6d0d" + integrity sha512-e9oXVTd6U6RFEc3k22PGoe5OSy40fyyytl+svSJQmK+5rxZalvAUna/mXtFcQC9m6No2daqqpfAZlyN5nG6WHw== + +"@nx/nx-freebsd-x64@21.6.8": + version "21.6.8" + resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-21.6.8.tgz#e3d758849f1eae607bd1b389f82e0948345c684a" + integrity sha512-gK3rsTXQj0hHCyaAvZmPZeCPkb3jzesgtkXuZf+7pCm5b4wiEA1i22ufp1UzwaTmWgbub/6NVMEDOGsVcay8mA== + +"@nx/nx-linux-arm-gnueabihf@21.6.8": + version "21.6.8" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-21.6.8.tgz#5144d0623509b92d1880b6b5d351dc147c8fc5d4" + integrity sha512-TXt3HTFhM4kuL9larxBuo3XpSngoA1JCtHavfYLRC3A8knACi7LwNQwnF5RWAcYgKMVE3/8IAhV8LuemXrPKKw== + +"@nx/nx-linux-arm64-gnu@21.6.8": + version "21.6.8" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-21.6.8.tgz#682ad0a09c8a9b451f97976c76ea63473f20bb17" + integrity sha512-QwZREYIhqhDVEIf+KAv2VFipxMUoULXXS3qyLX3/q/4u8Y32fyM5wd+FXpv89cRCiveVsZp8io2W178R6lfKng== + +"@nx/nx-linux-arm64-musl@21.6.8": + version "21.6.8" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-21.6.8.tgz#17a701a95cc0abb521205b02e12a4818c5f327c7" + integrity sha512-UZJyrZ6utU8g1W7E31iHDhWj1SjMidmDNyrVP4xK6IUrotx6qGrwfwWqzqvphhc1cA7w4Zz9N/rCCPQkdHzjLw== + +"@nx/nx-linux-x64-gnu@21.6.8": + version "21.6.8" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-21.6.8.tgz#3f0d67cc636a273160f851e547fbb21082de5737" + integrity sha512-HXINTg4P0/Yj76vsvqBAb7MNlLpkH1pl9JF2blXScOFXWzNoStd7b6xyrpCROdmi0Hk8y3UEwc8OIyLFIfixJg== + +"@nx/nx-linux-x64-musl@21.6.8": + version "21.6.8" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-21.6.8.tgz#e1f6ed3a740b9dc4c6cd9f7bf2ed2ff98357f421" + integrity sha512-2YbXLhuSlElCtQTR1Ib94O3T4fX9uzSIkUMYGL3n04agG0HemXoxJa91TWwwOUMbEZffkhcPsJBOh2S5l47s9Q== + +"@nx/nx-win32-arm64-msvc@21.6.8": + version "21.6.8" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-21.6.8.tgz#736538f3d5d02a52f4d9f2756382a001cd6b71aa" + integrity sha512-/VSGtqa1oGHo5n24R39ZuGxMrGyf7pxFuCtL5hAzBHdTxFg/VZomPGd7BeV5VN5SbIw+fie+nTGkC5q3TOPGXw== + +"@nx/nx-win32-x64-msvc@21.6.8": + version "21.6.8" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-21.6.8.tgz#b25af02fbd5730e22674802db38b61eb3fa5e7d7" + integrity sha512-xeBL7PcDqHH/Zw4d2A2qP7eLImzzcMO3hiKs5G42Wi92ACejAdUqpIduTL4RpArsXIHm5VEbE4KvHNii1mMU1A== "@nx/workspace@^21.2.1": - version "21.5.3" - resolved "https://registry.yarnpkg.com/@nx/workspace/-/workspace-21.5.3.tgz#695a596bd865b9b0b98847f27a8d724c9249e1e4" - integrity sha512-lOiQ0uF8oOtoEcjtNTUer4BMCERLhdfSdoHYjfkt7SOIWepBSxTqN26dJXQQ0uBn4ZaHGhTlenYD4UZ1mN80OA== + version "21.6.8" + resolved "https://registry.yarnpkg.com/@nx/workspace/-/workspace-21.6.8.tgz#f894d6718a034340dfd6162c70c0233acbcb6260" + integrity sha512-X2DgtqxFJwwte4GxancLZ2GFMc+9waRaLPL6goR/HAtIvKriqZAVMkywNMk1mnhrpo0M7UXmfbM51kf+nsS+bg== dependencies: - "@nx/devkit" "21.5.3" + "@nx/devkit" "21.6.8" "@zkochan/js-yaml" "0.0.7" chalk "^4.1.0" enquirer "~2.3.6" - nx "21.5.3" + nx "21.6.8" picomatch "4.0.2" semver "^7.6.3" tslib "^2.3.0" @@ -3933,9 +3851,9 @@ resolve "^1.22.1" "@rollup/plugin-replace@^6.0.1": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-6.0.2.tgz#2f565d312d681e4570ff376c55c5c08eb6f1908d" - integrity sha512-7QaYCf8bqF04dOy7w/eHmJeNExxTYwvKAmlSAH/EaWWUzbT0h5sbF6bktFoX/0F/0qwng5/dWFMyf3gzaM8DsQ== + version "6.0.3" + resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-6.0.3.tgz#0f82e41d81f6586ab0f81a1b48bd7fd92fcfb9a2" + integrity sha512-J4RZarRvQAm5IF0/LwUUg+obsm+xZhYnbMXmXROyoSE1ATJe3oXSb9L5MMppdxP2ylNSjv6zFBwKYjcKMucVfA== dependencies: "@rollup/pluginutils" "^5.0.1" magic-string "^0.30.3" @@ -3965,115 +3883,115 @@ estree-walker "^2.0.2" picomatch "^4.0.2" -"@rollup/rollup-android-arm-eabi@4.52.2": - version "4.52.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.2.tgz#3a43e904367cd6147c5a8de9df4ff7ffa48634ec" - integrity sha512-o3pcKzJgSGt4d74lSZ+OCnHwkKBeAbFDmbEm5gg70eA8VkyCuC/zV9TwBnmw6VjDlRdF4Pshfb+WE9E6XY1PoQ== - -"@rollup/rollup-android-arm64@4.52.2": - version "4.52.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.2.tgz#7af548eefb4def2fb678a207ff0236a045678be7" - integrity sha512-cqFSWO5tX2vhC9hJTK8WAiPIm4Q8q/cU8j2HQA0L3E1uXvBYbOZMhE2oFL8n2pKB5sOCHY6bBuHaRwG7TkfJyw== - -"@rollup/rollup-darwin-arm64@4.52.2": - version "4.52.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.2.tgz#13a9b8d3e31e7425b71d0caf13527ead19baf27a" - integrity sha512-vngduywkkv8Fkh3wIZf5nFPXzWsNsVu1kvtLETWxTFf/5opZmflgVSeLgdHR56RQh71xhPhWoOkEBvbehwTlVA== - -"@rollup/rollup-darwin-x64@4.52.2": - version "4.52.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.2.tgz#c794e406914ff9e3ffbfe994080590135e70ad9a" - integrity sha512-h11KikYrUCYTrDj6h939hhMNlqU2fo/X4NB0OZcys3fya49o1hmFaczAiJWVAFgrM1NCP6RrO7lQKeVYSKBPSQ== - -"@rollup/rollup-freebsd-arm64@4.52.2": - version "4.52.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.2.tgz#63fa5783edd02a7aae141fc718e1f26882736c2b" - integrity sha512-/eg4CI61ZUkLXxMHyVlmlGrSQZ34xqWlZNW43IAU4RmdzWEx0mQJ2mN/Cx4IHLVZFL6UBGAh+/GXhgvGb+nVxw== - -"@rollup/rollup-freebsd-x64@4.52.2": - version "4.52.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.2.tgz#5c22816795cebb4f64d6440dd52951e5948ed1e3" - integrity sha512-QOWgFH5X9+p+S1NAfOqc0z8qEpJIoUHf7OWjNUGOeW18Mx22lAUOiA9b6r2/vpzLdfxi/f+VWsYjUOMCcYh0Ng== - -"@rollup/rollup-linux-arm-gnueabihf@4.52.2": - version "4.52.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.2.tgz#e65c6cf40153e06cfc7d2e15bb9ce8333a033649" - integrity sha512-kDWSPafToDd8LcBYd1t5jw7bD5Ojcu12S3uT372e5HKPzQt532vW+rGFFOaiR0opxePyUkHrwz8iWYEyH1IIQA== - -"@rollup/rollup-linux-arm-musleabihf@4.52.2": - version "4.52.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.2.tgz#d17ffee4a8b73d9dac55590748f8ec1d88c9398d" - integrity sha512-gKm7Mk9wCv6/rkzwCiUC4KnevYhlf8ztBrDRT9g/u//1fZLapSRc+eDZj2Eu2wpJ+0RzUKgtNijnVIB4ZxyL+w== - -"@rollup/rollup-linux-arm64-gnu@4.52.2": - version "4.52.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.2.tgz#b359b24b1c1f40f5920d2fd827fde1407608a941" - integrity sha512-66lA8vnj5mB/rtDNwPgrrKUOtCLVQypkyDa2gMfOefXK6rcZAxKLO9Fy3GkW8VkPnENv9hBkNOFfGLf6rNKGUg== - -"@rollup/rollup-linux-arm64-musl@4.52.2": - version "4.52.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.2.tgz#d8260f24d292525b03e5c257dee8e46de0df61bc" - integrity sha512-s+OPucLNdJHvuZHuIz2WwncJ+SfWHFEmlC5nKMUgAelUeBUnlB4wt7rXWiyG4Zn07uY2Dd+SGyVa9oyLkVGOjA== - -"@rollup/rollup-linux-loong64-gnu@4.52.2": - version "4.52.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.2.tgz#da159bad4467c41868a0803d4009839aac2f38d3" - integrity sha512-8wTRM3+gVMDLLDdaT6tKmOE3lJyRy9NpJUS/ZRWmLCmOPIJhVyXwjBo+XbrrwtV33Em1/eCTd5TuGJm4+DmYjw== - -"@rollup/rollup-linux-ppc64-gnu@4.52.2": - version "4.52.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.2.tgz#f0b10d49210bef2eed9ae7a0ec9ef3e3bf1beffd" - integrity sha512-6yqEfgJ1anIeuP2P/zhtfBlDpXUb80t8DpbYwXQ3bQd95JMvUaqiX+fKqYqUwZXqdJDd8xdilNtsHM2N0cFm6A== - -"@rollup/rollup-linux-riscv64-gnu@4.52.2": - version "4.52.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.2.tgz#f3d023dc14669780de638c662b3ecf6431253bb8" - integrity sha512-sshYUiYVSEI2B6dp4jMncwxbrUqRdNApF2c3bhtLAU0qA8Lrri0p0NauOsTWh3yCCCDyBOjESHMExonp7Nzc0w== - -"@rollup/rollup-linux-riscv64-musl@4.52.2": - version "4.52.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.2.tgz#1c451e83ae32ad926c3af90a0a64073d432aa179" - integrity sha512-duBLgd+3pqC4MMwBrKkFxaZerUxZcYApQVC5SdbF5/e/589GwVvlRUnyqMFbM8iUSb1BaoX/3fRL7hB9m2Pj8Q== - -"@rollup/rollup-linux-s390x-gnu@4.52.2": - version "4.52.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.2.tgz#ca91af9d54132db20f06ffdf6b81720aeb434e7b" - integrity sha512-tzhYJJidDUVGMgVyE+PmxENPHlvvqm1KILjjZhB8/xHYqAGeizh3GBGf9u6WdJpZrz1aCpIIHG0LgJgH9rVjHQ== - -"@rollup/rollup-linux-x64-gnu@4.52.2": - version "4.52.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.2.tgz#074807dca3a15542b5e224ef6138f000a1015193" - integrity sha512-opH8GSUuVcCSSyHHcl5hELrmnk4waZoVpgn/4FDao9iyE4WpQhyWJ5ryl5M3ocp4qkRuHfyXnGqg8M9oKCEKRA== - -"@rollup/rollup-linux-x64-musl@4.52.2": - version "4.52.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.2.tgz#b786fd7a6b0a1146be56d952626170f3784594e9" - integrity sha512-LSeBHnGli1pPKVJ79ZVJgeZWWZXkEe/5o8kcn23M8eMKCUANejchJbF/JqzM4RRjOJfNRhKJk8FuqL1GKjF5oQ== - -"@rollup/rollup-openharmony-arm64@4.52.2": - version "4.52.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.2.tgz#4bd9469e14c178186c5c594a7d418aaeb031df81" - integrity sha512-uPj7MQ6/s+/GOpolavm6BPo+6CbhbKYyZHUDvZ/SmJM7pfDBgdGisFX3bY/CBDMg2ZO4utfhlApkSfZ92yXw7Q== - -"@rollup/rollup-win32-arm64-msvc@4.52.2": - version "4.52.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.2.tgz#3e82d9cfcbcf268dbb861c49f631b17a68ed0411" - integrity sha512-Z9MUCrSgIaUeeHAiNkm3cQyst2UhzjPraR3gYYfOjAuZI7tcFRTOD+4cHLPoS/3qinchth+V56vtqz1Tv+6KPA== - -"@rollup/rollup-win32-ia32-msvc@4.52.2": - version "4.52.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.2.tgz#f4e68265d5c758afd2e1c6ff13319558b0c8a205" - integrity sha512-+GnYBmpjldD3XQd+HMejo+0gJGwYIOfFeoBQv32xF/RUIvccUz20/V6Otdv+57NE70D5pa8W/jVGDoGq0oON4A== - -"@rollup/rollup-win32-x64-gnu@4.52.2": - version "4.52.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.2.tgz#54f9e64b3550416c8520e3dc22301ef8e454b37e" - integrity sha512-ApXFKluSB6kDQkAqZOKXBjiaqdF1BlKi+/eqnYe9Ee7U2K3pUDKsIyr8EYm/QDHTJIM+4X+lI0gJc3TTRhd+dA== - -"@rollup/rollup-win32-x64-msvc@4.52.2": - version "4.52.2" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.2.tgz#cf83e2c56b581bad4614eeb3d2da5b5917ed34ec" - integrity sha512-ARz+Bs8kY6FtitYM96PqPEVvPXqEZmPZsSkXvyX19YzDqkCaIlhCieLLMI5hxO9SRZ2XtCtm8wxhy0iJ2jxNfw== +"@rollup/rollup-android-arm-eabi@4.53.2": + version "4.53.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.2.tgz#7131f3d364805067fd5596302aad9ebef1434b32" + integrity sha512-yDPzwsgiFO26RJA4nZo8I+xqzh7sJTZIWQOxn+/XOdPE31lAvLIYCKqjV+lNH/vxE2L2iH3plKxDCRK6i+CwhA== + +"@rollup/rollup-android-arm64@4.53.2": + version "4.53.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.2.tgz#7ede14d7fcf7c57821a2731c04b29ccc03145d82" + integrity sha512-k8FontTxIE7b0/OGKeSN5B6j25EuppBcWM33Z19JoVT7UTXFSo3D9CdU39wGTeb29NO3XxpMNauh09B+Ibw+9g== + +"@rollup/rollup-darwin-arm64@4.53.2": + version "4.53.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.2.tgz#d59bf9ed582b38838e86a17f91720c17db6575b9" + integrity sha512-A6s4gJpomNBtJ2yioj8bflM2oogDwzUiMl2yNJ2v9E7++sHrSrsQ29fOfn5DM/iCzpWcebNYEdXpaK4tr2RhfQ== + +"@rollup/rollup-darwin-x64@4.53.2": + version "4.53.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.2.tgz#a76278d9b9da9f84ea7909a14d93b915d5bbe01e" + integrity sha512-e6XqVmXlHrBlG56obu9gDRPW3O3hLxpwHpLsBJvuI8qqnsrtSZ9ERoWUXtPOkY8c78WghyPHZdmPhHLWNdAGEw== + +"@rollup/rollup-freebsd-arm64@4.53.2": + version "4.53.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.2.tgz#1a94821a1f565b9eaa74187632d482e4c59a1707" + integrity sha512-v0E9lJW8VsrwPux5Qe5CwmH/CF/2mQs6xU1MF3nmUxmZUCHazCjLgYvToOk+YuuUqLQBio1qkkREhxhc656ViA== + +"@rollup/rollup-freebsd-x64@4.53.2": + version "4.53.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.2.tgz#aad2274680106b2b6549b1e35e5d3a7a9f1f16af" + integrity sha512-ClAmAPx3ZCHtp6ysl4XEhWU69GUB1D+s7G9YjHGhIGCSrsg00nEGRRZHmINYxkdoJehde8VIsDC5t9C0gb6yqA== + +"@rollup/rollup-linux-arm-gnueabihf@4.53.2": + version "4.53.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.2.tgz#100fe4306399ffeec47318a3c9b8c0e5e8b07ddb" + integrity sha512-EPlb95nUsz6Dd9Qy13fI5kUPXNSljaG9FiJ4YUGU1O/Q77i5DYFW5KR8g1OzTcdZUqQQ1KdDqsTohdFVwCwjqg== + +"@rollup/rollup-linux-arm-musleabihf@4.53.2": + version "4.53.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.2.tgz#b84634952604b950e18fa11fddebde898c5928d8" + integrity sha512-BOmnVW+khAUX+YZvNfa0tGTEMVVEerOxN0pDk2E6N6DsEIa2Ctj48FOMfNDdrwinocKaC7YXUZ1pHlKpnkja/Q== + +"@rollup/rollup-linux-arm64-gnu@4.53.2": + version "4.53.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.2.tgz#dad6f2fb41c2485f29a98e40e9bd78253255dbf3" + integrity sha512-Xt2byDZ+6OVNuREgBXr4+CZDJtrVso5woFtpKdGPhpTPHcNG7D8YXeQzpNbFRxzTVqJf7kvPMCub/pcGUWgBjA== + +"@rollup/rollup-linux-arm64-musl@4.53.2": + version "4.53.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.2.tgz#0f3f77c8ce9fbf982f8a8378b70a73dc6704a706" + integrity sha512-+LdZSldy/I9N8+klim/Y1HsKbJ3BbInHav5qE9Iy77dtHC/pibw1SR/fXlWyAk0ThnpRKoODwnAuSjqxFRDHUQ== + +"@rollup/rollup-linux-loong64-gnu@4.53.2": + version "4.53.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.2.tgz#870bb94e9dad28bb3124ba49bd733deaa6aa2635" + integrity sha512-8ms8sjmyc1jWJS6WdNSA23rEfdjWB30LH8Wqj0Cqvv7qSHnvw6kgMMXRdop6hkmGPlyYBdRPkjJnj3KCUHV/uQ== + +"@rollup/rollup-linux-ppc64-gnu@4.53.2": + version "4.53.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.2.tgz#188427d11abefc6c9926e3870b3e032170f5577c" + integrity sha512-3HRQLUQbpBDMmzoxPJYd3W6vrVHOo2cVW8RUo87Xz0JPJcBLBr5kZ1pGcQAhdZgX9VV7NbGNipah1omKKe23/g== + +"@rollup/rollup-linux-riscv64-gnu@4.53.2": + version "4.53.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.2.tgz#9dec6eadbbb5abd3b76fe624dc4f006913ff4a7f" + integrity sha512-fMjKi+ojnmIvhk34gZP94vjogXNNUKMEYs+EDaB/5TG/wUkoeua7p7VCHnE6T2Tx+iaghAqQX8teQzcvrYpaQA== + +"@rollup/rollup-linux-riscv64-musl@4.53.2": + version "4.53.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.2.tgz#b26ba1c80b6f104dc5bd83ed83181fc0411a0c38" + integrity sha512-XuGFGU+VwUUV5kLvoAdi0Wz5Xbh2SrjIxCtZj6Wq8MDp4bflb/+ThZsVxokM7n0pcbkEr2h5/pzqzDYI7cCgLQ== + +"@rollup/rollup-linux-s390x-gnu@4.53.2": + version "4.53.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.2.tgz#dc83647189b68ad8d56a956a6fcaa4ee9c728190" + integrity sha512-w6yjZF0P+NGzWR3AXWX9zc0DNEGdtvykB03uhonSHMRa+oWA6novflo2WaJr6JZakG2ucsyb+rvhrKac6NIy+w== + +"@rollup/rollup-linux-x64-gnu@4.53.2": + version "4.53.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.2.tgz#42c3b8c94e9de37bd103cb2e26fb715118ef6459" + integrity sha512-yo8d6tdfdeBArzC7T/PnHd7OypfI9cbuZzPnzLJIyKYFhAQ8SvlkKtKBMbXDxe1h03Rcr7u++nFS7tqXz87Gtw== + +"@rollup/rollup-linux-x64-musl@4.53.2": + version "4.53.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.2.tgz#d0e216ee1ea16bfafe35681b899b6a05258988e5" + integrity sha512-ah59c1YkCxKExPP8O9PwOvs+XRLKwh/mV+3YdKqQ5AMQ0r4M4ZDuOrpWkUaqO7fzAHdINzV9tEVu8vNw48z0lA== + +"@rollup/rollup-openharmony-arm64@4.53.2": + version "4.53.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.2.tgz#3acd0157cb8976f659442bfd8a99aca46f8a2931" + integrity sha512-4VEd19Wmhr+Zy7hbUsFZ6YXEiP48hE//KPLCSVNY5RMGX2/7HZ+QkN55a3atM1C/BZCGIgqN+xrVgtdak2S9+A== + +"@rollup/rollup-win32-arm64-msvc@4.53.2": + version "4.53.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.2.tgz#3eb9e7d4d0e1d2e0850c4ee9aa2d0ddf89a8effa" + integrity sha512-IlbHFYc/pQCgew/d5fslcy1KEaYVCJ44G8pajugd8VoOEI8ODhtb/j8XMhLpwHCMB3yk2J07ctup10gpw2nyMA== + +"@rollup/rollup-win32-ia32-msvc@4.53.2": + version "4.53.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.2.tgz#d69280bc6680fe19e0956e965811946d542f6365" + integrity sha512-lNlPEGgdUfSzdCWU176ku/dQRnA7W+Gp8d+cWv73jYrb8uT7HTVVxq62DUYxjbaByuf1Yk0RIIAbDzp+CnOTFg== + +"@rollup/rollup-win32-x64-gnu@4.53.2": + version "4.53.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.2.tgz#d182ce91e342bad9cbb8b284cf33ac542b126ead" + integrity sha512-S6YojNVrHybQis2lYov1sd+uj7K0Q05NxHcGktuMMdIQ2VixGwAfbJ23NnlvvVV1bdpR2m5MsNBViHJKcA4ADw== + +"@rollup/rollup-win32-x64-msvc@4.53.2": + version "4.53.2" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.2.tgz#d9ab606437fd072b2cb7df7e54bcdc7f1ccbe8b4" + integrity sha512-k+/Rkcyx//P6fetPoLMb8pBeqJBNGx81uuf7iljX9++yNBVRDQgD04L+SVXmXmh5ZP4/WOp4mWF0kmi06PW2tA== "@rtsao/scc@^1.1.0": version "1.1.0" @@ -4304,158 +4222,159 @@ dependencies: "@sinonjs/commons" "^3.0.0" -"@smithy/abort-controller@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-4.1.1.tgz#9b3872ab6b2c061486175c281dadc0a853260533" - integrity sha512-vkzula+IwRvPR6oKQhMYioM3A/oX/lFCZiwuxkQbRhqJS2S4YRY2k7k/SyR2jMf3607HLtbEwlRxi0ndXHMjRg== +"@smithy/abort-controller@^4.2.5": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-4.2.5.tgz#3386e8fff5a8d05930996d891d06803f2b7e5e2c" + integrity sha512-j7HwVkBw68YW8UmFRcjZOmssE77Rvk0GWAIN1oFBhsaovQmZWYCIcGa9/pwRB0ExI8Sk9MWNALTjftjHZea7VA== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/chunked-blob-reader-native@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.1.0.tgz#4d814dd07ebb1f579daf51671945389f9772400f" - integrity sha512-Bnv0B3nSlfB2mPO0WgM49I/prl7+kamF042rrf3ezJ3Z4C7csPYvyYgZfXTGXwXfj1mAwDWjE/ybIf49PzFzvA== +"@smithy/chunked-blob-reader-native@^4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.2.1.tgz#380266951d746b522b4ab2b16bfea6b451147b41" + integrity sha512-lX9Ay+6LisTfpLid2zZtIhSEjHMZoAR5hHCR4H7tBz/Zkfr5ea8RcQ7Tk4mi0P76p4cN+Btz16Ffno7YHpKXnQ== dependencies: - "@smithy/util-base64" "^4.1.0" + "@smithy/util-base64" "^4.3.0" tslib "^2.6.2" -"@smithy/chunked-blob-reader@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.1.0.tgz#48fa62c85b146be2a06525f0457ce58a46d69ab0" - integrity sha512-a36AtR7Q7XOhRPt6F/7HENmTWcB8kN7mDJcOFM/+FuKO6x88w8MQJfYCufMWh4fGyVkPjUh3Rrz/dnqFQdo6OQ== +"@smithy/chunked-blob-reader@^5.2.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.2.0.tgz#776fec5eaa5ab5fa70d0d0174b7402420b24559c" + integrity sha512-WmU0TnhEAJLWvfSeMxBNe5xtbselEO8+4wG0NtZeL8oR21WgH1xiO37El+/Y+H/Ie4SCwBy3MxYWmOYaGgZueA== dependencies: tslib "^2.6.2" -"@smithy/config-resolver@^4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-4.2.2.tgz#3f6a3c163f9b5b7f852d7d1817bc9e3b2136fa5f" - integrity sha512-IT6MatgBWagLybZl1xQcURXRICvqz1z3APSCAI9IqdvfCkrA7RaQIEfgC6G/KvfxnDfQUDqFV+ZlixcuFznGBQ== - dependencies: - "@smithy/node-config-provider" "^4.2.2" - "@smithy/types" "^4.5.0" - "@smithy/util-config-provider" "^4.1.0" - "@smithy/util-middleware" "^4.1.1" +"@smithy/config-resolver@^4.4.2", "@smithy/config-resolver@^4.4.3": + version "4.4.3" + resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-4.4.3.tgz#37b0e3cba827272e92612e998a2b17e841e20bab" + integrity sha512-ezHLe1tKLUxDJo2LHtDuEDyWXolw8WGOR92qb4bQdWq/zKenO5BvctZGrVJBK08zjezSk7bmbKFOXIVyChvDLw== + dependencies: + "@smithy/node-config-provider" "^4.3.5" + "@smithy/types" "^4.9.0" + "@smithy/util-config-provider" "^4.2.0" + "@smithy/util-endpoints" "^3.2.5" + "@smithy/util-middleware" "^4.2.5" tslib "^2.6.2" -"@smithy/core@^3.12.0", "@smithy/core@^3.13.0": - version "3.13.0" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.13.0.tgz#1abd89e801aa29367e4d9eaa73e74b48965ef045" - integrity sha512-BI6ALLPOKnPOU1Cjkc+1TPhOlP3JXSR/UH14JmnaLq41t3ma+IjuXrKfhycVjr5IQ0XxRh2NnQo3olp+eCVrGg== - dependencies: - "@smithy/middleware-serde" "^4.1.1" - "@smithy/protocol-http" "^5.2.1" - "@smithy/types" "^4.5.0" - "@smithy/util-base64" "^4.1.0" - "@smithy/util-body-length-browser" "^4.1.0" - "@smithy/util-middleware" "^4.1.1" - "@smithy/util-stream" "^4.3.2" - "@smithy/util-utf8" "^4.1.0" - "@smithy/uuid" "^1.0.0" +"@smithy/core@^3.17.2", "@smithy/core@^3.18.2": + version "3.18.2" + resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.18.2.tgz#ca6f5e8f3a562bcfa432e2178b69e11389b1d77b" + integrity sha512-kmdWLDv1yCBvVyWKhkJ97IRRQOyXux9T1wp2cncu5DtpndWFyv1sMSTQ62AcD+uc9MIC0e+XGxW2KCmQRP9Knw== + dependencies: + "@smithy/middleware-serde" "^4.2.5" + "@smithy/protocol-http" "^5.3.5" + "@smithy/types" "^4.9.0" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-body-length-browser" "^4.2.0" + "@smithy/util-middleware" "^4.2.5" + "@smithy/util-stream" "^4.5.6" + "@smithy/util-utf8" "^4.2.0" + "@smithy/uuid" "^1.1.0" tslib "^2.6.2" -"@smithy/credential-provider-imds@^4.1.2": - version "4.1.2" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-4.1.2.tgz#68662c873dbe812c13159cb2be3c4ba8aeb52149" - integrity sha512-JlYNq8TShnqCLg0h+afqe2wLAwZpuoSgOyzhYvTgbiKBWRov+uUve+vrZEQO6lkdLOWPh7gK5dtb9dS+KGendg== +"@smithy/credential-provider-imds@^4.2.4", "@smithy/credential-provider-imds@^4.2.5": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.5.tgz#5acbcd1d02ae31700c2f027090c202d7315d70d3" + integrity sha512-BZwotjoZWn9+36nimwm/OLIcVe+KYRwzMjfhd4QT7QxPm9WY0HiOV8t/Wlh+HVUif0SBVV7ksq8//hPaBC/okQ== dependencies: - "@smithy/node-config-provider" "^4.2.2" - "@smithy/property-provider" "^4.1.1" - "@smithy/types" "^4.5.0" - "@smithy/url-parser" "^4.1.1" + "@smithy/node-config-provider" "^4.3.5" + "@smithy/property-provider" "^4.2.5" + "@smithy/types" "^4.9.0" + "@smithy/url-parser" "^4.2.5" tslib "^2.6.2" -"@smithy/eventstream-codec@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-4.1.1.tgz#637eb4bceecc3ef588b86c28506439a9cdd7a41f" - integrity sha512-PwkQw1hZwHTQB6X5hSUWz2OSeuj5Z6enWuAqke7DgWoP3t6vg3ktPpqPz3Erkn6w+tmsl8Oss6nrgyezoea2Iw== +"@smithy/eventstream-codec@^4.2.5": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-4.2.5.tgz#331b3f23528137cb5f4ad861de7f34ddff68c62b" + integrity sha512-Ogt4Zi9hEbIP17oQMd68qYOHUzmH47UkK7q7Gl55iIm9oKt27MUGrC5JfpMroeHjdkOliOA4Qt3NQ1xMq/nrlA== dependencies: "@aws-crypto/crc32" "5.2.0" - "@smithy/types" "^4.5.0" - "@smithy/util-hex-encoding" "^4.1.0" + "@smithy/types" "^4.9.0" + "@smithy/util-hex-encoding" "^4.2.0" tslib "^2.6.2" -"@smithy/eventstream-serde-browser@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.1.1.tgz#f7df13ebd5a6028b12b496f12eecdd08c4c9b792" - integrity sha512-Q9QWdAzRaIuVkefupRPRFAasaG/droBqn1feiMnmLa+LLEUG45pqX1+FurHFmlqiCfobB3nUlgoJfeXZsr7MPA== +"@smithy/eventstream-serde-browser@^4.2.4": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.5.tgz#54a680006539601ce71306d8bf2946e3462a47b3" + integrity sha512-HohfmCQZjppVnKX2PnXlf47CW3j92Ki6T/vkAT2DhBR47e89pen3s4fIa7otGTtrVxmj7q+IhH0RnC5kpR8wtw== dependencies: - "@smithy/eventstream-serde-universal" "^4.1.1" - "@smithy/types" "^4.5.0" + "@smithy/eventstream-serde-universal" "^4.2.5" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/eventstream-serde-config-resolver@^4.2.1": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.2.1.tgz#77333a110361bfe2749b685d31e01299ede87c40" - integrity sha512-oSUkF9zDN9zcOUBMtxp8RewJlh71E9NoHWU8jE3hU9JMYCsmW4assVTpgic/iS3/dM317j6hO5x18cc3XrfvEw== +"@smithy/eventstream-serde-config-resolver@^4.3.4": + version "4.3.5" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.5.tgz#d1490aa127f43ac242495fa6e2e5833e1949a481" + integrity sha512-ibjQjM7wEXtECiT6my1xfiMH9IcEczMOS6xiCQXoUIYSj5b1CpBbJ3VYbdwDy8Vcg5JHN7eFpOCGk8nyZAltNQ== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/eventstream-serde-node@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.1.1.tgz#635819a756cb8a69a7e3eb91ca9076284ea00939" - integrity sha512-tn6vulwf/ScY0vjhzptSJuDJJqlhNtUjkxJ4wiv9E3SPoEqTEKbaq6bfqRO7nvhTG29ALICRcvfFheOUPl8KNA== +"@smithy/eventstream-serde-node@^4.2.4": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.5.tgz#7dd64e0ba64fa930959f3d5b7995c310573ecaf3" + integrity sha512-+elOuaYx6F2H6x1/5BQP5ugv12nfJl66GhxON8+dWVUEDJ9jah/A0tayVdkLRP0AeSac0inYkDz5qBFKfVp2Gg== dependencies: - "@smithy/eventstream-serde-universal" "^4.1.1" - "@smithy/types" "^4.5.0" + "@smithy/eventstream-serde-universal" "^4.2.5" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/eventstream-serde-universal@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.1.1.tgz#803cdde6a17ac501cc700ce38400caf70715ecb1" - integrity sha512-uLOAiM/Dmgh2CbEXQx+6/ssK7fbzFhd+LjdyFxXid5ZBCbLHTFHLdD/QbXw5aEDsLxQhgzDxLLsZhsftAYwHJA== +"@smithy/eventstream-serde-universal@^4.2.5": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.5.tgz#34189de45cf5e1d9cb59978e94b76cc210fa984f" + integrity sha512-G9WSqbST45bmIFaeNuP/EnC19Rhp54CcVdX9PDL1zyEB514WsDVXhlyihKlGXnRycmHNmVv88Bvvt4EYxWef/Q== dependencies: - "@smithy/eventstream-codec" "^4.1.1" - "@smithy/types" "^4.5.0" + "@smithy/eventstream-codec" "^4.2.5" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/fetch-http-handler@^5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-5.2.1.tgz#fe284a00f1b3a35edf9fba454d287b7f74ef20af" - integrity sha512-5/3wxKNtV3wO/hk1is+CZUhL8a1yy/U+9u9LKQ9kZTkMsHaQjJhc3stFfiujtMnkITjzWfndGA2f7g9Uh9vKng== +"@smithy/fetch-http-handler@^5.3.5", "@smithy/fetch-http-handler@^5.3.6": + version "5.3.6" + resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.6.tgz#d9dcb8d8ca152918224492f4d1cc1b50df93ae13" + integrity sha512-3+RG3EA6BBJ/ofZUeTFJA7mHfSYrZtQIrDP9dI8Lf7X6Jbos2jptuLrAAteDiFVrmbEmLSuRG/bUKzfAXk7dhg== dependencies: - "@smithy/protocol-http" "^5.2.1" - "@smithy/querystring-builder" "^4.1.1" - "@smithy/types" "^4.5.0" - "@smithy/util-base64" "^4.1.0" + "@smithy/protocol-http" "^5.3.5" + "@smithy/querystring-builder" "^4.2.5" + "@smithy/types" "^4.9.0" + "@smithy/util-base64" "^4.3.0" tslib "^2.6.2" -"@smithy/hash-blob-browser@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-4.1.1.tgz#fbcab0008b973ccf370c698cd11ec8d9584607c8" - integrity sha512-avAtk++s1e/1VODf+rg7c9R2pB5G9y8yaJaGY4lPZI2+UIqVyuSDMikWjeWfBVmFZ3O7NpDxBbUCyGhThVUKWQ== +"@smithy/hash-blob-browser@^4.2.5": + version "4.2.6" + resolved "https://registry.yarnpkg.com/@smithy/hash-blob-browser/-/hash-blob-browser-4.2.6.tgz#53d5ae0a069ae4a93abbc7165efe341dca0f9489" + integrity sha512-8P//tA8DVPk+3XURk2rwcKgYwFvwGwmJH/wJqQiSKwXZtf/LiZK+hbUZmPj/9KzM+OVSwe4o85KTp5x9DUZTjw== dependencies: - "@smithy/chunked-blob-reader" "^5.1.0" - "@smithy/chunked-blob-reader-native" "^4.1.0" - "@smithy/types" "^4.5.0" + "@smithy/chunked-blob-reader" "^5.2.0" + "@smithy/chunked-blob-reader-native" "^4.2.1" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/hash-node@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-4.1.1.tgz#86ceca92487492267e944e4f4507106b731e7971" - integrity sha512-H9DIU9WBLhYrvPs9v4sYvnZ1PiAI0oc8CgNQUJ1rpN3pP7QADbTOUjchI2FB764Ub0DstH5xbTqcMJu1pnVqxA== +"@smithy/hash-node@^4.2.4": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-4.2.5.tgz#fb751ec4a4c6347612458430f201f878adc787f6" + integrity sha512-DpYX914YOfA3UDT9CN1BM787PcHfWRBB43fFGCYrZFUH0Jv+5t8yYl+Pd5PW4+QzoGEDvn5d5QIO4j2HyYZQSA== dependencies: - "@smithy/types" "^4.5.0" - "@smithy/util-buffer-from" "^4.1.0" - "@smithy/util-utf8" "^4.1.0" + "@smithy/types" "^4.9.0" + "@smithy/util-buffer-from" "^4.2.0" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@smithy/hash-stream-node@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-4.1.1.tgz#1d8e4485fa15c458d7a8248a50d0f5f91705cced" - integrity sha512-3ztT4pV0Moazs3JAYFdfKk11kYFDo4b/3R3+xVjIm6wY9YpJf+xfz+ocEnNKcWAdcmSMqi168i2EMaKmJHbJMA== +"@smithy/hash-stream-node@^4.2.4": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/hash-stream-node/-/hash-stream-node-4.2.5.tgz#f200e6b755cb28f03968c199231774c3ad33db28" + integrity sha512-6+do24VnEyvWcGdHXomlpd0m8bfZePpUKBy7m311n+JuRwug8J4dCanJdTymx//8mi0nlkflZBvJe+dEO/O12Q== dependencies: - "@smithy/types" "^4.5.0" - "@smithy/util-utf8" "^4.1.0" + "@smithy/types" "^4.9.0" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@smithy/invalid-dependency@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-4.1.1.tgz#2511335ff889944701c7d2a3b1e4a4d6fe9ddfab" - integrity sha512-1AqLyFlfrrDkyES8uhINRlJXmHA2FkG+3DY8X+rmLSqmFwk3DJnvhyGzyByPyewh2jbmV+TYQBEfngQax8IFGg== +"@smithy/invalid-dependency@^4.2.4": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-4.2.5.tgz#58d997e91e7683ffc59882d8fcb180ed9aa9c7dd" + integrity sha512-2L2erASEro1WC5nV+plwIMxrTXpvpfzl4e+Nre6vBVRR2HKeGGcvpJyyL3/PpiSg+cJG2KpTmZmq934Olb6e5A== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.9.0" tslib "^2.6.2" "@smithy/is-array-buffer@^2.2.0": @@ -4465,209 +4384,209 @@ dependencies: tslib "^2.6.2" -"@smithy/is-array-buffer@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-4.1.0.tgz#d18a2f22280e7173633cb91a9bdb6f3d8a6560b8" - integrity sha512-ePTYUOV54wMogio+he4pBybe8fwg4sDvEVDBU8ZlHOZXbXK3/C0XfJgUCu6qAZcawv05ZhZzODGUerFBPsPUDQ== +"@smithy/is-array-buffer@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz#b0f874c43887d3ad44f472a0f3f961bcce0550c2" + integrity sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ== dependencies: tslib "^2.6.2" -"@smithy/md5-js@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-4.1.1.tgz#df81396bef83eb17bce531c871af935df986bdfc" - integrity sha512-MvWXKK743BuHjr/hnWuT6uStdKEaoqxHAQUvbKJPPZM5ZojTNFI5D+47BoQfBE5RgGlRRty05EbWA+NXDv+hIA== +"@smithy/md5-js@^4.2.4": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-4.2.5.tgz#ca16f138dd0c4e91a61d3df57e8d4d15d1ddc97e" + integrity sha512-Bt6jpSTMWfjCtC0s79gZ/WZ1w90grfmopVOWqkI2ovhjpD5Q2XRXuecIPB9689L2+cCySMbaXDhBPU56FKNDNg== dependencies: - "@smithy/types" "^4.5.0" - "@smithy/util-utf8" "^4.1.0" + "@smithy/types" "^4.9.0" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@smithy/middleware-content-length@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-4.1.1.tgz#eaea7bd14c7a0b64aef87b8c372c2a04d7b9cb72" - integrity sha512-9wlfBBgTsRvC2JxLJxv4xDGNBrZuio3AgSl0lSFX7fneW2cGskXTYpFxCdRYD2+5yzmsiTuaAJD1Wp7gWt9y9w== +"@smithy/middleware-content-length@^4.2.4": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-4.2.5.tgz#a6942ce2d7513b46f863348c6c6a8177e9ace752" + integrity sha512-Y/RabVa5vbl5FuHYV2vUCwvh/dqzrEY/K2yWPSqvhFUwIY0atLqO4TienjBXakoy4zrKAMCZwg+YEqmH7jaN7A== dependencies: - "@smithy/protocol-http" "^5.2.1" - "@smithy/types" "^4.5.0" + "@smithy/protocol-http" "^5.3.5" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/middleware-endpoint@^4.2.4", "@smithy/middleware-endpoint@^4.2.5": - version "4.2.5" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.2.5.tgz#6609d3c0f0d20c01dee95971527bf87d9d14c8cc" - integrity sha512-DdOIpssQ5LFev7hV6GX9TMBW5ChTsQBxqgNW1ZGtJNSAi5ksd5klwPwwMY0ejejfEzwXXGqxgVO3cpaod4veiA== - dependencies: - "@smithy/core" "^3.13.0" - "@smithy/middleware-serde" "^4.1.1" - "@smithy/node-config-provider" "^4.2.2" - "@smithy/shared-ini-file-loader" "^4.2.0" - "@smithy/types" "^4.5.0" - "@smithy/url-parser" "^4.1.1" - "@smithy/util-middleware" "^4.1.1" +"@smithy/middleware-endpoint@^4.3.6", "@smithy/middleware-endpoint@^4.3.9": + version "4.3.9" + resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.9.tgz#cc0899402002f32beb54458c0cc786e26ae8ca12" + integrity sha512-IfHBkpsmq8v/7ju24CMzJ29pHH4gNeMiNMCF1ivCVhLILN4xtmUnnlhhm0S37R4DYdaNZ+YFMopojh2dFPFIxw== + dependencies: + "@smithy/core" "^3.18.2" + "@smithy/middleware-serde" "^4.2.5" + "@smithy/node-config-provider" "^4.3.5" + "@smithy/shared-ini-file-loader" "^4.4.0" + "@smithy/types" "^4.9.0" + "@smithy/url-parser" "^4.2.5" + "@smithy/util-middleware" "^4.2.5" tslib "^2.6.2" -"@smithy/middleware-retry@^4.3.0": - version "4.3.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.3.1.tgz#c879352d1c17188527a9378419cf6d9efbb38405" - integrity sha512-aH2bD1bzb6FB04XBhXA5mgedEZPKx3tD/qBuYCAKt5iieWvWO1Y2j++J9uLqOndXb9Pf/83Xka/YjSnMbcPchA== - dependencies: - "@smithy/node-config-provider" "^4.2.2" - "@smithy/protocol-http" "^5.2.1" - "@smithy/service-error-classification" "^4.1.2" - "@smithy/smithy-client" "^4.6.5" - "@smithy/types" "^4.5.0" - "@smithy/util-middleware" "^4.1.1" - "@smithy/util-retry" "^4.1.2" - "@smithy/uuid" "^1.0.0" +"@smithy/middleware-retry@^4.4.6": + version "4.4.9" + resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.4.9.tgz#11a7af1b1cb4e8862b071beb8f90b917d1625a69" + integrity sha512-bdmfUbs+l7UDDKY+ujA30ZS1TEWJwd/ek7DZGUaSCGZiFji84ajmLX3V/PwxjV0Qk2T9DSph6ECIUb+HeLUf9w== + dependencies: + "@smithy/node-config-provider" "^4.3.5" + "@smithy/protocol-http" "^5.3.5" + "@smithy/service-error-classification" "^4.2.5" + "@smithy/smithy-client" "^4.9.5" + "@smithy/types" "^4.9.0" + "@smithy/util-middleware" "^4.2.5" + "@smithy/util-retry" "^4.2.5" + "@smithy/uuid" "^1.1.0" tslib "^2.6.2" -"@smithy/middleware-serde@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-4.1.1.tgz#cfb99f53c744d7730928235cbe66cc7ff8a8a9b2" - integrity sha512-lh48uQdbCoj619kRouev5XbWhCwRKLmphAif16c4J6JgJ4uXjub1PI6RL38d3BLliUvSso6klyB/LTNpWSNIyg== +"@smithy/middleware-serde@^4.2.4", "@smithy/middleware-serde@^4.2.5": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-4.2.5.tgz#b8848043d2965ef3fc2ad895c877fa1f42a9cd86" + integrity sha512-La1ldWTJTZ5NqQyPqnCNeH9B+zjFhrNoQIL1jTh4zuqXRlmXhxYHhMtI1/92OlnoAtp6JoN7kzuwhWoXrBwPqg== dependencies: - "@smithy/protocol-http" "^5.2.1" - "@smithy/types" "^4.5.0" + "@smithy/protocol-http" "^5.3.5" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/middleware-stack@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-4.1.1.tgz#1d533fde4ccbb62d7fc0f0b8ac518b7e4791e311" - integrity sha512-ygRnniqNcDhHzs6QAPIdia26M7e7z9gpkIMUe/pK0RsrQ7i5MblwxY8078/QCnGq6AmlUUWgljK2HlelsKIb/A== +"@smithy/middleware-stack@^4.2.4", "@smithy/middleware-stack@^4.2.5": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-4.2.5.tgz#2d13415ed3561c882594c8e6340b801d9a2eb222" + integrity sha512-bYrutc+neOyWxtZdbB2USbQttZN0mXaOyYLIsaTbJhFsfpXyGWUxJpEuO1rJ8IIJm2qH4+xJT0mxUSsEDTYwdQ== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/node-config-provider@^4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-4.2.2.tgz#ede9ac2f689cfdf26815a53fadf139e6aa77bdbb" - integrity sha512-SYGTKyPvyCfEzIN5rD8q/bYaOPZprYUPD2f5g9M7OjaYupWOoQFYJ5ho+0wvxIRf471i2SR4GoiZ2r94Jq9h6A== +"@smithy/node-config-provider@^4.3.4", "@smithy/node-config-provider@^4.3.5": + version "4.3.5" + resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-4.3.5.tgz#c09137a79c2930dcc30e6c8bb4f2608d72c1e2c9" + integrity sha512-UTurh1C4qkVCtqggI36DGbLB2Kv8UlcFdMXDcWMbqVY2uRg0XmT9Pb4Vj6oSQ34eizO1fvR0RnFV4Axw4IrrAg== dependencies: - "@smithy/property-provider" "^4.1.1" - "@smithy/shared-ini-file-loader" "^4.2.0" - "@smithy/types" "^4.5.0" + "@smithy/property-provider" "^4.2.5" + "@smithy/shared-ini-file-loader" "^4.4.0" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/node-http-handler@^4.2.1": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-4.2.1.tgz#d7ab8e31659030d3d5a68f0982f15c00b1e67a0c" - integrity sha512-REyybygHlxo3TJICPF89N2pMQSf+p+tBJqpVe1+77Cfi9HBPReNjTgtZ1Vg73exq24vkqJskKDpfF74reXjxfw== +"@smithy/node-http-handler@^4.4.4", "@smithy/node-http-handler@^4.4.5": + version "4.4.5" + resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-4.4.5.tgz#2aea598fdf3dc4e32667d673d48abd4a073665f4" + integrity sha512-CMnzM9R2WqlqXQGtIlsHMEZfXKJVTIrqCNoSd/QpAyp+Dw0a1Vps13l6ma1fH8g7zSPNsA59B/kWgeylFuA/lw== dependencies: - "@smithy/abort-controller" "^4.1.1" - "@smithy/protocol-http" "^5.2.1" - "@smithy/querystring-builder" "^4.1.1" - "@smithy/types" "^4.5.0" + "@smithy/abort-controller" "^4.2.5" + "@smithy/protocol-http" "^5.3.5" + "@smithy/querystring-builder" "^4.2.5" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/property-provider@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-4.1.1.tgz#6e11ae6729840314afed05fd6ab48f62c654116b" - integrity sha512-gm3ZS7DHxUbzC2wr8MUCsAabyiXY0gaj3ROWnhSx/9sPMc6eYLMM4rX81w1zsMaObj2Lq3PZtNCC1J6lpEY7zg== +"@smithy/property-provider@^4.2.4", "@smithy/property-provider@^4.2.5": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-4.2.5.tgz#f75dc5735d29ca684abbc77504be9246340a43f0" + integrity sha512-8iLN1XSE1rl4MuxvQ+5OSk/Zb5El7NJZ1td6Tn+8dQQHIjp59Lwl6bd0+nzw6SKm2wSSriH2v/I9LPzUic7EOg== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/protocol-http@^5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-5.2.1.tgz#33f2b8e4e1082c3ae0372d1322577e6fa71d7824" - integrity sha512-T8SlkLYCwfT/6m33SIU/JOVGNwoelkrvGjFKDSDtVvAXj/9gOT78JVJEas5a+ETjOu4SVvpCstKgd0PxSu/aHw== +"@smithy/protocol-http@^5.3.4", "@smithy/protocol-http@^5.3.5": + version "5.3.5" + resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-5.3.5.tgz#a8f4296dd6d190752589e39ee95298d5c65a60db" + integrity sha512-RlaL+sA0LNMp03bf7XPbFmT5gN+w3besXSWMkA8rcmxLSVfiEXElQi4O2IWwPfxzcHkxqrwBFMbngB8yx/RvaQ== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/querystring-builder@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-4.1.1.tgz#4d35c1735de8214055424045a117fa5d1d5cdec1" - integrity sha512-J9b55bfimP4z/Jg1gNo+AT84hr90p716/nvxDkPGCD4W70MPms0h8KF50RDRgBGZeL83/u59DWNqJv6tEP/DHA== +"@smithy/querystring-builder@^4.2.5": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-4.2.5.tgz#00cafa5a4055600ab8058e26db42f580146b91f3" + integrity sha512-y98otMI1saoajeik2kLfGyRp11e5U/iJYH/wLCh3aTV/XutbGT9nziKGkgCaMD1ghK7p6htHMm6b6scl9JRUWg== dependencies: - "@smithy/types" "^4.5.0" - "@smithy/util-uri-escape" "^4.1.0" + "@smithy/types" "^4.9.0" + "@smithy/util-uri-escape" "^4.2.0" tslib "^2.6.2" -"@smithy/querystring-parser@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-4.1.1.tgz#21b861439b2db16abeb0a6789b126705fa25eea1" - integrity sha512-63TEp92YFz0oQ7Pj9IuI3IgnprP92LrZtRAkE3c6wLWJxfy/yOPRt39IOKerVr0JS770olzl0kGafXlAXZ1vng== +"@smithy/querystring-parser@^4.2.5": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-4.2.5.tgz#61d2e77c62f44196590fa0927dbacfbeaffe8c53" + integrity sha512-031WCTdPYgiQRYNPXznHXof2YM0GwL6SeaSyTH/P72M1Vz73TvCNH2Nq8Iu2IEPq9QP2yx0/nrw5YmSeAi/AjQ== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/service-error-classification@^4.1.2": - version "4.1.2" - resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-4.1.2.tgz#06839c332f4620a4b80c78a0c32377732dc6697a" - integrity sha512-Kqd8wyfmBWHZNppZSMfrQFpc3M9Y/kjyN8n8P4DqJJtuwgK1H914R471HTw7+RL+T7+kI1f1gOnL7Vb5z9+NgQ== +"@smithy/service-error-classification@^4.2.5": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-4.2.5.tgz#a64eb78e096e59cc71141e3fea2b4194ce59b4fd" + integrity sha512-8fEvK+WPE3wUAcDvqDQG1Vk3ANLR8Px979te96m84CbKAjBVf25rPYSzb4xU4hlTyho7VhOGnh5i62D/JVF0JQ== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.9.0" -"@smithy/shared-ini-file-loader@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.2.0.tgz#e4717242686bf611bd1a5d6f79870abe480c1c99" - integrity sha512-OQTfmIEp2LLuWdxa8nEEPhZmiOREO6bcB6pjs0AySf4yiZhl6kMOfqmcwcY8BaBPX+0Tb+tG7/Ia/6mwpoZ7Pw== +"@smithy/shared-ini-file-loader@^4.3.4", "@smithy/shared-ini-file-loader@^4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.0.tgz#a2f8282f49982f00bafb1fa8cb7fc188a202a594" + integrity sha512-5WmZ5+kJgJDjwXXIzr1vDTG+RhF9wzSODQBfkrQ2VVkYALKGvZX1lgVSxEkgicSAFnFhPj5rudJV0zoinqS0bA== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/signature-v4@^5.2.1": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-5.2.1.tgz#0048489d2f1b3c888382595a085edd31967498f8" - integrity sha512-M9rZhWQLjlQVCCR37cSjHfhriGRN+FQ8UfgrYNufv66TJgk+acaggShl3KS5U/ssxivvZLlnj7QH2CUOKlxPyA== - dependencies: - "@smithy/is-array-buffer" "^4.1.0" - "@smithy/protocol-http" "^5.2.1" - "@smithy/types" "^4.5.0" - "@smithy/util-hex-encoding" "^4.1.0" - "@smithy/util-middleware" "^4.1.1" - "@smithy/util-uri-escape" "^4.1.0" - "@smithy/util-utf8" "^4.1.0" +"@smithy/signature-v4@^5.3.4": + version "5.3.5" + resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-5.3.5.tgz#13ab710653f9f16c325ee7e0a102a44f73f2643f" + integrity sha512-xSUfMu1FT7ccfSXkoLl/QRQBi2rOvi3tiBZU2Tdy3I6cgvZ6SEi9QNey+lqps/sJRnogIS+lq+B1gxxbra2a/w== + dependencies: + "@smithy/is-array-buffer" "^4.2.0" + "@smithy/protocol-http" "^5.3.5" + "@smithy/types" "^4.9.0" + "@smithy/util-hex-encoding" "^4.2.0" + "@smithy/util-middleware" "^4.2.5" + "@smithy/util-uri-escape" "^4.2.0" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@smithy/smithy-client@^4.6.4", "@smithy/smithy-client@^4.6.5": - version "4.6.5" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.6.5.tgz#703e58c4036ae3c383d6969440d94fda09939403" - integrity sha512-6J2hhuWu7EjnvLBIGltPCqzNswL1cW/AkaZx6i56qLsQ0ix17IAhmDD9aMmL+6CN9nCJODOXpBTCQS6iKAA7/g== - dependencies: - "@smithy/core" "^3.13.0" - "@smithy/middleware-endpoint" "^4.2.5" - "@smithy/middleware-stack" "^4.1.1" - "@smithy/protocol-http" "^5.2.1" - "@smithy/types" "^4.5.0" - "@smithy/util-stream" "^4.3.2" +"@smithy/smithy-client@^4.9.2", "@smithy/smithy-client@^4.9.5": + version "4.9.5" + resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.9.5.tgz#1b840e8f8f84b24242c04066fd36d03959d56766" + integrity sha512-iWO8mi36FpYICYNckf7gc1hmAr1X/v347rmEXxgld4c3Z2ammgRwYYh1oR62ODsCqfarjXt/EMTvU9yXuOVifg== + dependencies: + "@smithy/core" "^3.18.2" + "@smithy/middleware-endpoint" "^4.3.9" + "@smithy/middleware-stack" "^4.2.5" + "@smithy/protocol-http" "^5.3.5" + "@smithy/types" "^4.9.0" + "@smithy/util-stream" "^4.5.6" tslib "^2.6.2" -"@smithy/types@^4.5.0": - version "4.5.0" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-4.5.0.tgz#850e334662a1ef1286c35814940c80880400a370" - integrity sha512-RkUpIOsVlAwUIZXO1dsz8Zm+N72LClFfsNqf173catVlvRZiwPy0x2u0JLEA4byreOPKDZPGjmPDylMoP8ZJRg== +"@smithy/types@^4.8.1", "@smithy/types@^4.9.0": + version "4.9.0" + resolved "https://registry.yarnpkg.com/@smithy/types/-/types-4.9.0.tgz#c6636ddfa142e1ddcb6e4cf5f3e1a628d420486f" + integrity sha512-MvUbdnXDTwykR8cB1WZvNNwqoWVaTRA0RLlLmf/cIFNMM2cKWz01X4Ly6SMC4Kks30r8tT3Cty0jmeWfiuyHTA== dependencies: tslib "^2.6.2" -"@smithy/url-parser@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-4.1.1.tgz#0e9a5e72b3cf9d7ab7305f9093af5528d9debaf6" - integrity sha512-bx32FUpkhcaKlEoOMbScvc93isaSiRM75pQ5IgIBaMkT7qMlIibpPRONyx/0CvrXHzJLpOn/u6YiDX2hcvs7Dg== +"@smithy/url-parser@^4.2.4", "@smithy/url-parser@^4.2.5": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-4.2.5.tgz#2fea006108f17f7761432c7ef98d6aa003421487" + integrity sha512-VaxMGsilqFnK1CeBX+LXnSuaMx4sTL/6znSZh2829txWieazdVxr54HmiyTsIbpOTLcf5nYpq9lpzmwRdxj6rQ== dependencies: - "@smithy/querystring-parser" "^4.1.1" - "@smithy/types" "^4.5.0" + "@smithy/querystring-parser" "^4.2.5" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/util-base64@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-4.1.0.tgz#5965026081d9aef4a8246f5702807570abe538b2" - integrity sha512-RUGd4wNb8GeW7xk+AY5ghGnIwM96V0l2uzvs/uVHf+tIuVX2WSvynk5CxNoBCsM2rQRSZElAo9rt3G5mJ/gktQ== +"@smithy/util-base64@^4.3.0": + version "4.3.0" + resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-4.3.0.tgz#5e287b528793aa7363877c1a02cd880d2e76241d" + integrity sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ== dependencies: - "@smithy/util-buffer-from" "^4.1.0" - "@smithy/util-utf8" "^4.1.0" + "@smithy/util-buffer-from" "^4.2.0" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@smithy/util-body-length-browser@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-4.1.0.tgz#636bdf4bc878c546627dab4b9b0e4db31b475be7" - integrity sha512-V2E2Iez+bo6bUMOTENPr6eEmepdY8Hbs+Uc1vkDKgKNA/brTJqOW/ai3JO1BGj9GbCeLqw90pbbH7HFQyFotGQ== +"@smithy/util-body-length-browser@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz#04e9fc51ee7a3e7f648a4b4bcdf96c350cfa4d61" + integrity sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg== dependencies: tslib "^2.6.2" -"@smithy/util-body-length-node@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-4.1.0.tgz#646750e4af58f97254a5d5cfeaba7d992f0152ec" - integrity sha512-BOI5dYjheZdgR9XiEM3HJcEMCXSoqbzu7CzIgYrx0UtmvtC3tC2iDGpJLsSRFffUpy8ymsg2ARMP5fR8mtuUQQ== +"@smithy/util-body-length-node@^4.2.1": + version "4.2.1" + resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz#79c8a5d18e010cce6c42d5cbaf6c1958523e6fec" + integrity sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA== dependencies: tslib "^2.6.2" @@ -4679,96 +4598,95 @@ "@smithy/is-array-buffer" "^2.2.0" tslib "^2.6.2" -"@smithy/util-buffer-from@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-4.1.0.tgz#21f9e644a0eb41226d92e4eff763f76a7db7e9cc" - integrity sha512-N6yXcjfe/E+xKEccWEKzK6M+crMrlwaCepKja0pNnlSkm6SjAeLKKA++er5Ba0I17gvKfN/ThV+ZOx/CntKTVw== +"@smithy/util-buffer-from@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz#7abd12c4991b546e7cee24d1e8b4bfaa35c68a9d" + integrity sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew== dependencies: - "@smithy/is-array-buffer" "^4.1.0" + "@smithy/is-array-buffer" "^4.2.0" tslib "^2.6.2" -"@smithy/util-config-provider@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-4.1.0.tgz#6a07d73446c1e9a46d7a3c125f2a9301060bc957" - integrity sha512-swXz2vMjrP1ZusZWVTB/ai5gK+J8U0BWvP10v9fpcFvg+Xi/87LHvHfst2IgCs1i0v4qFZfGwCmeD/KNCdJZbQ== +"@smithy/util-config-provider@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz#2e4722937f8feda4dcb09672c59925a4e6286cfc" + integrity sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q== dependencies: tslib "^2.6.2" -"@smithy/util-defaults-mode-browser@^4.1.4": - version "4.1.5" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.1.5.tgz#12b88fc97198a8ec25b501722b25f0afd2bbb1d2" - integrity sha512-FGBhlmFZVSRto816l6IwrmDcQ9pUYX6ikdR1mmAhdtSS1m77FgADukbQg7F7gurXfAvloxE/pgsrb7SGja6FQA== +"@smithy/util-defaults-mode-browser@^4.3.5": + version "4.3.8" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.8.tgz#79980a8f34bd64b111e1a6f102eaec9c39ba5dde" + integrity sha512-l0/xoBmRolQzNZoW8CkQOOIi67pmbebyCSuBHkc6ug4xZ0TXcRaq6Jja0t+JCDoQQD2WROA8IYKG6UfGq48XmA== dependencies: - "@smithy/property-provider" "^4.1.1" - "@smithy/smithy-client" "^4.6.5" - "@smithy/types" "^4.5.0" - bowser "^2.11.0" + "@smithy/property-provider" "^4.2.5" + "@smithy/smithy-client" "^4.9.5" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/util-defaults-mode-node@^4.1.4": - version "4.1.5" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.1.5.tgz#752745054ebd38e91f1a40b4ca90bdc6766c31b1" - integrity sha512-Gwj8KLgJ/+MHYjVubJF0EELEh9/Ir7z7DFqyYlwgmp4J37KE+5vz6b3pWUnSt53tIe5FjDfVjDmHGYKjwIvW0Q== - dependencies: - "@smithy/config-resolver" "^4.2.2" - "@smithy/credential-provider-imds" "^4.1.2" - "@smithy/node-config-provider" "^4.2.2" - "@smithy/property-provider" "^4.1.1" - "@smithy/smithy-client" "^4.6.5" - "@smithy/types" "^4.5.0" +"@smithy/util-defaults-mode-node@^4.2.8": + version "4.2.11" + resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.11.tgz#365d4596c5704117081cc8923d74e1fa77398ffe" + integrity sha512-D6n4THrOZqE6mrNGjZpu2w8zcdDcgGhz0HytvroE5sDmTXyrKVO4wk1HzDMcLcwhIvsFxmRQtUE9Z+ecIGf7xw== + dependencies: + "@smithy/config-resolver" "^4.4.3" + "@smithy/credential-provider-imds" "^4.2.5" + "@smithy/node-config-provider" "^4.3.5" + "@smithy/property-provider" "^4.2.5" + "@smithy/smithy-client" "^4.9.5" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/util-endpoints@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-3.1.2.tgz#be4005c8616923d453347048ef26a439267b2782" - integrity sha512-+AJsaaEGb5ySvf1SKMRrPZdYHRYSzMkCoK16jWnIMpREAnflVspMIDeCVSZJuj+5muZfgGpNpijE3mUNtjv01Q== +"@smithy/util-endpoints@^3.2.4", "@smithy/util-endpoints@^3.2.5": + version "3.2.5" + resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-3.2.5.tgz#9e0fc34e38ddfbbc434d23a38367638dc100cb14" + integrity sha512-3O63AAWu2cSNQZp+ayl9I3NapW1p1rR5mlVHcF6hAB1dPZUQFfRPYtplWX/3xrzWthPGj5FqB12taJJCfH6s8A== dependencies: - "@smithy/node-config-provider" "^4.2.2" - "@smithy/types" "^4.5.0" + "@smithy/node-config-provider" "^4.3.5" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/util-hex-encoding@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-4.1.0.tgz#9b27cf0c25d0de2c8ebfe75cc20df84e5014ccc9" - integrity sha512-1LcueNN5GYC4tr8mo14yVYbh/Ur8jHhWOxniZXii+1+ePiIbsLZ5fEI0QQGtbRRP5mOhmooos+rLmVASGGoq5w== +"@smithy/util-hex-encoding@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz#1c22ea3d1e2c3a81ff81c0a4f9c056a175068a7b" + integrity sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw== dependencies: tslib "^2.6.2" -"@smithy/util-middleware@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-4.1.1.tgz#e19749a127499c9bdada713a8afd807d92d846e2" - integrity sha512-CGmZ72mL29VMfESz7S6dekqzCh8ZISj3B+w0g1hZFXaOjGTVaSqfAEFAq8EGp8fUL+Q2l8aqNmt8U1tglTikeg== +"@smithy/util-middleware@^4.2.4", "@smithy/util-middleware@^4.2.5": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-4.2.5.tgz#1ace865afe678fd4b0f9217197e2fe30178d4835" + integrity sha512-6Y3+rvBF7+PZOc40ybeZMcGln6xJGVeY60E7jy9Mv5iKpMJpHgRE6dKy9ScsVxvfAYuEX4Q9a65DQX90KaQ3bA== dependencies: - "@smithy/types" "^4.5.0" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/util-retry@^4.1.2": - version "4.1.2" - resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-4.1.2.tgz#8d28c27cf69643e173c75cc18ff0186deb7cefed" - integrity sha512-NCgr1d0/EdeP6U5PSZ9Uv5SMR5XRRYoVr1kRVtKZxWL3tixEL3UatrPIMFZSKwHlCcp2zPLDvMubVDULRqeunA== +"@smithy/util-retry@^4.2.4", "@smithy/util-retry@^4.2.5": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-4.2.5.tgz#70fe4fbbfb9ad43a9ce2ba4ed111ff7b30d7b333" + integrity sha512-GBj3+EZBbN4NAqJ/7pAhsXdfzdlznOh8PydUijy6FpNIMnHPSMO2/rP4HKu+UFeikJxShERk528oy7GT79YiJg== dependencies: - "@smithy/service-error-classification" "^4.1.2" - "@smithy/types" "^4.5.0" + "@smithy/service-error-classification" "^4.2.5" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/util-stream@^4.3.2": - version "4.3.2" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-4.3.2.tgz#7ce40c266b1e828d73c27e545959cda4f42fd61f" - integrity sha512-Ka+FA2UCC/Q1dEqUanCdpqwxOFdf5Dg2VXtPtB1qxLcSGh5C1HdzklIt18xL504Wiy9nNUKwDMRTVCbKGoK69g== - dependencies: - "@smithy/fetch-http-handler" "^5.2.1" - "@smithy/node-http-handler" "^4.2.1" - "@smithy/types" "^4.5.0" - "@smithy/util-base64" "^4.1.0" - "@smithy/util-buffer-from" "^4.1.0" - "@smithy/util-hex-encoding" "^4.1.0" - "@smithy/util-utf8" "^4.1.0" +"@smithy/util-stream@^4.5.5", "@smithy/util-stream@^4.5.6": + version "4.5.6" + resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-4.5.6.tgz#ebee9e52adeb6f88337778b2f3356a2cc615298c" + integrity sha512-qWw/UM59TiaFrPevefOZ8CNBKbYEP6wBAIlLqxn3VAIo9rgnTNc4ASbVrqDmhuwI87usnjhdQrxodzAGFFzbRQ== + dependencies: + "@smithy/fetch-http-handler" "^5.3.6" + "@smithy/node-http-handler" "^4.4.5" + "@smithy/types" "^4.9.0" + "@smithy/util-base64" "^4.3.0" + "@smithy/util-buffer-from" "^4.2.0" + "@smithy/util-hex-encoding" "^4.2.0" + "@smithy/util-utf8" "^4.2.0" tslib "^2.6.2" -"@smithy/util-uri-escape@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-4.1.0.tgz#ed4a5c498f1da07122ca1e3df4ca3e2c67c6c18a" - integrity sha512-b0EFQkq35K5NHUYxU72JuoheM6+pytEVUGlTwiFxWFpmddA+Bpz3LgsPRIpBk8lnPE47yT7AF2Egc3jVnKLuPg== +"@smithy/util-uri-escape@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz#096a4cec537d108ac24a68a9c60bee73fc7e3a9e" + integrity sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA== dependencies: tslib "^2.6.2" @@ -4780,27 +4698,27 @@ "@smithy/util-buffer-from" "^2.2.0" tslib "^2.6.2" -"@smithy/util-utf8@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-4.1.0.tgz#912c33c1a06913f39daa53da79cb8f7ab740d97b" - integrity sha512-mEu1/UIXAdNYuBcyEPbjScKi/+MQVXNIuY/7Cm5XLIWe319kDrT5SizBE95jqtmEXoDbGoZxKLCMttdZdqTZKQ== +"@smithy/util-utf8@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-4.2.0.tgz#8b19d1514f621c44a3a68151f3d43e51087fed9d" + integrity sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw== dependencies: - "@smithy/util-buffer-from" "^4.1.0" + "@smithy/util-buffer-from" "^4.2.0" tslib "^2.6.2" -"@smithy/util-waiter@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-4.1.1.tgz#5b74429ca9e37f61838800b919d0063b1a865bef" - integrity sha512-PJBmyayrlfxM7nbqjomF4YcT1sApQwZio0NHSsT0EzhJqljRmvhzqZua43TyEs80nJk2Cn2FGPg/N8phH6KeCQ== +"@smithy/util-waiter@^4.2.4": + version "4.2.5" + resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-4.2.5.tgz#e527816edae20ec5f68b25685f4b21d93424ea86" + integrity sha512-Dbun99A3InifQdIrsXZ+QLcC0PGBPAdrl4cj1mTgJvyc9N2zf7QSxg8TBkzsCmGJdE3TLbO9ycwpY0EkWahQ/g== dependencies: - "@smithy/abort-controller" "^4.1.1" - "@smithy/types" "^4.5.0" + "@smithy/abort-controller" "^4.2.5" + "@smithy/types" "^4.9.0" tslib "^2.6.2" -"@smithy/uuid@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@smithy/uuid/-/uuid-1.0.0.tgz#a0fd3aa879d57e2f2fd6a7308deee864a412e1cf" - integrity sha512-OlA/yZHh0ekYFnbUkmYBDQPE6fGfdrvgz39ktp8Xf+FA6BfxLejPTMDOG0Nfk5/rDySAz1dRbFf24zaAFYVXlQ== +"@smithy/uuid@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@smithy/uuid/-/uuid-1.1.0.tgz#9fd09d3f91375eab94f478858123387df1cda987" + integrity sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw== dependencies: tslib "^2.6.2" @@ -4897,11 +4815,6 @@ dependencies: "@babel/types" "^7.28.2" -"@types/cookie@^0.6.0": - version "0.6.0" - resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.6.0.tgz#eac397f28bf1d6ae0ae081363eca2f425bedf0d5" - integrity sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA== - "@types/core-js@^2.5.8": version "2.5.8" resolved "https://registry.yarnpkg.com/@types/core-js/-/core-js-2.5.8.tgz#d5c6ec44f2f3328653dce385ae586bd8261f8e85" @@ -4986,11 +4899,11 @@ integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== "@types/node@*": - version "24.5.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-24.5.2.tgz#52ceb83f50fe0fcfdfbd2a9fab6db2e9e7ef6446" - integrity sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ== + version "24.10.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-24.10.1.tgz#91e92182c93db8bd6224fca031e2370cef9a8f01" + integrity sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ== dependencies: - undici-types "~7.12.0" + undici-types "~7.16.0" "@types/node@20.5.1": version "20.5.1" @@ -4998,9 +4911,9 @@ integrity sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg== "@types/node@^18.11.14": - version "18.19.127" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.127.tgz#7c2e47fa79ad7486134700514d4a975c4607f09d" - integrity sha512-gSjxjrnKXML/yo0BO099uPixMqfpJU0TKYjpfLU7TrtA2WWDki412Np/RSTPRil1saKBhvVVKzVx/p/6p94nVA== + version "18.19.130" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.130.tgz#da4c6324793a79defb7a62cba3947ec5add00d59" + integrity sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg== dependencies: undici-types "~5.26.4" @@ -5027,16 +4940,16 @@ "@types/react" "*" "@types/react@*": - version "19.1.14" - resolved "https://registry.yarnpkg.com/@types/react/-/react-19.1.14.tgz#154e157c014cb02b90201250b009ecad28fbad9f" - integrity sha512-ukd93VGzaNPMAUPy0gRDSC57UuQbnH9Kussp7HBjM06YFi9uZTFhOvMSO2OKqXm1rSgzOE+pVx1k1PYHGwlc8Q== + version "19.2.4" + resolved "https://registry.yarnpkg.com/@types/react/-/react-19.2.4.tgz#e38daaca05cf95459f5f797b1411bcf64c413dd2" + integrity sha512-tBFxBp9Nfyy5rsmefN+WXc1JeW/j2BpBHFdLZbEVfs9wn3E3NRFxwV0pJg8M1qQAexFpvz73hJXFofV0ZAu92A== dependencies: csstype "^3.0.2" "@types/react@^18.0.26": - version "18.3.24" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.24.tgz#f6a5a4c613242dfe3af0dcee2b4ec47b92d9b6bd" - integrity sha512-0dLEBsA1kI3OezMBF8nSsb7Nk19ZnsyE1LLhB8r27KbgU5H4pvuqZLdtE+aUkJVoXgTVuA+iLIwmZ0TuK4tx6A== + version "18.3.26" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.26.tgz#4c5970878d30db3d2a0bca1e4eb5f258e391bbeb" + integrity sha512-RFA/bURkcKzx/X9oumPG9Vp3D3JUgus/d0b67KB0t5S/raciymilkOa66olh78MUI92QLbEJevO7rvqU/kjwKA== dependencies: "@types/prop-types" "*" csstype "^3.0.2" @@ -5079,19 +4992,24 @@ "@types/yargs-parser" "*" "@types/yargs@^16.0.0": - version "16.0.9" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.9.tgz#ba506215e45f7707e6cbcaf386981155b7ab956e" - integrity sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA== + version "16.0.10" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.10.tgz#2376eed83bc9dbda3d7253a44e18328fc0854477" + integrity sha512-0xbOE6Ht/oj0MTVVXCCdEZzUk7adwW3YB1Tg1ZBm95jrkrUMI0VA4sf3SgxC1TG8p5aKkn3jxT9A2BDw1mM/TQ== dependencies: "@types/yargs-parser" "*" "@types/yargs@^17.0.8": - version "17.0.33" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" - integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== + version "17.0.34" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.34.tgz#1c2f9635b71d5401827373a01ce2e8a7670ea839" + integrity sha512-KExbHVa92aJpw9WDQvzBaGVE2/Pz+pLZQloT2hjL8IqsZnV62rlPOYvNnLmf/L2dyllfVUOVBj64M0z/46eR2A== dependencies: "@types/yargs-parser" "*" +"@types/zen-observable@0.8.3": + version "0.8.3" + resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.3.tgz#781d360c282436494b32fe7d9f7f8e64b3118aa3" + integrity sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw== + "@typescript-eslint/eslint-plugin@^5.46.1": version "5.62.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" @@ -5689,10 +5607,10 @@ available-typed-arrays@^1.0.7: dependencies: possible-typed-array-names "^1.0.0" -axios@^1.12.0, axios@^1.6.0, axios@^1.8.3: - version "1.12.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.12.2.tgz#6c307390136cf7a2278d09cec63b136dfc6e6da7" - integrity sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw== +axios@^1.12.0, axios@^1.6.0: + version "1.13.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.2.tgz#9ada120b7b5ab24509553ec3e40123521117f687" + integrity sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA== dependencies: follow-redirects "^1.15.6" form-data "^4.0.4" @@ -6366,10 +6284,10 @@ base64-js@1.5.1, base64-js@^1.1.2, base64-js@^1.3.1, base64-js@^1.5.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -baseline-browser-mapping@^2.8.3: - version "2.8.7" - resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.7.tgz#4d3606fdb1738fd902da40c5fcc0595e87cec044" - integrity sha512-bxxN2M3a4d1CRoQC//IqsR5XrLh0IJ8TCv2x6Y9N0nckNz/rTjZB3//GGscZziZOxmjP55rzxg/ze7usFI9FqQ== +baseline-browser-mapping@^2.8.25: + version "2.8.27" + resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.27.tgz#d15ab8face053137f8eb4c028455024787515d5d" + integrity sha512-2CXFpkjVnY2FT+B6GrSYxzYf65BJWEqz5tIRHCvNsZZ2F3CmsCB37h8SpYgKG7y9C4YAeTipIPWG7EmFmhAeXA== basic-auth@^2.0.1, basic-auth@~2.0.1: version "2.0.1" @@ -6461,16 +6379,16 @@ browserslist@^3.2.6: caniuse-lite "^1.0.30000844" electron-to-chromium "^1.3.47" -browserslist@^4.20.4, browserslist@^4.24.0, browserslist@^4.25.3: - version "4.26.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.26.2.tgz#7db3b3577ec97f1140a52db4936654911078cef3" - integrity sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A== +browserslist@^4.20.4, browserslist@^4.24.0, browserslist@^4.26.3: + version "4.28.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.28.0.tgz#9cefece0a386a17a3cd3d22ebf67b9deca1b5929" + integrity sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ== dependencies: - baseline-browser-mapping "^2.8.3" - caniuse-lite "^1.0.30001741" - electron-to-chromium "^1.5.218" - node-releases "^2.0.21" - update-browserslist-db "^1.1.3" + baseline-browser-mapping "^2.8.25" + caniuse-lite "^1.0.30001754" + electron-to-chromium "^1.5.249" + node-releases "^2.0.27" + update-browserslist-db "^1.1.4" bs-logger@^0.2.6: version "0.2.6" @@ -6613,10 +6531,10 @@ camelcase@^6.0.0, camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30001741: - version "1.0.30001745" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001745.tgz#ab2a36e3b6ed5bfb268adc002c476aab6513f859" - integrity sha512-ywt6i8FzvdgrrrGbr1jZVObnVv6adj+0if2/omv9cmR2oiZs30zL4DIyaptKcbOrBdOIc74QTMoJvSE2QHh5UQ== +caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30001754: + version "1.0.30001754" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001754.tgz#7758299d9a72cce4e6b038788a15b12b44002759" + integrity sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg== chalk@4.1.0: version "4.1.0" @@ -6655,10 +6573,10 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -chardet@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-2.1.0.tgz#1007f441a1ae9f9199a4a67f6e978fb0aa9aa3fe" - integrity sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA== +chardet@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-2.1.1.tgz#5c75593704a642f71ee53717df234031e65373c8" + integrity sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ== chokidar@^3.5.2: version "3.6.0" @@ -6718,9 +6636,9 @@ ci-info@^3.2.0: integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== ci-info@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.3.0.tgz#c39b1013f8fdbd28cd78e62318357d02da160cd7" - integrity sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ== + version "4.3.1" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-4.3.1.tgz#355ad571920810b5623e11d40232f443f16f1daa" + integrity sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA== cjs-module-lexer@^1.0.0: version "1.4.3" @@ -6826,9 +6744,9 @@ co@^4.6.0: integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== collect-v8-coverage@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" - integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== + version "1.0.3" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz#cc1f01eb8d02298cbc9a437c74c70ab4e5210b80" + integrity sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw== color-convert@^1.9.0: version "1.9.3" @@ -7116,17 +7034,17 @@ cookie@0.7.1: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.1.tgz#2f73c42142d5d5cf71310a74fc4ae61670e5dbc9" integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== -cookie@^0.7.2: - version "0.7.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" - integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== +cookie@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-1.0.2.tgz#27360701532116bd3f1f9416929d176afe1e4610" + integrity sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA== core-js-compat@^3.43.0: - version "3.45.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.45.1.tgz#424f3f4af30bf676fd1b67a579465104f64e9c7a" - integrity sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA== + version "3.46.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.46.0.tgz#0c87126a19a1af00371e12b02a2b088a40f3c6f7" + integrity sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law== dependencies: - browserslist "^4.25.3" + browserslist "^4.26.3" core-js@^2.4.0, core-js@^2.5.0: version "2.6.12" @@ -7319,9 +7237,9 @@ dateformat@^3.0.3: integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== dayjs@^1.8.15: - version "1.11.18" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.18.tgz#835fa712aac52ab9dec8b1494098774ed7070a11" - integrity sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA== + version "1.11.19" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.19.tgz#15dc98e854bb43917f12021806af897c58ae2938" + integrity sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw== debug@2.6.9, debug@^2.2.0, debug@^2.6.8, debug@^2.6.9: version "2.6.9" @@ -7594,10 +7512,10 @@ ejs@^3.1.7, ejs@^3.1.9: dependencies: jake "^10.8.5" -electron-to-chromium@^1.3.47, electron-to-chromium@^1.5.218: - version "1.5.224" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.224.tgz#dbc6827cb3d41d7293811d6d8af53114804e0ed1" - integrity sha512-kWAoUu/bwzvnhpdZSIc6KUyvkI1rbRXMT0Eq8pKReyOyaPZcctMli+EgvcN1PAvwVc7Tdo4Fxi2PsLNDU05mdg== +electron-to-chromium@^1.3.47, electron-to-chromium@^1.5.249: + version "1.5.250" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.250.tgz#0b40436fa41ae7cbac3d2f60ef0411a698eb72a7" + integrity sha512-/5UMj9IiGDMOFBnN4i7/Ry5onJrAGSbOGo3s9FEKmwobGq6xw832ccET0CE3CkkMBZ8GJSlUIesZofpyurqDXw== emittery@^0.13.1: version "0.13.1" @@ -7661,9 +7579,9 @@ envinfo@7.13.0: integrity sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q== envinfo@^7.10.0, envinfo@^7.7.2: - version "7.14.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.14.0.tgz#26dac5db54418f2a4c1159153a0b2ae980838aae" - integrity sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg== + version "7.20.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.20.0.tgz#3fd9de69fb6af3e777a017dfa033676368d67dd7" + integrity sha512-+zUomDcLXsVkQ37vUqWBvQwLaLlj8eZPSi61llaEFAVBY5mhcXdaSw1pSJVl4yTYD5g/gEfpNl28YYk4IPvrrg== err-code@^2.0.2: version "2.0.3" @@ -7796,36 +7714,36 @@ es-to-primitive@^1.3.0: is-symbol "^1.0.4" esbuild@^0.25.0: - version "0.25.10" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.10.tgz#37f5aa5cd14500f141be121c01b096ca83ac34a9" - integrity sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ== + version "0.25.12" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.12.tgz#97a1d041f4ab00c2fce2f838d2b9969a2d2a97a5" + integrity sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg== optionalDependencies: - "@esbuild/aix-ppc64" "0.25.10" - "@esbuild/android-arm" "0.25.10" - "@esbuild/android-arm64" "0.25.10" - "@esbuild/android-x64" "0.25.10" - "@esbuild/darwin-arm64" "0.25.10" - "@esbuild/darwin-x64" "0.25.10" - "@esbuild/freebsd-arm64" "0.25.10" - "@esbuild/freebsd-x64" "0.25.10" - "@esbuild/linux-arm" "0.25.10" - "@esbuild/linux-arm64" "0.25.10" - "@esbuild/linux-ia32" "0.25.10" - "@esbuild/linux-loong64" "0.25.10" - "@esbuild/linux-mips64el" "0.25.10" - "@esbuild/linux-ppc64" "0.25.10" - "@esbuild/linux-riscv64" "0.25.10" - "@esbuild/linux-s390x" "0.25.10" - "@esbuild/linux-x64" "0.25.10" - "@esbuild/netbsd-arm64" "0.25.10" - "@esbuild/netbsd-x64" "0.25.10" - "@esbuild/openbsd-arm64" "0.25.10" - "@esbuild/openbsd-x64" "0.25.10" - "@esbuild/openharmony-arm64" "0.25.10" - "@esbuild/sunos-x64" "0.25.10" - "@esbuild/win32-arm64" "0.25.10" - "@esbuild/win32-ia32" "0.25.10" - "@esbuild/win32-x64" "0.25.10" + "@esbuild/aix-ppc64" "0.25.12" + "@esbuild/android-arm" "0.25.12" + "@esbuild/android-arm64" "0.25.12" + "@esbuild/android-x64" "0.25.12" + "@esbuild/darwin-arm64" "0.25.12" + "@esbuild/darwin-x64" "0.25.12" + "@esbuild/freebsd-arm64" "0.25.12" + "@esbuild/freebsd-x64" "0.25.12" + "@esbuild/linux-arm" "0.25.12" + "@esbuild/linux-arm64" "0.25.12" + "@esbuild/linux-ia32" "0.25.12" + "@esbuild/linux-loong64" "0.25.12" + "@esbuild/linux-mips64el" "0.25.12" + "@esbuild/linux-ppc64" "0.25.12" + "@esbuild/linux-riscv64" "0.25.12" + "@esbuild/linux-s390x" "0.25.12" + "@esbuild/linux-x64" "0.25.12" + "@esbuild/netbsd-arm64" "0.25.12" + "@esbuild/netbsd-x64" "0.25.12" + "@esbuild/openbsd-arm64" "0.25.12" + "@esbuild/openbsd-x64" "0.25.12" + "@esbuild/openharmony-arm64" "0.25.12" + "@esbuild/sunos-x64" "0.25.12" + "@esbuild/win32-arm64" "0.25.12" + "@esbuild/win32-ia32" "0.25.12" + "@esbuild/win32-x64" "0.25.12" escalade@^3.1.1, escalade@^3.2.0: version "3.2.0" @@ -7938,11 +7856,11 @@ eslint-plugin-jest@^27.1.6: "@typescript-eslint/utils" "^5.10.0" eslint-plugin-playwright@^2.2.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-playwright/-/eslint-plugin-playwright-2.2.2.tgz#f722649b0bf04acd8fef39184249710335b10a6f" - integrity sha512-j0jKpndIPOXRRP9uMkwb9l/nSmModOU3452nrFdgFJoEv/435J1onk8+aITzjDW8DfypxgmVaDMdmVIa6F7I0w== + version "2.3.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-playwright/-/eslint-plugin-playwright-2.3.0.tgz#e14dfe981455254bbf5a7299802f5c01bb93d148" + integrity sha512-7UeUuIb5SZrNkrUGb2F+iwHM97kn33/huajcVtAaQFCSMUYGNFvjzRPil5C0OIppslPfuOV68M/zsisXx+/ZvQ== dependencies: - globals "^13.23.0" + globals "^16.4.0" eslint-plugin-prettier@^4.0.0: version "4.2.5" @@ -8174,9 +8092,9 @@ expect@^29.0.0, expect@^29.7.0: jest-util "^29.7.0" exponential-backoff@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.2.tgz#a8f26adb96bf78e8cd8ad1037928d5e5c0679d91" - integrity sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA== + version "3.1.3" + resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.3.tgz#51cf92c1c0493c766053f9d3abee4434c244d2f6" + integrity sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA== express@^4.18.2: version "4.21.2" @@ -8427,9 +8345,9 @@ flow-enums-runtime@^0.0.6: integrity sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw== flow-parser@0.*: - version "0.286.0" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.286.0.tgz#ecc515ef09312d17df90bfaabca93cda55ea258c" - integrity sha512-+tLYO+fxXCYc/0hyOxI3ky0lvVTbzc3jPSnUkoul/L6OCHvrUhVjxLMz1fsYVvVGyFDmlsMut3SVxaqoLBjC9A== + version "0.291.0" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.291.0.tgz#b66dda4ebbf4efe05ac116fcfdbdfe3037f374b6" + integrity sha512-MLqjFn72Dvndqrkjy280HaIs4AV9Z6nxVRmNPO3TjbYcipg4hR7QX7tEYZYsVvaaZWZPGe6Mithluk2aPGlDOw== flow-parser@^0.121.0: version "0.121.0" @@ -8680,17 +8598,10 @@ get-symbol-description@^1.1.0: es-errors "^1.3.0" get-intrinsic "^1.2.6" -get-tsconfig@^4.10.1: - version "4.11.0" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.11.0.tgz#5a4acc944244a2630c2ed3318b55e6dc051d034b" - integrity sha512-sNsqf7XKQ38IawiVGPOoAlqZo1DMrO7TU+ZcZwi7yLl7/7S0JwmoBMKz/IkUPhSoXM0Ng3vT0yB1iCe5XavDeQ== - dependencies: - resolve-pkg-maps "^1.0.0" - -get-tsconfig@^4.3.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.10.1.tgz#d34c1c01f47d65a606c37aa7a177bc3e56ab4b2e" - integrity sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ== +get-tsconfig@^4.10.1, get-tsconfig@^4.3.0: + version "4.13.0" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.13.0.tgz#fcdd991e6d22ab9a600f00e91c318707a5d9a0d7" + integrity sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ== dependencies: resolve-pkg-maps "^1.0.0" @@ -8830,13 +8741,18 @@ global-dirs@^0.1.1: dependencies: ini "^1.3.4" -globals@^13.19.0, globals@^13.23.0: +globals@^13.19.0: version "13.24.0" resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== dependencies: type-fest "^0.20.2" +globals@^16.4.0: + version "16.5.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-16.5.0.tgz#ccf1594a437b97653b2be13ed4d8f5c9f850cac1" + integrity sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ== + globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" @@ -8878,9 +8794,9 @@ graphemer@^1.4.0: integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== graphql@^16.8.1: - version "16.11.0" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.11.0.tgz#96d17f66370678027fdf59b2d4c20b4efaa8a633" - integrity sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw== + version "16.12.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.12.0.tgz#28cc2462435b1ac3fdc6976d030cef83a0c13ac7" + integrity sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ== handlebars@^4.7.7, handlebars@^4.7.8: version "4.7.8" @@ -9328,9 +9244,9 @@ invariant@^2.2.2, invariant@^2.2.4: loose-envify "^1.0.0" ip-address@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-10.0.1.tgz#a8180b783ce7788777d796286d61bce4276818ed" - integrity sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA== + version "10.1.0" + resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-10.1.0.tgz#d8dcffb34d0e02eb241427444a6e23f5b0595aa4" + integrity sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q== ip@^1.1.5: version "1.1.9" @@ -9416,7 +9332,7 @@ is-ci@3.0.1: dependencies: ci-info "^3.2.0" -is-core-module@^2.13.0, is-core-module@^2.16.0, is-core-module@^2.16.1, is-core-module@^2.5.0: +is-core-module@^2.13.0, is-core-module@^2.16.1, is-core-module@^2.5.0: version "2.16.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== @@ -9930,7 +9846,7 @@ jest-config@^29.7.0: slash "^3.0.0" strip-json-comments "^3.1.1" -"jest-diff@>=30.0.0 < 31": +"jest-diff@>=30.0.0 < 31", jest-diff@^30.0.2: version "30.2.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-30.2.0.tgz#e3ec3a6ea5c5747f605c9e874f83d756cba36825" integrity sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A== @@ -9950,16 +9866,6 @@ jest-diff@^29.7.0: jest-get-type "^29.6.3" pretty-format "^29.7.0" -jest-diff@^30.0.2: - version "30.1.2" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-30.1.2.tgz#8ff4217e5b63fef49a5b37462999d8f5299a4eb4" - integrity sha512-4+prq+9J61mOVXCa4Qp8ZjavdxzrWQXrI80GNxP8f4tkI2syPuPrJgdRPZRrfUTRvIoUwcmNLbqEJy9W800+NQ== - dependencies: - "@jest/diff-sequences" "30.0.1" - "@jest/get-type" "30.1.0" - chalk "^4.1.2" - pretty-format "30.0.5" - jest-docblock@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" @@ -10343,7 +10249,7 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg== -js-yaml@4.1.0, js-yaml@^4.1.0: +js-yaml@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== @@ -10358,6 +10264,13 @@ js-yaml@^3.10.0, js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b" + integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== + dependencies: + argparse "^2.0.1" + jsc-android@^250230.2.1: version "250230.2.1" resolved "https://registry.yarnpkg.com/jsc-android/-/jsc-android-250230.2.1.tgz#3790313a970586a03ab0ad47defbc84df54f1b83" @@ -10465,6 +10378,11 @@ json-parse-even-better-errors@^4.0.0: resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz#d3f67bd5925e81d3e31aa466acc821c8375cec43" integrity sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA== +json-parse-even-better-errors@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-5.0.0.tgz#93c89f529f022e5dadc233409324f0167b1e903e" + integrity sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -10950,9 +10868,9 @@ magic-string@^0.27.0: "@jridgewell/sourcemap-codec" "^1.4.13" magic-string@^0.30.3: - version "0.30.19" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.19.tgz#cebe9f104e565602e5d2098c5f2e79a77cc86da9" - integrity sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw== + version "0.30.21" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.21.tgz#56763ec09a0fa8091df27879fd94d19078c00d91" + integrity sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ== dependencies: "@jridgewell/sourcemap-codec" "^1.5.5" @@ -11740,9 +11658,9 @@ minimatch@9.0.3: brace-expansion "^2.0.1" minimatch@^10.0.3: - version "10.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.0.3.tgz#cf7a0314a16c4d9ab73a7730a0e8e3c3502d47aa" - integrity sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw== + version "10.1.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.1.1.tgz#e6e61b9b0c1dcab116b5a7d1458e8b6ae9e73a55" + integrity sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ== dependencies: "@isaacs/brace-expansion" "^5.0.0" @@ -11920,17 +11838,15 @@ ms@2.1.3, ms@^2.1.1, ms@^2.1.3: integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== msw@^2.3.1: - version "2.11.3" - resolved "https://registry.yarnpkg.com/msw/-/msw-2.11.3.tgz#5a51a7eebd334957fefb375b9d985e3893071ad3" - integrity sha512-878imp8jxIpfzuzxYfX0qqTq1IFQz/1/RBHs/PyirSjzi+xKM/RRfIpIqHSCWjH0GxidrjhgiiXC+DWXNDvT9w== + version "2.12.1" + resolved "https://registry.yarnpkg.com/msw/-/msw-2.12.1.tgz#b3dee99d7692e92581234b4060b9a9250f5d998e" + integrity sha512-arzsi9IZjjByiEw21gSUP82qHM8zkV69nNpWV6W4z72KiLvsDWoOp678ORV6cNfU/JGhlX0SsnD4oXo9gI6I2A== dependencies: - "@bundled-es-modules/cookie" "^2.0.1" - "@bundled-es-modules/statuses" "^1.0.1" "@inquirer/confirm" "^5.0.0" - "@mswjs/interceptors" "^0.39.1" + "@mswjs/interceptors" "^0.40.0" "@open-draft/deferred-promise" "^2.2.0" - "@types/cookie" "^0.6.0" "@types/statuses" "^2.0.4" + cookie "^1.0.2" graphql "^16.8.1" headers-polyfill "^4.0.2" is-node-process "^1.2.0" @@ -11938,6 +11854,7 @@ msw@^2.3.1: path-to-regexp "^6.3.0" picocolors "^1.1.1" rettime "^0.7.0" + statuses "^2.0.2" strict-event-emitter "^0.5.1" tough-cookie "^6.0.0" type-fest "^4.26.1" @@ -11960,6 +11877,11 @@ mute-stream@^2.0.0: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-2.0.0.tgz#a5446fc0c512b71c83c44d908d5c7b7b4c493b2b" integrity sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA== +mute-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-3.0.0.tgz#cd8014dd2acb72e1e91bb67c74f0019e620ba2d1" + integrity sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw== + nanoid@^3.3.11: version "3.3.11" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" @@ -12085,10 +12007,10 @@ node-machine-id@1.1.12: resolved "https://registry.yarnpkg.com/node-machine-id/-/node-machine-id-1.1.12.tgz#37904eee1e59b320bb9c5d6c0a59f3b469cb6267" integrity sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ== -node-releases@^2.0.21: - version "2.0.21" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.21.tgz#f59b018bc0048044be2d4c4c04e4c8b18160894c" - integrity sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw== +node-releases@^2.0.27: + version "2.0.27" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.27.tgz#eedca519205cf20f650f61d56b070db111231e4e" + integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA== node-stream-zip@^1.9.1: version "1.15.0" @@ -12096,9 +12018,9 @@ node-stream-zip@^1.9.1: integrity sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw== nodemon@^3.0.1: - version "3.1.10" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.10.tgz#5015c5eb4fffcb24d98cf9454df14f4fecec9bc1" - integrity sha512-WDjw3pJ0/0jMFmyNDp3gvY2YizjLmmOUQo6DEBY+JgdvW/yQ9mEeSw6H5ythl5Ny2ytb7f9C2nIbjSxMNzbJXw== + version "3.1.11" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.11.tgz#04a54d1e794fbec9d8f6ffd8bf1ba9ea93a756ed" + integrity sha512-is96t8F/1//UHAjNPHpbsNY46ELPpftGUoSVNXwUfMk/qdjSylYrWSu1XavVTBOn526kFiOR733ATgNBCQyH0g== dependencies: chokidar "^3.5.2" debug "^4" @@ -12157,11 +12079,23 @@ npm-install-checks@^7.1.0: dependencies: semver "^7.1.1" +npm-install-checks@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-8.0.0.tgz#f5d18e909bb8318d85093e9d8f36ac427c1cbe30" + integrity sha512-ScAUdMpyzkbpxoNekQ3tNRdFI8SJ86wgKZSQZdUxT+bj0wVFpsEMWnkXP0twVe1gJyNF5apBWDJhhIbgrIViRA== + dependencies: + semver "^7.1.1" + npm-normalize-package-bin@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz#df79e70cd0a113b77c02d1fe243c96b8e618acb1" integrity sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w== +npm-normalize-package-bin@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-5.0.0.tgz#2b207ff260f2e525ddce93356614e2f736728f89" + integrity sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag== + npm-package-arg@13.0.0: version "13.0.0" resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-13.0.0.tgz#be6fd7e60c6fd605b85f570e88cace45e2416c8b" @@ -12200,12 +12134,12 @@ npm-packlist@10.0.1: ignore-walk "^8.0.0" npm-packlist@^10.0.1: - version "10.0.2" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-10.0.2.tgz#b64877552bc9bf756c10a1795baa436f3d226370" - integrity sha512-DrIWNiWT0FTdDRjGOYfEEZUNe1IzaSZ+up7qBTKnrQDySpdmuOQvytrqQlpK5QrCA4IThMvL4wTumqaa1ZvVIQ== + version "10.0.3" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-10.0.3.tgz#e22c039357faf81a75d1b0cdf53dd113f2bed9c7" + integrity sha512-zPukTwJMOu5X5uvm0fztwS5Zxyvmk38H/LfidkOMt3gbZVCyro2cD/ETzwzVPcWZA3JOyPznfUN/nkyFiyUbxg== dependencies: ignore-walk "^8.0.0" - proc-log "^5.0.0" + proc-log "^6.0.0" npm-pick-manifest@^10.0.0: version "10.0.0" @@ -12218,16 +12152,16 @@ npm-pick-manifest@^10.0.0: semver "^7.3.5" npm-pick-manifest@^11.0.1: - version "11.0.1" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-11.0.1.tgz#77f74dc36df3444391c0aa5cd80ba7bf41184163" - integrity sha512-HnU7FYSWbo7dTVHtK0G+BXbZ0aIfxz/aUCVLN0979Ec6rGUX5cJ6RbgVx5fqb5G31ufz+BVFA7y1SkRTPVNoVQ== + version "11.0.3" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-11.0.3.tgz#76cf6593a351849006c36b38a7326798e2a76d13" + integrity sha512-buzyCfeoGY/PxKqmBqn1IUJrZnUi1VVJTdSSRPGI60tJdUhUoSQFhs0zycJokDdOznQentgrpf8LayEHyyYlqQ== dependencies: - npm-install-checks "^7.1.0" - npm-normalize-package-bin "^4.0.0" + npm-install-checks "^8.0.0" + npm-normalize-package-bin "^5.0.0" npm-package-arg "^13.0.0" semver "^7.3.5" -npm-registry-fetch@19.0.0, npm-registry-fetch@^19.0.0: +npm-registry-fetch@19.0.0: version "19.0.0" resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-19.0.0.tgz#476048d3e8321b1de7e196f476a67a1a6a6f4107" integrity sha512-DFxSAemHUwT/POaXAOY4NJmEWBPB0oKbwD6FFDE9hnt1nORkt/FXvgjD4hQjoKoHw9u0Ezws9SPXwV7xE/Gyww== @@ -12255,6 +12189,20 @@ npm-registry-fetch@^18.0.1: npm-package-arg "^12.0.0" proc-log "^5.0.0" +npm-registry-fetch@^19.0.0: + version "19.1.0" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-19.1.0.tgz#e84f64263f79c92695a7344d92f93726de5e0707" + integrity sha512-xyZLfs7TxPu/WKjHUs0jZOPinzBAI32kEUel6za0vH+JUTnFZ5zbHI1ZoGZRDm6oMjADtrli6FxtMlk/5ABPNw== + dependencies: + "@npmcli/redact" "^3.0.0" + jsonparse "^1.3.1" + make-fetch-happen "^15.0.0" + minipass "^7.0.2" + minipass-fetch "^4.0.0" + minizlib "^3.0.1" + npm-package-arg "^13.0.0" + proc-log "^5.0.0" + npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -12286,62 +12234,10 @@ nwsapi@^2.2.2: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.22.tgz#109f9530cda6c156d6a713cdf5939e9f0de98b9d" integrity sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ== -nx@21.5.3, nx@^21.2.1: - version "21.5.3" - resolved "https://registry.yarnpkg.com/nx/-/nx-21.5.3.tgz#42d9ac2d83d2310b7df5ece91d8d0d51b0a3b696" - integrity sha512-+XwzK3OWZw/7zLdhNHBms9VdAA8F6w6QsX8qFQ3+3CnbqEy0IDmVxTXb8c711LDMbEtNn94EiWvSV6C00FKw9Q== - dependencies: - "@napi-rs/wasm-runtime" "0.2.4" - "@yarnpkg/lockfile" "^1.1.0" - "@yarnpkg/parsers" "3.0.2" - "@zkochan/js-yaml" "0.0.7" - axios "^1.8.3" - chalk "^4.1.0" - cli-cursor "3.1.0" - cli-spinners "2.6.1" - cliui "^8.0.1" - dotenv "~16.4.5" - dotenv-expand "~11.0.6" - enquirer "~2.3.6" - figures "3.2.0" - flat "^5.0.2" - front-matter "^4.0.2" - ignore "^5.0.4" - jest-diff "^30.0.2" - jsonc-parser "3.2.0" - lines-and-columns "2.0.3" - minimatch "9.0.3" - node-machine-id "1.1.12" - npm-run-path "^4.0.1" - open "^8.4.0" - ora "5.3.0" - resolve.exports "2.0.3" - semver "^7.5.3" - string-width "^4.2.3" - tar-stream "~2.2.0" - tmp "~0.2.1" - tree-kill "^1.2.2" - tsconfig-paths "^4.1.2" - tslib "^2.3.0" - yaml "^2.6.0" - yargs "^17.6.2" - yargs-parser "21.1.1" - optionalDependencies: - "@nx/nx-darwin-arm64" "21.5.3" - "@nx/nx-darwin-x64" "21.5.3" - "@nx/nx-freebsd-x64" "21.5.3" - "@nx/nx-linux-arm-gnueabihf" "21.5.3" - "@nx/nx-linux-arm64-gnu" "21.5.3" - "@nx/nx-linux-arm64-musl" "21.5.3" - "@nx/nx-linux-x64-gnu" "21.5.3" - "@nx/nx-linux-x64-musl" "21.5.3" - "@nx/nx-win32-arm64-msvc" "21.5.3" - "@nx/nx-win32-x64-msvc" "21.5.3" - -"nx@>=21.5.3 < 22.0.0": - version "21.6.5" - resolved "https://registry.yarnpkg.com/nx/-/nx-21.6.5.tgz#ccde79dfdc576d9387b6f7287422cc88e47c1bb0" - integrity sha512-PqvLf24A+x10b4oXX19hd8FqWK/EiMkcmehOP+JLN64R0qYrCxiJcE/s9Zp9YXJS5S0jkeikSz0ZDq1OG21NcQ== +nx@21.6.8, "nx@>=21.5.3 < 22.0.0", nx@^21.2.1: + version "21.6.8" + resolved "https://registry.yarnpkg.com/nx/-/nx-21.6.8.tgz#6d8242b3d86bac594dbfc914a1e711a4d9aa9219" + integrity sha512-NilGEk1Cngs3Se9JW+f9cDeN6RBvmABhpEtgMvOK8RAAZszq6B380oCzKcQljhnrbQ6+v6j/Vb7hBPTCvXb0Ng== dependencies: "@napi-rs/wasm-runtime" "0.2.4" "@yarnpkg/lockfile" "^1.1.0" @@ -12379,16 +12275,16 @@ nx@21.5.3, nx@^21.2.1: yargs "^17.6.2" yargs-parser "21.1.1" optionalDependencies: - "@nx/nx-darwin-arm64" "21.6.5" - "@nx/nx-darwin-x64" "21.6.5" - "@nx/nx-freebsd-x64" "21.6.5" - "@nx/nx-linux-arm-gnueabihf" "21.6.5" - "@nx/nx-linux-arm64-gnu" "21.6.5" - "@nx/nx-linux-arm64-musl" "21.6.5" - "@nx/nx-linux-x64-gnu" "21.6.5" - "@nx/nx-linux-x64-musl" "21.6.5" - "@nx/nx-win32-arm64-msvc" "21.6.5" - "@nx/nx-win32-x64-msvc" "21.6.5" + "@nx/nx-darwin-arm64" "21.6.8" + "@nx/nx-darwin-x64" "21.6.8" + "@nx/nx-freebsd-x64" "21.6.8" + "@nx/nx-linux-arm-gnueabihf" "21.6.8" + "@nx/nx-linux-arm64-gnu" "21.6.8" + "@nx/nx-linux-arm64-musl" "21.6.8" + "@nx/nx-linux-x64-gnu" "21.6.8" + "@nx/nx-linux-x64-musl" "21.6.8" + "@nx/nx-win32-arm64-msvc" "21.6.8" + "@nx/nx-win32-x64-msvc" "21.6.8" ob1@0.72.3: version "0.72.3" @@ -12669,9 +12565,9 @@ p-map@4.0.0, p-map@^4.0.0: aggregate-error "^3.0.0" p-map@^7.0.2: - version "7.0.3" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-7.0.3.tgz#7ac210a2d36f81ec28b736134810f7ba4418cdb6" - integrity sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA== + version "7.0.4" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-7.0.4.tgz#b81814255f542e252d5729dca4d66e5ec14935b8" + integrity sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ== p-pipe@3.1.0: version "3.1.0" @@ -12870,9 +12766,9 @@ path-scurry@^1.11.1, path-scurry@^1.6.1: minipass "^5.0.0 || ^6.0.2 || ^7.0.0" path-scurry@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.0.tgz#9f052289f23ad8bf9397a2a0425e7b8615c58580" - integrity sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg== + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.1.tgz#4b6572376cfd8b811fca9cd1f5c24b3cbac0fe10" + integrity sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA== dependencies: lru-cache "^11.0.0" minipass "^7.1.2" @@ -13031,15 +12927,6 @@ prettier@^2.4.1, prettier@^2.8.1: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== -pretty-format@30.0.5: - version "30.0.5" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-30.0.5.tgz#e001649d472800396c1209684483e18a4d250360" - integrity sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw== - dependencies: - "@jest/schemas" "30.0.5" - ansi-styles "^5.2.0" - react-is "^18.3.1" - pretty-format@30.2.0: version "30.2.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-30.2.0.tgz#2d44fe6134529aed18506f6d11509d8a62775ebe" @@ -13078,6 +12965,11 @@ proc-log@^5.0.0: resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-5.0.0.tgz#e6c93cf37aef33f835c53485f314f50ea906a9d8" integrity sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ== +proc-log@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-6.0.0.tgz#a75b516bc4437b1e07df6771450588f57a0a6548" + integrity sha512-KG/XsTDN901PNfPfAMmj6N/Ywg9tM+bHK8pAz+27fS4N4Pcr+4zoYBOcGSBu6ceXYNPxkLpa4ohtfxV1XcLAfA== + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -13622,7 +13514,7 @@ regexpu-core@^2.0.0: regjsgen "^0.2.0" regjsparser "^0.1.4" -regexpu-core@^6.2.0: +regexpu-core@^6.3.1: version "6.4.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.4.0.tgz#3580ce0c4faedef599eccb146612436b62a176e5" integrity sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA== @@ -13725,11 +13617,11 @@ resolve.exports@2.0.3, resolve.exports@^2.0.0: integrity sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A== resolve@^1.10.0, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.22.10, resolve@^1.22.4: - version "1.22.10" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" - integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== + version "1.22.11" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.11.tgz#aad857ce1ffb8bfa9b0b1ac29f1156383f68c262" + integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ== dependencies: - is-core-module "^2.16.0" + is-core-module "^2.16.1" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -13830,34 +13722,34 @@ rollup@^2.79.1: fsevents "~2.3.2" rollup@^4.34.9: - version "4.52.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.52.2.tgz#43dd135805c919285376634c8520074c5eb7a91a" - integrity sha512-I25/2QgoROE1vYV+NQ1En9T9UFB9Cmfm2CJ83zZOlaDpvz29wGQSZXWKw7MiNXau7wYgB/T9fVIdIuEQ+KbiiA== + version "4.53.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.53.2.tgz#98e73ee51e119cb9d88b07d026c959522416420a" + integrity sha512-MHngMYwGJVi6Fmnk6ISmnk7JAHRNF0UkuucA0CUW3N3a4KnONPEZz+vUanQP/ZC/iY1Qkf3bwPWzyY84wEks1g== dependencies: "@types/estree" "1.0.8" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.52.2" - "@rollup/rollup-android-arm64" "4.52.2" - "@rollup/rollup-darwin-arm64" "4.52.2" - "@rollup/rollup-darwin-x64" "4.52.2" - "@rollup/rollup-freebsd-arm64" "4.52.2" - "@rollup/rollup-freebsd-x64" "4.52.2" - "@rollup/rollup-linux-arm-gnueabihf" "4.52.2" - "@rollup/rollup-linux-arm-musleabihf" "4.52.2" - "@rollup/rollup-linux-arm64-gnu" "4.52.2" - "@rollup/rollup-linux-arm64-musl" "4.52.2" - "@rollup/rollup-linux-loong64-gnu" "4.52.2" - "@rollup/rollup-linux-ppc64-gnu" "4.52.2" - "@rollup/rollup-linux-riscv64-gnu" "4.52.2" - "@rollup/rollup-linux-riscv64-musl" "4.52.2" - "@rollup/rollup-linux-s390x-gnu" "4.52.2" - "@rollup/rollup-linux-x64-gnu" "4.52.2" - "@rollup/rollup-linux-x64-musl" "4.52.2" - "@rollup/rollup-openharmony-arm64" "4.52.2" - "@rollup/rollup-win32-arm64-msvc" "4.52.2" - "@rollup/rollup-win32-ia32-msvc" "4.52.2" - "@rollup/rollup-win32-x64-gnu" "4.52.2" - "@rollup/rollup-win32-x64-msvc" "4.52.2" + "@rollup/rollup-android-arm-eabi" "4.53.2" + "@rollup/rollup-android-arm64" "4.53.2" + "@rollup/rollup-darwin-arm64" "4.53.2" + "@rollup/rollup-darwin-x64" "4.53.2" + "@rollup/rollup-freebsd-arm64" "4.53.2" + "@rollup/rollup-freebsd-x64" "4.53.2" + "@rollup/rollup-linux-arm-gnueabihf" "4.53.2" + "@rollup/rollup-linux-arm-musleabihf" "4.53.2" + "@rollup/rollup-linux-arm64-gnu" "4.53.2" + "@rollup/rollup-linux-arm64-musl" "4.53.2" + "@rollup/rollup-linux-loong64-gnu" "4.53.2" + "@rollup/rollup-linux-ppc64-gnu" "4.53.2" + "@rollup/rollup-linux-riscv64-gnu" "4.53.2" + "@rollup/rollup-linux-riscv64-musl" "4.53.2" + "@rollup/rollup-linux-s390x-gnu" "4.53.2" + "@rollup/rollup-linux-x64-gnu" "4.53.2" + "@rollup/rollup-linux-x64-musl" "4.53.2" + "@rollup/rollup-openharmony-arm64" "4.53.2" + "@rollup/rollup-win32-arm64-msvc" "4.53.2" + "@rollup/rollup-win32-ia32-msvc" "4.53.2" + "@rollup/rollup-win32-x64-gnu" "4.53.2" + "@rollup/rollup-win32-x64-msvc" "4.53.2" fsevents "~2.3.2" run-async@^4.0.5: @@ -13872,7 +13764,7 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -rxjs@7.8.2, rxjs@^7.8.1, rxjs@^7.8.2: +rxjs@7.8.2, rxjs@^7.8.2: version "7.8.2" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.2.tgz#955bc473ed8af11a002a2be52071bf475638607b" integrity sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA== @@ -13944,9 +13836,9 @@ scheduler@^0.22.0: loose-envify "^1.1.0" schema-utils@^4.2.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.2.tgz#0c10878bf4a73fd2b1dfd14b9462b26788c806ae" - integrity sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ== + version "4.3.3" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.3.3.tgz#5b1850912fa31df90716963d45d9121fdfc09f46" + integrity sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA== dependencies: "@types/json-schema" "^7.0.9" ajv "^8.9.0" @@ -13970,7 +13862,7 @@ semver@7.5.4: dependencies: lru-cache "^6.0.0" -semver@7.7.2, semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4, semver@^7.6.3, semver@^7.7.2: +semver@7.7.2: version "7.7.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== @@ -13980,7 +13872,7 @@ semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.7.1: +semver@^7.0.0, semver@^7.1.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4, semver@^7.6.3, semver@^7.7.1, semver@^7.7.2, semver@^7.7.3: version "7.7.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== @@ -14391,7 +14283,7 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -statuses@^2.0.1: +statuses@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== @@ -14647,9 +14539,9 @@ tar@6.2.1: yallist "^4.0.0" tar@^7.4.3: - version "7.5.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-7.5.1.tgz#750a8bd63b7c44c1848e7bf982260a083cf747c9" - integrity sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g== + version "7.5.2" + resolved "https://registry.yarnpkg.com/tar/-/tar-7.5.2.tgz#115c061495ec51ff3c6745ff8f6d0871c5b1dedc" + integrity sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg== dependencies: "@isaacs/fs-minipass" "^4.0.0" chownr "^3.0.0" @@ -14683,9 +14575,9 @@ temp@^0.8.4: rimraf "~2.6.2" terser@^5.0.0, terser@^5.15.0: - version "5.44.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.44.0.tgz#ebefb8e5b8579d93111bfdfc39d2cf63879f4a82" - integrity sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w== + version "5.44.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.44.1.tgz#e391e92175c299b8c284ad6ded609e37303b0a9c" + integrity sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.15.0" @@ -14752,17 +14644,17 @@ tinyglobby@^0.2.12, tinyglobby@^0.2.13, tinyglobby@^0.2.14: fdir "^6.5.0" picomatch "^4.0.3" -tldts-core@^7.0.16: - version "7.0.16" - resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-7.0.16.tgz#f94a42b1f571ee7e4d5c58a4a3486d557b093c14" - integrity sha512-XHhPmHxphLi+LGbH0G/O7dmUH9V65OY20R7vH8gETHsp5AZCjBk9l8sqmRKLaGOxnETU7XNSDUPtewAy/K6jbA== +tldts-core@^7.0.17: + version "7.0.17" + resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-7.0.17.tgz#dadfee3750dd272ed219d7367beb7cbb2ff29eb8" + integrity sha512-DieYoGrP78PWKsrXr8MZwtQ7GLCUeLxihtjC1jZsW1DnvSMdKPitJSe8OSYDM2u5H6g3kWJZpePqkp43TfLh0g== tldts@^7.0.5: - version "7.0.16" - resolved "https://registry.yarnpkg.com/tldts/-/tldts-7.0.16.tgz#8eecb4c15608a23e5b360d64d74f937fb9dbe6aa" - integrity sha512-5bdPHSwbKTeHmXrgecID4Ljff8rQjv7g8zKQPkCozRo2HWWni+p310FSn5ImI+9kWw9kK4lzOB5q/a6iv0IJsw== + version "7.0.17" + resolved "https://registry.yarnpkg.com/tldts/-/tldts-7.0.17.tgz#a6cdc067b9e80ea05f3be471c0ea410688cc78b2" + integrity sha512-Y1KQBgDd/NUc+LfOtKS6mNsC9CCaH+m2P1RoIZy7RAPo3C3/t8X45+zgut31cRZtZ3xKPjfn3TkGTrctC2TQIQ== dependencies: - tldts-core "^7.0.16" + tldts-core "^7.0.17" tmp@~0.2.1: version "0.2.5" @@ -14853,9 +14745,9 @@ trim-right@^1.0.1: integrity sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw== ts-jest@^29.0.3: - version "29.4.4" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.4.4.tgz#fc6fefe28652ed81b8e1381ef8391901d9f81417" - integrity sha512-ccVcRABct5ZELCT5U0+DZwkXMCcOCLi2doHRrKy1nK/s7J7bch6TzJMsrY09WxgUUIP/ITfmcDS8D2yl63rnXw== + version "29.4.5" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.4.5.tgz#a6b0dc401e521515d5342234be87f1ca96390a6f" + integrity sha512-HO3GyiWn2qvTQA4kTgjDcXiMwYQt68a1Y8+JuLRVpdIzm+UOLSHgl/XqR4c6nzJkq5rOkjc02O2I7P7l/Yof0Q== dependencies: bs-logger "^0.2.6" fast-json-stable-stringify "^2.1.0" @@ -14863,7 +14755,7 @@ ts-jest@^29.0.3: json5 "^2.2.3" lodash.memoize "^4.1.2" make-error "^1.3.6" - semver "^7.7.2" + semver "^7.7.3" type-fest "^4.41.0" yargs-parser "^21.1.1" @@ -15066,9 +14958,9 @@ typedoc@^0.23.22: shiki "^0.14.1" "typescript@>=3 < 6", "typescript@^4.6.4 || ^5.2.2": - version "5.9.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.2.tgz#d93450cddec5154a2d5cabe3b8102b83316fb2a6" - integrity sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A== + version "5.9.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f" + integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw== typescript@^4.9.4: version "4.9.5" @@ -15127,10 +15019,10 @@ undici-types@~5.26.4: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== -undici-types@~7.12.0: - version "7.12.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.12.0.tgz#15c5c7475c2a3ba30659529f5cdb4674b622fafb" - integrity sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ== +undici-types@~7.16.0: + version "7.16.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.16.0.tgz#ffccdff36aea4884cbfce9a750a0580224f58a46" + integrity sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw== unfetch@4.1.0: version "4.1.0" @@ -15253,10 +15145,10 @@ upath@2.0.1: resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" integrity sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w== -update-browserslist-db@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" - integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== +update-browserslist-db@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz#7802aa2ae91477f255b86e0e46dbc787a206ad4a" + integrity sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A== dependencies: escalade "^3.2.0" picocolors "^1.1.1" @@ -15282,9 +15174,9 @@ url-parse@^1.5.3: requires-port "^1.0.0" use-sync-external-store@^1.0.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz#55122e2a3edd2a6c106174c27485e0fd59bcfca0" - integrity sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A== + version "1.6.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz#b174bfa65cb2b526732d9f2ac0a408027876f32d" + integrity sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w== util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" @@ -15339,9 +15231,9 @@ vary@^1, vary@~1.1.2: integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== vite@^6.3.4: - version "6.3.6" - resolved "https://registry.yarnpkg.com/vite/-/vite-6.3.6.tgz#69a976b64930750d40219fbc68c5200874d315c1" - integrity sha512-0msEVHJEScQbhkbVTb/4iHZdJ6SXp/AvxL2sjwYQFfBqleHtnCqv1J3sa9zbWz/6kW1m9Tfzn92vW+kZ1WV6QA== + version "6.4.1" + resolved "https://registry.yarnpkg.com/vite/-/vite-6.4.1.tgz#afbe14518cdd6887e240a4b0221ab6d0ce733f96" + integrity sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g== dependencies: esbuild "^0.25.0" fdir "^6.4.4" @@ -15799,7 +15691,20 @@ yocto-queue@^0.1.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -yoctocolors-cjs@^2.1.2: +yoctocolors-cjs@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz#7e4964ea8ec422b7a40ac917d3a344cfd2304baa" integrity sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw== + +zen-observable-ts@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-1.1.0.tgz#2d1aa9d79b87058e9b75698b92791c1838551f83" + integrity sha512-1h4zlLSqI2cRLPJUHJFL8bCWHhkpuXkF+dbGkRaWjgDIG26DmzyshUMrdV/rL3UnR+mhaX4fRq8LPouq0MYYIA== + dependencies: + "@types/zen-observable" "0.8.3" + zen-observable "0.8.15" + +zen-observable@0.8.15: + version "0.8.15" + resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15" + integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==