diff --git a/.github/workflows/dev.yaml b/.github/workflows/dev.yaml index 1558214ef..288631d81 100644 --- a/.github/workflows/dev.yaml +++ b/.github/workflows/dev.yaml @@ -38,7 +38,7 @@ jobs: - name: Install dependencies run: pnpm install --frozen-lockfile - name: Build Alloy - run: pnpm run build + run: pnpm -r run build - name: Run Test run: pnpm run test env: diff --git a/.github/workflows/ee-prd.yml b/.github/workflows/ee-prd.yml deleted file mode 100644 index e143c0b7b..000000000 --- a/.github/workflows/ee-prd.yml +++ /dev/null @@ -1,109 +0,0 @@ -name: Alloy Prod Upstreams -on: - workflow_dispatch: - inputs: - logLevel: - description: "Log level" - required: true - default: "warning" - edgeBasePath: - description: "Edge Base Path" - required: false - default: "ee" -env: - SAUCE_USERNAME: ${{ secrets.SAUCE_USERNAME }} - SAUCE_ACCESS_KEY: ${{ secrets.SAUCE_ACCESS_KEY }} - SAUCE_CAPABILITIES_OVERRIDES_PATH: "sauceLabsCapabilities.json" - ALLOY_ENV: prod - EDGE_BASE_PATH: ${{ github.event.inputs.edgeBasePath }} - -jobs: - store-sauce-configs: - name: Upload sauce configs to artifact - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - env: - repo-token: ${{ secrets.GITHUB_TOKEN }} - - - uses: actions/upload-artifact@v4 - with: - name: sauce-config - path: .sauce - include-hidden-files: true - - - uses: actions/upload-artifact@v4 - with: - name: sauce-ignore - path: .sauceignore - include-hidden-files: true - - alloy-prod-e2e: - name: "ee: Prod E2E Tests" - runs-on: ubuntu-latest - needs: store-sauce-configs - timeout-minutes: 60 - steps: - - name: "Get latest Alloy Release" - id: last_release - uses: InsonusK/get-latest-release@v1.0.1 - with: - myToken: ${{ github.token }} - exclude_types: "draft|prerelease" - - - uses: actions/checkout@v4 - with: - ref: ${{ steps.last_release.outputs.tag_name }} - - - uses: pnpm/action-setup@v4 - with: - version: 10 - - - uses: actions/setup-node@v5 - with: - node-version-file: .nvmrc - - - name: Download sauce config into tags - uses: actions/download-artifact@v4 - with: - name: sauce-config - path: .sauce - - - name: Remove File - uses: JesseTG/rm@v1.0.3 - with: - path: .sauceignore - - - uses: actions/download-artifact@v4 - with: - name: sauce-ignore - path: . - - - name: Store Alloy version into env - uses: nyaa8/package-version@v1 - - - name: Install dependencies - run: pnpm install --frozen-lockfile - - - name: Build - run: pnpm run test:functional:build:prod - env: - ALLOY_PROD_VERSION: ${{ env.PACKAGE_VERSION }} - - - uses: saucelabs/saucectl-run-action@v4.3.0 - env: - GITHUB_TOKEN: ${{ github.token }} - EDGE_BASE_PATH: ${{ github.event.inputs.edgeBasePath }} - with: - sauce-username: ${{ secrets.SAUCE_USERNAME }} - sauce-access-key: ${{ secrets.SAUCE_ACCESS_KEY }} - env: | - SAUCE_USERNAME=${{ secrets.SAUCE_USERNAME }} - SAUCE_ACCESS_KEY=${{ secrets.SAUCE_ACCESS_KEY }} - ALLOY_PROD_VERSION=${{ env.PACKAGE_VERSION }} - NPM_PACKAGE_VERSION=${{ env.PACKAGE_VERSION }} - ALLOY_ENV=prod - EDGE_BASE_PATH=${{ github.event.inputs.edgeBasePath }} - config-file: ./.sauce/ee-prd.yml diff --git a/.github/workflows/generate-coverage-report.yaml b/.github/workflows/generate-coverage-report.yaml index 48c165505..1bfebc67d 100644 --- a/.github/workflows/generate-coverage-report.yaml +++ b/.github/workflows/generate-coverage-report.yaml @@ -32,7 +32,7 @@ jobs: run: pnpm install --frozen-lockfile - name: Build Alloy - run: pnpm run build + run: pnpm -r run build - name: Run Unit Test with coverage run: pnpm run test:coverage diff --git a/.github/workflows/main_alloyio.yml b/.github/workflows/main_alloyio.yml index fd3e8370b..c6e46d13a 100644 --- a/.github/workflows/main_alloyio.yml +++ b/.github/workflows/main_alloyio.yml @@ -29,7 +29,7 @@ jobs: run: pnpm install --frozen-lockfile - name: Build alloy.js - run: pnpm exec rollup -c --environment SANDBOX + run: pnpm --filter @adobe/alloy exec rollup -c --environment SANDBOX - name: Build sandbox run: pnpm --filter @adobe/alloy-sandbox-browser run build diff --git a/.github/workflows/pre-edge-deploy.yaml b/.github/workflows/pre-edge-deploy.yaml deleted file mode 100644 index 3ff53039c..000000000 --- a/.github/workflows/pre-edge-deploy.yaml +++ /dev/null @@ -1,106 +0,0 @@ -name: Alloy Prod Pre-Edge -on: - workflow_dispatch: - inputs: - logLevel: - description: "Log level" - required: true - default: "warning" -env: - SAUCE_USERNAME: ${{ secrets.SAUCE_USERNAME }} - SAUCE_ACCESS_KEY: ${{ secrets.SAUCE_ACCESS_KEY }} - SAUCE_CAPABILITIES_OVERRIDES_PATH: "sauceLabsCapabilities.json" - ALLOY_ENV: prod - EDGE_BASE_PATH: ee-pre-prd - -jobs: - store-sauce-configs: - name: Upload sauce configs to artifact - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - env: - repo-token: ${{ secrets.GITHUB_TOKEN }} - - - name: Upload sauce configs - uses: actions/upload-artifact@v4.4.0 - with: - name: sauce-config - path: .sauce - include-hidden-files: true - - - name: Upload sauce ignore - uses: actions/upload-artifact@v4.4.0 - with: - name: sauce-ignore - path: .sauceignore - include-hidden-files: true - - alloy-prod-e2e: - name: "Pre Edge: Prod E2E Tests" - runs-on: ubuntu-latest - needs: store-sauce-configs - timeout-minutes: 60 - steps: - - name: "Get latest Alloy Release" - id: last_release - uses: InsonusK/get-latest-release@v1.0.1 - with: - myToken: ${{ github.token }} - exclude_types: "draft|prerelease" - - - uses: actions/checkout@v4 - with: - ref: refs/heads/${{ steps.last_release.outputs.tag_name }} - - - name: Download sauce config into tags - uses: actions/download-artifact@v4 - with: - name: sauce-config - path: .sauce - - - name: Remove File - uses: JesseTG/rm@v1.0.3 - with: - path: .sauceignore - - - uses: actions/download-artifact@v4 - with: - name: sauce-ignore - path: . - - - uses: pnpm/action-setup@v4 - with: - version: 10 - - - name: Set up Node.js version - uses: actions/setup-node@v5 - with: - node-version-file: .nvmrc - - - name: Store Alloy version into env - uses: nyaa8/package-version@v1 - - - name: Install dependencies - run: pnpm install --frozen-lockfile - - - name: Build - run: pnpm run test:functional:build:prod - env: - ALLOY_PROD_VERSION: ${{ env.PACKAGE_VERSION }} - - - uses: saucelabs/saucectl-run-action@v4.3.0 - env: - GITHUB_TOKEN: ${{ github.token }} - with: - sauce-username: ${{ secrets.SAUCE_USERNAME }} - sauce-access-key: ${{ secrets.SAUCE_ACCESS_KEY }} - env: | - SAUCE_USERNAME=${{ secrets.SAUCE_USERNAME }} - SAUCE_ACCESS_KEY=${{ secrets.SAUCE_ACCESS_KEY }} - ALLOY_PROD_VERSION=${{ env.PACKAGE_VERSION }} - NPM_PACKAGE_VERSION=${{ env.PACKAGE_VERSION }} - ALLOY_ENV=prod - config-file: ./.sauce/pre-edge-deploy.yml diff --git a/.github/workflows/prod.yml b/.github/workflows/prod.yml deleted file mode 100644 index 6c54c3137..000000000 --- a/.github/workflows/prod.yml +++ /dev/null @@ -1,303 +0,0 @@ -name: Production regression tests -on: - schedule: - - cron: "45 20 * * 1-6" - workflow_dispatch: -permissions: - contents: read - issues: read - packages: none -env: - SAUCE_USERNAME: ${{ secrets.SAUCE_USERNAME }} - SAUCE_ACCESS_KEY: ${{ secrets.SAUCE_ACCESS_KEY }} - SAUCE_CAPABILITIES_OVERRIDES_PATH: "sauceLabsCapabilities.json" - SAUCE_JOB: "Alloy Prod Workflow" - ALLOY_ENV: prod - -jobs: - get-testing-tags: - name: Fetch releases - runs-on: ubuntu-latest - outputs: - MATRIX_INPUT: ${{ steps.retrieve-tags.outputs.MATRIX_INPUT }} - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - uses: pnpm/action-setup@v4 - with: - version: 10 - - name: Set up Node.js - uses: actions/setup-node@v5 - with: - node-version-file: .nvmrc - - run: pnpm i --frozen-lockfile - - name: Upload sauce configs - uses: actions/upload-artifact@v4.4.0 - with: - name: sauce-config - path: .sauce - include-hidden-files: true - - name: Upload sauce ignore - uses: actions/upload-artifact@v4.4.0 - with: - name: sauce-ignore - path: .sauceignore - include-hidden-files: true - - name: Retrieve tags - id: retrieve-tags - run: |- - TAGS_TO_TEST=$(node -e "import('./scripts/getTestingTags.js').then(m => m.default().then(tags => console.log(JSON.stringify(tags))))") - echo "Tags to test: $TAGS_TO_TEST" - MATRIX_INPUT="{\"include\":$TAGS_TO_TEST}" - echo "MATRIX_INPUT=$MATRIX_INPUT" >> "$GITHUB_OUTPUT" - - alloy-prod-e2e-safari: - name: Safari - needs: get-testing-tags - runs-on: ubuntu-latest - timeout-minutes: 60 - strategy: - max-parallel: 10 - fail-fast: false - matrix: ${{ fromJSON(needs.get-testing-tags.outputs.MATRIX_INPUT) }} - continue-on-error: true - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - ref: ${{ matrix.tag.tag }} - - uses: pnpm/action-setup@v4 - with: - version: 10 - - name: Set up Node.js - uses: actions/setup-node@v5 - with: - node-version-file: .nvmrc - - name: Install dependencies - run: pnpm install --frozen-lockfile - - name: Store Alloy version - uses: nyaa8/package-version@v1 - - name: Download sauce configs - uses: actions/download-artifact@v4 - with: - name: sauce-config - path: .sauce - - name: Download sauce ignore - uses: actions/download-artifact@v4 - with: - name: sauce-ignore - path: . - - name: Build - run: | - echo "PACKAGE_VERSION=$(pnpm pkg get version | tr -d '\"')" >> $GITHUB_ENV - pnpm run test:functional:build:prod - env: - ALLOY_PROD_VERSION: ${{ env.PACKAGE_VERSION }} - BASE_CODE_MIN: true - NPM_PACKAGE_PROD: true - - name: Update Sauce Config with Node - run: | - sed -i 's/"$NODE_VERSION"/"${{ matrix.tag.nodeVersion }}"/g' .sauce/prod-safari.yml - - name: Run Functional Tests - id: saucectl - uses: saucelabs/saucectl-run-action@v4.3.0 - env: - GITHUB_TOKEN: ${{ github.token }} - with: - sauce-username: ${{ secrets.SAUCE_USERNAME }} - sauce-access-key: ${{ secrets.SAUCE_ACCESS_KEY }} - env: | - SAUCE_USERNAME=${{ secrets.SAUCE_USERNAME }} - SAUCE_ACCESS_KEY=${{ secrets.SAUCE_ACCESS_KEY }} - ALLOY_PROD_VERSION=${{ env.PACKAGE_VERSION }} - NPM_PACKAGE_VERSION=${{ env.PACKAGE_VERSION }} - ALLOY_ENV=prod - config-file: ./.sauce/prod-safari.yml - - - name: Get Saucelabs Test Results - if: failure() - id: saucelabs-results - env: - SAUCE_USERNAME: ${{ secrets.SAUCE_USERNAME }} - SAUCE_ACCESS_KEY: ${{ secrets.SAUCE_ACCESS_KEY }} - run: | - mkdir -p test-results - if [ -d "./test-results" ] && [ "$(ls -A ./test-results)" ]; then - cp -r ./test-results/* ./test-results/ - echo "TEST_RESULTS<> $GITHUB_ENV - cat ./test-results/* >> $GITHUB_ENV - echo "EOF" >> $GITHUB_ENV - else - echo "TEST_RESULTS=No test results found in ./test-results/" >> $GITHUB_ENV - fi - - - name: Handle Test Failures - if: failure() - uses: actions/github-script@v7 - with: - github-token: ${{secrets.GITHUB_TOKEN}} - script: | - const handleTestFailures = require('./.github/scripts/handle-test-failures.js'); - await handleTestFailures({ github, context, browser: 'safari' }); - - alloy-prod-e2e-firefox: - name: Firefox - needs: get-testing-tags - runs-on: ubuntu-latest - timeout-minutes: 60 - strategy: - max-parallel: 10 - fail-fast: false - matrix: ${{ fromJSON(needs.get-testing-tags.outputs.MATRIX_INPUT) }} - continue-on-error: true - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - ref: ${{ matrix.tag.tag }} - - uses: pnpm/action-setup@v4 - with: - version: 10 - - name: Set up Node.js - uses: actions/setup-node@v5 - with: - node-version-file: .nvmrc - - name: Install dependencies - run: pnpm install --frozen-lockfile - - name: Store Alloy version - uses: nyaa8/package-version@v1 - - name: Download sauce configs - uses: actions/download-artifact@v4 - with: - name: sauce-config - path: .sauce - - name: Download sauce ignore - uses: actions/download-artifact@v4 - with: - name: sauce-ignore - path: . - - name: Build - run: | - echo "PACKAGE_VERSION=$(pnpm pkg get version | tr -d '\"')" >> $GITHUB_ENV - pnpm run test:functional:build:prod - env: - ALLOY_PROD_VERSION: ${{ env.PACKAGE_VERSION }} - BASE_CODE_MIN: true - NPM_PACKAGE_PROD: true - - name: Update Sauce Config with Node - run: | - sed -i 's/"$NODE_VERSION"/"${{ matrix.tag.nodeVersion }}"/g' .sauce/prod-firefox.yml - - name: Run Functional Tests - id: saucectl - uses: saucelabs/saucectl-run-action@v4.3.0 - env: - GITHUB_TOKEN: ${{ github.token }} - with: - sauce-username: ${{ secrets.SAUCE_USERNAME }} - sauce-access-key: ${{ secrets.SAUCE_ACCESS_KEY }} - env: | - SAUCE_USERNAME=${{ secrets.SAUCE_USERNAME }} - SAUCE_ACCESS_KEY=${{ secrets.SAUCE_ACCESS_KEY }} - ALLOY_PROD_VERSION=${{ env.PACKAGE_VERSION }} - NPM_PACKAGE_VERSION=${{ env.PACKAGE_VERSION }} - ALLOY_ENV=prod - config-file: ./.sauce/prod-firefox.yml - - - name: Get Saucelabs Test Results - if: failure() - id: saucelabs-results - env: - SAUCE_USERNAME: ${{ secrets.SAUCE_USERNAME }} - SAUCE_ACCESS_KEY: ${{ secrets.SAUCE_ACCESS_KEY }} - run: | - mkdir -p test-results - if [ -d "./test-results" ] && [ "$(ls -A ./test-results)" ]; then - cp -r ./test-results/* ./test-results/ - echo "TEST_RESULTS<> $GITHUB_ENV - cat ./test-results/* >> $GITHUB_ENV - echo "EOF" >> $GITHUB_ENV - else - echo "TEST_RESULTS=No test results found in ./test-results/" >> $GITHUB_ENV - fi - - - name: Handle Test Failures - if: failure() - uses: actions/github-script@v7 - with: - github-token: ${{secrets.GITHUB_TOKEN}} - script: | - const handleTestFailures = require('./.github/scripts/handle-test-failures.js'); - await handleTestFailures({ github, context, browser: 'firefox' }); - - alloy-prod-e2e-chrome: - name: Chrome - needs: get-testing-tags - runs-on: ubuntu-latest - timeout-minutes: 60 - strategy: - max-parallel: 10 - fail-fast: false - matrix: ${{ fromJSON(needs.get-testing-tags.outputs.MATRIX_INPUT) }} - continue-on-error: true - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - ref: ${{ matrix.tag.tag }} - - uses: pnpm/action-setup@v4 - with: - version: 10 - - name: Set up Node.js - uses: actions/setup-node@v5 - with: - node-version-file: .nvmrc - - name: Install dependencies - run: pnpm install --frozen-lockfile - - name: Store Alloy version - uses: nyaa8/package-version@v1 - - name: Download sauce configs - uses: actions/download-artifact@v4 - with: - name: sauce-config - path: .sauce - - name: Download sauce ignore - uses: actions/download-artifact@v4 - with: - name: sauce-ignore - path: . - - name: Build - run: | - echo "PACKAGE_VERSION=$(pnpm pkg get version | tr -d '\"')" >> $GITHUB_ENV - pnpm run test:functional:build:prod - env: - ALLOY_PROD_VERSION: ${{ env.PACKAGE_VERSION }} - BASE_CODE_MIN: true - NPM_PACKAGE_PROD: true - - name: Update Sauce Config with Node - run: | - sed -i 's/"$NODE_VERSION"/"${{ matrix.tag.nodeVersion }}"/g' .sauce/prod-chrome.yml - - name: Run Functional Tests - id: saucectl - uses: saucelabs/saucectl-run-action@v4.3.0 - env: - GITHUB_TOKEN: ${{ github.token }} - with: - sauce-username: ${{ secrets.SAUCE_USERNAME }} - sauce-access-key: ${{ secrets.SAUCE_ACCESS_KEY }} - env: | - SAUCE_USERNAME=${{ secrets.SAUCE_USERNAME }} - SAUCE_ACCESS_KEY=${{ secrets.SAUCE_ACCESS_KEY }} - ALLOY_PROD_VERSION=${{ env.PACKAGE_VERSION }} - NPM_PACKAGE_VERSION=${{ env.PACKAGE_VERSION }} - ALLOY_ENV=prod - config-file: ./.sauce/prod-chrome.yml - - - name: Handle Test Failures - if: failure() - uses: actions/github-script@v7 - with: - github-token: ${{secrets.GITHUB_TOKEN}} - script: | - const handleTestFailures = require('./.github/scripts/handle-test-failures.js'); - await handleTestFailures({ github, context, browser: 'chrome' }); diff --git a/.testcaferc.json b/.testcaferc.json deleted file mode 100644 index 466cba371..000000000 --- a/.testcaferc.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "src": "packages/**/test/functional/specs/**/*.{mjs,js}", - "skipJsErrors": true, - "disablePageCaching": true -} diff --git a/bundlesize.json b/bundlesize.json deleted file mode 100644 index 110543e84..000000000 --- a/bundlesize.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "distTest/baseCode.min.js": { - "uncompressedSize": 199, - "gzippedSize": 164, - "brotiliSize": 133 - }, - "dist/alloy.js": { - "uncompressedSize": 722402, - "gzippedSize": 115705, - "brotiliSize": 88863 - }, - "dist/alloy.min.js": { - "uncompressedSize": 150926, - "gzippedSize": 49837, - "brotiliSize": 43099 - }, - "dist/alloyServiceWorker.js": { - "uncompressedSize": 16618, - "gzippedSize": 4024, - "brotiliSize": 3403 - }, - "dist/alloyServiceWorker.min.js": { - "uncompressedSize": 5302, - "gzippedSize": 2514, - "brotiliSize": 2115 - } -} \ No newline at end of file diff --git a/eslint.config.js b/eslint.config.js index cf98e5c42..c13b5dd15 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -28,7 +28,6 @@ export default defineConfig([ importPlugin.flatConfigs.recommended, pluginJs.configs.recommended, eslintPluginPrettierRecommended, - compatPlugin.configs["flat/recommended"], globalIgnores([ "sandboxes/**/build/", "sandboxes/**/public/", @@ -144,7 +143,7 @@ export default defineConfig([ }, { name: "alloy/core-src", - files: ["packages/core/src/**/*.{cjs,js}"], + files: ["packages/*/src/**/*.{cjs,js}"], rules: { "import/no-extraneous-dependencies": [ "error", @@ -225,9 +224,32 @@ export default defineConfig([ ], }, }, + + { + name: "alloy/browser", + files: [ + "packages/browser/**/*.{cjs,js,mjs,jsx}", + "sandboxes/browser/**/*.{cjs,js,mjs,jsx}", + "packages/core/**/*.{cjs,js,mjs,jsx}", // TODO: Remove this once browser APIs are removed from core. + ], + plugins: { + compat: compatPlugin, + }, + rules: { + ...compatPlugin.configs["flat/recommended"].rules, + }, + languageOptions: { + globals: { + ...globals.browser, + }, + }, + }, { name: "alloy/scripts", - files: ["scripts/**/*.{cjs,js}"], + files: [ + "scripts/**/*.{cjs,js,mjs}", + "packages/*/scripts/**/*.{cjs,js,mjs}", + ], languageOptions: { globals: { ...globals.node, @@ -272,6 +294,9 @@ export default defineConfig([ { name: "alloy/tests/functional", files: ["packages/**/test/functional/**/*.{cjs,js}"], + settings: { + "import/core-modules": ["@adobe/alloy", "testcafe", "uuid"], + }, languageOptions: { globals: { test: "readonly", @@ -303,11 +328,13 @@ export default defineConfig([ }, plugins: { react, + compat: compatPlugin, }, rules: { ...react.configs.recommended.rules, ...react.configs["jsx-runtime"].rules, "react/prop-types": "off", + ...compatPlugin.configs["flat/recommended"].rules, }, }, // Vite plugins are ESM-only and confuse eslint-plugin-import; disable the diff --git a/jsconfig.base.json b/jsconfig.base.json new file mode 100644 index 000000000..251eca188 --- /dev/null +++ b/jsconfig.base.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "module": "ES2020", + "moduleResolution": "bundler", + "target": "ES2020", + "checkJs": true, + "allowJs": true, + "resolveJsonModule": true, + "skipLibCheck": true + }, + "exclude": ["node_modules", "dist", "distTest"] +} diff --git a/package.json b/package.json index a3b8daeef..446fb376c 100644 --- a/package.json +++ b/package.json @@ -1,29 +1,11 @@ { - "name": "@adobe/alloy", - "version": "2.31.1", - "description": "Adobe Experience Platform Web SDK", + "name": "adobe-alloy-monorepo", + "version": "0.0.1", + "private": true, "type": "module", - "main": "libEs5/index.js", - "module": "libEs6/index.js", - "types": "types/index.d.ts", - "files": [ - "libEs5", - "libEs6", - "types", - "LICENSE_BANNER", - "babel.config.js", - "rollup.config.js", - ".browserslistrc", - "scripts/helpers/entryPointGeneratorBabelPlugin.js", - "scripts/helpers/versionBabelPlugin.js", - "scripts/helpers/path.js" - ], - "bin": { - "alloyBuilder": "scripts/alloyBuilder.js" - }, "scripts": { - "clean": "rimraf dist distTest libEs5 libEs6 types", - "lint": "eslint --cache --fix \"*.{js,cjs,mjs,jsx}\" \"{sandboxes/*/src,packages/*/src,test,scripts}/**/*.{js,cjs,mjs,jsx}\"", + "clean": "pnpm -r --if-present run clean && rimraf coverage", + "lint": "eslint --cache --fix \"*.{js,cjs,mjs,jsx}\" \"{sandboxes/*/src,packages/*/{src,test,scripts}}/**/*.{js,cjs,mjs,jsx}\"", "format": "prettier --write \"*.{html,js,cjs,mjs,jsx}\" \"{sandboxes/*/src,packages/*/{src,test,scripts}}/**/*.{html,js,cjs,mjs,jsx}\"", "types": "tsc", "test": "pnpm exec playwright install chromium && vitest run && pnpm run test:scripts", @@ -36,19 +18,8 @@ "test:integration:debug": "pnpm exec playwright install chromium && vitest --no-file-parallelism --project=integration --browser=chromium --browser.provider=playwright --browser.headless=false", "test:integration:watch": "pnpm exec playwright install chromium && vitest --project=integration", "test:integration:coverage": "pnpm exec playwright install chromium && vitest run --coverage --project=integration", - "test:functional": "pnpm exec playwright install chromium && EDGE_BASE_PATH=\"ee-pre-prd\" ALLOY_ENV=\"int\" testcafe chromium", - "test:functional:custom": "node scripts/helpers/runFunctionalTests.js", - "test:functional:watch": "pnpm exec playwright install chromium && EDGE_BASE_PATH=\"ee-pre-prd\" ALLOY_ENV=\"int\" ./scripts/watchFunctionalTests.js --browsers chromium", - "test:functional:debug": "pnpm exec playwright install chromium && EDGE_BASE_PATH=\"ee-pre-prd\" ALLOY_ENV=\"int\" testcafe --inspect-brk chromium", - "test:functional:build:int": "rollup -c --environment BASE_CODE_MIN,STANDALONE,NPM_PACKAGE_LOCAL", - "test:functional:build:prod": "rollup -c --environment BASE_CODE_MIN,NPM_PACKAGE_PROD", "test:scripts": "vitest run --config=./scripts/specs/vitest.config.js", - "dev": "concurrently --names build,sandbox \"rollup -c -w --environment SANDBOX_SERVICE_WORKER\" \"REACT_APP_NONCE=123 pnpm run --filter @adobe/alloy-sandbox-browser start\"", - "build": "pnpm run clean && rollup -c --environment BASE_CODE_MIN,STANDALONE,STANDALONE_MIN,SERVICE_WORKER,SERVICE_WORKER_MIN && echo \"Base Code:\" && cat distTest/baseCode.min.js", - "build:watch": "pnpm run clean && rollup -c --watch --environment BASE_CODE_MIN,STANDALONE", - "build:custom": "node scripts/alloyBuilder.js", "prepare": "husky", - "prepack": "pnpm run clean && babel packages/core/src -d libEs5 --env-name npmEs5 && babel packages/core/src -d libEs6 --env-name npmEs6 && echo '{\"type\":\"commonjs\"}' > libEs5/package.json && echo '{\"type\":\"module\"}' > libEs6/package.json && pnpm run types", "checkthattestfilesexist": "./scripts/checkThatTestFilesExist.js" }, "lint-staged": { @@ -61,7 +32,7 @@ "./*.{html,js,cjs,mjs,jsx}": [ "prettier --write" ], - "./{sandboxes/browser,packages/*/{src,test,scripts}}/**/*.{html,js,cjs,mjs,jsx}": [ + "./{sandboxes/*,packages/*/{src,test,scripts}}/**/*.{html,js,cjs,mjs,jsx}": [ "prettier --write" ] }, @@ -71,62 +42,35 @@ }, "author": "Adobe Inc.", "license": "Apache-2.0", - "dependencies": { - "@adobe/aep-rules-engine": "^3.1.1", - "@adobe/reactor-query-string": "^2.0.0", - "@babel/core": "^7.28.5", - "@babel/plugin-transform-template-literals": "^7.27.1", - "@babel/preset-env": "^7.28.5", - "@inquirer/prompts": "^7.9.0", - "@rollup/plugin-babel": "^6.1.0", - "@rollup/plugin-commonjs": "^29.0.0", - "@rollup/plugin-node-resolve": "^16.0.3", - "@rollup/plugin-terser": "^0.4.4", - "commander": "^14.0.2", - "js-cookie": "3.0.5", - "rollup": "^4.52.5", - "rollup-plugin-license": "^3.6.0", - "uuid": "^13.0.0" - }, "devDependencies": { - "@adobe/alloy": "next", - "@babel/cli": "^7.28.3", - "@babel/plugin-transform-modules-commonjs": "^7.27.1", - "@changesets/changelog-github": "^0.5.2", "@changesets/cli": "^2.29.8", - "@eslint/js": "^9.38.0", + "@eslint/js": "^9.39.2", "@octokit/rest": "^22.0.1", - "@types/node": "^24.9.1", - "@vitest/browser-playwright": "^4.0.6", - "@vitest/coverage-v8": "^4.0.6", - "@vitest/eslint-plugin": "^1.4.0", + "@types/node": "^24.10.4", + "@vitest/browser-playwright": "^4.0.16", + "@vitest/coverage-v8": "^4.0.16", + "@vitest/eslint-plugin": "^1.6.5", + "baseline-browser-mapping": "^2.9.11", "chalk": "^5.6.2", - "concurrently": "^9.2.1", "date-fns": "^4.1.0", - "eslint": "^9.39.0", + "eslint": "^9.39.2", "eslint-config-prettier": "^10.1.8", "eslint-plugin-compat": "^6.0.2", "eslint-plugin-import": "^2.32.0", "eslint-plugin-prettier": "^5.5.4", "eslint-plugin-react": "^7.37.5", - "glob": "^11.0.3", + "glob": "^11.1.0", "globals": "^16.5.0", "husky": "^9.1.7", - "lint-staged": "^16.2.6", + "lint-staged": "^16.2.7", "minimatch": "^10.1.1", - "msw": "^2.11.6", - "playwright": "^1.56.1", - "prettier": "^3.6.2", - "read-cache": "^1.0.0", + "playwright": "^1.57.0", + "prettier": "^3.7.4", "recursive-readdir": "^2.2.3", - "rimraf": "^6.1.0", + "rimraf": "^6.1.2", "semver": "^7.7.3", - "testcafe": "^3.7.2", - "testcafe-browser-provider-playwright": "^1.1.0", "typescript": "^5.9.3", - "vitest": "^4.0.6" - }, - "optionalDependencies": { - "@rollup/rollup-linux-x64-gnu": "^4.52.5" + "url-exists-nodejs": "^0.2.4", + "vitest": "^4.0.16" } } diff --git a/.browserslistrc b/packages/browser/.browserslistrc similarity index 100% rename from .browserslistrc rename to packages/browser/.browserslistrc diff --git a/packages/browser/.gitignore b/packages/browser/.gitignore new file mode 100644 index 000000000..3f50aa717 --- /dev/null +++ b/packages/browser/.gitignore @@ -0,0 +1 @@ +src/input.js diff --git a/packages/browser/.testcaferc.json b/packages/browser/.testcaferc.json new file mode 100644 index 000000000..c2fd297c6 --- /dev/null +++ b/packages/browser/.testcaferc.json @@ -0,0 +1,6 @@ +{ + "src": "test/functional/specs/**/*.{mjs,js}", + "skipJsErrors": true, + "disablePageCaching": true +} + diff --git a/packages/browser/LICENSE_BANNER b/packages/browser/LICENSE_BANNER new file mode 100644 index 000000000..34ed6b2da --- /dev/null +++ b/packages/browser/LICENSE_BANNER @@ -0,0 +1,9 @@ +Copyright 2019 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. diff --git a/babel.config.js b/packages/browser/babel.config.js similarity index 97% rename from babel.config.js rename to packages/browser/babel.config.js index 470746ad4..472f39aa9 100644 --- a/babel.config.js +++ b/packages/browser/babel.config.js @@ -44,7 +44,7 @@ const transformModulesCommonjsPlugin = [ }, ]; -const npmIgnoreFiles = ["packages/core/src/baseCode.js"]; +const npmIgnoreFiles = ["src/baseCode.js"]; export default { env: { diff --git a/packages/browser/bundlesize.json b/packages/browser/bundlesize.json new file mode 100644 index 000000000..9a5ccfd88 --- /dev/null +++ b/packages/browser/bundlesize.json @@ -0,0 +1,27 @@ +{ + "dist/alloy.js": { + "uncompressedSize": 731402, + "gzippedSize": 118151, + "brotiliSize": 90586 + }, + "dist/alloy.min.js": { + "uncompressedSize": 152630, + "gzippedSize": 50370, + "brotiliSize": 43578 + }, + "dist/alloyServiceWorker.js": { + "uncompressedSize": 18454, + "gzippedSize": 4330, + "brotiliSize": 3675 + }, + "dist/alloyServiceWorker.min.js": { + "uncompressedSize": 5611, + "gzippedSize": 2605, + "brotiliSize": 2185 + }, + "distTest/baseCode.min.js": { + "uncompressedSize": 199, + "gzippedSize": 164, + "brotiliSize": 133 + } +} \ No newline at end of file diff --git a/packages/browser/jsconfig.json b/packages/browser/jsconfig.json new file mode 100644 index 000000000..4b8995d8a --- /dev/null +++ b/packages/browser/jsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../../jsconfig.base.json", + "compilerOptions": { + "paths": { + "@adobe/alloy-core": ["../core/src/index.js"], + "@adobe/alloy-core/*": ["../core/src/*"] + } + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist", "distTest", "src/input.js"] +} diff --git a/packages/browser/package.json b/packages/browser/package.json new file mode 100644 index 000000000..77808388b --- /dev/null +++ b/packages/browser/package.json @@ -0,0 +1,84 @@ +{ + "name": "@adobe/alloy", + "version": "2.30.1-beta.18", + "description": "Adobe Experience Platform Web SDK", + "type": "module", + "repository": { + "type": "git", + "url": "git+https://github.com/adobe/alloy.git", + "directory": "packages/browser" + }, + "author": "Adobe Inc.", + "license": "Apache-2.0", + "bin": { + "alloyBuilder": "scripts/alloyBuilder.js" + }, + "files": [ + "src", + "dist", + "scripts/alloyBuilder.js", + "scripts/helpers/entryPointGeneratorBabelPlugin.js", + "scripts/helpers/path.js", + "rollup.config.js", + "babel.config.js", + ".browserslistrc", + "LICENSE_BANNER" + ], + "scripts": { + "build:clean": "rimraf dist distTest", + "build:types": "tsc -p jsconfig.json --declaration --emitDeclarationOnly --outDir dist/types --checkJs false --noEmit false", + "build": "pnpm run build:clean && rollup -c --environment BASE_CODE_MIN,STANDALONE,STANDALONE_MIN,SERVICE_WORKER,SERVICE_WORKER_MIN,BUNDLESIZE && pnpm run build:types", + "build:watch": "pnpm run build:clean && rollup -c --watch --environment BASE_CODE_MIN,STANDALONE", + "build:custom": "node scripts/alloyBuilder.js", + "test:functional": "pnpm exec playwright install chromium && EDGE_BASE_PATH=\"ee-pre-prd\" ALLOY_ENV=\"int\" testcafe playwright:chromium", + "test:functional:custom": "node ./scripts/runFunctionalTests.js", + "test:functional:watch": "pnpm exec playwright install chromium && EDGE_BASE_PATH=\"ee-pre-prd\" ALLOY_ENV=\"int\" ../../scripts/watchFunctionalTests.js --browsers playwright:chromium", + "test:functional:debug": "pnpm exec playwright install chromium && EDGE_BASE_PATH=\"ee-pre-prd\" ALLOY_ENV=\"int\" testcafe --inspect-brk playwright:chromium", + "test:functional:build:int": "rollup -c --environment BASE_CODE_MIN,FUNCTIONAL_TEST_LOCAL,FUNCTIONAL_TEST_LOCAL_MIN", + "test:functional:build:prod": "rollup -c --environment FUNCTIONAL_TEST_PROD,FUNCTIONAL_TEST_PROD_MIN" + }, + "exports": { + ".": { + "types": "./dist/types/browser/src/index.d.ts", + "default": "./src/index.js" + }, + "./baseCode.js": { + "types": "./dist/types/browser/src/baseCode/index.d.ts", + "default": "./src/baseCode/index.js" + }, + "./standalone.js": { + "types": "./dist/types/browser/src/standalone.d.ts", + "default": "./src/standalone.js" + }, + "./serviceWorker.js": { + "types": "./dist/types/browser/src/serviceWorker.d.ts", + "default": "./src/serviceWorker.js" + } + }, + "dependencies": { + "@adobe/alloy-core": "workspace:^", + "@babel/core": "^7.28.5", + "@babel/plugin-transform-modules-commonjs": "^7.27.1", + "@babel/plugin-transform-template-literals": "^7.27.1", + "@babel/preset-env": "^7.28.5", + "@inquirer/prompts": "^7.9.0", + "@rollup/plugin-babel": "^6.1.0", + "@rollup/plugin-commonjs": "^29.0.0", + "@rollup/plugin-node-resolve": "^16.0.3", + "@rollup/plugin-terser": "^0.4.4", + "commander": "^14.0.2", + "rollup": "^4.52.5", + "rollup-plugin-license": "^3.6.0" + }, + "devDependencies": { + "@babel/cli": "^7.28.3", + "glob": "^11.0.3", + "msw": "^2.11.6", + "read-cache": "^1.0.0", + "rimraf": "^6.1.0", + "testcafe": "^3.7.2", + "testcafe-browser-provider-playwright": "^1.1.0", + "uuid": "^13.0.0", + "vitest": "^4.0.6" + } +} diff --git a/rollup.config.js b/packages/browser/rollup.config.js similarity index 80% rename from rollup.config.js rename to packages/browser/rollup.config.js index 8749d9dc9..1b44fed9d 100644 --- a/rollup.config.js +++ b/packages/browser/rollup.config.js @@ -55,7 +55,7 @@ const bundleSizePlugin = (_options = {}) => { * @param {import("node:zlib").BrotliOptions={}} options * @returns {number} size in bytes */ - const getBrotiliSize = async (source, opts = {}) => { + const getBrotliSize = async (source, opts = {}) => { const compressed = await brotliCompress(source, opts); const byteSize = Number.parseInt(compressed.byteLength, 10); return byteSize; @@ -75,12 +75,12 @@ const bundleSizePlugin = (_options = {}) => { Object.values(bundle) .filter((outputFile) => outputFile.type === "chunk") .map(async (chunk) => ({ - fileName: rollupOptions.file, + fileName: path.relative(dirname, rollupOptions.file), uncompressedSize: Buffer.from(chunk.code).byteLength, gzippedSize: await getGzippedSize(chunk.code, { level: options.gzipCompressionLevel, }), - brotiliSize: await getBrotiliSize(chunk.code, { + brotiliSize: await getBrotliSize(chunk.code, { params: { [zlibConstants.BROTLI_PARAM_QUALITY]: options.brotliCompressionLevel, @@ -123,18 +123,14 @@ const bundleSizePlugin = (_options = {}) => { const BASE_CODE = "BASE_CODE"; // build the standalone distribution const STANDALONE = "STANDALONE"; -// build the standalone distribution, but put it in the sandbox directory -const SANDBOX = "SANDBOX"; -// build the npm package entrypoint (createInstance) -const NPM_PACKAGE_LOCAL = "NPM_PACKAGE_LOCAL"; -// build from the published npm package -const NPM_PACKAGE_PROD = "NPM_PACKAGE_PROD"; +// build the npm package entrypoint (createInstance) for functional tests +const FUNCTIONAL_TEST_LOCAL = "FUNCTIONAL_TEST_LOCAL"; +// build from the published npm package for functional tests +const FUNCTIONAL_TEST_PROD = "FUNCTIONAL_TEST_PROD"; // build the standalone distrobution, but exclude some (specified) modules const CUSTOM_BUILD = "CUSTOM_BUILD"; // build the service worker (used for push notifications feature). const SERVICE_WORKER = "SERVICE_WORKER"; -// build the service worker (used for push notifications feature). -const SANDBOX_SERVICE_WORKER = "SANDBOX_SERVICE_WORKER"; // Add "_MIN" to the end of the option name to build the minified version const dirname = path.dirname(fileURLToPath(import.meta.url)); @@ -150,7 +146,7 @@ const buildPlugins = ({ variant, minify, babelPlugins }) => { commonjs(), ]; - if (variant !== SERVICE_WORKER && variant !== SANDBOX_SERVICE_WORKER) { + if (variant !== SERVICE_WORKER) { plugins.push( babel({ envName: "rollup", @@ -164,7 +160,7 @@ const buildPlugins = ({ variant, minify, babelPlugins }) => { if (INCLUDE_BUNDLESIZE) { plugins.push( bundleSizePlugin({ - output: "bundlesize.json", + outputFile: path.resolve(dirname, "bundlesize.json"), }), ); } @@ -211,23 +207,19 @@ export const buildConfig = ({ variant = STANDALONE, minify = false, babelPlugins = [], - input = `${dirname}/packages/core/src/standalone.js`, + input = `${dirname}/src/standalone.js`, file, }) => { const plugins = buildPlugins({ variant, minify, babelPlugins }); const minifiedExtension = minify ? ".min" : ""; - if (variant === SERVICE_WORKER || variant === SANDBOX_SERVICE_WORKER) { - const destDirectory = - variant === SANDBOX_SERVICE_WORKER - ? "sandboxes/browser/public/" - : "dist/"; + if (variant === SERVICE_WORKER) { return { - input: `${dirname}/packages/core/src/serviceWorker.js`, + input: `${dirname}/src/serviceWorker.js`, output: [ { file: - file || `${destDirectory}alloyServiceWorker${minifiedExtension}.js`, + file || `${dirname}/dist/alloyServiceWorker${minifiedExtension}.js`, format: "es", }, ], @@ -237,10 +229,10 @@ export const buildConfig = ({ if (variant === BASE_CODE) { return { - input: `${dirname}/packages/core/src/baseCode.js`, + input: `${dirname}/src/baseCode.js`, output: [ { - file: `distTest/baseCode${minifiedExtension}.js`, + file: `${dirname}/distTest/baseCode${minifiedExtension}.js`, format: "cjs", strict: false, }, @@ -249,36 +241,30 @@ export const buildConfig = ({ }; } - if ( - variant === STANDALONE || - variant === SANDBOX || - variant === CUSTOM_BUILD - ) { - const destDirectory = - variant === SANDBOX ? "sandboxes/browser/public/" : "dist/"; - + if (variant === STANDALONE || variant === CUSTOM_BUILD) { return { input, output: [ { - file: file || `${destDirectory}alloy${minifiedExtension}.js`, + file: file || `${dirname}/dist/alloy${minifiedExtension}.js`, format: "iife", - sourcemap: variant === SANDBOX, }, ], plugins, }; } - // NPM_PACKAGE_LOCAL or NPM_PACKAGE_PROD + // FUNCTIONAL_TEST_LOCAL or FUNCTIONAL_TEST_PROD const filename = - variant === NPM_PACKAGE_LOCAL ? "npmPackageLocal" : "npmPackageProd"; + variant === FUNCTIONAL_TEST_LOCAL + ? "functionalTestLocal" + : "functionalTestProd"; return { - input: `packages/core/test/functional/helpers/${filename}.js`, + input: `${dirname}/test/functional/helpers/${filename}.js`, output: [ { - file: `distTest/${filename}${minifiedExtension}.js`, + file: `${dirname}/distTest/${filename}${minifiedExtension}.js`, format: "iife", }, ], @@ -299,10 +285,8 @@ const addConfig = (variant) => { addConfig(BASE_CODE); addConfig(STANDALONE); -addConfig(SANDBOX); -addConfig(NPM_PACKAGE_LOCAL); -addConfig(NPM_PACKAGE_PROD); +addConfig(FUNCTIONAL_TEST_LOCAL); +addConfig(FUNCTIONAL_TEST_PROD); addConfig(SERVICE_WORKER); -addConfig(SANDBOX_SERVICE_WORKER); export default config; diff --git a/scripts/alloyBuilder.js b/packages/browser/scripts/alloyBuilder.js similarity index 90% rename from scripts/alloyBuilder.js rename to packages/browser/scripts/alloyBuilder.js index 29983208e..42984bfaa 100755 --- a/scripts/alloyBuilder.js +++ b/packages/browser/scripts/alloyBuilder.js @@ -24,20 +24,38 @@ import path from "path"; import { rollup } from "rollup"; import { buildConfig } from "../rollup.config.js"; import entryPointGeneratorBabelPlugin from "./helpers/entryPointGeneratorBabelPlugin.js"; -import { getProjectRoot, safePathJoin } from "./helpers/path.js"; +import { + optionalComponentNames, + requiredComponentNames, +} from "@adobe/alloy-core/componentMetadata.js"; +import { getBrowserPackageRoot, safePathJoin } from "./helpers/path.js"; const dirname = path.dirname(fileURLToPath(import.meta.url)); +const browserPackageRoot = getBrowserPackageRoot(); + const packageJsonContent = fs.readFileSync( - safePathJoin(getProjectRoot(), "package.json"), + safePathJoin(browserPackageRoot, "package.json"), "utf8", ); const { version } = JSON.parse(packageJsonContent); -let sourceRootPath = safePathJoin(getProjectRoot(), "packages/core/src"); -if (!fs.existsSync(sourceRootPath)) { - sourceRootPath = safePathJoin(getProjectRoot(), "libEs6"); -} +const resolveSourceRootPath = () => { + const candidates = ["src", "libEs6"]; + + for (const candidate of candidates) { + const candidatePath = safePathJoin(browserPackageRoot, candidate); + if (fs.existsSync(candidatePath)) { + return candidatePath; + } + } + + throw new Error( + "Unable to locate source directory. Expected to find 'src' or 'libEs6' within the browser package.", + ); +}; + +const sourceRootPath = resolveSourceRootPath(); const arrayDifference = (arr1, arr2) => arr1.filter((x) => !arr2.includes(x)); @@ -46,33 +64,10 @@ const camelCaseToTitleCase = (str) => { }; const getComponents = (() => { - const components = {}; - [ - { - filePath: safePathJoin(sourceRootPath, "core/componentCreators.js"), - key: "optional", - }, - { - filePath: safePathJoin( - sourceRootPath, - "core/requiredComponentCreators.js", - ), - key: "required", - }, - ].forEach(({ filePath, key }) => { - const code = fs.readFileSync(filePath, "utf-8"); - const c = []; - - babel.traverse(babel.parse(code), { - Identifier(p) { - if (p.node.name !== "default") { - c.push(p.node.name); - } - }, - }); - - components[key] = c; - }); + const components = { + optional: optionalComponentNames, + required: requiredComponentNames, + }; return () => components; })(); @@ -124,8 +119,6 @@ const build = async (argv) => { const bundle = await rollup(rollupConfig); await bundle.write(rollupConfig.output[0]); - fs.unlinkSync(inputFile); - console.log( `🎉 Wrote ${ path.isAbsolute(argv.outputDir) @@ -157,7 +150,7 @@ const buildPushNotificationsServiceWorker = async (argv) => { cwd: path.join(dirname, ".."), banner: { content: { - file: path.join(dirname, "..", "license_banner"), + file: path.join(dirname, "..", "LICENSE_BANNER"), }, }, }), @@ -216,7 +209,7 @@ const getMakeBuildCommand = () => { "-o, --outputDir ", "the output directory for the generated build", ) - .default(getProjectRoot()) + .default(process.cwd()) .argParser((value) => { if (!path.isAbsolute(value)) { value = path.join(process.cwd(), value); @@ -257,7 +250,7 @@ const getPushNotificationsServiceWorkerBuildCommand = () => "-o, --outputDir ", "the output directory for the generated build", ) - .default(getProjectRoot()) + .default(process.cwd()) .argParser((value) => { if (!path.isAbsolute(value)) { value = path.join(process.cwd(), value); diff --git a/packages/browser/scripts/helpers/entryPointGeneratorBabelPlugin.js b/packages/browser/scripts/helpers/entryPointGeneratorBabelPlugin.js new file mode 100644 index 000000000..ac17bab64 --- /dev/null +++ b/packages/browser/scripts/helpers/entryPointGeneratorBabelPlugin.js @@ -0,0 +1,101 @@ +/* +Copyright 2023 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +const COMPONENT_SOURCE = "@adobe/alloy-core/core/componentCreators.js"; + +const createComponentArrayExpression = (t, includedModules) => { + return t.ArrayExpression( + includedModules.map((module) => t.Identifier(module)), + ); +}; + +const createComponentImport = (t, includedModules) => { + if (!includedModules.length) { + return null; + } + + const specifiers = includedModules.map((module) => + t.importSpecifier(t.identifier(module), t.identifier(module)), + ); + + return t.importDeclaration(specifiers, t.stringLiteral(COMPONENT_SOURCE)); +}; + +const removeOptionalComponentsImport = (path) => { + const importPaths = path + .get("body") + .filter( + (child) => + child.isImportDeclaration() && + child.node.source.value === COMPONENT_SOURCE, + ); + + importPaths.forEach((importPath) => { + importPath.remove(); + }); +}; + +const insertComponentImport = (path, importNode) => { + if (!importNode) { + return; + } + + const importDeclarations = path + .get("body") + .filter((child) => child.isImportDeclaration()); + + if (importDeclarations.length === 0) { + path.unshiftContainer("body", importNode); + return; + } + + importDeclarations[importDeclarations.length - 1].insertAfter(importNode); +}; + +export default (t, includedModules) => ({ + visitor: { + // rewrite the imports + Program: { + enter(path, state) { + state.componentsArray = createComponentArrayExpression( + t, + includedModules, + ); + removeOptionalComponentsImport(path); + }, + exit(path, state) { + const importNode = createComponentImport(t, includedModules); + insertComponentImport(path, importNode); + state.componentsArray = null; + }, + }, + // pass in the new, smaller components array to `initializeStandalone` + CallExpression(path, state) { + if (path.node.callee.name !== "initializeStandalone") { + return; + } + + const arrayExpression = + state.componentsArray || + createComponentArrayExpression(t, includedModules); + + path.replaceWith( + t.CallExpression(t.Identifier("initializeStandalone"), [ + t.ObjectExpression([ + t.ObjectProperty(t.Identifier("components"), arrayExpression), + ]), + ]), + ); + + path.stop(); + }, + }, +}); diff --git a/packages/browser/scripts/helpers/path.js b/packages/browser/scripts/helpers/path.js new file mode 100644 index 000000000..10e64fa9b --- /dev/null +++ b/packages/browser/scripts/helpers/path.js @@ -0,0 +1,49 @@ +/* +Copyright 2026 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +import fs from "fs"; +import path from "path"; +import process from "process"; +import { fileURLToPath } from "url"; + +export const getFilename = (root = import.meta.url) => fileURLToPath(root); +export const getDirname = (root = import.meta.url) => + path.dirname(getFilename(root)); + +export const getBrowserPackageRoot = () => { + const dirname = getDirname(import.meta.url); + return path.resolve(dirname, "..", ".."); +}; + +export const getProjectRoot = () => { + if (process.env.npm_config_cwd) { + return process.env.npm_config_cwd; + } + + const browserPackageRoot = getBrowserPackageRoot(); + const monorepoRoot = path.resolve(browserPackageRoot, "..", ".."); + + if (fs.existsSync(path.join(monorepoRoot, "packages", "browser"))) { + return monorepoRoot; + } + + return browserPackageRoot; +}; + +export const safePathJoin = (...args) => { + const joined = path.normalize(path.join(...args)); + const absolute = path.resolve(joined); + if (!absolute.startsWith(getProjectRoot())) { + throw new Error(`Path must be within project root: ${absolute}`); + } + return absolute; +}; diff --git a/scripts/helpers/versionBabelPlugin.js b/packages/browser/scripts/helpers/versionBabelPlugin.js similarity index 100% rename from scripts/helpers/versionBabelPlugin.js rename to packages/browser/scripts/helpers/versionBabelPlugin.js diff --git a/packages/browser/scripts/runFunctionalTests.js b/packages/browser/scripts/runFunctionalTests.js new file mode 100644 index 000000000..6d3de7132 --- /dev/null +++ b/packages/browser/scripts/runFunctionalTests.js @@ -0,0 +1,97 @@ +#!/usr/bin/env node + +/* +Copyright 2024 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +import fs from "fs"; +import path from "path"; +import { glob } from "glob"; +import createTestCafe from "testcafe"; +import { fileURLToPath } from "url"; + +const dirname = path.dirname(fileURLToPath(import.meta.url)); +const workspaceRoot = path.join(dirname, "../../../"); + +fs.readFile( + path.join(workspaceRoot, "packages/browser/dist/alloy.js"), + "utf8", + (readFileErr, alloyData) => { + if (readFileErr) { + console.error(`readFile error: ${readFileErr}`); + return; + } + + // Extract componentCreators array from alloyData + const componentCreatorsMatch = alloyData.match( + /var componentCreators = \[(.*?)\];/s, + ); + if (!componentCreatorsMatch) { + console.error("componentCreators array not found in dist/alloy.js"); + return; + } + const componentCreators = componentCreatorsMatch[1] + .split(",") + .map((name) => name.trim().replace("create", "")); + + // Convert component creator function names to component names + const componentNames = componentCreators.map( + (creator) => creator.charAt(0).toLowerCase() + creator.slice(1), // Ensure first letter is lowercase to match directory names + ); + + // Define a mapping from component names to their test directory names + const componentNameToTestDirMapping = { + dataCollector: "Data Collector", + activityCollector: "Activity Collector", + identity: "Identity", + audiences: "Audiences", + brandConcierge: "BrandConcierge", + context: "Context", + consent: "Consent", + eventMerge: "EventMerge", + libraryInfo: "LibraryInfo", + rulesEngine: "RulesEngine", + }; + + // Adjust componentNames using the mapping + const adjustedComponentNames = componentNames.map( + (name) => componentNameToTestDirMapping[name] || name, + ); + + // Generate a glob pattern to match only the included components' test specs + const includedComponentsPattern = adjustedComponentNames.join("|"); + const testSpecsGlobPattern = `${workspaceRoot}packages/browser/test/functional/specs/@(${includedComponentsPattern})/**/*.js`; + + glob(testSpecsGlobPattern, (globErr, files) => { + if (globErr) { + console.error(globErr); + process.exit(1); + } + + if (files.length === 0) { + console.log("No test files found for the included components."); + return; + } + + createTestCafe().then((testcafe) => { + const runner = testcafe.createRunner(); + runner + .src(files) + .browsers("playwright:chromium") + .run() + .then((failedCount) => { + console.log(`Tests finished. Failed count: ${failedCount}`); + testcafe.close(); + }); + }); + }); + }, +); diff --git a/scripts/watchFunctionalTests.js b/packages/browser/scripts/watchFunctionalTests.js similarity index 93% rename from scripts/watchFunctionalTests.js rename to packages/browser/scripts/watchFunctionalTests.js index 3a82128e5..364d99072 100755 --- a/scripts/watchFunctionalTests.js +++ b/packages/browser/scripts/watchFunctionalTests.js @@ -32,8 +32,15 @@ program.addOption( "-b, --browsers ", "the browser used to run the tests", ) - .choices(["chrome", "firefox", "safari"]) - .default("chrome"), + .choices([ + "playwright:chromium", + "playwright:firefox", + "playwright:webkit", + "chrome", + "firefox", + "safari", + ]) + .default("playwright:chromium"), ); program.addOption( @@ -96,7 +103,7 @@ const effectByEventCode = { // of the loadConfigFile function, but that doesn't work. // See https://github.com/rollup/rollup/issues/4003 process.env.STANDALONE = "true"; - process.env.NPM_PACKAGE_LOCAL = "true"; + process.env.FUNCTIONAL_TEST_LOCAL = "true"; process.env.BASE_CODE_MIN = "true"; const { options, warnings } = await loadConfigFile( path.join(dirname, "../rollup.config.js"), diff --git a/packages/core/src/baseCode.js b/packages/browser/src/baseCode.js similarity index 100% rename from packages/core/src/baseCode.js rename to packages/browser/src/baseCode.js diff --git a/packages/core/src/baseCode/index.js b/packages/browser/src/baseCode/index.js similarity index 95% rename from packages/core/src/baseCode/index.js rename to packages/browser/src/baseCode/index.js index a7063ab85..6a769fd94 100644 --- a/packages/core/src/baseCode/index.js +++ b/packages/browser/src/baseCode/index.js @@ -10,12 +10,11 @@ OF ANY KIND, either express or implied. See the License for the specific languag governing permissions and limitations under the License. */ -/* eslint no-param-reassign: 0 */ /* eslint no-underscore-dangle: 0 */ -/* eslint prefer-rest-params: 0 */ -/* eslint no-var: 0 */ /* eslint-disable func-names */ +/** @import { WindowWithAlloy } from '../types.js' */ + /** * This is the code, once minified, that an Alloy consumer copies and pastes * into their website's HTML. It sets up any global functions the consumer will @@ -31,6 +30,9 @@ governing permissions and limitations under the License. * * Take particular care to write well-minifiable code, as consumers are * particularly sensitive to base code size. + * + * @param {WindowWithAlloy} window + * @param {string[]} instanceNames */ export default (window, instanceNames) => { diff --git a/packages/browser/src/index.js b/packages/browser/src/index.js new file mode 100644 index 000000000..cc7c26eb1 --- /dev/null +++ b/packages/browser/src/index.js @@ -0,0 +1,13 @@ +/* +Copyright 2025 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ +export { createInstance, createCustomInstance } from "@adobe/alloy-core"; +export * as components from "@adobe/alloy-core/core/componentCreators.js"; diff --git a/packages/core/src/serviceWorker.js b/packages/browser/src/serviceWorker.js similarity index 56% rename from packages/core/src/serviceWorker.js rename to packages/browser/src/serviceWorker.js index dc95de4db..6c54233dc 100644 --- a/packages/core/src/serviceWorker.js +++ b/packages/browser/src/serviceWorker.js @@ -10,20 +10,15 @@ OF ANY KIND, either express or implied. See the License for the specific languag governing permissions and limitations under the License. */ -/** @import { ServiceWorkerLogger } from './components/PushNotifications/types.js' */ - -import createServiceWorkerNotificationClickListener from "./components/PushNotifications/helpers/serviceWorkerNotificationClickListener.js"; -import serviceWorkerPushListener from "./components/PushNotifications/helpers/serviceWorkerPushListener.js"; -import { createMakeSendServiceWorkerTrackingData } from "./components/PushNotifications/request/makeSendServiceWorkerTrackingData.js"; -import readFromIndexedDb from "./components/PushNotifications/helpers/readFromIndexedDb.js"; -import uuidv4 from "./utils/uuid.js"; +import createEventListeners from "@adobe/alloy-core/createEventListeners.js"; /* eslint-disable no-console */ -/* eslint-disable no-underscore-dangle */ // @ts-check /// +/** @import { ServiceWorkerLogger } from '@adobe/alloy-core/types.js' */ + /** @type {ServiceWorkerGlobalScope} */ // @ts-ignore const sw = self; @@ -37,20 +32,13 @@ const logger = { error: (...args) => console.error(logger.namespace, ...args), }; -const makeSendServiceWorkerTrackingData = - createMakeSendServiceWorkerTrackingData({ - readFromIndexedDb, - uuidv4, +const eventListeners = createEventListeners({ + sw, + platform: { logger, fetch, - }); - -const serviceWorkerNotificationClickListener = - createServiceWorkerNotificationClickListener({ - makeSendServiceWorkerTrackingData, - sw, - logger, - }); + }, +}); /** * @listens install @@ -73,7 +61,7 @@ sw.addEventListener("activate", (event) => { * @returns {Promise} */ sw.addEventListener("push", (event) => - serviceWorkerPushListener({ event, sw, logger }), + eventListeners.pushNotifications.onPush(event), ); /** @@ -81,7 +69,7 @@ sw.addEventListener("push", (event) => * @param {NotificationEvent} event */ sw.addEventListener("notificationclick", (event) => - serviceWorkerNotificationClickListener({ event }), + eventListeners.pushNotifications.onNotificationClick(event), ); /** @@ -89,12 +77,5 @@ sw.addEventListener("notificationclick", (event) => * @param {NotificationEvent} event */ sw.addEventListener("notificationclose", (event) => { - const data = event.notification.data; - - makeSendServiceWorkerTrackingData({ - xdm: data._xdm.mixins, - actionLabel: "Dismiss", - }).catch((error) => { - logger.error("Failed to send tracking call:", error); - }); + eventListeners.pushNotifications.onNotificationClose(event); }); diff --git a/packages/browser/src/standalone.js b/packages/browser/src/standalone.js new file mode 100644 index 000000000..014baecc6 --- /dev/null +++ b/packages/browser/src/standalone.js @@ -0,0 +1,40 @@ +/* +Copyright 2025 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +/** @import { WindowWithAlloy, AlloyQueueItem } from './types.js' */ + +import { createCustomInstance } from "./index.js"; +import * as optionalComponents from "@adobe/alloy-core/core/componentCreators.js"; + +// This file is used by rollup to create the browser version that is uploaded to cdn + +const initializeStandalone = ({ components }) => { + // eslint-disable-next-line no-underscore-dangle + const instanceNames = /** @type {WindowWithAlloy} */ (window).__alloyNS; + if (!instanceNames) { + return; + } + for (const name of instanceNames) { + const instance = createCustomInstance({ name, components }); + const execute = (/** @type {AlloyQueueItem} */ item) => { + const [resolve, reject, [commandName, options]] = item; + return instance(commandName, options).then(resolve, reject); + }; + const queue = window[name].q; + queue.push = execute; + queue.forEach(execute); + } +}; + +// If you change this line, check if the custom build script is still working. +// You might need to change the babel plugin in scripts/helpers/entryPointGeneratorBabelPlugin.js. +initializeStandalone({ components: Object.values(optionalComponents) }); diff --git a/packages/browser/src/types.js b/packages/browser/src/types.js new file mode 100644 index 000000000..e008e60ad --- /dev/null +++ b/packages/browser/src/types.js @@ -0,0 +1,35 @@ +/* +Copyright 2025 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + +/** + * @typedef {[(value: any) => any, (value:any) => any, [string, object?]]} AlloyQueueItem + * An array containing [resolve, reject, [commandName, options]] + */ + +/** + * @typedef {Function & { q: AlloyQueueItem[] }} AlloyInstance + * A function that executes Alloy commands and returns a Promise, + * with a queue property for pre-initialization commands. + * @param {string} commandName + * @param {object} [options] + * @returns {Promise} + */ + +/** + * Window object extended with Alloy namespace and dynamic instance properties + * @typedef {Window & { + * __alloyNS?: string[], + * [key: string]: AlloyInstance | any + * }} WindowWithAlloy + */ + +export const Types = {}; diff --git a/packages/core/test/functional/fixtures/Personalization/C28758.js b/packages/browser/test/functional/fixtures/Personalization/C28758.js similarity index 100% rename from packages/core/test/functional/fixtures/Personalization/C28758.js rename to packages/browser/test/functional/fixtures/Personalization/C28758.js diff --git a/packages/core/test/functional/fixtures/Personalization/C6364800.js b/packages/browser/test/functional/fixtures/Personalization/C6364800.js similarity index 100% rename from packages/core/test/functional/fixtures/Personalization/C6364800.js rename to packages/browser/test/functional/fixtures/Personalization/C6364800.js diff --git a/packages/core/test/functional/fixtures/Personalization/C9932846.js b/packages/browser/test/functional/fixtures/Personalization/C9932846.js similarity index 100% rename from packages/core/test/functional/fixtures/Personalization/C9932846.js rename to packages/browser/test/functional/fixtures/Personalization/C9932846.js diff --git a/packages/core/test/functional/fixtures/Personalization/conflictResolution.js b/packages/browser/test/functional/fixtures/Personalization/conflictResolution.js similarity index 100% rename from packages/core/test/functional/fixtures/Personalization/conflictResolution.js rename to packages/browser/test/functional/fixtures/Personalization/conflictResolution.js diff --git a/packages/core/test/functional/helpers/areThirdPartyCookiesSupported.js b/packages/browser/test/functional/helpers/areThirdPartyCookiesSupported.js similarity index 100% rename from packages/core/test/functional/helpers/areThirdPartyCookiesSupported.js rename to packages/browser/test/functional/helpers/areThirdPartyCookiesSupported.js diff --git a/packages/core/test/functional/helpers/assertions/advertising.js b/packages/browser/test/functional/helpers/assertions/advertising.js similarity index 92% rename from packages/core/test/functional/helpers/assertions/advertising.js rename to packages/browser/test/functional/helpers/assertions/advertising.js index cec1babae..9c0801468 100644 --- a/packages/core/test/functional/helpers/assertions/advertising.js +++ b/packages/browser/test/functional/helpers/assertions/advertising.js @@ -1,6 +1,13 @@ /* -Copyright 2025 Adobe. All rights reserved. +Copyright 2026 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. */ import { t } from "testcafe"; diff --git a/packages/core/test/functional/helpers/assertions/index.js b/packages/browser/test/functional/helpers/assertions/index.js similarity index 100% rename from packages/core/test/functional/helpers/assertions/index.js rename to packages/browser/test/functional/helpers/assertions/index.js diff --git a/packages/core/test/functional/helpers/assertions/responseStatus.js b/packages/browser/test/functional/helpers/assertions/responseStatus.js similarity index 100% rename from packages/core/test/functional/helpers/assertions/responseStatus.js rename to packages/browser/test/functional/helpers/assertions/responseStatus.js diff --git a/packages/core/test/functional/helpers/configureAlloyInstance/index.js b/packages/browser/test/functional/helpers/configureAlloyInstance/index.js similarity index 100% rename from packages/core/test/functional/helpers/configureAlloyInstance/index.js rename to packages/browser/test/functional/helpers/configureAlloyInstance/index.js diff --git a/packages/core/test/functional/helpers/consoleLogger/index.js b/packages/browser/test/functional/helpers/consoleLogger/index.js similarity index 100% rename from packages/core/test/functional/helpers/consoleLogger/index.js rename to packages/browser/test/functional/helpers/consoleLogger/index.js diff --git a/packages/core/test/functional/helpers/constants/alloyEnvironment.js b/packages/browser/test/functional/helpers/constants/alloyEnvironment.js similarity index 100% rename from packages/core/test/functional/helpers/constants/alloyEnvironment.js rename to packages/browser/test/functional/helpers/constants/alloyEnvironment.js diff --git a/packages/core/test/functional/helpers/constants/browsers.js b/packages/browser/test/functional/helpers/constants/browsers.js similarity index 100% rename from packages/core/test/functional/helpers/constants/browsers.js rename to packages/browser/test/functional/helpers/constants/browsers.js diff --git a/packages/core/test/functional/helpers/constants/configParts/ajoConfigForStage.js b/packages/browser/test/functional/helpers/constants/configParts/ajoConfigForStage.js similarity index 100% rename from packages/core/test/functional/helpers/constants/configParts/ajoConfigForStage.js rename to packages/browser/test/functional/helpers/constants/configParts/ajoConfigForStage.js diff --git a/packages/core/test/functional/helpers/constants/configParts/clickCollectionDisabled.js b/packages/browser/test/functional/helpers/constants/configParts/clickCollectionDisabled.js similarity index 100% rename from packages/core/test/functional/helpers/constants/configParts/clickCollectionDisabled.js rename to packages/browser/test/functional/helpers/constants/configParts/clickCollectionDisabled.js diff --git a/packages/core/test/functional/helpers/constants/configParts/clickCollectionEnabled.js b/packages/browser/test/functional/helpers/constants/configParts/clickCollectionEnabled.js similarity index 100% rename from packages/core/test/functional/helpers/constants/configParts/clickCollectionEnabled.js rename to packages/browser/test/functional/helpers/constants/configParts/clickCollectionEnabled.js diff --git a/packages/core/test/functional/helpers/constants/configParts/clickCollectionEventGroupingDisabled.js b/packages/browser/test/functional/helpers/constants/configParts/clickCollectionEventGroupingDisabled.js similarity index 100% rename from packages/core/test/functional/helpers/constants/configParts/clickCollectionEventGroupingDisabled.js rename to packages/browser/test/functional/helpers/constants/configParts/clickCollectionEventGroupingDisabled.js diff --git a/packages/core/test/functional/helpers/constants/configParts/clickCollectionSessionStorageDisabled.js b/packages/browser/test/functional/helpers/constants/configParts/clickCollectionSessionStorageDisabled.js similarity index 100% rename from packages/core/test/functional/helpers/constants/configParts/clickCollectionSessionStorageDisabled.js rename to packages/browser/test/functional/helpers/constants/configParts/clickCollectionSessionStorageDisabled.js diff --git a/packages/core/test/functional/helpers/constants/configParts/configOverridesAlt.js b/packages/browser/test/functional/helpers/constants/configParts/configOverridesAlt.js similarity index 100% rename from packages/core/test/functional/helpers/constants/configParts/configOverridesAlt.js rename to packages/browser/test/functional/helpers/constants/configParts/configOverridesAlt.js diff --git a/packages/core/test/functional/helpers/constants/configParts/configOverridesMain.js b/packages/browser/test/functional/helpers/constants/configParts/configOverridesMain.js similarity index 100% rename from packages/core/test/functional/helpers/constants/configParts/configOverridesMain.js rename to packages/browser/test/functional/helpers/constants/configParts/configOverridesMain.js diff --git a/packages/core/test/functional/helpers/constants/configParts/consentIn.js b/packages/browser/test/functional/helpers/constants/configParts/consentIn.js similarity index 100% rename from packages/core/test/functional/helpers/constants/configParts/consentIn.js rename to packages/browser/test/functional/helpers/constants/configParts/consentIn.js diff --git a/packages/core/test/functional/helpers/constants/configParts/consentPending.js b/packages/browser/test/functional/helpers/constants/configParts/consentPending.js similarity index 100% rename from packages/core/test/functional/helpers/constants/configParts/consentPending.js rename to packages/browser/test/functional/helpers/constants/configParts/consentPending.js diff --git a/packages/core/test/functional/helpers/constants/configParts/debugDisabled.js b/packages/browser/test/functional/helpers/constants/configParts/debugDisabled.js similarity index 100% rename from packages/core/test/functional/helpers/constants/configParts/debugDisabled.js rename to packages/browser/test/functional/helpers/constants/configParts/debugDisabled.js diff --git a/packages/core/test/functional/helpers/constants/configParts/debugEnabled.js b/packages/browser/test/functional/helpers/constants/configParts/debugEnabled.js similarity index 100% rename from packages/core/test/functional/helpers/constants/configParts/debugEnabled.js rename to packages/browser/test/functional/helpers/constants/configParts/debugEnabled.js diff --git a/packages/core/test/functional/helpers/constants/configParts/edgeDomainFirstParty.js b/packages/browser/test/functional/helpers/constants/configParts/edgeDomainFirstParty.js similarity index 100% rename from packages/core/test/functional/helpers/constants/configParts/edgeDomainFirstParty.js rename to packages/browser/test/functional/helpers/constants/configParts/edgeDomainFirstParty.js diff --git a/packages/core/test/functional/helpers/constants/configParts/edgeDomainThirdParty.js b/packages/browser/test/functional/helpers/constants/configParts/edgeDomainThirdParty.js similarity index 100% rename from packages/core/test/functional/helpers/constants/configParts/edgeDomainThirdParty.js rename to packages/browser/test/functional/helpers/constants/configParts/edgeDomainThirdParty.js diff --git a/packages/core/test/functional/helpers/constants/configParts/index.js b/packages/browser/test/functional/helpers/constants/configParts/index.js similarity index 100% rename from packages/core/test/functional/helpers/constants/configParts/index.js rename to packages/browser/test/functional/helpers/constants/configParts/index.js diff --git a/packages/core/test/functional/helpers/constants/configParts/migrationDisabled.js b/packages/browser/test/functional/helpers/constants/configParts/migrationDisabled.js similarity index 100% rename from packages/core/test/functional/helpers/constants/configParts/migrationDisabled.js rename to packages/browser/test/functional/helpers/constants/configParts/migrationDisabled.js diff --git a/packages/core/test/functional/helpers/constants/configParts/migrationEnabled.js b/packages/browser/test/functional/helpers/constants/configParts/migrationEnabled.js similarity index 100% rename from packages/core/test/functional/helpers/constants/configParts/migrationEnabled.js rename to packages/browser/test/functional/helpers/constants/configParts/migrationEnabled.js diff --git a/packages/core/test/functional/helpers/constants/configParts/orgAltConfigAlt.js b/packages/browser/test/functional/helpers/constants/configParts/orgAltConfigAlt.js similarity index 100% rename from packages/core/test/functional/helpers/constants/configParts/orgAltConfigAlt.js rename to packages/browser/test/functional/helpers/constants/configParts/orgAltConfigAlt.js diff --git a/packages/core/test/functional/helpers/constants/configParts/orgMainConfigMain.js b/packages/browser/test/functional/helpers/constants/configParts/orgMainConfigMain.js similarity index 100% rename from packages/core/test/functional/helpers/constants/configParts/orgMainConfigMain.js rename to packages/browser/test/functional/helpers/constants/configParts/orgMainConfigMain.js diff --git a/packages/core/test/functional/helpers/constants/configParts/orgMediaConfig.js b/packages/browser/test/functional/helpers/constants/configParts/orgMediaConfig.js similarity index 100% rename from packages/core/test/functional/helpers/constants/configParts/orgMediaConfig.js rename to packages/browser/test/functional/helpers/constants/configParts/orgMediaConfig.js diff --git a/packages/core/test/functional/helpers/constants/configParts/streamingMedia.js b/packages/browser/test/functional/helpers/constants/configParts/streamingMedia.js similarity index 100% rename from packages/core/test/functional/helpers/constants/configParts/streamingMedia.js rename to packages/browser/test/functional/helpers/constants/configParts/streamingMedia.js diff --git a/packages/core/test/functional/helpers/constants/configParts/targetMigrationEnabled.js b/packages/browser/test/functional/helpers/constants/configParts/targetMigrationEnabled.js similarity index 100% rename from packages/core/test/functional/helpers/constants/configParts/targetMigrationEnabled.js rename to packages/browser/test/functional/helpers/constants/configParts/targetMigrationEnabled.js diff --git a/packages/core/test/functional/helpers/constants/configParts/thirdPartyCookiesDisabled.js b/packages/browser/test/functional/helpers/constants/configParts/thirdPartyCookiesDisabled.js similarity index 100% rename from packages/core/test/functional/helpers/constants/configParts/thirdPartyCookiesDisabled.js rename to packages/browser/test/functional/helpers/constants/configParts/thirdPartyCookiesDisabled.js diff --git a/packages/core/test/functional/helpers/constants/configParts/thirdPartyCookiesEnabled.js b/packages/browser/test/functional/helpers/constants/configParts/thirdPartyCookiesEnabled.js similarity index 100% rename from packages/core/test/functional/helpers/constants/configParts/thirdPartyCookiesEnabled.js rename to packages/browser/test/functional/helpers/constants/configParts/thirdPartyCookiesEnabled.js diff --git a/packages/core/test/functional/helpers/constants/consent.js b/packages/browser/test/functional/helpers/constants/consent.js similarity index 100% rename from packages/core/test/functional/helpers/constants/consent.js rename to packages/browser/test/functional/helpers/constants/consent.js diff --git a/packages/core/test/functional/helpers/constants/cookies.js b/packages/browser/test/functional/helpers/constants/cookies.js similarity index 100% rename from packages/core/test/functional/helpers/constants/cookies.js rename to packages/browser/test/functional/helpers/constants/cookies.js diff --git a/packages/core/test/functional/helpers/constants/datastreamId.js b/packages/browser/test/functional/helpers/constants/datastreamId.js similarity index 100% rename from packages/core/test/functional/helpers/constants/datastreamId.js rename to packages/browser/test/functional/helpers/constants/datastreamId.js diff --git a/packages/core/test/functional/helpers/constants/deviceContextConfig.js b/packages/browser/test/functional/helpers/constants/deviceContextConfig.js similarity index 100% rename from packages/core/test/functional/helpers/constants/deviceContextConfig.js rename to packages/browser/test/functional/helpers/constants/deviceContextConfig.js diff --git a/packages/core/test/functional/helpers/constants/domain.js b/packages/browser/test/functional/helpers/constants/domain.js similarity index 100% rename from packages/core/test/functional/helpers/constants/domain.js rename to packages/browser/test/functional/helpers/constants/domain.js diff --git a/packages/core/test/functional/helpers/constants/environmentContextConfig.js b/packages/browser/test/functional/helpers/constants/environmentContextConfig.js similarity index 100% rename from packages/core/test/functional/helpers/constants/environmentContextConfig.js rename to packages/browser/test/functional/helpers/constants/environmentContextConfig.js diff --git a/packages/core/test/functional/helpers/constants/highEntropyUserAgentHintsContextConfig.js b/packages/browser/test/functional/helpers/constants/highEntropyUserAgentHintsContextConfig.js similarity index 100% rename from packages/core/test/functional/helpers/constants/highEntropyUserAgentHintsContextConfig.js rename to packages/browser/test/functional/helpers/constants/highEntropyUserAgentHintsContextConfig.js diff --git a/packages/core/test/functional/helpers/constants/placeContextConfig.js b/packages/browser/test/functional/helpers/constants/placeContextConfig.js similarity index 100% rename from packages/core/test/functional/helpers/constants/placeContextConfig.js rename to packages/browser/test/functional/helpers/constants/placeContextConfig.js diff --git a/packages/core/test/functional/helpers/constants/regex.js b/packages/browser/test/functional/helpers/constants/regex.js similarity index 100% rename from packages/core/test/functional/helpers/constants/regex.js rename to packages/browser/test/functional/helpers/constants/regex.js diff --git a/packages/core/test/functional/helpers/constants/remoteVisitorLibraryUrl.js b/packages/browser/test/functional/helpers/constants/remoteVisitorLibraryUrl.js similarity index 100% rename from packages/core/test/functional/helpers/constants/remoteVisitorLibraryUrl.js rename to packages/browser/test/functional/helpers/constants/remoteVisitorLibraryUrl.js diff --git a/packages/core/test/functional/helpers/constants/url.js b/packages/browser/test/functional/helpers/constants/url.js similarity index 100% rename from packages/core/test/functional/helpers/constants/url.js rename to packages/browser/test/functional/helpers/constants/url.js diff --git a/packages/core/test/functional/helpers/constants/webContextConfig.js b/packages/browser/test/functional/helpers/constants/webContextConfig.js similarity index 100% rename from packages/core/test/functional/helpers/constants/webContextConfig.js rename to packages/browser/test/functional/helpers/constants/webContextConfig.js diff --git a/packages/core/test/functional/helpers/cookies.js b/packages/browser/test/functional/helpers/cookies.js similarity index 100% rename from packages/core/test/functional/helpers/cookies.js rename to packages/browser/test/functional/helpers/cookies.js diff --git a/packages/core/test/functional/helpers/createAdobeMC.js b/packages/browser/test/functional/helpers/createAdobeMC.js similarity index 100% rename from packages/core/test/functional/helpers/createAdobeMC.js rename to packages/browser/test/functional/helpers/createAdobeMC.js diff --git a/packages/core/test/functional/helpers/createAlloyProxy.js b/packages/browser/test/functional/helpers/createAlloyProxy.js similarity index 89% rename from packages/core/test/functional/helpers/createAlloyProxy.js rename to packages/browser/test/functional/helpers/createAlloyProxy.js index 3994ae235..41a4ae6ae 100644 --- a/packages/core/test/functional/helpers/createAlloyProxy.js +++ b/packages/browser/test/functional/helpers/createAlloyProxy.js @@ -1,3 +1,15 @@ +/* +Copyright 2026 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + /* * Using TestCafe, the test code is run inside Node. If you want to run code inside the browser * you have to use ClientFunctions or t.eval. TestCafe compiles and copies the code inside the diff --git a/packages/core/test/functional/helpers/createCollectEndpointAsserter.js b/packages/browser/test/functional/helpers/createCollectEndpointAsserter.js similarity index 100% rename from packages/core/test/functional/helpers/createCollectEndpointAsserter.js rename to packages/browser/test/functional/helpers/createCollectEndpointAsserter.js diff --git a/packages/core/test/functional/helpers/createFixture/clientScripts.js b/packages/browser/test/functional/helpers/createFixture/clientScripts.js similarity index 97% rename from packages/core/test/functional/helpers/createFixture/clientScripts.js rename to packages/browser/test/functional/helpers/createFixture/clientScripts.js index b555daae4..647af136d 100644 --- a/packages/core/test/functional/helpers/createFixture/clientScripts.js +++ b/packages/browser/test/functional/helpers/createFixture/clientScripts.js @@ -32,11 +32,14 @@ if (alloyEnv === PRODUCTION) { ); } } -const rootDir = path.join(__dirname, "../../../../../../"); +const rootDir = path.join(__dirname, "../../../../"); const baseCodePath = path.join(rootDir, "distTest/baseCode.min.js"); const localAlloyLibraryPath = path.join(rootDir, "dist/alloy.js"); -const localNpmLibraryPath = path.join(rootDir, "distTest/npmPackageLocal.js"); -const prodNpmLibraryPath = path.join(rootDir, "distTest/npmPackageProd.js"); +const localNpmLibraryPath = path.join( + rootDir, + "distTest/functionalTestLocal.js", +); +const prodNpmLibraryPath = path.join(rootDir, "distTest/functionalTestProd.js"); const remoteAlloyLibraryUrl = `https://cdn1.adoberesources.net/alloy/${alloyProdVersion}/alloy.js`; // We use this getter for retrieving the library code instead of just loading diff --git a/packages/core/test/functional/helpers/createFixture/destinationRequestMock.js b/packages/browser/test/functional/helpers/createFixture/destinationRequestMock.js similarity index 100% rename from packages/core/test/functional/helpers/createFixture/destinationRequestMock.js rename to packages/browser/test/functional/helpers/createFixture/destinationRequestMock.js diff --git a/packages/core/test/functional/helpers/createFixture/index.js b/packages/browser/test/functional/helpers/createFixture/index.js similarity index 100% rename from packages/core/test/functional/helpers/createFixture/index.js rename to packages/browser/test/functional/helpers/createFixture/index.js diff --git a/packages/core/test/functional/helpers/createRandomEcid.js b/packages/browser/test/functional/helpers/createRandomEcid.js similarity index 100% rename from packages/core/test/functional/helpers/createRandomEcid.js rename to packages/browser/test/functional/helpers/createRandomEcid.js diff --git a/packages/core/test/functional/helpers/createResponse.js b/packages/browser/test/functional/helpers/createResponse.js similarity index 82% rename from packages/core/test/functional/helpers/createResponse.js rename to packages/browser/test/functional/helpers/createResponse.js index 1523b9eba..c89374e5f 100644 --- a/packages/core/test/functional/helpers/createResponse.js +++ b/packages/browser/test/functional/helpers/createResponse.js @@ -10,6 +10,7 @@ OF ANY KIND, either express or implied. See the License for the specific languag governing permissions and limitations under the License. */ -import injectCreateResponse from "../../../src/core/injectCreateResponse.js"; +// eslint-disable-next-line import/no-relative-packages +import injectCreateResponse from "../../../../core/src/core/injectCreateResponse.js"; export default injectCreateResponse({ logger: console }); diff --git a/packages/core/test/functional/helpers/createUnhandledRejectionLogger.js b/packages/browser/test/functional/helpers/createUnhandledRejectionLogger.js similarity index 100% rename from packages/core/test/functional/helpers/createUnhandledRejectionLogger.js rename to packages/browser/test/functional/helpers/createUnhandledRejectionLogger.js diff --git a/packages/core/test/functional/helpers/dom/addHtmlToBody.js b/packages/browser/test/functional/helpers/dom/addHtmlToBody.js similarity index 100% rename from packages/core/test/functional/helpers/dom/addHtmlToBody.js rename to packages/browser/test/functional/helpers/dom/addHtmlToBody.js diff --git a/packages/core/test/functional/helpers/dom/addHtmlToHeader.js b/packages/browser/test/functional/helpers/dom/addHtmlToHeader.js similarity index 100% rename from packages/core/test/functional/helpers/dom/addHtmlToHeader.js rename to packages/browser/test/functional/helpers/dom/addHtmlToHeader.js diff --git a/packages/core/test/functional/helpers/flushPromiseChains.js b/packages/browser/test/functional/helpers/flushPromiseChains.js similarity index 100% rename from packages/core/test/functional/helpers/flushPromiseChains.js rename to packages/browser/test/functional/helpers/flushPromiseChains.js diff --git a/packages/core/test/functional/helpers/npmPackageLocal.js b/packages/browser/test/functional/helpers/functionalTestLocal.js similarity index 100% rename from packages/core/test/functional/helpers/npmPackageLocal.js rename to packages/browser/test/functional/helpers/functionalTestLocal.js diff --git a/packages/core/test/functional/helpers/npmPackageProd.js b/packages/browser/test/functional/helpers/functionalTestProd.js similarity index 83% rename from packages/core/test/functional/helpers/npmPackageProd.js rename to packages/browser/test/functional/helpers/functionalTestProd.js index 7a7048adf..08862918a 100644 --- a/packages/core/test/functional/helpers/npmPackageProd.js +++ b/packages/browser/test/functional/helpers/functionalTestProd.js @@ -10,8 +10,6 @@ OF ANY KIND, either express or implied. See the License for the specific languag governing permissions and limitations under the License. */ -// eslint-disable-next-line import/no-unresolved -// FIXME: Self-dependency is broken in monorepo, so this does not currently work. import { createInstance } from "@adobe/alloy"; window.alloyCreateInstance = createInstance; diff --git a/packages/core/test/functional/helpers/getBaseConfig.js b/packages/browser/test/functional/helpers/getBaseConfig.js similarity index 100% rename from packages/core/test/functional/helpers/getBaseConfig.js rename to packages/browser/test/functional/helpers/getBaseConfig.js diff --git a/packages/core/test/functional/helpers/isUserAgentClientHintsSupported.js b/packages/browser/test/functional/helpers/isUserAgentClientHintsSupported.js similarity index 100% rename from packages/core/test/functional/helpers/isUserAgentClientHintsSupported.js rename to packages/browser/test/functional/helpers/isUserAgentClientHintsSupported.js diff --git a/packages/core/test/functional/helpers/networkLogger/awaitRequestResponse.js b/packages/browser/test/functional/helpers/networkLogger/awaitRequestResponse.js similarity index 100% rename from packages/core/test/functional/helpers/networkLogger/awaitRequestResponse.js rename to packages/browser/test/functional/helpers/networkLogger/awaitRequestResponse.js diff --git a/packages/core/test/functional/helpers/networkLogger/getResponseBody.js b/packages/browser/test/functional/helpers/networkLogger/getResponseBody.js similarity index 100% rename from packages/core/test/functional/helpers/networkLogger/getResponseBody.js rename to packages/browser/test/functional/helpers/networkLogger/getResponseBody.js diff --git a/packages/core/test/functional/helpers/networkLogger/getReturnedEcid.js b/packages/browser/test/functional/helpers/networkLogger/getReturnedEcid.js similarity index 100% rename from packages/core/test/functional/helpers/networkLogger/getReturnedEcid.js rename to packages/browser/test/functional/helpers/networkLogger/getReturnedEcid.js diff --git a/packages/core/test/functional/helpers/networkLogger/index.js b/packages/browser/test/functional/helpers/networkLogger/index.js similarity index 100% rename from packages/core/test/functional/helpers/networkLogger/index.js rename to packages/browser/test/functional/helpers/networkLogger/index.js diff --git a/packages/core/test/functional/helpers/optIn/createMockOptIn.js b/packages/browser/test/functional/helpers/optIn/createMockOptIn.js similarity index 100% rename from packages/core/test/functional/helpers/optIn/createMockOptIn.js rename to packages/browser/test/functional/helpers/optIn/createMockOptIn.js diff --git a/packages/core/test/functional/helpers/preventLinkNavigation.js b/packages/browser/test/functional/helpers/preventLinkNavigation.js similarity index 100% rename from packages/core/test/functional/helpers/preventLinkNavigation.js rename to packages/browser/test/functional/helpers/preventLinkNavigation.js diff --git a/packages/core/test/functional/helpers/reloadPage.js b/packages/browser/test/functional/helpers/reloadPage.js similarity index 100% rename from packages/core/test/functional/helpers/reloadPage.js rename to packages/browser/test/functional/helpers/reloadPage.js diff --git a/packages/core/test/functional/helpers/requestHooks/demdexBlockerMock.js b/packages/browser/test/functional/helpers/requestHooks/demdexBlockerMock.js similarity index 100% rename from packages/core/test/functional/helpers/requestHooks/demdexBlockerMock.js rename to packages/browser/test/functional/helpers/requestHooks/demdexBlockerMock.js diff --git a/packages/core/test/functional/helpers/requestHooks/failOnceHook.js b/packages/browser/test/functional/helpers/requestHooks/failOnceHook.js similarity index 100% rename from packages/core/test/functional/helpers/requestHooks/failOnceHook.js rename to packages/browser/test/functional/helpers/requestHooks/failOnceHook.js diff --git a/packages/core/test/functional/helpers/requestHooks/sequentialHook.js b/packages/browser/test/functional/helpers/requestHooks/sequentialHook.js similarity index 100% rename from packages/core/test/functional/helpers/requestHooks/sequentialHook.js rename to packages/browser/test/functional/helpers/requestHooks/sequentialHook.js diff --git a/packages/core/test/functional/helpers/sendBeaconMock.js b/packages/browser/test/functional/helpers/sendBeaconMock.js similarity index 100% rename from packages/core/test/functional/helpers/sendBeaconMock.js rename to packages/browser/test/functional/helpers/sendBeaconMock.js diff --git a/packages/core/test/functional/helpers/setLegacyIdentityCookie.js b/packages/browser/test/functional/helpers/setLegacyIdentityCookie.js similarity index 100% rename from packages/core/test/functional/helpers/setLegacyIdentityCookie.js rename to packages/browser/test/functional/helpers/setLegacyIdentityCookie.js diff --git a/packages/core/test/functional/helpers/visitorService/getVisitorEcid.js b/packages/browser/test/functional/helpers/visitorService/getVisitorEcid.js similarity index 100% rename from packages/core/test/functional/helpers/visitorService/getVisitorEcid.js rename to packages/browser/test/functional/helpers/visitorService/getVisitorEcid.js diff --git a/packages/core/test/functional/specs/Audiences/C12411.js b/packages/browser/test/functional/specs/Audiences/C12411.js similarity index 100% rename from packages/core/test/functional/specs/Audiences/C12411.js rename to packages/browser/test/functional/specs/Audiences/C12411.js diff --git a/packages/core/test/functional/specs/Audiences/C12412.js b/packages/browser/test/functional/specs/Audiences/C12412.js similarity index 100% rename from packages/core/test/functional/specs/Audiences/C12412.js rename to packages/browser/test/functional/specs/Audiences/C12412.js diff --git a/packages/core/test/functional/specs/Audiences/C31436.js b/packages/browser/test/functional/specs/Audiences/C31436.js similarity index 100% rename from packages/core/test/functional/specs/Audiences/C31436.js rename to packages/browser/test/functional/specs/Audiences/C31436.js diff --git a/packages/core/test/functional/specs/BrandConcierge/sendConversationalEvent.js b/packages/browser/test/functional/specs/BrandConcierge/sendConversationalEvent.js similarity index 98% rename from packages/core/test/functional/specs/BrandConcierge/sendConversationalEvent.js rename to packages/browser/test/functional/specs/BrandConcierge/sendConversationalEvent.js index e9608b205..3da58559c 100644 --- a/packages/core/test/functional/specs/BrandConcierge/sendConversationalEvent.js +++ b/packages/browser/test/functional/specs/BrandConcierge/sendConversationalEvent.js @@ -40,11 +40,9 @@ test("Test 1: C2590433 - Send conversational event with message only", async () await alloy.configure(config); let streamResponseCalled = false; - let capturedResponse = null; - await alloy.sendConversationEvent({ message: "Hello, I need help with my order", - onStreamResponse: (response) => { + onStreamResponse: () => { streamResponseCalled = true; }, }); diff --git a/packages/core/test/functional/specs/CNAME/C148846.js b/packages/browser/test/functional/specs/CNAME/C148846.js similarity index 100% rename from packages/core/test/functional/specs/CNAME/C148846.js rename to packages/browser/test/functional/specs/CNAME/C148846.js diff --git a/packages/core/test/functional/specs/Command Logic/C11634155.js b/packages/browser/test/functional/specs/Command Logic/C11634155.js similarity index 100% rename from packages/core/test/functional/specs/Command Logic/C11634155.js rename to packages/browser/test/functional/specs/Command Logic/C11634155.js diff --git a/packages/core/test/functional/specs/Command Logic/C13816.js b/packages/browser/test/functional/specs/Command Logic/C13816.js similarity index 100% rename from packages/core/test/functional/specs/Command Logic/C13816.js rename to packages/browser/test/functional/specs/Command Logic/C13816.js diff --git a/packages/core/test/functional/specs/Command Logic/C13817.js b/packages/browser/test/functional/specs/Command Logic/C13817.js similarity index 100% rename from packages/core/test/functional/specs/Command Logic/C13817.js rename to packages/browser/test/functional/specs/Command Logic/C13817.js diff --git a/packages/core/test/functional/specs/Command Logic/C13818.js b/packages/browser/test/functional/specs/Command Logic/C13818.js similarity index 100% rename from packages/core/test/functional/specs/Command Logic/C13818.js rename to packages/browser/test/functional/specs/Command Logic/C13818.js diff --git a/packages/core/test/functional/specs/Command Logic/C13819.js b/packages/browser/test/functional/specs/Command Logic/C13819.js similarity index 100% rename from packages/core/test/functional/specs/Command Logic/C13819.js rename to packages/browser/test/functional/specs/Command Logic/C13819.js diff --git a/packages/core/test/functional/specs/Command Logic/C2580.js b/packages/browser/test/functional/specs/Command Logic/C2580.js similarity index 100% rename from packages/core/test/functional/specs/Command Logic/C2580.js rename to packages/browser/test/functional/specs/Command Logic/C2580.js diff --git a/packages/core/test/functional/specs/Command Logic/C2585.js b/packages/browser/test/functional/specs/Command Logic/C2585.js similarity index 100% rename from packages/core/test/functional/specs/Command Logic/C2585.js rename to packages/browser/test/functional/specs/Command Logic/C2585.js diff --git a/packages/core/test/functional/specs/Command Logic/C2587.js b/packages/browser/test/functional/specs/Command Logic/C2587.js similarity index 100% rename from packages/core/test/functional/specs/Command Logic/C2587.js rename to packages/browser/test/functional/specs/Command Logic/C2587.js diff --git a/packages/core/test/functional/specs/Command Logic/C2588.js b/packages/browser/test/functional/specs/Command Logic/C2588.js similarity index 100% rename from packages/core/test/functional/specs/Command Logic/C2588.js rename to packages/browser/test/functional/specs/Command Logic/C2588.js diff --git a/packages/core/test/functional/specs/Command Logic/C3484892.js b/packages/browser/test/functional/specs/Command Logic/C3484892.js similarity index 100% rename from packages/core/test/functional/specs/Command Logic/C3484892.js rename to packages/browser/test/functional/specs/Command Logic/C3484892.js diff --git a/packages/core/test/functional/specs/Config Overrides/C7437530.js b/packages/browser/test/functional/specs/Config Overrides/C7437530.js similarity index 100% rename from packages/core/test/functional/specs/Config Overrides/C7437530.js rename to packages/browser/test/functional/specs/Config Overrides/C7437530.js diff --git a/packages/core/test/functional/specs/Config Overrides/C7437531.js b/packages/browser/test/functional/specs/Config Overrides/C7437531.js similarity index 100% rename from packages/core/test/functional/specs/Config Overrides/C7437531.js rename to packages/browser/test/functional/specs/Config Overrides/C7437531.js diff --git a/packages/core/test/functional/specs/Config Overrides/C7437532.js b/packages/browser/test/functional/specs/Config Overrides/C7437532.js similarity index 100% rename from packages/core/test/functional/specs/Config Overrides/C7437532.js rename to packages/browser/test/functional/specs/Config Overrides/C7437532.js diff --git a/packages/core/test/functional/specs/Config Overrides/C7437533.js b/packages/browser/test/functional/specs/Config Overrides/C7437533.js similarity index 100% rename from packages/core/test/functional/specs/Config Overrides/C7437533.js rename to packages/browser/test/functional/specs/Config Overrides/C7437533.js diff --git a/packages/core/test/functional/specs/Consent/C14404.js b/packages/browser/test/functional/specs/Consent/C14404.js similarity index 100% rename from packages/core/test/functional/specs/Consent/C14404.js rename to packages/browser/test/functional/specs/Consent/C14404.js diff --git a/packages/core/test/functional/specs/Consent/C14405.js b/packages/browser/test/functional/specs/Consent/C14405.js similarity index 100% rename from packages/core/test/functional/specs/Consent/C14405.js rename to packages/browser/test/functional/specs/Consent/C14405.js diff --git a/packages/core/test/functional/specs/Consent/C14406.js b/packages/browser/test/functional/specs/Consent/C14406.js similarity index 100% rename from packages/core/test/functional/specs/Consent/C14406.js rename to packages/browser/test/functional/specs/Consent/C14406.js diff --git a/packages/core/test/functional/specs/Consent/C14407.js b/packages/browser/test/functional/specs/Consent/C14407.js similarity index 100% rename from packages/core/test/functional/specs/Consent/C14407.js rename to packages/browser/test/functional/specs/Consent/C14407.js diff --git a/packages/core/test/functional/specs/Consent/C14409.js b/packages/browser/test/functional/specs/Consent/C14409.js similarity index 100% rename from packages/core/test/functional/specs/Consent/C14409.js rename to packages/browser/test/functional/specs/Consent/C14409.js diff --git a/packages/core/test/functional/specs/Consent/C14410.js b/packages/browser/test/functional/specs/Consent/C14410.js similarity index 100% rename from packages/core/test/functional/specs/Consent/C14410.js rename to packages/browser/test/functional/specs/Consent/C14410.js diff --git a/packages/core/test/functional/specs/Consent/C14411.js b/packages/browser/test/functional/specs/Consent/C14411.js similarity index 100% rename from packages/core/test/functional/specs/Consent/C14411.js rename to packages/browser/test/functional/specs/Consent/C14411.js diff --git a/packages/core/test/functional/specs/Consent/C14414.js b/packages/browser/test/functional/specs/Consent/C14414.js similarity index 100% rename from packages/core/test/functional/specs/Consent/C14414.js rename to packages/browser/test/functional/specs/Consent/C14414.js diff --git a/packages/core/test/functional/specs/Consent/C1472433.js b/packages/browser/test/functional/specs/Consent/C1472433.js similarity index 100% rename from packages/core/test/functional/specs/Consent/C1472433.js rename to packages/browser/test/functional/specs/Consent/C1472433.js diff --git a/packages/core/test/functional/specs/Consent/C1472434.js b/packages/browser/test/functional/specs/Consent/C1472434.js similarity index 100% rename from packages/core/test/functional/specs/Consent/C1472434.js rename to packages/browser/test/functional/specs/Consent/C1472434.js diff --git a/packages/core/test/functional/specs/Consent/C1472435.js b/packages/browser/test/functional/specs/Consent/C1472435.js similarity index 100% rename from packages/core/test/functional/specs/Consent/C1472435.js rename to packages/browser/test/functional/specs/Consent/C1472435.js diff --git a/packages/core/test/functional/specs/Consent/C1472436.js b/packages/browser/test/functional/specs/Consent/C1472436.js similarity index 100% rename from packages/core/test/functional/specs/Consent/C1472436.js rename to packages/browser/test/functional/specs/Consent/C1472436.js diff --git a/packages/core/test/functional/specs/Consent/C1472437.js b/packages/browser/test/functional/specs/Consent/C1472437.js similarity index 100% rename from packages/core/test/functional/specs/Consent/C1472437.js rename to packages/browser/test/functional/specs/Consent/C1472437.js diff --git a/packages/core/test/functional/specs/Consent/C1472438.js b/packages/browser/test/functional/specs/Consent/C1472438.js similarity index 100% rename from packages/core/test/functional/specs/Consent/C1472438.js rename to packages/browser/test/functional/specs/Consent/C1472438.js diff --git a/packages/core/test/functional/specs/Consent/C1576777.js b/packages/browser/test/functional/specs/Consent/C1576777.js similarity index 100% rename from packages/core/test/functional/specs/Consent/C1576777.js rename to packages/browser/test/functional/specs/Consent/C1576777.js diff --git a/packages/core/test/functional/specs/Consent/C1631712.js b/packages/browser/test/functional/specs/Consent/C1631712.js similarity index 96% rename from packages/core/test/functional/specs/Consent/C1631712.js rename to packages/browser/test/functional/specs/Consent/C1631712.js index 027052f07..43062b652 100644 --- a/packages/core/test/functional/specs/Consent/C1631712.js +++ b/packages/browser/test/functional/specs/Consent/C1631712.js @@ -18,7 +18,7 @@ import { import { CONSENT_IN } from "../../helpers/constants/consent.js"; import createAlloyProxy from "../../helpers/createAlloyProxy.js"; import createNetworkLogger from "../../helpers/networkLogger/index.js"; -import flushPromiseChains from "../../../unit/helpers/flushPromiseChains.js"; +import flushPromiseChains from "../../helpers/flushPromiseChains.js"; import createConsoleLogger from "../../helpers/consoleLogger/index.js"; const config = compose( diff --git a/packages/core/test/functional/specs/Consent/C225953.js b/packages/browser/test/functional/specs/Consent/C225953.js similarity index 100% rename from packages/core/test/functional/specs/Consent/C225953.js rename to packages/browser/test/functional/specs/Consent/C225953.js diff --git a/packages/core/test/functional/specs/Consent/C25148.js b/packages/browser/test/functional/specs/Consent/C25148.js similarity index 100% rename from packages/core/test/functional/specs/Consent/C25148.js rename to packages/browser/test/functional/specs/Consent/C25148.js diff --git a/packages/core/test/functional/specs/Consent/C2593.js b/packages/browser/test/functional/specs/Consent/C2593.js similarity index 100% rename from packages/core/test/functional/specs/Consent/C2593.js rename to packages/browser/test/functional/specs/Consent/C2593.js diff --git a/packages/core/test/functional/specs/Consent/C2594.js b/packages/browser/test/functional/specs/Consent/C2594.js similarity index 100% rename from packages/core/test/functional/specs/Consent/C2594.js rename to packages/browser/test/functional/specs/Consent/C2594.js diff --git a/packages/core/test/functional/specs/Consent/C2660.js b/packages/browser/test/functional/specs/Consent/C2660.js similarity index 100% rename from packages/core/test/functional/specs/Consent/C2660.js rename to packages/browser/test/functional/specs/Consent/C2660.js diff --git a/packages/core/test/functional/specs/Consent/C28754.js b/packages/browser/test/functional/specs/Consent/C28754.js similarity index 100% rename from packages/core/test/functional/specs/Consent/C28754.js rename to packages/browser/test/functional/specs/Consent/C28754.js diff --git a/packages/core/test/functional/specs/Consent/C5594870.js b/packages/browser/test/functional/specs/Consent/C5594870.js similarity index 100% rename from packages/core/test/functional/specs/Consent/C5594870.js rename to packages/browser/test/functional/specs/Consent/C5594870.js diff --git a/packages/core/test/functional/specs/Consent/IAB/C224670.js b/packages/browser/test/functional/specs/Consent/IAB/C224670.js similarity index 100% rename from packages/core/test/functional/specs/Consent/IAB/C224670.js rename to packages/browser/test/functional/specs/Consent/IAB/C224670.js diff --git a/packages/core/test/functional/specs/Consent/IAB/C224671.js b/packages/browser/test/functional/specs/Consent/IAB/C224671.js similarity index 100% rename from packages/core/test/functional/specs/Consent/IAB/C224671.js rename to packages/browser/test/functional/specs/Consent/IAB/C224671.js diff --git a/packages/core/test/functional/specs/Consent/IAB/C224672.js b/packages/browser/test/functional/specs/Consent/IAB/C224672.js similarity index 100% rename from packages/core/test/functional/specs/Consent/IAB/C224672.js rename to packages/browser/test/functional/specs/Consent/IAB/C224672.js diff --git a/packages/core/test/functional/specs/Consent/IAB/C224673.js b/packages/browser/test/functional/specs/Consent/IAB/C224673.js similarity index 100% rename from packages/core/test/functional/specs/Consent/IAB/C224673.js rename to packages/browser/test/functional/specs/Consent/IAB/C224673.js diff --git a/packages/core/test/functional/specs/Consent/IAB/C224674.js b/packages/browser/test/functional/specs/Consent/IAB/C224674.js similarity index 100% rename from packages/core/test/functional/specs/Consent/IAB/C224674.js rename to packages/browser/test/functional/specs/Consent/IAB/C224674.js diff --git a/packages/core/test/functional/specs/Consent/IAB/C224675.js b/packages/browser/test/functional/specs/Consent/IAB/C224675.js similarity index 100% rename from packages/core/test/functional/specs/Consent/IAB/C224675.js rename to packages/browser/test/functional/specs/Consent/IAB/C224675.js diff --git a/packages/core/test/functional/specs/Consent/IAB/C224676.js b/packages/browser/test/functional/specs/Consent/IAB/C224676.js similarity index 100% rename from packages/core/test/functional/specs/Consent/IAB/C224676.js rename to packages/browser/test/functional/specs/Consent/IAB/C224676.js diff --git a/packages/core/test/functional/specs/Consent/IAB/C224677.js b/packages/browser/test/functional/specs/Consent/IAB/C224677.js similarity index 100% rename from packages/core/test/functional/specs/Consent/IAB/C224677.js rename to packages/browser/test/functional/specs/Consent/IAB/C224677.js diff --git a/packages/core/test/functional/specs/Consent/IAB/C224678.js b/packages/browser/test/functional/specs/Consent/IAB/C224678.js similarity index 100% rename from packages/core/test/functional/specs/Consent/IAB/C224678.js rename to packages/browser/test/functional/specs/Consent/IAB/C224678.js diff --git a/packages/core/test/functional/specs/Context/C1911390.js b/packages/browser/test/functional/specs/Context/C1911390.js similarity index 100% rename from packages/core/test/functional/specs/Context/C1911390.js rename to packages/browser/test/functional/specs/Context/C1911390.js diff --git a/packages/core/test/functional/specs/Context/C2597.js b/packages/browser/test/functional/specs/Context/C2597.js similarity index 100% rename from packages/core/test/functional/specs/Context/C2597.js rename to packages/browser/test/functional/specs/Context/C2597.js diff --git a/packages/core/test/functional/specs/Context/C2598.js b/packages/browser/test/functional/specs/Context/C2598.js similarity index 100% rename from packages/core/test/functional/specs/Context/C2598.js rename to packages/browser/test/functional/specs/Context/C2598.js diff --git a/packages/core/test/functional/specs/Context/C2599.js b/packages/browser/test/functional/specs/Context/C2599.js similarity index 100% rename from packages/core/test/functional/specs/Context/C2599.js rename to packages/browser/test/functional/specs/Context/C2599.js diff --git a/packages/core/test/functional/specs/Context/C2600.js b/packages/browser/test/functional/specs/Context/C2600.js similarity index 100% rename from packages/core/test/functional/specs/Context/C2600.js rename to packages/browser/test/functional/specs/Context/C2600.js diff --git a/packages/core/test/functional/specs/Context/C2601.js b/packages/browser/test/functional/specs/Context/C2601.js similarity index 100% rename from packages/core/test/functional/specs/Context/C2601.js rename to packages/browser/test/functional/specs/Context/C2601.js diff --git a/packages/core/test/functional/specs/Context/C7311732.js b/packages/browser/test/functional/specs/Context/C7311732.js similarity index 100% rename from packages/core/test/functional/specs/Context/C7311732.js rename to packages/browser/test/functional/specs/Context/C7311732.js diff --git a/packages/core/test/functional/specs/Data Collector/C11693274.js b/packages/browser/test/functional/specs/Data Collector/C11693274.js similarity index 100% rename from packages/core/test/functional/specs/Data Collector/C11693274.js rename to packages/browser/test/functional/specs/Data Collector/C11693274.js diff --git a/packages/core/test/functional/specs/Data Collector/C1715149.js b/packages/browser/test/functional/specs/Data Collector/C1715149.js similarity index 100% rename from packages/core/test/functional/specs/Data Collector/C1715149.js rename to packages/browser/test/functional/specs/Data Collector/C1715149.js diff --git a/packages/core/test/functional/specs/Data Collector/C225010.js b/packages/browser/test/functional/specs/Data Collector/C225010.js similarity index 100% rename from packages/core/test/functional/specs/Data Collector/C225010.js rename to packages/browser/test/functional/specs/Data Collector/C225010.js diff --git a/packages/core/test/functional/specs/Data Collector/C2592.js b/packages/browser/test/functional/specs/Data Collector/C2592.js similarity index 100% rename from packages/core/test/functional/specs/Data Collector/C2592.js rename to packages/browser/test/functional/specs/Data Collector/C2592.js diff --git a/packages/core/test/functional/specs/Data Collector/C455258.js b/packages/browser/test/functional/specs/Data Collector/C455258.js similarity index 100% rename from packages/core/test/functional/specs/Data Collector/C455258.js rename to packages/browser/test/functional/specs/Data Collector/C455258.js diff --git a/packages/core/test/functional/specs/Data Collector/C75372.js b/packages/browser/test/functional/specs/Data Collector/C75372.js similarity index 100% rename from packages/core/test/functional/specs/Data Collector/C75372.js rename to packages/browser/test/functional/specs/Data Collector/C75372.js diff --git a/packages/core/test/functional/specs/Data Collector/C8118.js b/packages/browser/test/functional/specs/Data Collector/C8118.js similarity index 100% rename from packages/core/test/functional/specs/Data Collector/C8118.js rename to packages/browser/test/functional/specs/Data Collector/C8118.js diff --git a/packages/core/test/functional/specs/Data Collector/C81181.js b/packages/browser/test/functional/specs/Data Collector/C81181.js similarity index 100% rename from packages/core/test/functional/specs/Data Collector/C81181.js rename to packages/browser/test/functional/specs/Data Collector/C81181.js diff --git a/packages/core/test/functional/specs/Data Collector/C81182.js b/packages/browser/test/functional/specs/Data Collector/C81182.js similarity index 100% rename from packages/core/test/functional/specs/Data Collector/C81182.js rename to packages/browser/test/functional/specs/Data Collector/C81182.js diff --git a/packages/core/test/functional/specs/Data Collector/C81183.js b/packages/browser/test/functional/specs/Data Collector/C81183.js similarity index 100% rename from packages/core/test/functional/specs/Data Collector/C81183.js rename to packages/browser/test/functional/specs/Data Collector/C81183.js diff --git a/packages/core/test/functional/specs/Data Collector/C81184.js b/packages/browser/test/functional/specs/Data Collector/C81184.js similarity index 100% rename from packages/core/test/functional/specs/Data Collector/C81184.js rename to packages/browser/test/functional/specs/Data Collector/C81184.js diff --git a/packages/core/test/functional/specs/Data Collector/C8119.js b/packages/browser/test/functional/specs/Data Collector/C8119.js similarity index 100% rename from packages/core/test/functional/specs/Data Collector/C8119.js rename to packages/browser/test/functional/specs/Data Collector/C8119.js diff --git a/packages/core/test/functional/specs/Data Collector/C9369211.js b/packages/browser/test/functional/specs/Data Collector/C9369211.js similarity index 100% rename from packages/core/test/functional/specs/Data Collector/C9369211.js rename to packages/browser/test/functional/specs/Data Collector/C9369211.js diff --git a/packages/core/test/functional/specs/ID Migration/C14394.js b/packages/browser/test/functional/specs/ID Migration/C14394.js similarity index 100% rename from packages/core/test/functional/specs/ID Migration/C14394.js rename to packages/browser/test/functional/specs/ID Migration/C14394.js diff --git a/packages/core/test/functional/specs/ID Migration/C14399.js b/packages/browser/test/functional/specs/ID Migration/C14399.js similarity index 100% rename from packages/core/test/functional/specs/ID Migration/C14399.js rename to packages/browser/test/functional/specs/ID Migration/C14399.js diff --git a/packages/core/test/functional/specs/ID Migration/C14400.js b/packages/browser/test/functional/specs/ID Migration/C14400.js similarity index 100% rename from packages/core/test/functional/specs/ID Migration/C14400.js rename to packages/browser/test/functional/specs/ID Migration/C14400.js diff --git a/packages/core/test/functional/specs/ID Migration/C14401.js b/packages/browser/test/functional/specs/ID Migration/C14401.js similarity index 100% rename from packages/core/test/functional/specs/ID Migration/C14401.js rename to packages/browser/test/functional/specs/ID Migration/C14401.js diff --git a/packages/core/test/functional/specs/ID Migration/C14402.js b/packages/browser/test/functional/specs/ID Migration/C14402.js similarity index 100% rename from packages/core/test/functional/specs/ID Migration/C14402.js rename to packages/browser/test/functional/specs/ID Migration/C14402.js diff --git a/packages/core/test/functional/specs/ID Migration/C14403.js b/packages/browser/test/functional/specs/ID Migration/C14403.js similarity index 100% rename from packages/core/test/functional/specs/ID Migration/C14403.js rename to packages/browser/test/functional/specs/ID Migration/C14403.js diff --git a/packages/core/test/functional/specs/ID Migration/C5752639.js b/packages/browser/test/functional/specs/ID Migration/C5752639.js similarity index 100% rename from packages/core/test/functional/specs/ID Migration/C5752639.js rename to packages/browser/test/functional/specs/ID Migration/C5752639.js diff --git a/packages/core/test/functional/specs/Identity/C10922.js b/packages/browser/test/functional/specs/Identity/C10922.js similarity index 100% rename from packages/core/test/functional/specs/Identity/C10922.js rename to packages/browser/test/functional/specs/Identity/C10922.js diff --git a/packages/core/test/functional/specs/Identity/C14699834.js b/packages/browser/test/functional/specs/Identity/C14699834.js similarity index 100% rename from packages/core/test/functional/specs/Identity/C14699834.js rename to packages/browser/test/functional/specs/Identity/C14699834.js diff --git a/packages/core/test/functional/specs/Identity/C15325238.js b/packages/browser/test/functional/specs/Identity/C15325238.js similarity index 100% rename from packages/core/test/functional/specs/Identity/C15325238.js rename to packages/browser/test/functional/specs/Identity/C15325238.js diff --git a/packages/core/test/functional/specs/Identity/C1703722.js b/packages/browser/test/functional/specs/Identity/C1703722.js similarity index 100% rename from packages/core/test/functional/specs/Identity/C1703722.js rename to packages/browser/test/functional/specs/Identity/C1703722.js diff --git a/packages/core/test/functional/specs/Identity/C1703723.js b/packages/browser/test/functional/specs/Identity/C1703723.js similarity index 100% rename from packages/core/test/functional/specs/Identity/C1703723.js rename to packages/browser/test/functional/specs/Identity/C1703723.js diff --git a/packages/core/test/functional/specs/Identity/C19160486.js b/packages/browser/test/functional/specs/Identity/C19160486.js similarity index 100% rename from packages/core/test/functional/specs/Identity/C19160486.js rename to packages/browser/test/functional/specs/Identity/C19160486.js diff --git a/packages/core/test/functional/specs/Identity/C21636436.js b/packages/browser/test/functional/specs/Identity/C21636436.js similarity index 100% rename from packages/core/test/functional/specs/Identity/C21636436.js rename to packages/browser/test/functional/specs/Identity/C21636436.js diff --git a/packages/core/test/functional/specs/Identity/C21636437.js b/packages/browser/test/functional/specs/Identity/C21636437.js similarity index 100% rename from packages/core/test/functional/specs/Identity/C21636437.js rename to packages/browser/test/functional/specs/Identity/C21636437.js diff --git a/packages/core/test/functional/specs/Identity/C21636438.js b/packages/browser/test/functional/specs/Identity/C21636438.js similarity index 100% rename from packages/core/test/functional/specs/Identity/C21636438.js rename to packages/browser/test/functional/specs/Identity/C21636438.js diff --git a/packages/core/test/functional/specs/Identity/C2581.js b/packages/browser/test/functional/specs/Identity/C2581.js similarity index 100% rename from packages/core/test/functional/specs/Identity/C2581.js rename to packages/browser/test/functional/specs/Identity/C2581.js diff --git a/packages/core/test/functional/specs/Identity/C25822.js b/packages/browser/test/functional/specs/Identity/C25822.js similarity index 100% rename from packages/core/test/functional/specs/Identity/C25822.js rename to packages/browser/test/functional/specs/Identity/C25822.js diff --git a/packages/core/test/functional/specs/Identity/C5287654.js b/packages/browser/test/functional/specs/Identity/C5287654.js similarity index 100% rename from packages/core/test/functional/specs/Identity/C5287654.js rename to packages/browser/test/functional/specs/Identity/C5287654.js diff --git a/packages/core/test/functional/specs/Identity/C5594865.js b/packages/browser/test/functional/specs/Identity/C5594865.js similarity index 100% rename from packages/core/test/functional/specs/Identity/C5594865.js rename to packages/browser/test/functional/specs/Identity/C5594865.js diff --git a/packages/core/test/functional/specs/Identity/C5594866.js b/packages/browser/test/functional/specs/Identity/C5594866.js similarity index 100% rename from packages/core/test/functional/specs/Identity/C5594866.js rename to packages/browser/test/functional/specs/Identity/C5594866.js diff --git a/packages/core/test/functional/specs/Identity/C5594871.js b/packages/browser/test/functional/specs/Identity/C5594871.js similarity index 100% rename from packages/core/test/functional/specs/Identity/C5594871.js rename to packages/browser/test/functional/specs/Identity/C5594871.js diff --git a/packages/core/test/functional/specs/Identity/C5594872.js b/packages/browser/test/functional/specs/Identity/C5594872.js similarity index 100% rename from packages/core/test/functional/specs/Identity/C5594872.js rename to packages/browser/test/functional/specs/Identity/C5594872.js diff --git a/packages/core/test/functional/specs/Identity/C5598188.js b/packages/browser/test/functional/specs/Identity/C5598188.js similarity index 100% rename from packages/core/test/functional/specs/Identity/C5598188.js rename to packages/browser/test/functional/specs/Identity/C5598188.js diff --git a/packages/core/test/functional/specs/Identity/C6842980.js b/packages/browser/test/functional/specs/Identity/C6842980.js similarity index 100% rename from packages/core/test/functional/specs/Identity/C6842980.js rename to packages/browser/test/functional/specs/Identity/C6842980.js diff --git a/packages/core/test/functional/specs/Identity/C6842981.js b/packages/browser/test/functional/specs/Identity/C6842981.js similarity index 100% rename from packages/core/test/functional/specs/Identity/C6842981.js rename to packages/browser/test/functional/specs/Identity/C6842981.js diff --git a/packages/core/test/functional/specs/Identity/C6842982.js b/packages/browser/test/functional/specs/Identity/C6842982.js similarity index 100% rename from packages/core/test/functional/specs/Identity/C6842982.js rename to packages/browser/test/functional/specs/Identity/C6842982.js diff --git a/packages/core/test/functional/specs/Install SDK/C1338399.js b/packages/browser/test/functional/specs/Install SDK/C1338399.js similarity index 100% rename from packages/core/test/functional/specs/Install SDK/C1338399.js rename to packages/browser/test/functional/specs/Install SDK/C1338399.js diff --git a/packages/core/test/functional/specs/Install SDK/C2560.js b/packages/browser/test/functional/specs/Install SDK/C2560.js similarity index 100% rename from packages/core/test/functional/specs/Install SDK/C2560.js rename to packages/browser/test/functional/specs/Install SDK/C2560.js diff --git a/packages/core/test/functional/specs/Install SDK/C2579.js b/packages/browser/test/functional/specs/Install SDK/C2579.js similarity index 100% rename from packages/core/test/functional/specs/Install SDK/C2579.js rename to packages/browser/test/functional/specs/Install SDK/C2579.js diff --git a/packages/core/test/functional/specs/LibraryInfo/C2589.js b/packages/browser/test/functional/specs/LibraryInfo/C2589.js similarity index 94% rename from packages/core/test/functional/specs/LibraryInfo/C2589.js rename to packages/browser/test/functional/specs/LibraryInfo/C2589.js index bc84e6a22..ead719b31 100644 --- a/packages/core/test/functional/specs/LibraryInfo/C2589.js +++ b/packages/browser/test/functional/specs/LibraryInfo/C2589.js @@ -19,14 +19,16 @@ import { } from "../../helpers/constants/configParts/index.js"; import createAlloyProxy from "../../helpers/createAlloyProxy.js"; +/* eslint-disable import/no-relative-packages */ import { ADOBE_JOURNEY_OPTIMIZER, ADOBE_TARGET, -} from "../../../../src/constants/decisionProvider.js"; +} from "../../../../../core/src/constants/decisionProvider.js"; import { ALWAYS, NEVER, -} from "../../../../src/constants/propositionInteractionType.js"; +} from "../../../../../core/src/constants/propositionInteractionType.js"; +/* eslint-enable import/no-relative-packages */ const debugEnabledConfig = compose(orgMainConfigMain, debugEnabled, { onBeforeEventSend: () => {}, diff --git a/packages/core/test/functional/specs/Location Hints/C6589015.js b/packages/browser/test/functional/specs/Location Hints/C6589015.js similarity index 100% rename from packages/core/test/functional/specs/Location Hints/C6589015.js rename to packages/browser/test/functional/specs/Location Hints/C6589015.js diff --git a/packages/core/test/functional/specs/Location Hints/C6944931.js b/packages/browser/test/functional/specs/Location Hints/C6944931.js similarity index 100% rename from packages/core/test/functional/specs/Location Hints/C6944931.js rename to packages/browser/test/functional/specs/Location Hints/C6944931.js diff --git a/packages/core/test/functional/specs/Logging/C2583.js b/packages/browser/test/functional/specs/Logging/C2583.js similarity index 100% rename from packages/core/test/functional/specs/Logging/C2583.js rename to packages/browser/test/functional/specs/Logging/C2583.js diff --git a/packages/core/test/functional/specs/Logging/C2584.js b/packages/browser/test/functional/specs/Logging/C2584.js similarity index 100% rename from packages/core/test/functional/specs/Logging/C2584.js rename to packages/browser/test/functional/specs/Logging/C2584.js diff --git a/packages/core/test/functional/specs/Logging/C2586.js b/packages/browser/test/functional/specs/Logging/C2586.js similarity index 100% rename from packages/core/test/functional/specs/Logging/C2586.js rename to packages/browser/test/functional/specs/Logging/C2586.js diff --git a/packages/core/test/functional/specs/Logging/C532204.js b/packages/browser/test/functional/specs/Logging/C532204.js similarity index 100% rename from packages/core/test/functional/specs/Logging/C532204.js rename to packages/browser/test/functional/specs/Logging/C532204.js diff --git a/packages/core/test/functional/specs/MediaCollection/MA1.js b/packages/browser/test/functional/specs/MediaCollection/MA1.js similarity index 100% rename from packages/core/test/functional/specs/MediaCollection/MA1.js rename to packages/browser/test/functional/specs/MediaCollection/MA1.js diff --git a/packages/core/test/functional/specs/MediaCollection/MA2.js b/packages/browser/test/functional/specs/MediaCollection/MA2.js similarity index 100% rename from packages/core/test/functional/specs/MediaCollection/MA2.js rename to packages/browser/test/functional/specs/MediaCollection/MA2.js diff --git a/packages/core/test/functional/specs/MediaCollection/MA3.js b/packages/browser/test/functional/specs/MediaCollection/MA3.js similarity index 100% rename from packages/core/test/functional/specs/MediaCollection/MA3.js rename to packages/browser/test/functional/specs/MediaCollection/MA3.js diff --git a/packages/core/test/functional/specs/Migration/C8085773.js b/packages/browser/test/functional/specs/Migration/C8085773.js similarity index 95% rename from packages/core/test/functional/specs/Migration/C8085773.js rename to packages/browser/test/functional/specs/Migration/C8085773.js index e9101f978..14dd31c49 100644 --- a/packages/core/test/functional/specs/Migration/C8085773.js +++ b/packages/browser/test/functional/specs/Migration/C8085773.js @@ -19,10 +19,12 @@ import { targetMigrationEnabled, } from "../../helpers/constants/configParts/index.js"; import { TEST_PAGE, TEST_PAGE_AT_JS_ONE } from "../../helpers/constants/url.js"; +/* eslint-disable import/no-relative-packages */ import { MBOX_EDGE_CLUSTER, MBOX, -} from "../../../../src/constants/legacyCookies.js"; +} from "../../../../../core/src/constants/legacyCookies.js"; +/* eslint-enable import/no-relative-packages */ import { assertKonductorReturnsCookieAndCookieIsSet, assertSameLocationHintIsUsed, diff --git a/packages/core/test/functional/specs/Migration/C8085774.js b/packages/browser/test/functional/specs/Migration/C8085774.js similarity index 95% rename from packages/core/test/functional/specs/Migration/C8085774.js rename to packages/browser/test/functional/specs/Migration/C8085774.js index 1f16ad904..944355f51 100644 --- a/packages/core/test/functional/specs/Migration/C8085774.js +++ b/packages/browser/test/functional/specs/Migration/C8085774.js @@ -19,10 +19,12 @@ import { targetMigrationEnabled, } from "../../helpers/constants/configParts/index.js"; import { TEST_PAGE, TEST_PAGE_AT_JS_TWO } from "../../helpers/constants/url.js"; +/* eslint-disable import/no-relative-packages */ import { MBOX_EDGE_CLUSTER, MBOX, -} from "../../../../src/constants/legacyCookies.js"; +} from "../../../../../core/src/constants/legacyCookies.js"; +/* eslint-enable import/no-relative-packages */ import { assertKonductorReturnsCookieAndCookieIsSet, assertSameLocationHintIsUsed, diff --git a/packages/core/test/functional/specs/Migration/C8085775.js b/packages/browser/test/functional/specs/Migration/C8085775.js similarity index 96% rename from packages/core/test/functional/specs/Migration/C8085775.js rename to packages/browser/test/functional/specs/Migration/C8085775.js index d3951c134..d7c3dbac1 100644 --- a/packages/core/test/functional/specs/Migration/C8085775.js +++ b/packages/browser/test/functional/specs/Migration/C8085775.js @@ -20,10 +20,12 @@ import { } from "../../helpers/constants/configParts/index.js"; import { TEST_PAGE, TEST_PAGE_AT_JS_ONE } from "../../helpers/constants/url.js"; import cookies from "../../helpers/cookies.js"; +/* eslint-disable import/no-relative-packages */ import { MBOX_EDGE_CLUSTER, MBOX, -} from "../../../../src/constants/legacyCookies.js"; +} from "../../../../../core/src/constants/legacyCookies.js"; +/* eslint-enable import/no-relative-packages */ import { assertTargetMigrationEnabledIsSent, getLocationHint, diff --git a/packages/core/test/functional/specs/Migration/C8085776.js b/packages/browser/test/functional/specs/Migration/C8085776.js similarity index 96% rename from packages/core/test/functional/specs/Migration/C8085776.js rename to packages/browser/test/functional/specs/Migration/C8085776.js index 723a8265d..f76084a36 100644 --- a/packages/core/test/functional/specs/Migration/C8085776.js +++ b/packages/browser/test/functional/specs/Migration/C8085776.js @@ -20,10 +20,12 @@ import { } from "../../helpers/constants/configParts/index.js"; import { TEST_PAGE, TEST_PAGE_AT_JS_TWO } from "../../helpers/constants/url.js"; import cookies from "../../helpers/cookies.js"; +/* eslint-disable import/no-relative-packages */ import { MBOX_EDGE_CLUSTER, MBOX, -} from "../../../../src/constants/legacyCookies.js"; +} from "../../../../../core/src/constants/legacyCookies.js"; +/* eslint-enable import/no-relative-packages */ import { assertTargetMigrationEnabledIsSent, getLocationHint, diff --git a/packages/core/test/functional/specs/Migration/C8085777.js b/packages/browser/test/functional/specs/Migration/C8085777.js similarity index 96% rename from packages/core/test/functional/specs/Migration/C8085777.js rename to packages/browser/test/functional/specs/Migration/C8085777.js index 509e28ad5..ffc0b0d91 100644 --- a/packages/core/test/functional/specs/Migration/C8085777.js +++ b/packages/browser/test/functional/specs/Migration/C8085777.js @@ -20,10 +20,12 @@ import { } from "../../helpers/constants/configParts/index.js"; import { TEST_PAGE, TEST_PAGE_AT_JS_TWO } from "../../helpers/constants/url.js"; import getResponseBody from "../../helpers/networkLogger/getResponseBody.js"; +/* eslint-disable import/no-relative-packages */ import { MBOX_EDGE_CLUSTER, MBOX, -} from "../../../../src/constants/legacyCookies.js"; +} from "../../../../../core/src/constants/legacyCookies.js"; +/* eslint-enable import/no-relative-packages */ import { assertKonductorReturnsCookieAndCookieIsSet, assertSameLocationHintIsUsed, diff --git a/packages/core/test/functional/specs/Migration/C8085778.js b/packages/browser/test/functional/specs/Migration/C8085778.js similarity index 100% rename from packages/core/test/functional/specs/Migration/C8085778.js rename to packages/browser/test/functional/specs/Migration/C8085778.js diff --git a/packages/core/test/functional/specs/Migration/C8085779.js b/packages/browser/test/functional/specs/Migration/C8085779.js similarity index 100% rename from packages/core/test/functional/specs/Migration/C8085779.js rename to packages/browser/test/functional/specs/Migration/C8085779.js diff --git a/packages/core/test/functional/specs/Migration/C8085780.js b/packages/browser/test/functional/specs/Migration/C8085780.js similarity index 100% rename from packages/core/test/functional/specs/Migration/C8085780.js rename to packages/browser/test/functional/specs/Migration/C8085780.js diff --git a/packages/core/test/functional/specs/Migration/helper.js b/packages/browser/test/functional/specs/Migration/helper.js similarity index 100% rename from packages/core/test/functional/specs/Migration/helper.js rename to packages/browser/test/functional/specs/Migration/helper.js diff --git a/packages/core/test/functional/specs/Personalization/C11389844.js b/packages/browser/test/functional/specs/Personalization/C11389844.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C11389844.js rename to packages/browser/test/functional/specs/Personalization/C11389844.js diff --git a/packages/core/test/functional/specs/Personalization/C1234567.js b/packages/browser/test/functional/specs/Personalization/C1234567.js similarity index 98% rename from packages/core/test/functional/specs/Personalization/C1234567.js rename to packages/browser/test/functional/specs/Personalization/C1234567.js index a5e9ad46e..876b71fb6 100644 --- a/packages/core/test/functional/specs/Personalization/C1234567.js +++ b/packages/browser/test/functional/specs/Personalization/C1234567.js @@ -1,6 +1,5 @@ -/* eslint-disable func-style, prefer-object-spread */ /* -Copyright 2023 Adobe. All rights reserved. +Copyright 2026 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 @@ -10,8 +9,10 @@ the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTA OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ +/* eslint-disable func-style, prefer-object-spread */ import { ClientFunction, t, Selector } from "testcafe"; -import uuid from "../../../../src/utils/uuid.js"; +// eslint-disable-next-line import/no-relative-packages +import uuid from "../../../../../core/src/utils/uuid.js"; import createNetworkLogger from "../../helpers/networkLogger/index.js"; import createFixture from "../../helpers/createFixture/index.js"; import { @@ -22,7 +23,8 @@ import createAlloyProxy from "../../helpers/createAlloyProxy.js"; import getBaseConfig from "../../helpers/getBaseConfig.js"; import { TEST_PAGE as TEST_PAGE_URL } from "../../helpers/constants/url.js"; import addHtmlToBody from "../../helpers/dom/addHtmlToBody.js"; -import { ADOBE_JOURNEY_OPTIMIZER } from "../../../../src/constants/decisionProvider.js"; +// eslint-disable-next-line import/no-relative-packages +import { ADOBE_JOURNEY_OPTIMIZER } from "../../../../../core/src/constants/decisionProvider.js"; import { responseStatus } from "../../helpers/assertions/index.js"; import flushPromiseChains from "../../helpers/flushPromiseChains.js"; diff --git a/packages/core/test/functional/specs/Personalization/C14286730.js b/packages/browser/test/functional/specs/Personalization/C14286730.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C14286730.js rename to packages/browser/test/functional/specs/Personalization/C14286730.js diff --git a/packages/core/test/functional/specs/Personalization/C14299419.js b/packages/browser/test/functional/specs/Personalization/C14299419.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C14299419.js rename to packages/browser/test/functional/specs/Personalization/C14299419.js diff --git a/packages/core/test/functional/specs/Personalization/C14299420.js b/packages/browser/test/functional/specs/Personalization/C14299420.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C14299420.js rename to packages/browser/test/functional/specs/Personalization/C14299420.js diff --git a/packages/core/test/functional/specs/Personalization/C14299421.js b/packages/browser/test/functional/specs/Personalization/C14299421.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C14299421.js rename to packages/browser/test/functional/specs/Personalization/C14299421.js diff --git a/packages/core/test/functional/specs/Personalization/C14299422.js b/packages/browser/test/functional/specs/Personalization/C14299422.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C14299422.js rename to packages/browser/test/functional/specs/Personalization/C14299422.js diff --git a/packages/core/test/functional/specs/Personalization/C14317242.js b/packages/browser/test/functional/specs/Personalization/C14317242.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C14317242.js rename to packages/browser/test/functional/specs/Personalization/C14317242.js diff --git a/packages/core/test/functional/specs/Personalization/C15325239.js b/packages/browser/test/functional/specs/Personalization/C15325239.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C15325239.js rename to packages/browser/test/functional/specs/Personalization/C15325239.js diff --git a/packages/core/test/functional/specs/Personalization/C17294899.js b/packages/browser/test/functional/specs/Personalization/C17294899.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C17294899.js rename to packages/browser/test/functional/specs/Personalization/C17294899.js diff --git a/packages/core/test/functional/specs/Personalization/C17409728.js b/packages/browser/test/functional/specs/Personalization/C17409728.js similarity index 95% rename from packages/core/test/functional/specs/Personalization/C17409728.js rename to packages/browser/test/functional/specs/Personalization/C17409728.js index 5cbd55546..472937655 100644 --- a/packages/core/test/functional/specs/Personalization/C17409728.js +++ b/packages/browser/test/functional/specs/Personalization/C17409728.js @@ -10,7 +10,8 @@ OF ANY KIND, either express or implied. See the License for the specific languag governing permissions and limitations under the License. */ import { Selector, t } from "testcafe"; -import uuid from "../../../../src/utils/uuid.js"; +/* eslint-disable import/no-relative-packages */ +import uuid from "../../../../../core/src/utils/uuid.js"; import createNetworkLogger from "../../helpers/networkLogger/index.js"; import createFixture from "../../helpers/createFixture/index.js"; import { @@ -24,14 +25,15 @@ import addHtmlToBody from "../../helpers/dom/addHtmlToBody.js"; import { CLICK_LABEL_DATA_ATTRIBUTE, INTERACT_ID_DATA_ATTRIBUTE, -} from "../../../../src/components/Personalization/handlers/createDecorateProposition.js"; -import { ADOBE_JOURNEY_OPTIMIZER } from "../../../../src/constants/decisionProvider.js"; +} from "../../../../../core/src/components/Personalization/handlers/createDecorateProposition.js"; +import { ADOBE_JOURNEY_OPTIMIZER } from "../../../../../core/src/constants/decisionProvider.js"; import { ALWAYS, DECORATED_ELEMENTS_ONLY, NEVER, -} from "../../../../src/constants/propositionInteractionType.js"; -import { DOM_ACTION_COLLECT_INTERACTIONS } from "../../../../src/components/Personalization/dom-actions/initDomActionsModules.js"; +} from "../../../../../core/src/constants/propositionInteractionType.js"; +import { DOM_ACTION_COLLECT_INTERACTIONS } from "../../../../../core/src/components/Personalization/dom-actions/initDomActionsModules.js"; +/* eslint-enable import/no-relative-packages */ import { responseStatus } from "../../helpers/assertions/index.js"; const REASONABLE_WAIT_TIME = 250; diff --git a/packages/core/test/functional/specs/Personalization/C205528.js b/packages/browser/test/functional/specs/Personalization/C205528.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C205528.js rename to packages/browser/test/functional/specs/Personalization/C205528.js diff --git a/packages/core/test/functional/specs/Personalization/C205529.js b/packages/browser/test/functional/specs/Personalization/C205529.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C205529.js rename to packages/browser/test/functional/specs/Personalization/C205529.js diff --git a/packages/core/test/functional/specs/Personalization/C21636439.js b/packages/browser/test/functional/specs/Personalization/C21636439.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C21636439.js rename to packages/browser/test/functional/specs/Personalization/C21636439.js diff --git a/packages/core/test/functional/specs/Personalization/C21886916.js b/packages/browser/test/functional/specs/Personalization/C21886916.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C21886916.js rename to packages/browser/test/functional/specs/Personalization/C21886916.js diff --git a/packages/core/test/functional/specs/Personalization/C22098199.js b/packages/browser/test/functional/specs/Personalization/C22098199.js similarity index 96% rename from packages/core/test/functional/specs/Personalization/C22098199.js rename to packages/browser/test/functional/specs/Personalization/C22098199.js index 6bca5100e..3bed933c8 100644 --- a/packages/core/test/functional/specs/Personalization/C22098199.js +++ b/packages/browser/test/functional/specs/Personalization/C22098199.js @@ -10,7 +10,8 @@ OF ANY KIND, either express or implied. See the License for the specific languag governing permissions and limitations under the License. */ import { Selector, t } from "testcafe"; -import uuid from "../../../../src/utils/uuid.js"; +// eslint-disable-next-line import/no-relative-packages +import uuid from "../../../../../core/src/utils/uuid.js"; import createNetworkLogger from "../../helpers/networkLogger/index.js"; import createFixture from "../../helpers/createFixture/index.js"; import { @@ -21,7 +22,8 @@ import createAlloyProxy from "../../helpers/createAlloyProxy.js"; import getBaseConfig from "../../helpers/getBaseConfig.js"; import { TEST_PAGE as TEST_PAGE_URL } from "../../helpers/constants/url.js"; import addHtmlToBody from "../../helpers/dom/addHtmlToBody.js"; -import { ADOBE_JOURNEY_OPTIMIZER } from "../../../../src/constants/decisionProvider.js"; +// eslint-disable-next-line import/no-relative-packages +import { ADOBE_JOURNEY_OPTIMIZER } from "../../../../../core/src/constants/decisionProvider.js"; const networkLogger = createNetworkLogger(); const { edgeEndpointLogs } = networkLogger; diff --git a/packages/core/test/functional/specs/Personalization/C28755.js b/packages/browser/test/functional/specs/Personalization/C28755.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C28755.js rename to packages/browser/test/functional/specs/Personalization/C28755.js diff --git a/packages/core/test/functional/specs/Personalization/C28756.js b/packages/browser/test/functional/specs/Personalization/C28756.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C28756.js rename to packages/browser/test/functional/specs/Personalization/C28756.js diff --git a/packages/core/test/functional/specs/Personalization/C28757.js b/packages/browser/test/functional/specs/Personalization/C28757.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C28757.js rename to packages/browser/test/functional/specs/Personalization/C28757.js diff --git a/packages/core/test/functional/specs/Personalization/C28758.js b/packages/browser/test/functional/specs/Personalization/C28758.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C28758.js rename to packages/browser/test/functional/specs/Personalization/C28758.js diff --git a/packages/core/test/functional/specs/Personalization/C28759.js b/packages/browser/test/functional/specs/Personalization/C28759.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C28759.js rename to packages/browser/test/functional/specs/Personalization/C28759.js diff --git a/packages/core/test/functional/specs/Personalization/C28760.js b/packages/browser/test/functional/specs/Personalization/C28760.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C28760.js rename to packages/browser/test/functional/specs/Personalization/C28760.js diff --git a/packages/core/test/functional/specs/Personalization/C3272624.js b/packages/browser/test/functional/specs/Personalization/C3272624.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C3272624.js rename to packages/browser/test/functional/specs/Personalization/C3272624.js diff --git a/packages/core/test/functional/specs/Personalization/C44363.js b/packages/browser/test/functional/specs/Personalization/C44363.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C44363.js rename to packages/browser/test/functional/specs/Personalization/C44363.js diff --git a/packages/core/test/functional/specs/Personalization/C5298194.js b/packages/browser/test/functional/specs/Personalization/C5298194.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C5298194.js rename to packages/browser/test/functional/specs/Personalization/C5298194.js diff --git a/packages/core/test/functional/specs/Personalization/C5805675.js b/packages/browser/test/functional/specs/Personalization/C5805675.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C5805675.js rename to packages/browser/test/functional/specs/Personalization/C5805675.js diff --git a/packages/core/test/functional/specs/Personalization/C5805676.js b/packages/browser/test/functional/specs/Personalization/C5805676.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C5805676.js rename to packages/browser/test/functional/specs/Personalization/C5805676.js diff --git a/packages/core/test/functional/specs/Personalization/C6364797.js b/packages/browser/test/functional/specs/Personalization/C6364797.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C6364797.js rename to packages/browser/test/functional/specs/Personalization/C6364797.js diff --git a/packages/core/test/functional/specs/Personalization/C6364798.js b/packages/browser/test/functional/specs/Personalization/C6364798.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C6364798.js rename to packages/browser/test/functional/specs/Personalization/C6364798.js diff --git a/packages/core/test/functional/specs/Personalization/C6364799.js b/packages/browser/test/functional/specs/Personalization/C6364799.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C6364799.js rename to packages/browser/test/functional/specs/Personalization/C6364799.js diff --git a/packages/core/test/functional/specs/Personalization/C6364800.js b/packages/browser/test/functional/specs/Personalization/C6364800.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C6364800.js rename to packages/browser/test/functional/specs/Personalization/C6364800.js diff --git a/packages/core/test/functional/specs/Personalization/C6984408.js b/packages/browser/test/functional/specs/Personalization/C6984408.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C6984408.js rename to packages/browser/test/functional/specs/Personalization/C6984408.js diff --git a/packages/core/test/functional/specs/Personalization/C7494472.js b/packages/browser/test/functional/specs/Personalization/C7494472.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C7494472.js rename to packages/browser/test/functional/specs/Personalization/C7494472.js diff --git a/packages/core/test/functional/specs/Personalization/C7498683.js b/packages/browser/test/functional/specs/Personalization/C7498683.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C7498683.js rename to packages/browser/test/functional/specs/Personalization/C7498683.js diff --git a/packages/core/test/functional/specs/Personalization/C753469.js b/packages/browser/test/functional/specs/Personalization/C753469.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C753469.js rename to packages/browser/test/functional/specs/Personalization/C753469.js diff --git a/packages/core/test/functional/specs/Personalization/C753470.js b/packages/browser/test/functional/specs/Personalization/C753470.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C753470.js rename to packages/browser/test/functional/specs/Personalization/C753470.js diff --git a/packages/core/test/functional/specs/Personalization/C7638574.js b/packages/browser/test/functional/specs/Personalization/C7638574.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C7638574.js rename to packages/browser/test/functional/specs/Personalization/C7638574.js diff --git a/packages/core/test/functional/specs/Personalization/C782718.js b/packages/browser/test/functional/specs/Personalization/C782718.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C782718.js rename to packages/browser/test/functional/specs/Personalization/C782718.js diff --git a/packages/core/test/functional/specs/Personalization/C782719.js b/packages/browser/test/functional/specs/Personalization/C782719.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C782719.js rename to packages/browser/test/functional/specs/Personalization/C782719.js diff --git a/packages/core/test/functional/specs/Personalization/C7878996.js b/packages/browser/test/functional/specs/Personalization/C7878996.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C7878996.js rename to packages/browser/test/functional/specs/Personalization/C7878996.js diff --git a/packages/core/test/functional/specs/Personalization/C8631576.js b/packages/browser/test/functional/specs/Personalization/C8631576.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C8631576.js rename to packages/browser/test/functional/specs/Personalization/C8631576.js diff --git a/packages/core/test/functional/specs/Personalization/C8631577.js b/packages/browser/test/functional/specs/Personalization/C8631577.js similarity index 100% rename from packages/core/test/functional/specs/Personalization/C8631577.js rename to packages/browser/test/functional/specs/Personalization/C8631577.js diff --git a/packages/core/test/functional/specs/Personalization/C9932846.js b/packages/browser/test/functional/specs/Personalization/C9932846.js similarity index 88% rename from packages/core/test/functional/specs/Personalization/C9932846.js rename to packages/browser/test/functional/specs/Personalization/C9932846.js index 1f8242fd4..d60427d44 100644 --- a/packages/core/test/functional/specs/Personalization/C9932846.js +++ b/packages/browser/test/functional/specs/Personalization/C9932846.js @@ -1,3 +1,15 @@ +/* +Copyright 2026 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + /* eslint-disable no-underscore-dangle */ import { ClientFunction, t } from "testcafe"; diff --git a/packages/core/test/functional/specs/RulesEngine/C13348429.js b/packages/browser/test/functional/specs/RulesEngine/C13348429.js similarity index 100% rename from packages/core/test/functional/specs/RulesEngine/C13348429.js rename to packages/browser/test/functional/specs/RulesEngine/C13348429.js diff --git a/packages/core/test/functional/specs/RulesEngine/C13405889.js b/packages/browser/test/functional/specs/RulesEngine/C13405889.js similarity index 100% rename from packages/core/test/functional/specs/RulesEngine/C13405889.js rename to packages/browser/test/functional/specs/RulesEngine/C13405889.js diff --git a/packages/core/test/functional/specs/RulesEngine/C13419240.js b/packages/browser/test/functional/specs/RulesEngine/C13419240.js similarity index 100% rename from packages/core/test/functional/specs/RulesEngine/C13419240.js rename to packages/browser/test/functional/specs/RulesEngine/C13419240.js diff --git a/packages/core/test/functional/specs/Visitor/C35448.js b/packages/browser/test/functional/specs/Visitor/C35448.js similarity index 100% rename from packages/core/test/functional/specs/Visitor/C35448.js rename to packages/browser/test/functional/specs/Visitor/C35448.js diff --git a/packages/core/test/functional/specs/Visitor/C35450.js b/packages/browser/test/functional/specs/Visitor/C35450.js similarity index 100% rename from packages/core/test/functional/specs/Visitor/C35450.js rename to packages/browser/test/functional/specs/Visitor/C35450.js diff --git a/packages/core/test/functional/specs/Visitor/C36908.js b/packages/browser/test/functional/specs/Visitor/C36908.js similarity index 100% rename from packages/core/test/functional/specs/Visitor/C36908.js rename to packages/browser/test/functional/specs/Visitor/C36908.js diff --git a/packages/core/test/functional/specs/Visitor/C36909.js b/packages/browser/test/functional/specs/Visitor/C36909.js similarity index 100% rename from packages/core/test/functional/specs/Visitor/C36909.js rename to packages/browser/test/functional/specs/Visitor/C36909.js diff --git a/packages/core/test/integration/helpers/advertising.js b/packages/browser/test/integration/helpers/advertising.js similarity index 90% rename from packages/core/test/integration/helpers/advertising.js rename to packages/browser/test/integration/helpers/advertising.js index 06d37fadb..9b1f8df19 100644 --- a/packages/core/test/integration/helpers/advertising.js +++ b/packages/browser/test/integration/helpers/advertising.js @@ -1,10 +1,14 @@ /* -Copyright 2025 Adobe. All rights reserved. +Copyright 2026 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 -*/ +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ import { expect } from "./testsSetup/extend.js"; export const ADVERTISING_CONSTANTS = Object.freeze({ diff --git a/packages/core/test/integration/helpers/alloy/clean.js b/packages/browser/test/integration/helpers/alloy/clean.js similarity index 100% rename from packages/core/test/integration/helpers/alloy/clean.js rename to packages/browser/test/integration/helpers/alloy/clean.js diff --git a/packages/core/test/integration/helpers/alloy/config.js b/packages/browser/test/integration/helpers/alloy/config.js similarity index 100% rename from packages/core/test/integration/helpers/alloy/config.js rename to packages/browser/test/integration/helpers/alloy/config.js diff --git a/packages/core/test/integration/helpers/alloy/setup.js b/packages/browser/test/integration/helpers/alloy/setup.js similarity index 91% rename from packages/core/test/integration/helpers/alloy/setup.js rename to packages/browser/test/integration/helpers/alloy/setup.js index dcf03ad6a..7633c3c97 100644 --- a/packages/core/test/integration/helpers/alloy/setup.js +++ b/packages/browser/test/integration/helpers/alloy/setup.js @@ -15,7 +15,7 @@ const { readFile } = server.commands; export default async () => { const alloyBaseCode = await readFile( - `${server.config.root}/distTest/baseCode.min.js`, + `${server.config.root}/packages/browser/distTest/baseCode.min.js`, ); document.body.innerHTML = "Alloy Test Page"; @@ -28,7 +28,7 @@ export default async () => { const alloyScriptTag = document.createElement("script"); alloyScriptTag.type = "text/javascript"; alloyScriptTag.setAttribute("async", true); - alloyScriptTag.src = "/dist/alloy.js"; + alloyScriptTag.src = "/packages/browser/dist/alloy.js"; await new Promise((resolve, reject) => { alloyScriptTag.onload = () => resolve(); diff --git a/packages/core/test/integration/helpers/alloy/setupBaseCode.js b/packages/browser/test/integration/helpers/alloy/setupBaseCode.js similarity index 93% rename from packages/core/test/integration/helpers/alloy/setupBaseCode.js rename to packages/browser/test/integration/helpers/alloy/setupBaseCode.js index 6efb27386..eb29b9d1c 100644 --- a/packages/core/test/integration/helpers/alloy/setupBaseCode.js +++ b/packages/browser/test/integration/helpers/alloy/setupBaseCode.js @@ -16,7 +16,7 @@ const { readFile } = server.commands; export default async () => { const alloyBaseCode = await readFile( - `${server.config.root}/distTest/baseCode.min.js`, + `${server.config.root}/packages/browser/distTest/baseCode.min.js`, ); document.body.innerHTML = "Alloy Test Page"; diff --git a/packages/core/test/integration/helpers/constants/cookies.js b/packages/browser/test/integration/helpers/constants/cookies.js similarity index 100% rename from packages/core/test/integration/helpers/constants/cookies.js rename to packages/browser/test/integration/helpers/constants/cookies.js diff --git a/packages/core/test/integration/helpers/constants/domains.js b/packages/browser/test/integration/helpers/constants/domains.js similarity index 100% rename from packages/core/test/integration/helpers/constants/domains.js rename to packages/browser/test/integration/helpers/constants/domains.js diff --git a/packages/core/test/integration/helpers/mocks/contentCardsAndEventHistoryOperations.json b/packages/browser/test/integration/helpers/mocks/contentCardsAndEventHistoryOperations.json similarity index 100% rename from packages/core/test/integration/helpers/mocks/contentCardsAndEventHistoryOperations.json rename to packages/browser/test/integration/helpers/mocks/contentCardsAndEventHistoryOperations.json diff --git a/packages/core/test/integration/helpers/mocks/demdexResponse.json b/packages/browser/test/integration/helpers/mocks/demdexResponse.json similarity index 100% rename from packages/core/test/integration/helpers/mocks/demdexResponse.json rename to packages/browser/test/integration/helpers/mocks/demdexResponse.json diff --git a/packages/core/test/integration/helpers/mocks/emptyEventResponse.json b/packages/browser/test/integration/helpers/mocks/emptyEventResponse.json similarity index 100% rename from packages/core/test/integration/helpers/mocks/emptyEventResponse.json rename to packages/browser/test/integration/helpers/mocks/emptyEventResponse.json diff --git a/packages/core/test/integration/helpers/mocks/firstPartyAlloyResponse.json b/packages/browser/test/integration/helpers/mocks/firstPartyAlloyResponse.json similarity index 100% rename from packages/core/test/integration/helpers/mocks/firstPartyAlloyResponse.json rename to packages/browser/test/integration/helpers/mocks/firstPartyAlloyResponse.json diff --git a/packages/core/test/integration/helpers/mocks/inAppMessageResponse.json b/packages/browser/test/integration/helpers/mocks/inAppMessageResponse.json similarity index 100% rename from packages/core/test/integration/helpers/mocks/inAppMessageResponse.json rename to packages/browser/test/integration/helpers/mocks/inAppMessageResponse.json diff --git a/packages/core/test/integration/helpers/mocks/mediaSessionResponse.json b/packages/browser/test/integration/helpers/mocks/mediaSessionResponse.json similarity index 100% rename from packages/core/test/integration/helpers/mocks/mediaSessionResponse.json rename to packages/browser/test/integration/helpers/mocks/mediaSessionResponse.json diff --git a/packages/core/test/integration/helpers/mocks/sendEventErrorResponse.json b/packages/browser/test/integration/helpers/mocks/sendEventErrorResponse.json similarity index 100% rename from packages/core/test/integration/helpers/mocks/sendEventErrorResponse.json rename to packages/browser/test/integration/helpers/mocks/sendEventErrorResponse.json diff --git a/packages/core/test/integration/helpers/mocks/sendEventResponse.json b/packages/browser/test/integration/helpers/mocks/sendEventResponse.json similarity index 100% rename from packages/core/test/integration/helpers/mocks/sendEventResponse.json rename to packages/browser/test/integration/helpers/mocks/sendEventResponse.json diff --git a/packages/core/test/integration/helpers/mocks/targetCustomCodeAction.json b/packages/browser/test/integration/helpers/mocks/targetCustomCodeAction.json similarity index 100% rename from packages/core/test/integration/helpers/mocks/targetCustomCodeAction.json rename to packages/browser/test/integration/helpers/mocks/targetCustomCodeAction.json diff --git a/packages/core/test/integration/helpers/mocks/targetPrependHtmlAction.json b/packages/browser/test/integration/helpers/mocks/targetPrependHtmlAction.json similarity index 100% rename from packages/core/test/integration/helpers/mocks/targetPrependHtmlAction.json rename to packages/browser/test/integration/helpers/mocks/targetPrependHtmlAction.json diff --git a/packages/core/test/integration/helpers/mswjs/browserWorker.js b/packages/browser/test/integration/helpers/mswjs/browserWorker.js similarity index 100% rename from packages/core/test/integration/helpers/mswjs/browserWorker.js rename to packages/browser/test/integration/helpers/mswjs/browserWorker.js diff --git a/packages/core/test/integration/helpers/mswjs/handlers.js b/packages/browser/test/integration/helpers/mswjs/handlers.js similarity index 83% rename from packages/core/test/integration/helpers/mswjs/handlers.js rename to packages/browser/test/integration/helpers/mswjs/handlers.js index 09a78a949..742fbe993 100644 --- a/packages/core/test/integration/helpers/mswjs/handlers.js +++ b/packages/browser/test/integration/helpers/mswjs/handlers.js @@ -27,7 +27,7 @@ export const sendEventHandler = http.post( if (configId === "bc1a10e0-aee4-4e0e-ac5b-cdbb9abbec83") { return HttpResponse.text( await readFile( - `${server.config.root}/packages/core/test/integration/helpers/mocks/sendEventResponse.json`, + `${server.config.root}/packages/browser/test/integration/helpers/mocks/sendEventResponse.json`, ), ); } @@ -46,7 +46,7 @@ export const sendEventErrorHandler = http.post( if (configId === "BOGUS") { return HttpResponse.text( await readFile( - `${server.config.root}/packages/core/test/integration/helpers/mocks/sendEventErrorResponse.json`, + `${server.config.root}/packages/browser/test/integration/helpers/mocks/sendEventErrorResponse.json`, ), { status: 400, @@ -68,7 +68,7 @@ export const demdexHandler = http.post( if (configId === "bc1a10e0-aee4-4e0e-ac5b-cdbb9abbec83") { return HttpResponse.text( await readFile( - `${server.config.root}/packages/core/test/integration/helpers/mocks/demdexResponse.json`, + `${server.config.root}/packages/browser/test/integration/helpers/mocks/demdexResponse.json`, ), ); } @@ -87,7 +87,7 @@ export const firstPartyAlloyHandler = http.post( if (configId === "bc1a10e0-aee4-4e0e-ac5b-cdbb9abbec83") { return HttpResponse.text( await readFile( - `${server.config.root}/packages/core/test/integration/helpers/mocks/firstPartyAlloyResponse.json`, + `${server.config.root}/packages/browser/test/integration/helpers/mocks/firstPartyAlloyResponse.json`, ), ); } @@ -106,7 +106,7 @@ export const inAppMessageHandler = http.post( if (configId === "bc1a10e0-aee4-4e0e-ac5b-cdbb9abbec83") { return HttpResponse.text( await readFile( - `${server.config.root}/packages/core/test/integration/helpers/mocks/inAppMessageResponse.json`, + `${server.config.root}/packages/browser/test/integration/helpers/mocks/inAppMessageResponse.json`, ), ); } @@ -124,7 +124,7 @@ export const contentCardsAndEventHistoryOperationsOnSendEvent = http.post( if (configId === "bc1a10e0-aee4-4e0e-ac5b-cdbb9abbec83") { let response = await readFile( - `${server.config.root}/packages/core/test/integration/helpers/mocks/contentCardsAndEventHistoryOperations.json`, + `${server.config.root}/packages/browser/test/integration/helpers/mocks/contentCardsAndEventHistoryOperations.json`, ); response = response.replace( "{{value}}", @@ -147,7 +147,7 @@ export const contentCardsAndEventHistoryOperations = http.post( if (configId === "bc1a10e0-aee4-4e0e-ac5b-cdbb9abbec83") { let response = await readFile( - `${server.config.root}/packages/core/test/integration/helpers/mocks/contentCardsAndEventHistoryOperations.json`, + `${server.config.root}/packages/browser/test/integration/helpers/mocks/contentCardsAndEventHistoryOperations.json`, ); response = response.replace("{{value}}", "someOtherValue"); @@ -186,7 +186,7 @@ export const mediaSessionHandler = http.post( if (configId === "bc1a10e0-aee4-4e0e-ac5b-cdbb9abbec83") { return HttpResponse.text( await readFile( - `${server.config.root}/packages/core/test/integration/helpers/mocks/mediaSessionResponse.json`, + `${server.config.root}/packages/browser/test/integration/helpers/mocks/mediaSessionResponse.json`, ), ); } @@ -221,7 +221,7 @@ export const customCodeHandler = http.post( if (hasSchemas && hasSchemas.length > 0) { return HttpResponse.text( await readFile( - `${server.config.root}/packages/core/test/integration/helpers/mocks/targetCustomCodeAction.json`, + `${server.config.root}/packages/browser/test/integration/helpers/mocks/targetCustomCodeAction.json`, ), ); } @@ -229,7 +229,7 @@ export const customCodeHandler = http.post( // Otherwise, return response without custom code activity return HttpResponse.text( await readFile( - `${server.config.root}/packages/core/test/integration/helpers/mocks/emptyEventResponse.json`, + `${server.config.root}/packages/browser/test/integration/helpers/mocks/emptyEventResponse.json`, ), ); } @@ -256,7 +256,7 @@ export const prependHtmlHandler = http.post( if (hasSchemas && hasSchemas.length > 0) { return HttpResponse.text( await readFile( - `${server.config.root}/packages/core/test/integration/helpers/mocks/targetPrependHtmlAction.json`, + `${server.config.root}/packages/browser/test/integration/helpers/mocks/targetPrependHtmlAction.json`, ), ); } @@ -264,7 +264,7 @@ export const prependHtmlHandler = http.post( // Otherwise, return response without prependHtml activity return HttpResponse.text( await readFile( - `${server.config.root}/packages/core/test/integration/helpers/mocks/emptyEventResponse.json`, + `${server.config.root}/packages/browser/test/integration/helpers/mocks/emptyEventResponse.json`, ), ); } diff --git a/packages/core/test/integration/helpers/mswjs/networkRecorder.js b/packages/browser/test/integration/helpers/mswjs/networkRecorder.js similarity index 100% rename from packages/core/test/integration/helpers/mswjs/networkRecorder.js rename to packages/browser/test/integration/helpers/mswjs/networkRecorder.js diff --git a/packages/core/test/integration/helpers/responses/createResponse.js b/packages/browser/test/integration/helpers/responses/createResponse.js similarity index 81% rename from packages/core/test/integration/helpers/responses/createResponse.js rename to packages/browser/test/integration/helpers/responses/createResponse.js index c41e8887a..d3adab100 100644 --- a/packages/core/test/integration/helpers/responses/createResponse.js +++ b/packages/browser/test/integration/helpers/responses/createResponse.js @@ -10,6 +10,7 @@ OF ANY KIND, either express or implied. See the License for the specific languag governing permissions and limitations under the License. */ -import injectCreateResponse from "../../../../src/core/injectCreateResponse.js"; +// eslint-disable-next-line import/no-relative-packages +import injectCreateResponse from "../../../../../core/src/core/injectCreateResponse.js"; export default injectCreateResponse({ logger: console }); diff --git a/packages/core/test/integration/helpers/testsSetup/extend.js b/packages/browser/test/integration/helpers/testsSetup/extend.js similarity index 73% rename from packages/core/test/integration/helpers/testsSetup/extend.js rename to packages/browser/test/integration/helpers/testsSetup/extend.js index 471ae126b..f33243cae 100644 --- a/packages/core/test/integration/helpers/testsSetup/extend.js +++ b/packages/browser/test/integration/helpers/testsSetup/extend.js @@ -1,3 +1,15 @@ +/* +Copyright 2026 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ + /* eslint-disable no-empty-pattern */ import { test as baseTest } from "vitest"; import { createWorker } from "../mswjs/browserWorker.js"; diff --git a/packages/core/test/integration/helpers/utils/deleteCookies.js b/packages/browser/test/integration/helpers/utils/deleteCookies.js similarity index 100% rename from packages/core/test/integration/helpers/utils/deleteCookies.js rename to packages/browser/test/integration/helpers/utils/deleteCookies.js diff --git a/packages/core/test/integration/helpers/utils/getOnCommandResolvedPromise.js b/packages/browser/test/integration/helpers/utils/getOnCommandResolvedPromise.js similarity index 100% rename from packages/core/test/integration/helpers/utils/getOnCommandResolvedPromise.js rename to packages/browser/test/integration/helpers/utils/getOnCommandResolvedPromise.js diff --git a/packages/core/test/integration/helpers/utils/location.js b/packages/browser/test/integration/helpers/utils/location.js similarity index 100% rename from packages/core/test/integration/helpers/utils/location.js rename to packages/browser/test/integration/helpers/utils/location.js diff --git a/packages/core/test/integration/helpers/utils/searchForLogMessage.js b/packages/browser/test/integration/helpers/utils/searchForLogMessage.js similarity index 100% rename from packages/core/test/integration/helpers/utils/searchForLogMessage.js rename to packages/browser/test/integration/helpers/utils/searchForLogMessage.js diff --git a/packages/core/test/integration/helpers/utils/waitFor.js b/packages/browser/test/integration/helpers/utils/waitFor.js similarity index 100% rename from packages/core/test/integration/helpers/utils/waitFor.js rename to packages/browser/test/integration/helpers/utils/waitFor.js diff --git a/packages/core/test/integration/specs/AJO/content_cards_and_event_history.spec.js b/packages/browser/test/integration/specs/AJO/content_cards_and_event_history.spec.js similarity index 100% rename from packages/core/test/integration/specs/AJO/content_cards_and_event_history.spec.js rename to packages/browser/test/integration/specs/AJO/content_cards_and_event_history.spec.js diff --git a/packages/core/test/integration/specs/AJO/inapp_messages.spec.js b/packages/browser/test/integration/specs/AJO/inapp_messages.spec.js similarity index 100% rename from packages/core/test/integration/specs/AJO/inapp_messages.spec.js rename to packages/browser/test/integration/specs/AJO/inapp_messages.spec.js diff --git a/packages/core/test/integration/specs/Advertising/clickthrough_both.spec.js b/packages/browser/test/integration/specs/Advertising/clickthrough_both.spec.js similarity index 97% rename from packages/core/test/integration/specs/Advertising/clickthrough_both.spec.js rename to packages/browser/test/integration/specs/Advertising/clickthrough_both.spec.js index 3c23340f7..613b1914c 100644 --- a/packages/core/test/integration/specs/Advertising/clickthrough_both.spec.js +++ b/packages/browser/test/integration/specs/Advertising/clickthrough_both.spec.js @@ -1,5 +1,5 @@ /* -Copyright 2025 Adobe. All rights reserved. +Copyright 2026 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 @@ -9,6 +9,7 @@ the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTA OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ + import { test, describe, expect } from "../../helpers/testsSetup/extend.js"; import { sendEventHandler } from "../../helpers/mswjs/handlers.js"; import alloyConfig from "../../helpers/alloy/config.js"; diff --git a/packages/core/test/integration/specs/Advertising/clickthrough_duplicate_skwcid.spec.js b/packages/browser/test/integration/specs/Advertising/clickthrough_duplicate_skwcid.spec.js similarity index 97% rename from packages/core/test/integration/specs/Advertising/clickthrough_duplicate_skwcid.spec.js rename to packages/browser/test/integration/specs/Advertising/clickthrough_duplicate_skwcid.spec.js index 2c40d9805..97d0ec138 100644 --- a/packages/core/test/integration/specs/Advertising/clickthrough_duplicate_skwcid.spec.js +++ b/packages/browser/test/integration/specs/Advertising/clickthrough_duplicate_skwcid.spec.js @@ -1,5 +1,5 @@ /* -Copyright 2025 Adobe. All rights reserved. +Copyright 2026 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 diff --git a/packages/core/test/integration/specs/Advertising/clickthrough_efid.spec.js b/packages/browser/test/integration/specs/Advertising/clickthrough_efid.spec.js similarity index 97% rename from packages/core/test/integration/specs/Advertising/clickthrough_efid.spec.js rename to packages/browser/test/integration/specs/Advertising/clickthrough_efid.spec.js index 416bdcd3b..9a36f619e 100644 --- a/packages/core/test/integration/specs/Advertising/clickthrough_efid.spec.js +++ b/packages/browser/test/integration/specs/Advertising/clickthrough_efid.spec.js @@ -1,5 +1,5 @@ /* -Copyright 2025 Adobe. All rights reserved. +Copyright 2026 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 diff --git a/packages/core/test/integration/specs/Advertising/clickthrough_skwcid.spec.js b/packages/browser/test/integration/specs/Advertising/clickthrough_skwcid.spec.js similarity index 97% rename from packages/core/test/integration/specs/Advertising/clickthrough_skwcid.spec.js rename to packages/browser/test/integration/specs/Advertising/clickthrough_skwcid.spec.js index 92c8e2391..08fd2e183 100644 --- a/packages/core/test/integration/specs/Advertising/clickthrough_skwcid.spec.js +++ b/packages/browser/test/integration/specs/Advertising/clickthrough_skwcid.spec.js @@ -1,5 +1,5 @@ /* -Copyright 2025 Adobe. All rights reserved. +Copyright 2026 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 diff --git a/packages/core/test/integration/specs/Advertising/consent_gate.spec.js b/packages/browser/test/integration/specs/Advertising/consent_gate.spec.js similarity index 100% rename from packages/core/test/integration/specs/Advertising/consent_gate.spec.js rename to packages/browser/test/integration/specs/Advertising/consent_gate.spec.js diff --git a/packages/core/test/integration/specs/Advertising/options_modes.spec.js b/packages/browser/test/integration/specs/Advertising/options_modes.spec.js similarity index 89% rename from packages/core/test/integration/specs/Advertising/options_modes.spec.js rename to packages/browser/test/integration/specs/Advertising/options_modes.spec.js index 133d25159..11bc6d8b7 100644 --- a/packages/core/test/integration/specs/Advertising/options_modes.spec.js +++ b/packages/browser/test/integration/specs/Advertising/options_modes.spec.js @@ -1,6 +1,13 @@ /* -Copyright 2025 Adobe. All rights reserved. +Copyright 2026 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. */ import { test, diff --git a/packages/core/test/integration/specs/Advertising/viewthrough_ids.spec.js b/packages/browser/test/integration/specs/Advertising/viewthrough_ids.spec.js similarity index 72% rename from packages/core/test/integration/specs/Advertising/viewthrough_ids.spec.js rename to packages/browser/test/integration/specs/Advertising/viewthrough_ids.spec.js index 810acb788..080574c04 100644 --- a/packages/core/test/integration/specs/Advertising/viewthrough_ids.spec.js +++ b/packages/browser/test/integration/specs/Advertising/viewthrough_ids.spec.js @@ -1,7 +1,15 @@ /* -Copyright 2025 Adobe. All rights reserved. +Copyright 2026 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. */ + import { test, describe, expect } from "../../helpers/testsSetup/extend.js"; import { sendEventHandler } from "../../helpers/mswjs/handlers.js"; import alloyConfig from "../../helpers/alloy/config.js"; diff --git a/packages/core/test/integration/specs/Audiences/audiences.spec.js b/packages/browser/test/integration/specs/Audiences/audiences.spec.js similarity index 100% rename from packages/core/test/integration/specs/Audiences/audiences.spec.js rename to packages/browser/test/integration/specs/Audiences/audiences.spec.js diff --git a/packages/core/test/integration/specs/CNAME/cname.spec.js b/packages/browser/test/integration/specs/CNAME/cname.spec.js similarity index 95% rename from packages/core/test/integration/specs/CNAME/cname.spec.js rename to packages/browser/test/integration/specs/CNAME/cname.spec.js index 23c41559f..f4f9fbd45 100644 --- a/packages/core/test/integration/specs/CNAME/cname.spec.js +++ b/packages/browser/test/integration/specs/CNAME/cname.spec.js @@ -14,7 +14,7 @@ import { describe, test, expect } from "../../helpers/testsSetup/extend.js"; import deleteCookies from "../../helpers/utils/deleteCookies.js"; import createResponse from "../../helpers/responses/createResponse.js"; import { FIRST_PARTY_DOMAIN } from "../../helpers/constants/domains.js"; -import { MAIN_IDENTITY_COOKIE_NAME } from "../../../functional/helpers/constants/cookies.js"; +import { MAIN_IDENTITY_COOKIE_NAME } from "../../helpers/constants/cookies.js"; import { demdexHandler, firstPartyAlloyHandler, diff --git a/packages/core/test/integration/specs/Command Logic/commandQueueing.spec.js b/packages/browser/test/integration/specs/Command Logic/commandQueueing.spec.js similarity index 100% rename from packages/core/test/integration/specs/Command Logic/commandQueueing.spec.js rename to packages/browser/test/integration/specs/Command Logic/commandQueueing.spec.js diff --git a/packages/core/test/integration/specs/Command Logic/configOverrides.spec.js b/packages/browser/test/integration/specs/Command Logic/configOverrides.spec.js similarity index 100% rename from packages/core/test/integration/specs/Command Logic/configOverrides.spec.js rename to packages/browser/test/integration/specs/Command Logic/configOverrides.spec.js diff --git a/packages/core/test/integration/specs/Command Logic/configureCommand.spec.js b/packages/browser/test/integration/specs/Command Logic/configureCommand.spec.js similarity index 100% rename from packages/core/test/integration/specs/Command Logic/configureCommand.spec.js rename to packages/browser/test/integration/specs/Command Logic/configureCommand.spec.js diff --git a/packages/core/test/integration/specs/Command Logic/edgeConfigIdParameter.spec.js b/packages/browser/test/integration/specs/Command Logic/edgeConfigIdParameter.spec.js similarity index 100% rename from packages/core/test/integration/specs/Command Logic/edgeConfigIdParameter.spec.js rename to packages/browser/test/integration/specs/Command Logic/edgeConfigIdParameter.spec.js diff --git a/packages/core/test/integration/specs/Command Logic/queueTimeMillis.spec.js b/packages/browser/test/integration/specs/Command Logic/queueTimeMillis.spec.js similarity index 100% rename from packages/core/test/integration/specs/Command Logic/queueTimeMillis.spec.js rename to packages/browser/test/integration/specs/Command Logic/queueTimeMillis.spec.js diff --git a/packages/core/test/integration/specs/Command Logic/sendEventCommand.spec.js b/packages/browser/test/integration/specs/Command Logic/sendEventCommand.spec.js similarity index 100% rename from packages/core/test/integration/specs/Command Logic/sendEventCommand.spec.js rename to packages/browser/test/integration/specs/Command Logic/sendEventCommand.spec.js diff --git a/packages/core/test/integration/specs/Command Logic/unknownCommand.spec.js b/packages/browser/test/integration/specs/Command Logic/unknownCommand.spec.js similarity index 100% rename from packages/core/test/integration/specs/Command Logic/unknownCommand.spec.js rename to packages/browser/test/integration/specs/Command Logic/unknownCommand.spec.js diff --git a/packages/core/test/integration/specs/Personalization/applyPropositions.spec.js b/packages/browser/test/integration/specs/Personalization/applyPropositions.spec.js similarity index 100% rename from packages/core/test/integration/specs/Personalization/applyPropositions.spec.js rename to packages/browser/test/integration/specs/Personalization/applyPropositions.spec.js diff --git a/packages/core/test/integration/specs/Personalization/identityMapPersistence.spec.js b/packages/browser/test/integration/specs/Personalization/identityMapPersistence.spec.js similarity index 100% rename from packages/core/test/integration/specs/Personalization/identityMapPersistence.spec.js rename to packages/browser/test/integration/specs/Personalization/identityMapPersistence.spec.js diff --git a/packages/core/test/integration/specs/StreamingMedia/mediaEvents.spec.js b/packages/browser/test/integration/specs/StreamingMedia/mediaEvents.spec.js similarity index 100% rename from packages/core/test/integration/specs/StreamingMedia/mediaEvents.spec.js rename to packages/browser/test/integration/specs/StreamingMedia/mediaEvents.spec.js diff --git a/packages/core/test/integration/specs/Target/deduplication_spa.spec.js b/packages/browser/test/integration/specs/Target/deduplication_spa.spec.js similarity index 100% rename from packages/core/test/integration/specs/Target/deduplication_spa.spec.js rename to packages/browser/test/integration/specs/Target/deduplication_spa.spec.js diff --git a/packages/core/.browserslistrc b/packages/core/.browserslistrc new file mode 100644 index 000000000..148350190 --- /dev/null +++ b/packages/core/.browserslistrc @@ -0,0 +1,2 @@ +defaults +not op_mini all diff --git a/packages/core/jsconfig.json b/packages/core/jsconfig.json new file mode 100644 index 000000000..41818f9c0 --- /dev/null +++ b/packages/core/jsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "../../jsconfig.base.json", + "include": ["src/**/*"], + "exclude": ["node_modules", "dist", "distTest"] +} diff --git a/packages/core/package.json b/packages/core/package.json index 837d42540..86dcbfb15 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,17 +1,35 @@ { "name": "@adobe/alloy-core", - "version": "2.29.0", + "version": "1.1.0", "description": "Adobe Experience Platform Web SDK Core (Internal Package)", "type": "module", - "private": true, "repository": { "type": "git", "url": "git+https://github.com/adobe/alloy.git", "directory": "packages/core" }, "exports": { - ".": "./src/index.js", - "./package.json": "./package.json" + "./package.json": "./package.json", + ".": { + "types": "./src/index.js", + "default": "./src/index.js" + }, + "./types.js": { + "types": "./src/types.js", + "default": "./src/types.js" + }, + "./createEventListeners.js": { + "types": "./src/createEventListeners.js", + "default": "./src/createEventListeners.js" + }, + "./componentMetadata.js": { + "types": "./src/componentMetadata.js", + "default": "./src/componentMetadata.js" + }, + "./core/componentCreators.js": { + "types": "./src/core/componentCreators.js", + "default": "./src/core/componentCreators.js" + } }, "author": "Adobe Inc.", "license": "Apache-2.0", diff --git a/packages/core/src/componentMetadata.js b/packages/core/src/componentMetadata.js new file mode 100644 index 000000000..ce72a017f --- /dev/null +++ b/packages/core/src/componentMetadata.js @@ -0,0 +1,41 @@ +/* +Copyright 2025 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ +import fs from "fs"; +import path from "path"; +import { fileURLToPath } from "url"; + +const dirname = path.dirname(fileURLToPath(import.meta.url)); + +const readComponentNames = (relativePath) => { + const absolutePath = path.resolve(dirname, relativePath); + const code = fs.readFileSync(absolutePath, "utf8"); + const exportRegex = /export\s+\{\s*default\s+as\s+([\w$]+)\s*\}/g; + const names = []; + let match; + while ((match = exportRegex.exec(code)) !== null) { + names.push(match[1]); + } + return Object.freeze(names); +}; + +export const optionalComponentNames = readComponentNames( + "./core/componentCreators.js", +); + +export const requiredComponentNames = readComponentNames( + "./core/requiredComponentCreators.js", +); + +export const getComponentMetadata = () => ({ + optional: optionalComponentNames, + required: requiredComponentNames, +}); diff --git a/packages/core/src/components/Advertising/utils/helpers.js b/packages/core/src/components/Advertising/utils/helpers.js index e5ee20d41..9f7a82aad 100644 --- a/packages/core/src/components/Advertising/utils/helpers.js +++ b/packages/core/src/components/Advertising/utils/helpers.js @@ -143,7 +143,7 @@ const isThrottled = (idType, cookieManager) => { ); return Boolean( lastSuccessfulConversion && - now - lastSuccessfulConversion < THROTTLE_WINDOW, + now - lastSuccessfulConversion < THROTTLE_WINDOW, ); }; diff --git a/packages/core/src/components/Context/injectHighEntropyUserAgentHints.js b/packages/core/src/components/Context/injectHighEntropyUserAgentHints.js index 70062f0c4..8dec3cda0 100644 --- a/packages/core/src/components/Context/injectHighEntropyUserAgentHints.js +++ b/packages/core/src/components/Context/injectHighEntropyUserAgentHints.js @@ -23,7 +23,7 @@ export default (navigator) => { } return (event, logger) => { try { - // eslint-disable-next-line compat/compat -- userAgentData support is checked before calling + // eslint-disable-next-line compat/compat -- Feature detection performed above return navigator.userAgentData .getHighEntropyValues(highEntropyUserAgentHints.map((hint) => hint[0])) .then((hints) => { diff --git a/packages/core/src/components/PushNotifications/helpers/getPushSubscriptionDetails.js b/packages/core/src/components/PushNotifications/helpers/getPushSubscriptionDetails.js index 63624d956..f7a7ed55d 100644 --- a/packages/core/src/components/PushNotifications/helpers/getPushSubscriptionDetails.js +++ b/packages/core/src/components/PushNotifications/helpers/getPushSubscriptionDetails.js @@ -55,7 +55,7 @@ const getPushSubscriptionDetails = async ({ vapidPublicKey, window }) => { } const serviceWorkerRegistration = - // eslint-disable-next-line compat/compat + // eslint-disable-next-line compat/compat -- Service worker support is required for push notifications await window.navigator.serviceWorker.getRegistration(); if (!serviceWorkerRegistration) { diff --git a/packages/core/src/components/PushNotifications/request/makeSendPushSubscriptionRequest.js b/packages/core/src/components/PushNotifications/request/makeSendPushSubscriptionRequest.js index e3e316dae..7f855a5ba 100644 --- a/packages/core/src/components/PushNotifications/request/makeSendPushSubscriptionRequest.js +++ b/packages/core/src/components/PushNotifications/request/makeSendPushSubscriptionRequest.js @@ -17,7 +17,7 @@ governing permissions and limitations under the License. /** @import { EdgeRequestExecutor } from '../../../core/edgeNetwork/types.js' */ import { sortObjectKeysRecursively } from "../../../utils/index.js"; -import getPushSubscriptionDetails from "../helpers/getPushSubscriptionDetails.js"; +import getPushSubscriptionDetailsDefault from "../helpers/getPushSubscriptionDetails.js"; import createSendPushSubscriptionRequest from "./createSendPushSubscriptionRequest.js"; import createSendPushSubscriptionPayload from "./createSendPushSubscriptionPayload.js"; import saveToIndexedDb from "../helpers/saveToIndexedDb.js"; @@ -54,6 +54,7 @@ export default async ({ eventManager, identity, window, + getPushSubscriptionDetails = getPushSubscriptionDetailsDefault, }) => { await identity.awaitIdentity(); const ecid = identity.getEcidFromCookie(); diff --git a/packages/core/src/createEventListeners.js b/packages/core/src/createEventListeners.js new file mode 100644 index 000000000..a2c55a50b --- /dev/null +++ b/packages/core/src/createEventListeners.js @@ -0,0 +1,81 @@ +/* +Copyright 2025 Adobe. All rights reserved. +This file is licensed to you under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. You may obtain a copy +of the License at http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software distributed under +the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS +OF ANY KIND, either express or implied. See the License for the specific language +governing permissions and limitations under the License. +*/ +import serviceWorkerPushListener from "./components/PushNotifications/helpers/serviceWorkerPushListener.js"; +import createServiceWorkerNotificationClickListener from "./components/PushNotifications/helpers/serviceWorkerNotificationClickListener.js"; +import readFromIndexedDb from "./components/PushNotifications/helpers/readFromIndexedDb.js"; +import { createMakeSendServiceWorkerTrackingData } from "./components/PushNotifications/request/makeSendServiceWorkerTrackingData.js"; +import uuidv4 from "./utils/uuid.js"; + +/** + * @type {Object} PlatformCapabilities + * @property {Logger} logger + * @property {(url: string, options: object) => Promise} fetch + * + * TODO: Remove dependency on sw (service worker) + */ +const createEventListeners = ({ platform, sw }) => { + const makeSendServiceWorkerTrackingData = + createMakeSendServiceWorkerTrackingData({ + readFromIndexedDb, + uuidv4, + logger: platform.logger, + fetch: platform.fetch, + }); + + const serviceWorkerNotificationClickListener = + createServiceWorkerNotificationClickListener({ + makeSendServiceWorkerTrackingData, + sw, + logger: platform.logger, + }); + + return { + pushNotifications: { + /** + * + * @param {PushEvent} event + * @returns Promise + */ + onPush(event) { + return serviceWorkerPushListener({ + event, + sw, + logger: platform.logger, + }); + }, + /** + * @param {NotificationEvent} event + */ + onNotificationClick(event) { + serviceWorkerNotificationClickListener({ event }); + }, + /** + * + * @param {NotificationEvent} event + */ + async onNotificationClose(event) { + const data = event.notification.data; + + try { + await makeSendServiceWorkerTrackingData({ + /* eslint-disable-next-line no-underscore-dangle */ + xdm: data._xdm.mixins, + actionLabel: "Dismiss", + }); + } catch (error) { + platform.logger.error("Failed to send tracking call:", error); + } + }, + }, + }; +}; +export default createEventListeners; diff --git a/packages/core/src/index.js b/packages/core/src/index.js index 6f8d39073..d9dc7e5dd 100644 --- a/packages/core/src/index.js +++ b/packages/core/src/index.js @@ -29,15 +29,12 @@ import { import getMonitors from "./core/getMonitors.js"; import * as optionalComponents from "./core/componentCreators.js"; -export { default as baseCode } from "./baseCode/index.js"; - const { console } = window; const createNamespacedStorage = injectStorage(window); /** * Creates a custom Alloy instance which can reduce the library size and increase performance. * - * @type {(options: Object) => Function} * @param {Object} [options] - Configuration options for the instance. * @param {string} [options.name=alloy] - The name of the instance. * @param {Array} [options.monitors] - Monitors for the instance. @@ -77,7 +74,6 @@ export const createCustomInstance = (options = {}) => { /** * Creates a new Alloy instance. * - * @type {(options?: Object) => Function} * @param {Object} [options] - Configuration options for the instance. * @param {string} [options.name=alloy] - The name of the instance. * @param {Array} [options.monitors] - (Optional) Monitors for the instance. @@ -103,5 +99,3 @@ export const createInstance = (options = {}) => { components: Object.values(optionalComponents), }); }; - -export { optionalComponents as components }; diff --git a/packages/core/src/standalone.js b/packages/core/src/types.js similarity index 55% rename from packages/core/src/standalone.js rename to packages/core/src/types.js index 1116cba56..7285e1c50 100644 --- a/packages/core/src/standalone.js +++ b/packages/core/src/types.js @@ -1,5 +1,5 @@ /* -Copyright 2020 Adobe. All rights reserved. +Copyright 2025 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 @@ -10,11 +10,12 @@ OF ANY KIND, either express or implied. See the License for the specific languag governing permissions and limitations under the License. */ -// This file is used by rollup to create the browser version that is uploaded to cdn +/** + * @typedef {import("./core/types.js").AlloyMonitor} AlloyMonitor + */ -import core from "./core/index.js"; -import * as components from "./core/componentCreators.js"; +/** + * @typedef {import("./components/PushNotifications/types.js").ServiceWorkerLogger} ServiceWorkerLogger + */ -// If you change this line, check if the custom build script is still working. -// You might need to change the babel plugin in scripts/helpers/entryPointGeneratorBabelPlugin.js. -core({ components: Object.values(components) }); +export const Types = {}; diff --git a/packages/core/src/utils/clamp.js b/packages/core/src/utils/clamp.js index 85fefd6fe..d88f1b8de 100644 --- a/packages/core/src/utils/clamp.js +++ b/packages/core/src/utils/clamp.js @@ -9,7 +9,6 @@ the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTA OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ - /** * Clamps a value between a minimum and maximum value. * @param {number} value - The value to clamp. diff --git a/packages/core/test/unit/helpers/describeValidation.js b/packages/core/test/unit/helpers/describeValidation.js index 01ea9da0a..4ada8da0b 100644 --- a/packages/core/test/unit/helpers/describeValidation.js +++ b/packages/core/test/unit/helpers/describeValidation.js @@ -21,7 +21,7 @@ export default (description, validator, specObjects) => { describe(description, () => { specObjects.forEach( ({ value, expected = value, error = false, warning = false }) => { - if (error) { + if (error && warning) { it(`rejects ${JSON.stringify(value)}`, () => { const logger = { warn: vi.fn(), @@ -35,11 +35,39 @@ export default (description, validator, specObjects) => { "mykey", ), ).toThrowError(/'mykey[^']*'(:| is)/); - if (warning) { - expect(logger.warn).toHaveBeenCalled(); - } else { - expect(logger.warn).not.toHaveBeenCalled(); - } + expect(logger.warn).toHaveBeenCalled(); + }); + } else if (error) { + it(`rejects ${JSON.stringify(value)}`, () => { + const logger = { + warn: vi.fn(), + }; + expect(() => + validator.call( + { + logger, + }, + value, + "mykey", + ), + ).toThrowError(/'mykey[^']*'(:| is)/); + expect(logger.warn).not.toHaveBeenCalled(); + }); + } else if (warning) { + it(`transforms \`${JSON.stringify(value)}\` to \`${JSON.stringify(expected)}\``, () => { + const logger = { + warn: vi.fn(), + }; + expect( + validator.call( + { + logger, + }, + value, + "mykey", + ), + ).toEqual(expected); + expect(logger.warn).toHaveBeenCalled(); }); } else { it(`transforms \`${JSON.stringify(value)}\` to \`${JSON.stringify(expected)}\``, () => { @@ -55,11 +83,7 @@ export default (description, validator, specObjects) => { "mykey", ), ).toEqual(expected); - if (warning) { - expect(logger.warn).toHaveBeenCalled(); - } else { - expect(logger.warn).not.toHaveBeenCalled(); - } + expect(logger.warn).not.toHaveBeenCalled(); }); } }, diff --git a/packages/core/test/unit/specs/components/ActivityCollector/utils/dom/extractDomain.spec.js b/packages/core/test/unit/specs/components/ActivityCollector/utils/dom/extractDomain.spec.js index 4dd3e0428..e572e64d9 100644 --- a/packages/core/test/unit/specs/components/ActivityCollector/utils/dom/extractDomain.spec.js +++ b/packages/core/test/unit/specs/components/ActivityCollector/utils/dom/extractDomain.spec.js @@ -1,5 +1,5 @@ /* -Copyright 2024 example. All rights reserved. +Copyright 2026 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 diff --git a/packages/core/test/unit/specs/components/ActivityCollector/utils/isDifferentDomains.spec.js b/packages/core/test/unit/specs/components/ActivityCollector/utils/isDifferentDomains.spec.js index c3f06868f..1cdad0351 100644 --- a/packages/core/test/unit/specs/components/ActivityCollector/utils/isDifferentDomains.spec.js +++ b/packages/core/test/unit/specs/components/ActivityCollector/utils/isDifferentDomains.spec.js @@ -1,5 +1,5 @@ /* -Copyright 2024 example. All rights reserved. +Copyright 2026 Adobe. All rights reserved. This file is licensed to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 diff --git a/packages/core/test/unit/specs/components/Advertising/createComponent.spec.js b/packages/core/test/unit/specs/components/Advertising/createComponent.spec.js index 7d439302b..190872430 100644 --- a/packages/core/test/unit/specs/components/Advertising/createComponent.spec.js +++ b/packages/core/test/unit/specs/components/Advertising/createComponent.spec.js @@ -11,7 +11,6 @@ governing permissions and limitations under the License. */ import { vi, beforeEach, describe, it, expect } from "vitest"; - import createComponent from "../../../../../src/components/Advertising/createComponent.js"; describe("Advertising::createComponent", () => { diff --git a/packages/core/test/unit/specs/components/Advertising/handlers/viewThroughHandler.spec.js b/packages/core/test/unit/specs/components/Advertising/handlers/viewThroughHandler.spec.js index 3dd99ae7e..d341f29e9 100644 --- a/packages/core/test/unit/specs/components/Advertising/handlers/viewThroughHandler.spec.js +++ b/packages/core/test/unit/specs/components/Advertising/handlers/viewThroughHandler.spec.js @@ -10,15 +10,17 @@ OF ANY KIND, either express or implied. See the License for the specific languag governing permissions and limitations under the License. */ -import { vi, beforeEach, describe, it, expect } from "vitest"; +import { vi, beforeEach, afterEach, describe, it, expect } from "vitest"; import handleViewThrough from "../../../../../../src/components/Advertising/handlers/viewThroughHandler.js"; import collectAllIdentities from "../../../../../../src/components/Advertising/identities/collectAllIdentities.js"; import flushPromiseChains from "../../../../helpers/flushPromiseChains.js"; +afterEach(() => { + vi.restoreAllMocks(); +}); + vi.mock( - import( - "../../../../../../src/components/Advertising/identities/collectAllIdentities.js" - ), + import("../../../../../../src/components/Advertising/identities/collectAllIdentities.js"), () => ({ default: vi.fn(), }), @@ -64,6 +66,10 @@ describe("Advertising::viewThroughHandler", () => { }; getBrowser = vi.fn(); + + const fixedTs = Date.UTC(2024, 0, 1, 0, 0, 0); + vi.spyOn(Date, "now").mockReturnValue(fixedTs); + collectAllIdentities.mockReset(); }); it("should handle empty identity promises", async () => { @@ -120,12 +126,12 @@ describe("Advertising::viewThroughHandler", () => { expect(mockEvent.mergeQuery).toHaveBeenCalledWith({ advertising: { + advIds: "", + eventType: "advertising.enrichment", stitchIds: { - surferId: "test-surfer-id", ipAddress: "DUMMY_IP_ADDRESS", + surferId: "test-surfer-id", }, - advIds: "", - eventType: "advertising.enrichment", }, }); diff --git a/packages/core/test/unit/specs/components/BrandConcierge/createSendConversationEvent.spec.js b/packages/core/test/unit/specs/components/BrandConcierge/createSendConversationEvent.spec.js index 45893122a..7bb54b4cb 100644 --- a/packages/core/test/unit/specs/components/BrandConcierge/createSendConversationEvent.spec.js +++ b/packages/core/test/unit/specs/components/BrandConcierge/createSendConversationEvent.spec.js @@ -242,24 +242,24 @@ describe("createSendConversationEvent", () => { // Fast-forward time by 10 seconds to trigger the timeout vi.advanceTimersByTime(10000); - return resultPromise.then((res) => { - // Verify that timeout error was logged - expect(mockDependencies.logger.error).toHaveBeenCalledWith( - "Stream error occurred", - expect.objectContaining({ - message: "Stream timeout: No data received within 10 seconds", - }), - ); + await resultPromise; - // Verify that onStreamResponse was called with the timeout error - expect(onStreamResponse).toHaveBeenCalledWith({ - error: expect.objectContaining({ - message: "Stream timeout: No data received within 10 seconds", - }), - }); + // Verify that timeout error was logged + expect(mockDependencies.logger.error).toHaveBeenCalledWith( + "Stream error occurred", + expect.objectContaining({ + message: "Stream timeout: No data received within 10 seconds", + }), + ); - vi.useRealTimers(); + // Verify that onStreamResponse was called with the timeout error + expect(onStreamResponse).toHaveBeenCalledWith({ + error: expect.objectContaining({ + message: "Stream timeout: No data received within 10 seconds", + }), }); + + vi.useRealTimers(); // await flushPromiseChains(); }); }); diff --git a/packages/core/test/unit/specs/components/BrandConcierge/utils.spec.js b/packages/core/test/unit/specs/components/BrandConcierge/utils.spec.js index 636c59388..42483b26d 100644 --- a/packages/core/test/unit/specs/components/BrandConcierge/utils.spec.js +++ b/packages/core/test/unit/specs/components/BrandConcierge/utils.spec.js @@ -9,11 +9,8 @@ the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTA OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -import { vi, beforeEach, afterEach, describe, it, expect } from "vitest"; -import { - getPageSurface, - getConciergeSessionCookie, -} from "../../../../../src/components/BrandConcierge/utils.js"; +import { vi, beforeEach, describe, it, expect } from "vitest"; +import { getConciergeSessionCookie } from "../../../../../src/components/BrandConcierge/utils.js"; describe("BrandConcierge utils", () => { describe("getConciergeSessionCookie", () => { diff --git a/packages/core/test/unit/specs/components/Context/injectHighEntropyUserAgentHints.spec.js b/packages/core/test/unit/specs/components/Context/injectHighEntropyUserAgentHints.spec.js index b18b2657f..8559ecc68 100644 --- a/packages/core/test/unit/specs/components/Context/injectHighEntropyUserAgentHints.spec.js +++ b/packages/core/test/unit/specs/components/Context/injectHighEntropyUserAgentHints.spec.js @@ -28,24 +28,23 @@ describe("Context::injectHighEntropyUserAgentHints", () => { }, }, }; - it("works", () => { + it("works", async () => { const event = { mergeXdm: vi.fn(), }; - injectHighEntropyUserAgentHints(navigator)(event, console).then(() => { - expect(event.mergeXdm).toHaveBeenCalledWith({ - environment: { - browserDetails: { - userAgentClientHints: { - architecture: "x86", - bitness: "64", - model: "alloy", - platformVersion: "1.2.3", - wow64: false, - }, + await injectHighEntropyUserAgentHints(navigator)(event, console); + expect(event.mergeXdm).toHaveBeenCalledWith({ + environment: { + browserDetails: { + userAgentClientHints: { + architecture: "x86", + bitness: "64", + model: "alloy", + platformVersion: "1.2.3", + wow64: false, }, }, - }); + }, }); }); }); diff --git a/packages/core/test/unit/specs/components/Personalization/createApplyPropositions.spec.js b/packages/core/test/unit/specs/components/Personalization/createApplyPropositions.spec.js index 72b30eda2..11d0755b1 100644 --- a/packages/core/test/unit/specs/components/Personalization/createApplyPropositions.spec.js +++ b/packages/core/test/unit/specs/components/Personalization/createApplyPropositions.spec.js @@ -32,6 +32,10 @@ const METADATA = { }, }; +const CLICK_DOM_ACTION_ITEM_ID = "442358"; +const HTML_CONTENT_ITEM_ID = "442359"; +const REMAINING_VIEW_DOM_ACTION_ITEM_ID = "442379"; + describe("Personalization::createApplyPropositions", () => { let processPropositions; let createProposition; @@ -120,17 +124,25 @@ describe("Personalization::createApplyPropositions", () => { propositions: MIXED_PROPOSITIONS, metadata: METADATA, }); + const clickActionPropositions = propositions.filter( + (proposition) => proposition.items[0].id === CLICK_DOM_ACTION_ITEM_ID, + ); + const htmlContentPropositions = propositions.filter( + (proposition) => proposition.items[0].id === HTML_CONTENT_ITEM_ID, + ); + expect(propositions.length).toEqual(4); propositions.forEach((proposition) => { expect(proposition.items.length).toEqual(1); - if (proposition.items[0].id === "442358") { - expect(proposition.items[0].data.selector).toEqual("#root"); - expect(proposition.items[0].data.type).toEqual("click"); - } else if (proposition.items[0].id === "442359") { - expect(proposition.scope).toEqual("home"); - expect(proposition.items[0].data.selector).toEqual("#home-item1"); - expect(proposition.items[0].data.type).toEqual("setHtml"); - } + }); + clickActionPropositions.forEach((proposition) => { + expect(proposition.items[0].data.selector).toEqual("#root"); + expect(proposition.items[0].data.type).toEqual("click"); + }); + htmlContentPropositions.forEach((proposition) => { + expect(proposition.scope).toEqual("home"); + expect(proposition.items[0].data.selector).toEqual("#home-item1"); + expect(proposition.items[0].data.type).toEqual("setHtml"); }); expect(processPropositions).toHaveBeenCalledTimes(1); }); @@ -142,7 +154,7 @@ describe("Personalization::createApplyPropositions", () => { scope: "home", items: [ { - id: "442359", + id: HTML_CONTENT_ITEM_ID, schema: "https://ns.adobe.com/personalization/html-content-item", data: { content: "

Some custom content for the home page

", @@ -151,7 +163,7 @@ describe("Personalization::createApplyPropositions", () => { }, }, { - id: "442358", + id: CLICK_DOM_ACTION_ITEM_ID, schema: "https://ns.adobe.com/personalization/dom-action", data: { type: "click", @@ -167,7 +179,9 @@ describe("Personalization::createApplyPropositions", () => { }); expect(result.propositions.length).toEqual(1); expect(result.propositions[0].items.length).toEqual(1); - expect(result.propositions[0].items[0].id).toEqual("442358"); + expect(result.propositions[0].items[0].id).toEqual( + CLICK_DOM_ACTION_ITEM_ID, + ); expect(result.propositions[0].renderAttempted).toBe(true); }); @@ -187,19 +201,30 @@ describe("Personalization::createApplyPropositions", () => { const result = await applyPropositions({ propositions, }); + const remainingViewPropositions = result.propositions.filter( + (proposition) => proposition.scope === "__view__", + ); + const nonViewPropositions = result.propositions.filter( + (proposition) => proposition.scope !== "__view__", + ); + expect(result.propositions.length).toEqual(2); result.propositions.forEach((proposition) => { expect(proposition.renderAttempted).toBe(true); - if (proposition.scope === "__view__") { - expect(proposition.items[0].id).not.toEqual("442358"); - } else { - expect(proposition.scope).toEqual("home"); - } + }); + remainingViewPropositions.forEach((proposition) => { + expect(proposition.items[0].id).not.toEqual(CLICK_DOM_ACTION_ITEM_ID); + }); + nonViewPropositions.forEach((proposition) => { + expect(proposition.scope).toEqual("home"); }); }); it("should ignore items with unsupported schemas", async () => { - const expectedItemIds = ["442358", "442379"]; + const expectedItemIds = [ + CLICK_DOM_ACTION_ITEM_ID, + REMAINING_VIEW_DOM_ACTION_ITEM_ID, + ]; const { propositions } = await applyPropositions({ propositions: MIXED_PROPOSITIONS, @@ -222,18 +247,28 @@ describe("Personalization::createApplyPropositions", () => { propositions: originalPropositions, metadata: METADATA, }); - let numReturnedPropositions = 0; - expect(originalPropositions).toEqual(MIXED_PROPOSITIONS); - result.propositions.forEach((proposition) => { - const [original] = originalPropositions.filter( - (originalProposition) => originalProposition.id === proposition.id, + const originalPropositionsById = new Map( + originalPropositions.map((originalProposition) => [ + originalProposition.id, + originalProposition, + ]), + ); + const returnedPropositionPairs = result.propositions.map((proposition) => ({ + proposition, + originalProposition: originalPropositionsById.get(proposition.id), + })); + const returnedPropositionPairsWithOriginals = + returnedPropositionPairs.filter(({ originalProposition }) => + Boolean(originalProposition), ); - if (original) { - numReturnedPropositions += 1; - expect(proposition).not.toBe(original); - } - }); - expect(numReturnedPropositions).toEqual(4); + + expect(originalPropositions).toEqual(MIXED_PROPOSITIONS); + expect(returnedPropositionPairsWithOriginals).toHaveLength(4); + returnedPropositionPairsWithOriginals.forEach( + ({ proposition, originalProposition }) => { + expect(proposition).not.toBe(originalProposition); + }, + ); }); it("concats viewName propositions", async () => { viewCache.getView.mockReturnValue( diff --git a/packages/core/test/unit/specs/components/Personalization/dom-actions/move.spec.js b/packages/core/test/unit/specs/components/Personalization/dom-actions/move.spec.js index 4f5199461..b4ccb817f 100644 --- a/packages/core/test/unit/specs/components/Personalization/dom-actions/move.spec.js +++ b/packages/core/test/unit/specs/components/Personalization/dom-actions/move.spec.js @@ -36,7 +36,7 @@ describe("Personalization::actions::move", () => { afterEach(() => { cleanUpDomChanges("move"); }); - it("should move personalized content", () => { + it("should move personalized content", async () => { const modules = initDomActionsModules(); const { move } = modules; const element = createNode("div", { @@ -54,20 +54,19 @@ describe("Personalization::actions::move", () => { a: 1, }, }; - move( + await move( settings, decorateProposition, createRenderStatusHandler("view", "test"), - ).then(() => { - expect(element.style.left).toEqual("100px"); - expect(element.style.top).toEqual("100px"); - expect(getAttribute(element, CLICK_LABEL_DATA_ATTRIBUTE)).toEqual( - "trackingLabel", - ); - expect(getAttribute(element, INTERACT_ID_DATA_ATTRIBUTE)).not.toBeNull(); - }); + ); + expect(element.style.left).toEqual("100px"); + expect(element.style.top).toEqual("100px"); + expect(getAttribute(element, CLICK_LABEL_DATA_ATTRIBUTE)).toEqual( + "trackingLabel", + ); + expect(getAttribute(element, INTERACT_ID_DATA_ATTRIBUTE)).not.toBeNull(); }); - it("should move personalized content even if coordinates are not properly formatted", () => { + it("should move personalized content even if coordinates are not properly formatted", async () => { const modules = initDomActionsModules(); const { move } = modules; const element = createNode("div", { @@ -85,17 +84,16 @@ describe("Personalization::actions::move", () => { a: 1, }, }; - move( + await move( settings, decorateProposition, createRenderStatusHandler("view", "test"), - ).then(() => { - expect(element.style.left).toEqual("100px"); - expect(element.style.top).toEqual("100px"); - expect(getAttribute(element, CLICK_LABEL_DATA_ATTRIBUTE)).toEqual( - "trackingLabel", - ); - expect(getAttribute(element, INTERACT_ID_DATA_ATTRIBUTE)).not.toBeNull(); - }); + ); + expect(element.style.left).toEqual("100px"); + expect(element.style.top).toEqual("100px"); + expect(getAttribute(element, CLICK_LABEL_DATA_ATTRIBUTE)).toEqual( + "trackingLabel", + ); + expect(getAttribute(element, INTERACT_ID_DATA_ATTRIBUTE)).not.toBeNull(); }); }); diff --git a/packages/core/test/unit/specs/components/PushNotifications/request/createSendPushSubscriptionPayload.spec.js b/packages/core/test/unit/specs/components/PushNotifications/request/createSendPushSubscriptionPayload.spec.js index d524565fc..44b77931b 100644 --- a/packages/core/test/unit/specs/components/PushNotifications/request/createSendPushSubscriptionPayload.spec.js +++ b/packages/core/test/unit/specs/components/PushNotifications/request/createSendPushSubscriptionPayload.spec.js @@ -12,17 +12,11 @@ governing permissions and limitations under the License. import { vi, beforeEach, describe, it, expect } from "vitest"; -vi.mock( - "../../../../../../src/utils/request/createDataCollectionRequestPayload.js", -); - import createSendPushSubscriptionPayload from "../../../../../../src/components/PushNotifications/request/createSendPushSubscriptionPayload.js"; -import createDataCollectionRequestPayload from "../../../../../../src/utils/request/createDataCollectionRequestPayload.js"; describe("createSendPushSubscriptionPayload", () => { let mockEvent; let mockEventManager; - let mockPayload; let ecid; let serializedPushSubscriptionDetails; let appId; @@ -46,12 +40,6 @@ describe("createSendPushSubscriptionPayload", () => { mockEventManager = { createEvent: vi.fn().mockReturnValue(mockEvent), }; - - mockPayload = { - addEvent: vi.fn(), - }; - - vi.mocked(createDataCollectionRequestPayload).mockReturnValue(mockPayload); }); it("creates event with correct push notification details using provided appId", async () => { diff --git a/packages/core/test/unit/specs/components/PushNotifications/request/makeSendPushSubscriptionRequest.spec.js b/packages/core/test/unit/specs/components/PushNotifications/request/makeSendPushSubscriptionRequest.spec.js index 3600cb87a..e29e89434 100644 --- a/packages/core/test/unit/specs/components/PushNotifications/request/makeSendPushSubscriptionRequest.spec.js +++ b/packages/core/test/unit/specs/components/PushNotifications/request/makeSendPushSubscriptionRequest.spec.js @@ -12,18 +12,14 @@ governing permissions and limitations under the License. import { vi, beforeEach, describe, it, expect } from "vitest"; -vi.mock( - "../../../../../../src/components/PushNotifications/helpers/getPushSubscriptionDetails.js", -); - import makeSendPushSubscriptionRequest from "../../../../../../src/components/PushNotifications/request/makeSendPushSubscriptionRequest.js"; -import getPushSubscriptionDetails from "../../../../../../src/components/PushNotifications/helpers/getPushSubscriptionDetails.js"; describe("makeSendPushSubscriptionRequest", () => { let mockStorage; let mockLogger; let mockSendEdgeNetworkRequest; let mockSetUserData; + let mockGetPushSubscriptionDetails; beforeEach(() => { mockStorage = { @@ -44,7 +40,7 @@ describe("makeSendPushSubscriptionRequest", () => { mockSendEdgeNetworkRequest = vi.fn().mockResolvedValue(); - vi.mocked(getPushSubscriptionDetails).mockResolvedValue({ + mockGetPushSubscriptionDetails = vi.fn().mockResolvedValue({ endpoint: "test", }); }); @@ -73,6 +69,7 @@ describe("makeSendPushSubscriptionRequest", () => { getEcidFromCookie: vi.fn().mockReturnValue("ecid"), }, window: { location: { host: "somehost" } }, + getPushSubscriptionDetails: mockGetPushSubscriptionDetails, }); }; diff --git a/packages/core/test/unit/specs/core/componentCreators.spec.js b/packages/core/test/unit/specs/core/componentCreators.spec.js index 7f916d072..72a508f23 100644 --- a/packages/core/test/unit/specs/core/componentCreators.spec.js +++ b/packages/core/test/unit/specs/core/componentCreators.spec.js @@ -19,14 +19,17 @@ describe("componentCreators", () => { acc.push(componentCreators[key]); return acc; }, []); + const componentCreatorsWithConfigValidators = c.filter( + (componentCreator) => componentCreator.configValidators !== undefined, + ); + expect(c).toEqual(expect.any(Array)); c.forEach((componentCreator) => { expect(componentCreator).toEqual(expect.any(Function)); expect(componentCreator.namespace).toEqual(expect.any(String)); - if (componentCreator.configValidators) { - // should export a validator function - expect(componentCreator.configValidators).toEqual(expect.any(Function)); - } + }); + componentCreatorsWithConfigValidators.forEach((componentCreator) => { + expect(componentCreator.configValidators).toEqual(expect.any(Function)); }); }); }); diff --git a/packages/core/test/unit/specs/core/consent/createConsentStateMachine.spec.js b/packages/core/test/unit/specs/core/consent/createConsentStateMachine.spec.js index 40199eb07..d610642e8 100644 --- a/packages/core/test/unit/specs/core/consent/createConsentStateMachine.spec.js +++ b/packages/core/test/unit/specs/core/consent/createConsentStateMachine.spec.js @@ -99,7 +99,6 @@ describe("createConsentStateMachine", () => { }); }); [ - ["in", "default"], [ "in", "initial", @@ -111,29 +110,36 @@ describe("createConsentStateMachine", () => { "out", "default", "User consent preferences not found. Default consent of out will be used.", + "warn", ], [ "out", "initial", "Loaded user consent preferences. The user previously declined consent.", + "warn", ], - ["out", "new", "User declined consent."], + ["out", "new", "User declined consent.", "warn"], [ "pending", "default", "User consent preferences not found. Default consent of pending will be used. Some commands may be delayed.", "info", ], + ].forEach(([action, source, expectedMessage, logLevel]) => { + it(`logs the correct messages when ${action} is called with source ${source}`, () => { + subject[action](source); + expect(logger[logLevel]).toHaveBeenCalledWith(expectedMessage); + }); + }); + [ + ["in", "default"], ["pending", "initial"], ["pending", "new"], - ].forEach(([action, source, expectedMessage, logLevel = "warn"]) => { - it(`logs the correct messages when ${action} is called with source ${source}`, () => { + ].forEach(([action, source]) => { + it(`does not log a message when ${action} is called with source ${source}`, () => { subject[action](source); - if (expectedMessage) { - expect(logger[logLevel]).toHaveBeenCalledWith(expectedMessage); - } else { - expect(logger.warn).not.toHaveBeenCalled(); - } + expect(logger.info).not.toHaveBeenCalled(); + expect(logger.warn).not.toHaveBeenCalled(); }); }); [ diff --git a/packages/core/test/unit/specs/core/createEventManager.spec.js b/packages/core/test/unit/specs/core/createEventManager.spec.js index 97b880d74..32dc91968 100644 --- a/packages/core/test/unit/specs/core/createEventManager.spec.js +++ b/packages/core/test/unit/specs/core/createEventManager.spec.js @@ -309,62 +309,57 @@ describe("createEventManager", () => { expect(result).toEqual(mockResult); }); }); - it("includes override configuration, if provided", () => { - eventManager - .sendEvent(event, { - edgeConfigOverrides: { - com_adobe_experience_platform: { - event: { - datasetId: "456", - }, - }, - com_adobe_identity: { - idSyncContainerId: "123", + it("includes override configuration, if provided", async () => { + await eventManager.sendEvent(event, { + edgeConfigOverrides: { + com_adobe_experience_platform: { + event: { + datasetId: "456", }, }, - }) - .then(() => { - expect(requestPayload.mergeConfigOverride).toHaveBeenCalledWith({ - com_adobe_identity: { - idSyncContainerId: "123", - }, - com_adobe_experience_platform: { - event: { - datasetId: "456", - }, - }, - }); - }); + com_adobe_identity: { + idSyncContainerId: "123", + }, + }, + }); + + expect(requestPayload.mergeConfigOverride).toHaveBeenCalledWith({ + com_adobe_identity: { + idSyncContainerId: "123", + }, + com_adobe_experience_platform: { + event: { + datasetId: "456", + }, + }, + }); }); - it("includes global override configuration, if provided", () => { + it("includes global override configuration, if provided", async () => { config.edgeConfigOverrides.com_adobe_identity = { idSyncContainerId: "123", }; - eventManager - .sendEvent(event, { - edgeConfigOverrides: {}, - }) - .then(() => { - expect(requestPayload.mergeConfigOverride).toHaveBeenCalledWith({ - com_adobe_identity: { - idSyncContainerId: "123", - }, - }); - }); + + await eventManager.sendEvent(event, { + edgeConfigOverrides: {}, + }); + + expect(requestPayload.mergeConfigOverride).toHaveBeenCalledWith({ + com_adobe_identity: { + idSyncContainerId: "123", + }, + }); }); - it("includes the datastreamId override, if provided", () => { - eventManager - .sendEvent(event, { - edgeConfigOverrides: { - datastreamId: "456", - }, - }) - .then(() => { - expect(createDataCollectionRequest).toHaveBeenCalledWith({ - payload: expect.any(Object), - datastreamIdOverride: "456", - }); - }); + it("includes the datastreamId override, if provided", async () => { + await eventManager.sendEvent(event, { + edgeConfigOverrides: { + datastreamId: "456", + }, + }); + + expect(createDataCollectionRequest).toHaveBeenCalledWith({ + payload: expect.any(Object), + datastreamIdOverride: "456", + }); }); }); }); diff --git a/packages/core/test/unit/specs/core/edgeNetwork/handleRequestFailure.spec.js b/packages/core/test/unit/specs/core/edgeNetwork/handleRequestFailure.spec.js index 4da51285c..3dd86fd14 100644 --- a/packages/core/test/unit/specs/core/edgeNetwork/handleRequestFailure.spec.js +++ b/packages/core/test/unit/specs/core/edgeNetwork/handleRequestFailure.spec.js @@ -13,20 +13,18 @@ import { vi, describe, it, expect } from "vitest"; import handleRequestFailure from "../../../../../src/core/edgeNetwork/handleRequestFailure.js"; describe("handleRequestFailure", () => { - it("works", () => { + it("works", async () => { const onRequestFailureCallbackAggregator = { add: vi.fn(), call: vi.fn(), }; onRequestFailureCallbackAggregator.call.mockReturnValue(Promise.resolve()); const error = new Error("woopsie"); - handleRequestFailure(onRequestFailureCallbackAggregator)(error).catch( - (err) => { - expect(onRequestFailureCallbackAggregator.call).toHaveBeenCalledWith({ - error, - }); - expect(err).toEqual(error); - }, - ); + await expect( + handleRequestFailure(onRequestFailureCallbackAggregator)(error), + ).rejects.toBe(error); + expect(onRequestFailureCallbackAggregator.call).toHaveBeenCalledWith({ + error, + }); }); }); diff --git a/packages/core/test/unit/specs/core/edgeNetwork/injectApplyResponse.spec.js b/packages/core/test/unit/specs/core/edgeNetwork/injectApplyResponse.spec.js index 06c071ad1..aad7d8171 100644 --- a/packages/core/test/unit/specs/core/edgeNetwork/injectApplyResponse.spec.js +++ b/packages/core/test/unit/specs/core/edgeNetwork/injectApplyResponse.spec.js @@ -219,7 +219,7 @@ describe("injectApplyResponse", () => { }); }); }); - it("catches when warnings and errors in response", () => { + it("catches when warnings and errors in response", async () => { const error = new Error("whoopsie"); processWarningsAndErrors = vi.fn().mockImplementation(() => { throw error; @@ -232,20 +232,18 @@ describe("injectApplyResponse", () => { }); const runOnResponseCallbacks = vi.fn(); const runOnRequestFailureCallbacks = vi.fn(); - return applyResponse({ - request, - responseHeaders, - responseBody, - runOnResponseCallbacks, - runOnRequestFailureCallbacks, - }) - .catch((err) => { - expect(runOnRequestFailureCallbacks).toHaveBeenCalledWith({ - error, - }); - expect(err).toEqual(error); - }) - .then(() => {}); + await expect( + applyResponse({ + request, + responseHeaders, + responseBody, + runOnResponseCallbacks, + runOnRequestFailureCallbacks, + }), + ).rejects.toBe(error); + expect(runOnRequestFailureCallbacks).toHaveBeenCalledWith({ + error, + }); }); it("returns combined result", () => { const runOnResponseCallbacks = vi.fn().mockReturnValue( diff --git a/packages/core/test/unit/specs/core/identity/createIdentity.spec.js b/packages/core/test/unit/specs/core/identity/createIdentity.spec.js index c632a2937..ac2c29f48 100644 --- a/packages/core/test/unit/specs/core/identity/createIdentity.spec.js +++ b/packages/core/test/unit/specs/core/identity/createIdentity.spec.js @@ -12,34 +12,29 @@ governing permissions and limitations under the License. import { describe, it, expect, vi, beforeEach } from "vitest"; -vi.mock("../../../../../src/utils/createDecodeKndctrCookie.js", () => ({ - default: vi.fn(), -})); - import createIdentity from "../../../../../src/core/identity/createIdentity.js"; -import createDecodeKndctrCookie from "../../../../../src/utils/createDecodeKndctrCookie.js"; describe("createIdentity", () => { let mockLogger; let mockLoggingCookieJar; let mockConfig; - let mockDecodeKndctrCookie; beforeEach(() => { - mockLogger = {}; - mockLoggingCookieJar = {}; + vi.clearAllMocks(); + + mockLogger = { warn: vi.fn() }; + mockLoggingCookieJar = { get: vi.fn() }; mockConfig = { orgId: "TEST_ORG_ID@AdobeOrg", }; - - mockDecodeKndctrCookie = vi.fn(); - createDecodeKndctrCookie.mockReturnValue(mockDecodeKndctrCookie); }); describe("initialize", () => { it("should resolve the await identity promise immediatelly when ecid cookie is already present", async () => { - mockDecodeKndctrCookie.mockReturnValue("integration-test-ecid"); + mockLoggingCookieJar.get.mockReturnValue( + "CiYxNDAxNTI0NjEzODM4MjI2ODk1MTgwNTkyMTYxNjkxNTc0MzEyOFISCIelhf%5FOMRABGAEqA09SMjAA8AHX%5F4DZlzI%3D", + ); const identity = createIdentity({ logger: mockLogger, diff --git a/packages/core/test/unit/specs/core/injectExecuteCommand.spec.js b/packages/core/test/unit/specs/core/injectExecuteCommand.spec.js index 8989b8ad0..a6d40030b 100644 --- a/packages/core/test/unit/specs/core/injectExecuteCommand.spec.js +++ b/packages/core/test/unit/specs/core/injectExecuteCommand.spec.js @@ -30,17 +30,27 @@ describe("injectExecuteCommand", () => { throw error; }); }); - it("rejects promise if configure is not the first command executed", () => { + it("rejects promise if configure is not the first command executed", async () => { const executeCommand = injectExecuteCommand({ logger, handleError, }); - return executeCommand("sendEvent").catch((error) => { - expect(error.message).toContain("The library must be configured first"); - expect(handleError).toHaveBeenCalledWith(error, "sendEvent command"); - }); + const commandPromise = executeCommand("sendEvent"); + + await expect(commandPromise).rejects.toThrow( + "The library must be configured first", + ); + expect(handleError).toHaveBeenCalledTimes(1); + expect(handleError).toHaveBeenCalledWith( + expect.objectContaining({ + message: expect.stringContaining( + "The library must be configured first", + ), + }), + "sendEvent command", + ); }); - it("rejects promise if configure command is executed twice", () => { + it("rejects promise if configure command is executed twice", async () => { const configureCommand = () => Promise.resolve(); const executeCommand = injectExecuteCommand({ logger, @@ -48,14 +58,22 @@ describe("injectExecuteCommand", () => { handleError, }); executeCommand("configure"); - return executeCommand("configure").catch((error) => { - expect(error.message).toContain( - "The library has already been configured", - ); - expect(handleError).toHaveBeenCalledWith(error, "configure command"); - }); + const commandPromise = executeCommand("configure"); + + await expect(commandPromise).rejects.toThrow( + "The library has already been configured", + ); + expect(handleError).toHaveBeenCalledTimes(1); + expect(handleError).toHaveBeenCalledWith( + expect.objectContaining({ + message: expect.stringContaining( + "The library has already been configured", + ), + }), + "configure command", + ); }); - it("rejects promise if command doesn't exist", () => { + it("rejects promise if command doesn't exist", async () => { const componentRegistry = { getCommand() {}, getCommandNames() { @@ -69,12 +87,19 @@ describe("injectExecuteCommand", () => { handleError, }); executeCommand("configure"); - return executeCommand("bogus").catch((error) => { - expect(error.message).toBe( - "The bogus command does not exist. List of available commands: configure, setDebug, genuine.", - ); - expect(handleError).toHaveBeenCalledWith(error, "bogus command"); - }); + const commandPromise = executeCommand("bogus"); + + await expect(commandPromise).rejects.toThrow( + "The bogus command does not exist. List of available commands: configure, setDebug, genuine.", + ); + expect(handleError).toHaveBeenCalledTimes(1); + expect(handleError).toHaveBeenCalledWith( + expect.objectContaining({ + message: + "The bogus command does not exist. List of available commands: configure, setDebug, genuine.", + }), + "bogus command", + ); }); it("never resolves/rejects promise to any other command after configure fails", () => { const configureError = new Error("Test configure command failed"); @@ -100,7 +125,7 @@ describe("injectExecuteCommand", () => { expect(sendEventRejectedSpy).not.toHaveBeenCalled(); }); }); - it("reject promise if component command throws error", () => { + it("reject promise if component command throws error", async () => { const runCommandSpy = vi.fn().mockImplementation(() => { throw new Error("Unexpected error"); }); @@ -121,12 +146,16 @@ describe("injectExecuteCommand", () => { validateCommandOptions: (options) => options, }); executeCommand("configure"); - return executeCommand("test", {}).catch(() => { - expect(handleError).toHaveBeenCalledWith( - new Error("Unexpected error"), - "test command", - ); - }); + const commandPromise = executeCommand("test", {}); + + await expect(commandPromise).rejects.toThrow("Unexpected error"); + expect(handleError).toHaveBeenCalledTimes(1); + expect(handleError).toHaveBeenCalledWith( + expect.objectContaining({ + message: "Unexpected error", + }), + "test command", + ); }); it("executes component commands", () => { const validateCommandOptionsSpy = vi @@ -281,24 +310,24 @@ describe("injectExecuteCommand", () => { }); }); }); - it("logs onCommandRejected", () => { + it("logs onCommandRejected", async () => { const myerror = Error("bananas"); const executeCommand = buildWithTestCommand(() => { expect(logger.logOnCommandRejected).not.toHaveBeenCalled(); throw myerror; }); executeCommand("configure"); - return executeCommand("test", { - my: "options", - }).catch((error) => { - expect(error).toEqual(myerror); - expect(logger.logOnCommandRejected).toHaveBeenCalledWith({ - commandName: "test", - options: { - my: "options", - }, - error: myerror, - }); + await expect( + executeCommand("test", { + my: "options", + }), + ).rejects.toBe(myerror); + expect(logger.logOnCommandRejected).toHaveBeenCalledWith({ + commandName: "test", + options: { + my: "options", + }, + error: myerror, }); }); it("logs onCommandResolved when handleError swallows the error", () => { diff --git a/packages/core/test/unit/specs/core/network/injectSendNetworkRequest.spec.js b/packages/core/test/unit/specs/core/network/injectSendNetworkRequest.spec.js index ae9d84f55..856628feb 100644 --- a/packages/core/test/unit/specs/core/network/injectSendNetworkRequest.spec.js +++ b/packages/core/test/unit/specs/core/network/injectSendNetworkRequest.spec.js @@ -175,17 +175,15 @@ describe("injectSendNetworkRequest", () => { }); }); }); - it("rejects the promise when a network error occurs", () => { + it("rejects the promise when a network error occurs", async () => { sendFetchRequest.mockReturnValue(Promise.reject(new Error("networkerror"))); - return sendNetworkRequest({ - payload, - url, - requestId, - }).catch((error) => { - expect(error.message).toEqual( - "Network request failed.\nCaused by: networkerror", - ); - }); + await expect( + sendNetworkRequest({ + payload, + url, + requestId, + }), + ).rejects.toThrow("Network request failed.\nCaused by: networkerror"); }); it("resolves the promise for successful status and valid json", () => { return sendNetworkRequest({ diff --git a/packages/core/test/unit/specs/core/network/requestMethods/injectSendFetchRequest.spec.js b/packages/core/test/unit/specs/core/network/requestMethods/injectSendFetchRequest.spec.js index 916c3720c..54f7ef1c2 100644 --- a/packages/core/test/unit/specs/core/network/requestMethods/injectSendFetchRequest.spec.js +++ b/packages/core/test/unit/specs/core/network/requestMethods/injectSendFetchRequest.spec.js @@ -37,17 +37,17 @@ describe("injectSendFetchRequest", () => { expect(fetchResult.headers.get).toHaveBeenCalledWith("Content-Type"); }); }); - it("rejects returned promise upon network failure", () => { + it("rejects returned promise upon network failure", async () => { const fetch = vi .fn() .mockReturnValue(Promise.reject(new Error("No connection"))); const sendFetchRequest = injectSendFetchRequest({ fetch, }); - return sendFetchRequest("http://example.com/endpoint", { - a: "b", - }).catch((error) => { - expect(error.message).toBe("No connection"); - }); + await expect( + sendFetchRequest("http://example.com/endpoint", { + a: "b", + }), + ).rejects.toThrow("No connection"); }); }); diff --git a/packages/core/test/unit/specs/core/requiredComponentCreators.spec.js b/packages/core/test/unit/specs/core/requiredComponentCreators.spec.js index b01bcf17c..8e283b631 100644 --- a/packages/core/test/unit/specs/core/requiredComponentCreators.spec.js +++ b/packages/core/test/unit/specs/core/requiredComponentCreators.spec.js @@ -19,14 +19,17 @@ describe("requiredComponentCreators", () => { acc.push(requiredComponentCreators[key]); return acc; }, []); + const componentCreatorsWithConfigValidators = c.filter( + (componentCreator) => componentCreator.configValidators !== undefined, + ); + expect(c).toEqual(expect.any(Array)); c.forEach((componentCreator) => { expect(componentCreator).toEqual(expect.any(Function)); expect(componentCreator.namespace).toEqual(expect.any(String)); - if (componentCreator.configValidators) { - // should export a validator function - expect(componentCreator.configValidators).toEqual(expect.any(Function)); - } + }); + componentCreatorsWithConfigValidators.forEach((componentCreator) => { + expect(componentCreator.configValidators).toEqual(expect.any(Function)); }); }); }); diff --git a/packages/core/test/unit/specs/utils/createTaskQueue.spec.js b/packages/core/test/unit/specs/utils/createTaskQueue.spec.js index e01244791..46235ad13 100644 --- a/packages/core/test/unit/specs/utils/createTaskQueue.spec.js +++ b/packages/core/test/unit/specs/utils/createTaskQueue.spec.js @@ -16,13 +16,11 @@ import { defer } from "../../../../src/utils/index.js"; import flushPromiseChains from "../../helpers/flushPromiseChains.js"; describe("createTaskQueue", () => { - it("executes a single task once even when it throws an error", () => { + it("executes a single task once even when it throws an error", async () => { const queue = createTaskQueue(); const task1 = vi.fn().mockReturnValue(Promise.reject(Error("myerror"))); - return queue.addTask(task1).catch((e) => { - expect(e.message).toEqual("myerror"); - expect(task1).toHaveBeenCalledTimes(1); - }); + await expect(queue.addTask(task1)).rejects.toThrow("myerror"); + expect(task1).toHaveBeenCalledTimes(1); }); it("executes tasks in sequence when first task succeeds", () => { const queue = createTaskQueue(); diff --git a/packages/core/test/unit/specs/utils/defer.spec.js b/packages/core/test/unit/specs/utils/defer.spec.js index 8dfff330f..4e45cdfbe 100644 --- a/packages/core/test/unit/specs/utils/defer.spec.js +++ b/packages/core/test/unit/specs/utils/defer.spec.js @@ -14,21 +14,16 @@ import { describe, it, expect } from "vitest"; import defer from "../../../../src/utils/defer.js"; describe("defer", () => { - it("resolves an exposed promise", () => { + it("resolves an exposed promise", async () => { const deferred = defer(); - deferred.promise.then((value) => { - expect(value).toBe("abc"); - }); + const promise = deferred.promise; deferred.resolve("abc"); + await expect(promise).resolves.toBe("abc"); }); - it("rejects an exposed promise", () => { + it("rejects an exposed promise", async () => { const deferred = defer(); - deferred.promise.then( - () => {}, - (value) => { - expect(value).toBe("abc"); - }, - ); + const promise = deferred.promise; deferred.reject("abc"); + await expect(promise).rejects.toBe("abc"); }); }); diff --git a/packages/core/test/unit/specs/utils/validation/createUniqueValidator.spec.js b/packages/core/test/unit/specs/utils/validation/createUniqueValidator.spec.js index 5b8a6dc6d..fc7efcce2 100644 --- a/packages/core/test/unit/specs/utils/validation/createUniqueValidator.spec.js +++ b/packages/core/test/unit/specs/utils/validation/createUniqueValidator.spec.js @@ -28,13 +28,13 @@ describe("validation::createUnique", () => { ].forEach((values) => { it(`should reject ${JSON.stringify(values)}`, () => { const validator = string().unique(); - values.forEach((value, i) => { - if (i + 1 === values.length) { - expect(() => validator(value, "mykey")).toThrowError(); - } else { - expect(validator(value, "mykey")).toEqual(value); - } + const duplicateValue = values.at(-1); + + values.slice(0, -1).forEach((value) => { + expect(validator(value, "mykey")).toEqual(value); }); + + expect(() => validator(duplicateValue, "mykey")).toThrowError(); }); }); [null, undefined].forEach((value) => { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 76393e9c5..4d6115e85 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,116 +7,58 @@ settings: importers: .: - dependencies: - '@adobe/aep-rules-engine': - specifier: ^3.1.1 - version: 3.1.1(vitest@4.0.6) - '@adobe/reactor-query-string': - specifier: ^2.0.0 - version: 2.0.0 - '@babel/core': - specifier: ^7.28.5 - version: 7.28.5 - '@babel/plugin-transform-template-literals': - specifier: ^7.27.1 - version: 7.27.1(@babel/core@7.28.5) - '@babel/preset-env': - specifier: ^7.28.5 - version: 7.28.5(@babel/core@7.28.5) - '@inquirer/prompts': - specifier: ^7.9.0 - version: 7.9.0(@types/node@24.9.1) - '@rollup/plugin-babel': - specifier: ^6.1.0 - version: 6.1.0(@babel/core@7.28.5)(@types/babel__core@7.20.5)(rollup@4.52.5) - '@rollup/plugin-commonjs': - specifier: ^29.0.0 - version: 29.0.0(rollup@4.52.5) - '@rollup/plugin-node-resolve': - specifier: ^16.0.3 - version: 16.0.3(rollup@4.52.5) - '@rollup/plugin-terser': - specifier: ^0.4.4 - version: 0.4.4(rollup@4.52.5) - commander: - specifier: ^14.0.2 - version: 14.0.2 - js-cookie: - specifier: 3.0.5 - version: 3.0.5 - rollup: - specifier: ^4.52.5 - version: 4.52.5 - rollup-plugin-license: - specifier: ^3.6.0 - version: 3.6.0(picomatch@4.0.3)(rollup@4.52.5) - uuid: - specifier: ^13.0.0 - version: 13.0.0 devDependencies: - '@adobe/alloy': - specifier: next - version: 'link:' - '@babel/cli': - specifier: ^7.28.3 - version: 7.28.3(@babel/core@7.28.5) - '@babel/plugin-transform-modules-commonjs': - specifier: ^7.27.1 - version: 7.27.1(@babel/core@7.28.5) - '@changesets/changelog-github': - specifier: ^0.5.2 - version: 0.5.2 '@changesets/cli': specifier: ^2.29.8 - version: 2.29.8(@types/node@24.9.1) + version: 2.29.8(@types/node@24.10.4) '@eslint/js': - specifier: ^9.38.0 - version: 9.38.0 + specifier: ^9.39.2 + version: 9.39.2 '@octokit/rest': specifier: ^22.0.1 version: 22.0.1 '@types/node': - specifier: ^24.9.1 - version: 24.9.1 + specifier: ^24.10.4 + version: 24.10.4 '@vitest/browser-playwright': - specifier: ^4.0.6 - version: 4.0.6(msw@2.11.6(@types/node@24.9.1)(typescript@5.9.3))(playwright@1.56.1)(vite@7.1.12(@types/node@24.9.1)(terser@5.44.0)(yaml@2.8.1))(vitest@4.0.6) + specifier: ^4.0.16 + version: 4.0.16(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(playwright@1.57.0)(vite@7.3.0(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2))(vitest@4.0.16) '@vitest/coverage-v8': - specifier: ^4.0.6 - version: 4.0.6(vitest@4.0.6) + specifier: ^4.0.16 + version: 4.0.16(@vitest/browser@4.0.16(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(vite@7.3.0(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2))(vitest@4.0.16))(vitest@4.0.16) '@vitest/eslint-plugin': - specifier: ^1.4.0 - version: 1.4.0(eslint@9.39.0)(typescript@5.9.3)(vitest@4.0.6) + specifier: ^1.6.5 + version: 1.6.5(eslint@9.39.2)(typescript@5.9.3)(vitest@4.0.16) + baseline-browser-mapping: + specifier: ^2.9.11 + version: 2.9.11 chalk: specifier: ^5.6.2 version: 5.6.2 - concurrently: - specifier: ^9.2.1 - version: 9.2.1 date-fns: specifier: ^4.1.0 version: 4.1.0 eslint: - specifier: ^9.39.0 - version: 9.39.0 + specifier: ^9.39.2 + version: 9.39.2 eslint-config-prettier: specifier: ^10.1.8 - version: 10.1.8(eslint@9.39.0) + version: 10.1.8(eslint@9.39.2) eslint-plugin-compat: specifier: ^6.0.2 - version: 6.0.2(eslint@9.39.0) + version: 6.0.2(eslint@9.39.2) eslint-plugin-import: specifier: ^2.32.0 - version: 2.32.0(eslint@9.39.0) + version: 2.32.0(eslint@9.39.2) eslint-plugin-prettier: specifier: ^5.5.4 - version: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.39.0))(eslint@9.39.0)(prettier@3.6.2) + version: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.39.2))(eslint@9.39.2)(prettier@3.7.4) eslint-plugin-react: specifier: ^7.37.5 - version: 7.37.5(eslint@9.39.0) + version: 7.37.5(eslint@9.39.2) glob: - specifier: ^11.0.3 - version: 11.0.3 + specifier: ^11.1.0 + version: 11.1.0 globals: specifier: ^16.5.0 version: 16.5.0 @@ -124,54 +66,111 @@ importers: specifier: ^9.1.7 version: 9.1.7 lint-staged: - specifier: ^16.2.6 - version: 16.2.6 + specifier: ^16.2.7 + version: 16.2.7 minimatch: specifier: ^10.1.1 version: 10.1.1 - msw: - specifier: ^2.11.6 - version: 2.11.6(@types/node@24.9.1)(typescript@5.9.3) playwright: - specifier: ^1.56.1 - version: 1.56.1 + specifier: ^1.57.0 + version: 1.57.0 prettier: - specifier: ^3.6.2 - version: 3.6.2 - read-cache: - specifier: ^1.0.0 - version: 1.0.0 + specifier: ^3.7.4 + version: 3.7.4 recursive-readdir: specifier: ^2.2.3 version: 2.2.3 rimraf: - specifier: ^6.1.0 - version: 6.1.0 + specifier: ^6.1.2 + version: 6.1.2 semver: specifier: ^7.7.3 version: 7.7.3 + typescript: + specifier: ^5.9.3 + version: 5.9.3 + url-exists-nodejs: + specifier: ^0.2.4 + version: 0.2.4 + vitest: + specifier: ^4.0.16 + version: 4.0.16(@types/node@24.10.4)(@vitest/browser-playwright@4.0.16)(happy-dom@20.0.8)(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(terser@5.44.0)(yaml@2.8.2) + + packages/browser: + dependencies: + '@adobe/alloy-core': + specifier: workspace:^ + version: link:../core + '@babel/core': + specifier: ^7.28.5 + version: 7.28.5 + '@babel/plugin-transform-modules-commonjs': + specifier: ^7.27.1 + version: 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-template-literals': + specifier: ^7.27.1 + version: 7.27.1(@babel/core@7.28.5) + '@babel/preset-env': + specifier: ^7.28.5 + version: 7.28.5(@babel/core@7.28.5) + '@inquirer/prompts': + specifier: ^7.9.0 + version: 7.9.0(@types/node@24.10.4) + '@rollup/plugin-babel': + specifier: ^6.1.0 + version: 6.1.0(@babel/core@7.28.5)(@types/babel__core@7.20.5)(rollup@4.52.5) + '@rollup/plugin-commonjs': + specifier: ^29.0.0 + version: 29.0.0(rollup@4.52.5) + '@rollup/plugin-node-resolve': + specifier: ^16.0.3 + version: 16.0.3(rollup@4.52.5) + '@rollup/plugin-terser': + specifier: ^0.4.4 + version: 0.4.4(rollup@4.52.5) + commander: + specifier: ^14.0.2 + version: 14.0.2 + rollup: + specifier: ^4.52.5 + version: 4.52.5 + rollup-plugin-license: + specifier: ^3.6.0 + version: 3.6.0(picomatch@4.0.3)(rollup@4.52.5) + devDependencies: + '@babel/cli': + specifier: ^7.28.3 + version: 7.28.3(@babel/core@7.28.5) + glob: + specifier: ^11.0.3 + version: 11.0.3 + msw: + specifier: ^2.11.6 + version: 2.11.6(@types/node@24.10.4)(typescript@5.9.3) + read-cache: + specifier: ^1.0.0 + version: 1.0.0 + rimraf: + specifier: ^6.1.0 + version: 6.1.0 testcafe: specifier: ^3.7.2 version: 3.7.2 testcafe-browser-provider-playwright: specifier: ^1.1.0 - version: 1.1.0(playwright@1.56.1) - typescript: - specifier: ^5.9.3 - version: 5.9.3 + version: 1.1.0(playwright@1.57.0) + uuid: + specifier: ^13.0.0 + version: 13.0.0 vitest: specifier: ^4.0.6 - version: 4.0.6(@types/node@24.9.1)(@vitest/browser-playwright@4.0.6)(happy-dom@20.0.8)(msw@2.11.6(@types/node@24.9.1)(typescript@5.9.3))(terser@5.44.0)(yaml@2.8.1) - optionalDependencies: - '@rollup/rollup-linux-x64-gnu': - specifier: ^4.52.5 - version: 4.52.5 + version: 4.0.6(@types/node@24.10.4)(@vitest/browser-playwright@4.0.6)(happy-dom@20.0.8)(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(terser@5.44.0)(yaml@2.8.2) packages/core: dependencies: '@adobe/aep-rules-engine': specifier: ^3.1.1 - version: 3.1.1(vitest@4.0.17(@types/node@24.9.1)(@vitest/browser-playwright@4.0.6)(happy-dom@20.0.8)(msw@2.11.6(@types/node@24.9.1)(typescript@5.9.3))(terser@5.44.0)(yaml@2.8.1)) + version: 3.1.1(@vitest/browser@4.0.16(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(vite@7.3.0(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2))(vitest@4.0.16))(vitest@4.0.16) '@adobe/reactor-query-string': specifier: ^2.0.0 version: 2.0.0 @@ -184,6 +183,9 @@ importers: sandboxes/browser: dependencies: + '@adobe/alloy': + specifier: workspace:* + version: link:../../packages/browser '@adobe/alloy-core': specifier: workspace:* version: link:../../packages/core @@ -198,14 +200,14 @@ importers: version: 6.1.0(react@19.2.0) react-router: specifier: ^7.9.4 - version: 7.12.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0) + version: 7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0) devDependencies: '@vitejs/plugin-react': specifier: ^5.1.0 - version: 5.1.0(vite@7.1.12(@types/node@24.9.1)(terser@5.44.0)(yaml@2.8.1)) + version: 5.1.0(vite@7.1.12(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2)) vite: specifier: ^7.1.12 - version: 7.1.12(@types/node@24.9.1)(terser@5.44.0)(yaml@2.8.1) + version: 7.1.12(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2) packages: @@ -233,10 +235,6 @@ packages: resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.28.4': - resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==} - engines: {node: '>=6.9.0'} - '@babel/compat-data@7.28.5': resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==} engines: {node: '>=6.9.0'} @@ -245,10 +243,6 @@ packages: resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==} engines: {node: '>=6.9.0'} - '@babel/generator@7.28.3': - resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} - engines: {node: '>=6.9.0'} - '@babel/generator@7.28.5': resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} engines: {node: '>=6.9.0'} @@ -334,10 +328,6 @@ packages: resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.27.1': - resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.28.5': resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} @@ -354,11 +344,6 @@ packages: resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} engines: {node: '>=6.9.0'} - '@babel/parser@7.28.4': - resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/parser@7.28.5': resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} engines: {node: '>=6.0.0'} @@ -506,12 +491,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-destructuring@7.28.0': - resolution: {integrity: sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-destructuring@7.28.5': resolution: {integrity: sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==} engines: {node: '>=6.9.0'} @@ -548,12 +527,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-exponentiation-operator@7.27.1': - resolution: {integrity: sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-exponentiation-operator@7.28.5': resolution: {integrity: sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw==} engines: {node: '>=6.9.0'} @@ -849,18 +822,10 @@ packages: resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.28.4': - resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==} - engines: {node: '>=6.9.0'} - '@babel/traverse@7.28.5': resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.28.4': - resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} - engines: {node: '>=6.9.0'} - '@babel/types@7.28.5': resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} engines: {node: '>=6.9.0'} @@ -878,9 +843,6 @@ packages: '@changesets/changelog-git@0.2.1': resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==} - '@changesets/changelog-github@0.5.2': - resolution: {integrity: sha512-HeGeDl8HaIGj9fQHo/tv5XKQ2SNEi9+9yl1Bss1jttPqeiASRXhfi0A2wv8yFKCp07kR1gpOI5ge6+CWNm1jPw==} - '@changesets/cli@2.29.8': resolution: {integrity: sha512-1weuGZpP63YWUYjay/E84qqwcnt5yJMM0tep10Up7Q5cS/DGe2IZ0Uj3HNMxGhCINZuR7aO9WBMdKnPit5ZDPA==} hasBin: true @@ -894,9 +856,6 @@ packages: '@changesets/get-dependents-graph@2.1.3': resolution: {integrity: sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==} - '@changesets/get-github-info@0.7.0': - resolution: {integrity: sha512-+i67Bmhfj9V4KfDeS1+Tz3iF32btKZB2AAx+cYMqDSRFP7r3/ZdGbjCo+c6qkyViN9ygDuBjzageuPGJtKGe5A==} - '@changesets/get-release-plan@4.0.14': resolution: {integrity: sha512-yjZMHpUHgl4Xl5gRlolVuxDkm4HgSJqT93Ri1Uz8kGrQb+5iJ8dkXJ20M2j/Y4iV5QzS2c5SeTxVSKX+2eMI0g==} @@ -1253,14 +1212,14 @@ packages: cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.9.0': - resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} + '@eslint-community/eslint-utils@4.9.1': + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.12.1': - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} '@eslint/config-array@0.21.1': @@ -1275,16 +1234,12 @@ packages: resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@3.3.1': - resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/js@9.38.0': - resolution: {integrity: sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==} + '@eslint/eslintrc@3.3.3': + resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.39.0': - resolution: {integrity: sha512-BIhe0sW91JGPiaF1mOuPy5v8NflqfjIcDNpC+LbW9f609WVRX1rArrhi6Z2ymvrAry9jw+5POTj4t2t62o8Bmw==} + '@eslint/js@9.39.2': + resolution: {integrity: sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.7': @@ -1311,10 +1266,6 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} - '@inquirer/ansi@1.0.0': - resolution: {integrity: sha512-JWaTfCxI1eTmJ1BIv86vUfjVatOdxwD0DAVKYevY8SazeUUZtW+tNbsdejVO1GYE0GXJW1N1ahmiC3TFd+7wZA==} - engines: {node: '>=18'} - '@inquirer/ansi@1.0.1': resolution: {integrity: sha512-yqq0aJW/5XPhi5xOAL1xRCpe1eh8UFVgYFpFsjEqmIR8rKLyP+HINvFXwUaxYICflJrVlxnp7lLN6As735kVpw==} engines: {node: '>=18'} @@ -1328,15 +1279,6 @@ packages: '@types/node': optional: true - '@inquirer/confirm@5.1.18': - resolution: {integrity: sha512-MilmWOzHa3Ks11tzvuAmFoAd/wRuaP3SwlT1IZhyMke31FKLxPiuDWcGXhU+PKveNOpAc4axzAgrgxuIJJRmLw==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/confirm@5.1.19': resolution: {integrity: sha512-wQNz9cfcxrtEnUyG5PndC8g3gZ7lGDBzmWiXZkX8ot3vfZ+/BLjR8EvyGX4YzQLeVqtAlY/YScZpW7CW8qMoDQ==} engines: {node: '>=18'} @@ -1346,15 +1288,6 @@ packages: '@types/node': optional: true - '@inquirer/core@10.2.2': - resolution: {integrity: sha512-yXq/4QUnk4sHMtmbd7irwiepjB8jXU0kkFRL4nr/aDBA2mDz13cMakEWdDwX3eSCTkk03kwcndD1zfRAIlELxA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/core@10.3.0': resolution: {integrity: sha512-Uv2aPPPSK5jeCplQmQ9xadnFx2Zhj9b5Dj7bU6ZeCdDNNY11nhYy4btcSdtDguHqCT2h5oNeQTcUNSGGLA7NTA==} engines: {node: '>=18'} @@ -1382,8 +1315,8 @@ packages: '@types/node': optional: true - '@inquirer/external-editor@1.0.2': - resolution: {integrity: sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==} + '@inquirer/external-editor@1.0.3': + resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1391,10 +1324,6 @@ packages: '@types/node': optional: true - '@inquirer/figures@1.0.13': - resolution: {integrity: sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==} - engines: {node: '>=18'} - '@inquirer/figures@1.0.14': resolution: {integrity: sha512-DbFgdt+9/OZYFM+19dbpXOSeAstPy884FPy1KjDu4anWwymZeOYhMY1mdFri172htv6mvc/uvIAAi7b7tvjJBQ==} engines: {node: '>=18'} @@ -1462,15 +1391,6 @@ packages: '@types/node': optional: true - '@inquirer/type@3.0.8': - resolution: {integrity: sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/type@3.0.9': resolution: {integrity: sha512-QPaNt/nmE2bLGQa9b7wwyRJoLZ7pN6rcyXvzU0YCmivmJyq1BVo94G98tStRWkoD1RgDX5C+dPlhhHzNdu/W/w==} engines: {node: '>=18'} @@ -1580,12 +1500,12 @@ packages: peerDependencies: '@octokit/core': '>=6' - '@octokit/request-error@7.0.2': - resolution: {integrity: sha512-U8piOROoQQUyExw5c6dTkU3GKxts5/ERRThIauNL7yaRoeXW0q/5bgHWT7JfWBw1UyrbK8ERId2wVkcB32n0uQ==} + '@octokit/request-error@7.1.0': + resolution: {integrity: sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==} engines: {node: '>= 20'} - '@octokit/request@10.0.6': - resolution: {integrity: sha512-FO+UgZCUu+pPnZAR+iKdUt64kPE7QW7ciqpldaMXaNzixz5Jld8dJ31LAUewk0cfSRkNSRKyqG438ba9c/qDlQ==} + '@octokit/request@10.0.7': + resolution: {integrity: sha512-v93h0i1yu4idj8qFPZwjehoJx4j3Ntn+JhXsdJrG9pYaX6j/XRz2RmasMUHtNgQD39nrv/VwTWSqK0RNXR8upA==} engines: {node: '>= 20'} '@octokit/rest@22.0.1': @@ -1672,8 +1592,8 @@ packages: cpu: [arm] os: [android] - '@rollup/rollup-android-arm-eabi@4.55.1': - resolution: {integrity: sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==} + '@rollup/rollup-android-arm-eabi@4.54.0': + resolution: {integrity: sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng==} cpu: [arm] os: [android] @@ -1682,8 +1602,8 @@ packages: cpu: [arm64] os: [android] - '@rollup/rollup-android-arm64@4.55.1': - resolution: {integrity: sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==} + '@rollup/rollup-android-arm64@4.54.0': + resolution: {integrity: sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw==} cpu: [arm64] os: [android] @@ -1692,8 +1612,8 @@ packages: cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-arm64@4.55.1': - resolution: {integrity: sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==} + '@rollup/rollup-darwin-arm64@4.54.0': + resolution: {integrity: sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw==} cpu: [arm64] os: [darwin] @@ -1702,8 +1622,8 @@ packages: cpu: [x64] os: [darwin] - '@rollup/rollup-darwin-x64@4.55.1': - resolution: {integrity: sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==} + '@rollup/rollup-darwin-x64@4.54.0': + resolution: {integrity: sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A==} cpu: [x64] os: [darwin] @@ -1712,8 +1632,8 @@ packages: cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-arm64@4.55.1': - resolution: {integrity: sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==} + '@rollup/rollup-freebsd-arm64@4.54.0': + resolution: {integrity: sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA==} cpu: [arm64] os: [freebsd] @@ -1722,8 +1642,8 @@ packages: cpu: [x64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.55.1': - resolution: {integrity: sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==} + '@rollup/rollup-freebsd-x64@4.54.0': + resolution: {integrity: sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ==} cpu: [x64] os: [freebsd] @@ -1733,8 +1653,8 @@ packages: os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm-gnueabihf@4.55.1': - resolution: {integrity: sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==} + '@rollup/rollup-linux-arm-gnueabihf@4.54.0': + resolution: {integrity: sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==} cpu: [arm] os: [linux] libc: [glibc] @@ -1745,8 +1665,8 @@ packages: os: [linux] libc: [musl] - '@rollup/rollup-linux-arm-musleabihf@4.55.1': - resolution: {integrity: sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==} + '@rollup/rollup-linux-arm-musleabihf@4.54.0': + resolution: {integrity: sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==} cpu: [arm] os: [linux] libc: [musl] @@ -1757,8 +1677,8 @@ packages: os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm64-gnu@4.55.1': - resolution: {integrity: sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==} + '@rollup/rollup-linux-arm64-gnu@4.54.0': + resolution: {integrity: sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==} cpu: [arm64] os: [linux] libc: [glibc] @@ -1769,8 +1689,8 @@ packages: os: [linux] libc: [musl] - '@rollup/rollup-linux-arm64-musl@4.55.1': - resolution: {integrity: sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==} + '@rollup/rollup-linux-arm64-musl@4.54.0': + resolution: {integrity: sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==} cpu: [arm64] os: [linux] libc: [musl] @@ -1781,44 +1701,32 @@ packages: os: [linux] libc: [glibc] - '@rollup/rollup-linux-loong64-gnu@4.55.1': - resolution: {integrity: sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==} + '@rollup/rollup-linux-loong64-gnu@4.54.0': + resolution: {integrity: sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==} cpu: [loong64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-loong64-musl@4.55.1': - resolution: {integrity: sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==} - cpu: [loong64] - os: [linux] - libc: [musl] - '@rollup/rollup-linux-ppc64-gnu@4.52.5': resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==} cpu: [ppc64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-ppc64-gnu@4.55.1': - resolution: {integrity: sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==} + '@rollup/rollup-linux-ppc64-gnu@4.54.0': + resolution: {integrity: sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==} cpu: [ppc64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-ppc64-musl@4.55.1': - resolution: {integrity: sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==} - cpu: [ppc64] - os: [linux] - libc: [musl] - '@rollup/rollup-linux-riscv64-gnu@4.52.5': resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==} cpu: [riscv64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-gnu@4.55.1': - resolution: {integrity: sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==} + '@rollup/rollup-linux-riscv64-gnu@4.54.0': + resolution: {integrity: sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==} cpu: [riscv64] os: [linux] libc: [glibc] @@ -1829,8 +1737,8 @@ packages: os: [linux] libc: [musl] - '@rollup/rollup-linux-riscv64-musl@4.55.1': - resolution: {integrity: sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==} + '@rollup/rollup-linux-riscv64-musl@4.54.0': + resolution: {integrity: sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==} cpu: [riscv64] os: [linux] libc: [musl] @@ -1841,8 +1749,8 @@ packages: os: [linux] libc: [glibc] - '@rollup/rollup-linux-s390x-gnu@4.55.1': - resolution: {integrity: sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==} + '@rollup/rollup-linux-s390x-gnu@4.54.0': + resolution: {integrity: sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==} cpu: [s390x] os: [linux] libc: [glibc] @@ -1853,8 +1761,8 @@ packages: os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.55.1': - resolution: {integrity: sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==} + '@rollup/rollup-linux-x64-gnu@4.54.0': + resolution: {integrity: sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==} cpu: [x64] os: [linux] libc: [glibc] @@ -1865,24 +1773,19 @@ packages: os: [linux] libc: [musl] - '@rollup/rollup-linux-x64-musl@4.55.1': - resolution: {integrity: sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==} + '@rollup/rollup-linux-x64-musl@4.54.0': + resolution: {integrity: sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==} cpu: [x64] os: [linux] libc: [musl] - '@rollup/rollup-openbsd-x64@4.55.1': - resolution: {integrity: sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==} - cpu: [x64] - os: [openbsd] - '@rollup/rollup-openharmony-arm64@4.52.5': resolution: {integrity: sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-openharmony-arm64@4.55.1': - resolution: {integrity: sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==} + '@rollup/rollup-openharmony-arm64@4.54.0': + resolution: {integrity: sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==} cpu: [arm64] os: [openharmony] @@ -1891,8 +1794,8 @@ packages: cpu: [arm64] os: [win32] - '@rollup/rollup-win32-arm64-msvc@4.55.1': - resolution: {integrity: sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==} + '@rollup/rollup-win32-arm64-msvc@4.54.0': + resolution: {integrity: sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw==} cpu: [arm64] os: [win32] @@ -1901,8 +1804,8 @@ packages: cpu: [ia32] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.55.1': - resolution: {integrity: sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==} + '@rollup/rollup-win32-ia32-msvc@4.54.0': + resolution: {integrity: sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ==} cpu: [ia32] os: [win32] @@ -1911,8 +1814,8 @@ packages: cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.55.1': - resolution: {integrity: sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==} + '@rollup/rollup-win32-x64-gnu@4.54.0': + resolution: {integrity: sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ==} cpu: [x64] os: [win32] @@ -1921,8 +1824,8 @@ packages: cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.55.1': - resolution: {integrity: sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==} + '@rollup/rollup-win32-x64-msvc@4.54.0': + resolution: {integrity: sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg==} cpu: [x64] os: [win32] @@ -1984,11 +1887,11 @@ packages: '@types/node@20.14.5': resolution: {integrity: sha512-aoRR+fJkZT2l0aGOJhuA8frnCSoNX6W7U2mpNq63+BxBIj5BQFt8rHy627kijCmm63ijdSdwvGgpUsU6MBsZZA==} - '@types/node@20.19.28': - resolution: {integrity: sha512-VyKBr25BuFDzBFCK5sUM6ZXiWfqgCTwTAOK8qzGV/m9FCirXYDlmczJ+d5dXBAQALGCdRRdbteKYfJ84NGEusw==} + '@types/node@20.19.27': + resolution: {integrity: sha512-N2clP5pJhB2YnZJ3PIHFk5RkygRX5WO/5f0WC08tp0wd+sv0rsJk3MqWn3CbNmT2J505a5336jaQj4ph1AdMug==} - '@types/node@24.9.1': - resolution: {integrity: sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg==} + '@types/node@24.10.4': + resolution: {integrity: sha512-vnDVpYPMzs4wunl27jHrfmwojOGKya0xyM3sH+UE5iv5uPS6vX7UIoh6m+vQc5LGBq52HBKPIn/zcSZVzeDEZg==} '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} @@ -1999,41 +1902,41 @@ packages: '@types/whatwg-mimetype@3.0.2': resolution: {integrity: sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==} - '@typescript-eslint/project-service@8.46.2': - resolution: {integrity: sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==} + '@typescript-eslint/project-service@8.51.0': + resolution: {integrity: sha512-Luv/GafO07Z7HpiI7qeEW5NW8HUtZI/fo/kE0YbtQEFpJRUuR0ajcWfCE5bnMvL7QQFrmT/odMe8QZww8X2nfQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.46.2': - resolution: {integrity: sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==} + '@typescript-eslint/scope-manager@8.51.0': + resolution: {integrity: sha512-JhhJDVwsSx4hiOEQPeajGhCWgBMBwVkxC/Pet53EpBVs7zHHtayKefw1jtPaNRXpI9RA2uocdmpdfE7T+NrizA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.46.2': - resolution: {integrity: sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==} + '@typescript-eslint/tsconfig-utils@8.51.0': + resolution: {integrity: sha512-Qi5bSy/vuHeWyir2C8u/uqGMIlIDu8fuiYWv48ZGlZ/k+PRPHtaAu7erpc7p5bzw2WNNSniuxoMSO4Ar6V9OXw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.46.2': - resolution: {integrity: sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==} + '@typescript-eslint/types@8.51.0': + resolution: {integrity: sha512-TizAvWYFM6sSscmEakjY3sPqGwxZRSywSsPEiuZF6d5GmGD9Gvlsv0f6N8FvAAA0CD06l3rIcWNbsN1e5F/9Ag==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.46.2': - resolution: {integrity: sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==} + '@typescript-eslint/typescript-estree@8.51.0': + resolution: {integrity: sha512-1qNjGqFRmlq0VW5iVlcyHBbCjPB7y6SxpBkrbhNWMy/65ZoncXCEPJxkRZL8McrseNH6lFhaxCIaX+vBuFnRng==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.46.2': - resolution: {integrity: sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg==} + '@typescript-eslint/utils@8.51.0': + resolution: {integrity: sha512-11rZYxSe0zabiKaCP2QAwRf/dnmgFgvTmeDTtZvUvXG3UuAdg/GU02NExmmIXzz3vLGgMdtrIosI84jITQOxUA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.46.2': - resolution: {integrity: sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==} + '@typescript-eslint/visitor-keys@8.51.0': + resolution: {integrity: sha512-mM/JRQOzhVN1ykejrvwnBRV3+7yTKK8tVANVN3o1O0t0v7o+jqdVu9crPy5Y9dov15TJk/FTIgoUGHrTOVL3Zg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@vitejs/plugin-react@5.1.0': @@ -2042,12 +1945,23 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + '@vitest/browser-playwright@4.0.16': + resolution: {integrity: sha512-I2Fy/ANdphi1yI46d15o0M1M4M0UJrUiVKkH5oKeRZZCdPg0fw/cfTKZzv9Ge9eobtJYp4BGblMzXdXH0vcl5g==} + peerDependencies: + playwright: '*' + vitest: 4.0.16 + '@vitest/browser-playwright@4.0.6': resolution: {integrity: sha512-u6DliDabPQYXz8U4ZwnCvr9q2kJnribkenO6FK0qv5Gu/m1X884JOf0IZ71x7rLrmSsoP3YD3hVnNutAbhEX3A==} peerDependencies: playwright: '*' vitest: 4.0.6 + '@vitest/browser@4.0.16': + resolution: {integrity: sha512-t4toy8X/YTnjYEPoY0pbDBg3EvDPg1elCDrfc+VupPHwoN/5/FNQ8Z+xBYIaEnOE2vVEyKwqYBzZ9h9rJtZVcg==} + peerDependencies: + vitest: 4.0.16 + '@vitest/browser@4.0.6': resolution: {integrity: sha512-SdrcvwvP6q8n82cS2BthbZuHGFPHeKkjbpeIRhGaeV8hJ8P0swWFx5lUZ/Vnd7G0CsfL6m4/3lOaqd/n12vtZA==} peerDependencies: @@ -2062,17 +1976,17 @@ packages: '@vitest/browser': optional: true - '@vitest/coverage-v8@4.0.6': - resolution: {integrity: sha512-cv6pFXj9/Otk7q1Ocoj8k3BUVVwnFr3jqcqpwYrU5LkKClU9DpaMEdX+zptx/RyIJS+/VpoxMWmfISXchmVDPQ==} + '@vitest/coverage-v8@4.0.16': + resolution: {integrity: sha512-2rNdjEIsPRzsdu6/9Eq0AYAzYdpP6Bx9cje9tL3FE5XzXRQF1fNU9pe/1yE8fCrS0HD+fBtt6gLPh6LI57tX7A==} peerDependencies: - '@vitest/browser': 4.0.6 - vitest: 4.0.6 + '@vitest/browser': 4.0.16 + vitest: 4.0.16 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/eslint-plugin@1.4.0': - resolution: {integrity: sha512-TMzJ0Vqdsc71stblzI0ZdqSnt6Bp4mJ+amD3Hv3qhKK82hBUnznYfnLwA80gdGfe5V24ysndMOoSGrol6fyvbA==} + '@vitest/eslint-plugin@1.6.5': + resolution: {integrity: sha512-+wKYGmvXQJjq58qBx/AwiZr5bFfMiWBdgHViSQoFW/+wl5MQhJeOGP/3HM7GO7W1+AoiW9Gcyy2Hdwcao4LnfQ==} engines: {node: '>=18'} peerDependencies: eslint: '>=8.57.0' @@ -2084,14 +1998,14 @@ packages: vitest: optional: true - '@vitest/expect@4.0.17': - resolution: {integrity: sha512-mEoqP3RqhKlbmUmntNDDCJeTDavDR+fVYkSOw8qRwJFaW/0/5zA9zFeTrHqNtcmwh6j26yMmwx2PqUDPzt5ZAQ==} + '@vitest/expect@4.0.16': + resolution: {integrity: sha512-eshqULT2It7McaJkQGLkPjPjNph+uevROGuIMJdG3V+0BSR2w9u6J9Lwu+E8cK5TETlfou8GRijhafIMhXsimA==} '@vitest/expect@4.0.6': resolution: {integrity: sha512-5j8UUlBVhOjhj4lR2Nt9sEV8b4WtbcYh8vnfhTNA2Kn5+smtevzjNq+xlBuVhnFGXiyPPNzGrOVvmyHWkS5QGg==} - '@vitest/mocker@4.0.17': - resolution: {integrity: sha512-+ZtQhLA3lDh1tI2wxe3yMsGzbp7uuJSWBM1iTIKCbppWTSBN09PUC+L+fyNlQApQoR+Ps8twt2pbSSXg2fQVEQ==} + '@vitest/mocker@4.0.16': + resolution: {integrity: sha512-yb6k4AZxJTB+q9ycAvsoxGn+j/po0UaPgajllBgt1PzoMAAmJGYFdDk0uCcRcxb3BrME34I6u8gHZTQlkqSZpg==} peerDependencies: msw: ^2.4.9 vite: ^6.0.0 || ^7.0.0-0 @@ -2112,32 +2026,32 @@ packages: vite: optional: true - '@vitest/pretty-format@4.0.17': - resolution: {integrity: sha512-Ah3VAYmjcEdHg6+MwFE17qyLqBHZ+ni2ScKCiW2XrlSBV4H3Z7vYfPfz7CWQ33gyu76oc0Ai36+kgLU3rfF4nw==} + '@vitest/pretty-format@4.0.16': + resolution: {integrity: sha512-eNCYNsSty9xJKi/UdVD8Ou16alu7AYiS2fCPRs0b1OdhJiV89buAXQLpTbe+X8V9L6qrs9CqyvU7OaAopJYPsA==} '@vitest/pretty-format@4.0.6': resolution: {integrity: sha512-4vptgNkLIA1W1Nn5X4x8rLJBzPiJwnPc+awKtfBE5hNMVsoAl/JCCPPzNrbf+L4NKgklsis5Yp2gYa+XAS442g==} - '@vitest/runner@4.0.17': - resolution: {integrity: sha512-JmuQyf8aMWoo/LmNFppdpkfRVHJcsgzkbCA+/Bk7VfNH7RE6Ut2qxegeyx2j3ojtJtKIbIGy3h+KxGfYfk28YQ==} + '@vitest/runner@4.0.16': + resolution: {integrity: sha512-VWEDm5Wv9xEo80ctjORcTQRJ539EGPB3Pb9ApvVRAY1U/WkHXmmYISqU5E79uCwcW7xYUV38gwZD+RV755fu3Q==} '@vitest/runner@4.0.6': resolution: {integrity: sha512-trPk5qpd7Jj+AiLZbV/e+KiiaGXZ8ECsRxtnPnCrJr9OW2mLB72Cb824IXgxVz/mVU3Aj4VebY+tDTPn++j1Og==} - '@vitest/snapshot@4.0.17': - resolution: {integrity: sha512-npPelD7oyL+YQM2gbIYvlavlMVWUfNNGZPcu0aEUQXt7FXTuqhmgiYupPnAanhKvyP6Srs2pIbWo30K0RbDtRQ==} + '@vitest/snapshot@4.0.16': + resolution: {integrity: sha512-sf6NcrYhYBsSYefxnry+DR8n3UV4xWZwWxYbCJUt2YdvtqzSPR7VfGrY0zsv090DAbjFZsi7ZaMi1KnSRyK1XA==} '@vitest/snapshot@4.0.6': resolution: {integrity: sha512-PaYLt7n2YzuvxhulDDu6c9EosiRuIE+FI2ECKs6yvHyhoga+2TBWI8dwBjs+IeuQaMtZTfioa9tj3uZb7nev1g==} - '@vitest/spy@4.0.17': - resolution: {integrity: sha512-I1bQo8QaP6tZlTomQNWKJE6ym4SHf3oLS7ceNjozxxgzavRAgZDc06T7kD8gb9bXKEgcLNt00Z+kZO6KaJ62Ew==} + '@vitest/spy@4.0.16': + resolution: {integrity: sha512-4jIOWjKP0ZUaEmJm00E0cOBLU+5WE0BpeNr3XN6TEF05ltro6NJqHWxXD0kA8/Zc8Nh23AT8WQxwNG+WeROupw==} '@vitest/spy@4.0.6': resolution: {integrity: sha512-g9jTUYPV1LtRPRCQfhbMintW7BTQz1n6WXYQYRQ25qkyffA4bjVXjkROokZnv7t07OqfaFKw1lPzqKGk1hmNuQ==} - '@vitest/utils@4.0.17': - resolution: {integrity: sha512-RG6iy+IzQpa9SB8HAFHJ9Y+pTzI+h8553MrciN9eC6TFBErqrQaTas4vG+MVj8S4uKk8uTT2p0vgZPnTdxd96w==} + '@vitest/utils@4.0.16': + resolution: {integrity: sha512-h8z9yYhV3e1LEfaQ3zdypIrnAg/9hguReGZoS7Gl0aBG5xgA410zBqECqmaF/+RkTggRsfnzc1XaAHA6bmUufA==} '@vitest/utils@4.0.6': resolution: {integrity: sha512-bG43VS3iYKrMIZXBo+y8Pti0O7uNju3KvNn6DrQWhQQKcLavMB+0NZfO1/QBAEbq0MaQ3QjNsnnXlGQvsh0Z6A==} @@ -2174,8 +2088,8 @@ packages: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} - ansi-escapes@7.1.0: - resolution: {integrity: sha512-YdhtCd19sKRKfAAUsrcC1wzm4JuzJoiX4pOJqIoW2qmKj5WzG/dL8uUJ0361zaXtHqK7gEhOwtAtz7t3Yq3X5g==} + ansi-escapes@7.2.0: + resolution: {integrity: sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==} engines: {node: '>=18'} ansi-regex@5.0.1: @@ -2269,8 +2183,8 @@ packages: ast-metadata-inferer@0.8.1: resolution: {integrity: sha512-ht3Dm6Zr7SXv6t1Ra6gFo0+kLDglHGrEbYihTkcycrbHw7WCcuhBzPlJYHEsIpycaUwzsJHje+vUcxXUX4ztTA==} - ast-v8-to-istanbul@0.3.5: - resolution: {integrity: sha512-9SdXjNheSiE8bALAQCQQuT6fgQaoxJh7IRYrRGZ8/9nv8WhJeC1aXAwN8TbaOssGOukUvyvnkgD9+Yuykvl1aA==} + ast-v8-to-istanbul@0.3.10: + resolution: {integrity: sha512-p4K7vMz2ZSk3wN8l5o3y2bJAoZXT3VuJI5OLTATY/01CYWumWvwkUw0SqDBnNq6IiTO3qDa1eSQDibAV8g7XOQ==} async-exit-hook@1.1.2: resolution: {integrity: sha512-CeTSWB5Bou31xSHeO45ZKgLPRaJbV4I8csRcFYETDBehX7H+1GDO/v+v8G7fZmar1gOmYa6UTXn6d/WIiJbslw==} @@ -2325,8 +2239,8 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - baseline-browser-mapping@2.8.5: - resolution: {integrity: sha512-TiU4qUT9jdCuh4aVOG7H1QozyeI2sZRqoRPdqBIaslfNt4WUSanRBueAwl2x5jt4rXBMim3lIN2x6yT8PDi24Q==} + baseline-browser-mapping@2.9.11: + resolution: {integrity: sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==} hasBin: true before-after-hook@4.0.0: @@ -2356,8 +2270,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.26.2: - resolution: {integrity: sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==} + browserslist@4.28.1: + resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -2383,8 +2297,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001743: - resolution: {integrity: sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw==} + caniuse-lite@1.0.30001762: + resolution: {integrity: sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw==} chai@4.3.4: resolution: {integrity: sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==} @@ -2410,8 +2324,8 @@ packages: resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - chardet@2.1.0: - resolution: {integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==} + chardet@2.1.1: + resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} check-error@1.0.3: resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} @@ -2439,8 +2353,8 @@ packages: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} - cli-truncate@5.1.0: - resolution: {integrity: sha512-7JDGG+4Zp0CsknDCedl0DYdaeOhc46QNpXi3NLQblkZpXXgA6LncLDUUyvrjSvZeF3VRQa+KiMGomazQrC1V8g==} + cli-truncate@5.1.1: + resolution: {integrity: sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==} engines: {node: '>=20'} cli-width@4.1.0: @@ -2503,11 +2417,6 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - concurrently@9.2.1: - resolution: {integrity: sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==} - engines: {node: '>=18'} - hasBin: true - convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -2515,10 +2424,6 @@ packages: resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} engines: {node: '>=18'} - cookie@1.1.1: - resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==} - engines: {node: '>=18'} - core-js-compat@3.45.1: resolution: {integrity: sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA==} @@ -2545,9 +2450,6 @@ packages: resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} engines: {node: '>= 0.4'} - dataloader@1.4.0: - resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==} - date-fns@4.1.0: resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} @@ -2638,10 +2540,6 @@ packages: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} - dotenv@8.6.0: - resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} - engines: {node: '>=10'} - dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -2649,8 +2547,8 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - electron-to-chromium@1.5.220: - resolution: {integrity: sha512-TWXijEwR1ggr4BdAKrb1nMNqYLTx1/4aD1fkeZU+FVJGTKu53/T7UyHKXlqEX3Ub02csyHePbHmkvnrjcaYzMA==} + electron-to-chromium@1.5.267: + resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==} elegant-spinner@1.0.1: resolution: {integrity: sha512-B+ZM+RXvRqQaAmkMlO/oSe5nMUOaUnyfGYCEHoR8wrXsZR2mA0XVibsxV1bvTwxdRWah1PkQqso2EzhILGHtEQ==} @@ -2664,8 +2562,8 @@ packages: resolution: {integrity: sha512-r4eRSeStEGf6M5SKdrQhhLK5bOwOBxQhIE3YSTnZE3GpKiLfnnhE+tPtrJE79+eDJgm39BM6LSoI8SCx4HbwlQ==} engines: {node: '>=6'} - emoji-regex@10.5.0: - resolution: {integrity: sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==} + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2691,8 +2589,8 @@ packages: error-stack-parser@2.1.4: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} - es-abstract@1.24.0: - resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} + es-abstract@1.24.1: + resolution: {integrity: sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==} engines: {node: '>= 0.4'} es-define-property@1.0.1: @@ -2703,8 +2601,8 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-iterator-helpers@1.2.1: - resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} + es-iterator-helpers@1.2.2: + resolution: {integrity: sha512-BrUQ0cPTB/IwXj23HtwHjS9n7O4h9FX94b4xc5zlTHxeLgTAdzYUDyy6KdExAl9lbN5rtfe44xpjpmj9grxs5w==} engines: {node: '>= 0.4'} es-module-lexer@1.7.0: @@ -2826,8 +2724,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.39.0: - resolution: {integrity: sha512-iy2GE3MHrYTL5lrCtMZ0X1KLEKKUjmK0kzwcnefhR66txcEmXZD2YWgR5GNdcEwkNx3a0siYkSvl0vIC+Svjmg==} + eslint@9.39.2: + resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -2848,8 +2746,8 @@ packages: engines: {node: '>=4'} hasBin: true - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + esquery@1.7.0: + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} esrecurse@4.3.0: @@ -3003,6 +2901,10 @@ packages: functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + generator-function@2.0.1: + resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} + engines: {node: '>= 0.4'} + gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -3056,8 +2958,8 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + glob@10.5.0: + resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} hasBin: true glob@11.0.3: @@ -3065,6 +2967,15 @@ packages: engines: {node: 20 || >=22} hasBin: true + glob@11.1.0: + resolution: {integrity: sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==} + engines: {node: 20 || >=22} + hasBin: true + + glob@13.0.0: + resolution: {integrity: sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==} + engines: {node: 20 || >=22} + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported @@ -3198,8 +3109,8 @@ packages: resolution: {integrity: sha512-ONHr16SQvKZNSqjQT9gy5z24Jw+uqfO02/ngBSBoqChZ+W8qXX7GPRa1RoUnzGADw8K63R1BXUMzarCVQBpY8Q==} engines: {node: '>=0.10.0'} - iconv-lite@0.7.0: - resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} + iconv-lite@0.7.1: + resolution: {integrity: sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==} engines: {node: '>=0.10.0'} ignore@5.3.2: @@ -3310,8 +3221,8 @@ packages: resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} engines: {node: '>=18'} - is-generator-function@1.1.0: - resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} + is-generator-function@1.1.2: + resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} engines: {node: '>= 0.4'} is-glob@2.0.1: @@ -3479,10 +3390,6 @@ packages: resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} hasBin: true - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - js-yaml@4.1.1: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true @@ -3536,8 +3443,8 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - lint-staged@16.2.6: - resolution: {integrity: sha512-s1gphtDbV4bmW1eylXpVMk2u7is7YsrLl8hzrtvC70h4ByhcMLZFY01Fx05ZUDNuv1H8HO4E+e2zgejV1jVwNw==} + lint-staged@16.2.7: + resolution: {integrity: sha512-lDIj4RnYmK7/kXMya+qJsmkRFkGolciXjrsZ6PC25GdTfWOAWetR0ZbsNXRAj1EHHImRSalc+whZFg56F5DVow==} engines: {node: '>=20.17'} hasBin: true @@ -3597,6 +3504,10 @@ packages: resolution: {integrity: sha512-r8LA6i4LP4EeWOhqBaZZjDWwehd1xUJPCJd9Sv300H0ZmcUER4+JPh7bqqZeqs1o5pgtgvXm+d9UGrB5zZGDiQ==} engines: {node: 20 || >=22} + lru-cache@11.2.4: + resolution: {integrity: sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==} + engines: {node: 20 || >=22} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -3617,6 +3528,9 @@ packages: magicast@0.3.5: resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + magicast@0.5.1: + resolution: {integrity: sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==} + make-dir@2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} engines: {node: '>=6'} @@ -3750,17 +3664,8 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - - node-releases@2.0.21: - resolution: {integrity: sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==} + node-releases@2.0.27: + resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} @@ -3938,6 +3843,10 @@ packages: resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} engines: {node: 20 || >=22} + path-scurry@2.0.1: + resolution: {integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==} + engines: {node: 20 || >=22} + path-to-regexp@6.3.0: resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} @@ -4003,13 +3912,13 @@ packages: resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} engines: {node: '>=8'} - playwright-core@1.56.1: - resolution: {integrity: sha512-hutraynyn31F+Bifme+Ps9Vq59hKuUCz7H1kDOcBs+2oGguKkWTU50bBWrtz34OUWmIwpBTWDxaRPXrIXkgvmQ==} + playwright-core@1.57.0: + resolution: {integrity: sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ==} engines: {node: '>=18'} hasBin: true - playwright@1.56.1: - resolution: {integrity: sha512-aFi5B0WovBHTEvpM3DzXTUaeN6eN0qWnTkKx4NQaH4Wvcmc153PdaY2UBdSYKaGYw+UyWXSVyxDUg5DoPEttjw==} + playwright@1.57.0: + resolution: {integrity: sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw==} engines: {node: '>=18'} hasBin: true @@ -4033,8 +3942,8 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + prettier-linter-helpers@1.0.1: + resolution: {integrity: sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==} engines: {node: '>=6.0.0'} prettier@2.8.8: @@ -4042,8 +3951,8 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - prettier@3.6.2: - resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} + prettier@3.7.4: + resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==} engines: {node: '>=14'} hasBin: true @@ -4110,8 +4019,8 @@ packages: resolution: {integrity: sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw==} engines: {node: '>=0.10.0'} - react-router@7.12.0: - resolution: {integrity: sha512-kTPDYPFzDVGIIGNLS5VJykK0HfHLY5MF3b+xj0/tTyNYL1gF1qs7u67Z9jEhQk2sQ98SUaHxlG31g1JtF7IfVw==} + react-router@7.9.4: + resolution: {integrity: sha512-SD3G8HKviFHg9xj7dNODUKDFgpG4xqD5nhyd0mYoB5iISepuZAvzSr8ywxgxKJ52yRzf/HWtVHc9AWwoTbljvA==} engines: {node: '>=20.0.0'} peerDependencies: react: '>=18' @@ -4215,6 +4124,11 @@ packages: engines: {node: '>= 0.4'} hasBin: true + resolve@1.22.11: + resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} + engines: {node: '>= 0.4'} + hasBin: true + resolve@2.0.0-next.5: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true @@ -4248,6 +4162,11 @@ packages: engines: {node: 20 || >=22} hasBin: true + rimraf@6.1.2: + resolution: {integrity: sha512-cFCkPslJv7BAXJsYlK1dZsbP8/ZNLkCAQ0bi1hf5EKX2QHegmDFEFA6QhuYJlk7UDdc+02JjO80YSOrWPpw06g==} + engines: {node: 20 || >=22} + hasBin: true + rollup-plugin-license@3.6.0: resolution: {integrity: sha512-1ieLxTCaigI5xokIfszVDRoy6c/Wmlot1fDEnea7Q/WXSR8AqOjYljHDLObAx7nFxHC2mbxT3QnTSPhaic2IYw==} engines: {node: '>=14.0.0'} @@ -4259,17 +4178,14 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - rollup@4.55.1: - resolution: {integrity: sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==} + rollup@4.54.0: + resolution: {integrity: sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - rxjs@7.8.2: - resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} - safe-array-concat@1.1.3: resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} engines: {node: '>=0.4'} @@ -4321,9 +4237,6 @@ packages: set-cookie-parser@2.7.1: resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} - set-cookie-parser@2.7.2: - resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==} - set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -4344,10 +4257,6 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shell-quote@1.8.3: - resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} - engines: {node: '>= 0.4'} - side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} engines: {node: '>= 0.4'} @@ -4531,10 +4440,6 @@ packages: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} - supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -4649,9 +4554,6 @@ packages: resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==} engines: {node: '>=16'} - tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true @@ -4659,8 +4561,8 @@ packages: truncate-utf8-bytes@1.0.2: resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} - ts-api-utils@2.1.0: - resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + ts-api-utils@2.4.0: + resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} engines: {node: '>=18.12'} peerDependencies: typescript: '>=4.8.4' @@ -4668,9 +4570,6 @@ packages: tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} @@ -4769,8 +4668,8 @@ packages: until-async@3.0.2: resolution: {integrity: sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw==} - update-browserslist-db@1.1.3: - resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -4778,6 +4677,9 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + url-exists-nodejs@0.2.4: + resolution: {integrity: sha512-j0X68SGGcdWxOZMQQ04UCLb11o5LVWu5WzZNMrDixPdKiH4g0cD0JLAJsAz4ifzN8s+mcDFrsGp2efBsn+ZYbQ==} + url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} @@ -4835,8 +4737,8 @@ packages: yaml: optional: true - vite@7.3.1: - resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} + vite@7.3.0: + resolution: {integrity: sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -4875,18 +4777,18 @@ packages: yaml: optional: true - vitest@4.0.17: - resolution: {integrity: sha512-FQMeF0DJdWY0iOnbv466n/0BudNdKj1l5jYgl5JVTwjSsZSlqyXFt/9+1sEyhR6CLowbZpV7O1sCHrzBhucKKg==} + vitest@4.0.16: + resolution: {integrity: sha512-E4t7DJ9pESL6E3I8nFjPa4xGUd3PmiWDLsDztS2qXSJWfHtbQnwAWylaBvSNY48I3vr8PTqIZlyK8TE3V3CA4Q==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.0.17 - '@vitest/browser-preview': 4.0.17 - '@vitest/browser-webdriverio': 4.0.17 - '@vitest/ui': 4.0.17 + '@vitest/browser-playwright': 4.0.16 + '@vitest/browser-preview': 4.0.16 + '@vitest/browser-webdriverio': 4.0.16 + '@vitest/ui': 4.0.16 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -4943,16 +4845,10 @@ packages: jsdom: optional: true - webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - whatwg-mimetype@3.0.0: resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} engines: {node: '>=12'} - whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - which-boxed-primitive@1.1.1: resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} engines: {node: '>= 0.4'} @@ -5047,8 +4943,8 @@ packages: yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yaml@2.8.1: - resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} + yaml@2.8.2: + resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} engines: {node: '>= 14.6'} hasBin: true @@ -5070,17 +4966,9 @@ packages: snapshots: - '@adobe/aep-rules-engine@3.1.1(vitest@4.0.17(@types/node@24.9.1)(@vitest/browser-playwright@4.0.6)(happy-dom@20.0.8)(msw@2.11.6(@types/node@24.9.1)(typescript@5.9.3))(terser@5.44.0)(yaml@2.8.1))': - dependencies: - '@vitest/coverage-v8': 3.2.4(vitest@4.0.17(@types/node@24.9.1)(@vitest/browser-playwright@4.0.6)(happy-dom@20.0.8)(msw@2.11.6(@types/node@24.9.1)(typescript@5.9.3))(terser@5.44.0)(yaml@2.8.1)) - transitivePeerDependencies: - - '@vitest/browser' - - supports-color - - vitest - - '@adobe/aep-rules-engine@3.1.1(vitest@4.0.6)': + '@adobe/aep-rules-engine@3.1.1(@vitest/browser@4.0.16(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(vite@7.3.0(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2))(vitest@4.0.16))(vitest@4.0.16)': dependencies: - '@vitest/coverage-v8': 3.2.4(vitest@4.0.6) + '@vitest/coverage-v8': 3.2.4(@vitest/browser@4.0.16(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(vite@7.3.0(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2))(vitest@4.0.16))(vitest@4.0.16) transitivePeerDependencies: - '@vitest/browser' - supports-color @@ -5111,12 +4999,10 @@ snapshots: '@babel/code-frame@7.27.1': dependencies: - '@babel/helper-validator-identifier': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.28.4': {} - '@babel/compat-data@7.28.5': {} '@babel/core@7.28.5': @@ -5139,14 +5025,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.28.3': - dependencies: - '@babel/parser': 7.28.5 - '@babel/types': 7.28.5 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - jsesc: 3.1.0 - '@babel/generator@7.28.5': dependencies: '@babel/parser': 7.28.5 @@ -5157,13 +5035,13 @@ snapshots: '@babel/helper-annotate-as-pure@7.27.3': dependencies: - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 '@babel/helper-compilation-targets@7.27.2': dependencies: - '@babel/compat-data': 7.28.4 + '@babel/compat-data': 7.28.5 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.26.2 + browserslist: 4.28.1 lru-cache: 5.1.1 semver: 6.3.1 @@ -5175,7 +5053,7 @@ snapshots: '@babel/helper-optimise-call-expression': 7.27.1 '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -5194,7 +5072,7 @@ snapshots: '@babel/helper-plugin-utils': 7.27.1 debug: 4.4.3 lodash.debounce: 4.0.8 - resolve: 1.22.10 + resolve: 1.22.11 transitivePeerDependencies: - supports-color @@ -5205,7 +5083,7 @@ snapshots: '@babel/helper-plugin-utils': 7.27.1 debug: 4.4.3 lodash.debounce: 4.0.8 - resolve: 1.22.10 + resolve: 1.22.11 transitivePeerDependencies: - supports-color @@ -5216,7 +5094,7 @@ snapshots: '@babel/helper-plugin-utils': 7.27.1 debug: 4.4.3 lodash.debounce: 4.0.8 - resolve: 1.22.10 + resolve: 1.22.11 transitivePeerDependencies: - supports-color @@ -5224,15 +5102,15 @@ snapshots: '@babel/helper-member-expression-to-functions@7.27.1': dependencies: - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.27.1': dependencies: - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color @@ -5240,14 +5118,14 @@ snapshots: dependencies: '@babel/core': 7.28.5 '@babel/helper-module-imports': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.28.4 + '@babel/helper-validator-identifier': 7.28.5 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 '@babel/helper-plugin-utils@7.27.1': {} @@ -5256,7 +5134,7 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-annotate-as-pure': 7.27.3 '@babel/helper-wrap-function': 7.28.3 - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color @@ -5265,21 +5143,19 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: - '@babel/traverse': 7.28.4 - '@babel/types': 7.28.4 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color '@babel/helper-string-parser@7.27.1': {} - '@babel/helper-validator-identifier@7.27.1': {} - '@babel/helper-validator-identifier@7.28.5': {} '@babel/helper-validator-option@7.27.1': {} @@ -5287,8 +5163,8 @@ snapshots: '@babel/helper-wrap-function@7.28.3': dependencies: '@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 transitivePeerDependencies: - supports-color @@ -5297,10 +5173,6 @@ snapshots: '@babel/template': 7.27.2 '@babel/types': 7.28.5 - '@babel/parser@7.28.4': - dependencies: - '@babel/types': 7.28.4 - '@babel/parser@7.28.5': dependencies: '@babel/types': 7.28.5 @@ -5336,7 +5208,7 @@ snapshots: dependencies: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color @@ -5404,7 +5276,7 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.5) - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color @@ -5451,7 +5323,7 @@ snapshots: '@babel/helper-globals': 7.28.0 '@babel/helper-plugin-utils': 7.27.1 '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5) - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color @@ -5461,14 +5333,6 @@ snapshots: '@babel/helper-plugin-utils': 7.27.1 '@babel/template': 7.27.2 - '@babel/plugin-transform-destructuring@7.28.0(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.4 - transitivePeerDependencies: - - supports-color - '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 @@ -5507,11 +5371,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.28.5)': - dependencies: - '@babel/core': 7.28.5 - '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-exponentiation-operator@7.28.5(@babel/core@7.28.5)': dependencies: '@babel/core': 7.28.5 @@ -5541,7 +5400,7 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color @@ -5625,9 +5484,9 @@ snapshots: '@babel/core': 7.28.5 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.5) + '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5) '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.5) - '@babel/traverse': 7.28.4 + '@babel/traverse': 7.28.5 transitivePeerDependencies: - supports-color @@ -5708,7 +5567,7 @@ snapshots: '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5) - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 transitivePeerDependencies: - supports-color @@ -5884,7 +5743,7 @@ snapshots: dependencies: '@babel/core': 7.28.5 '@babel/helper-plugin-utils': 7.27.1 - '@babel/types': 7.28.4 + '@babel/types': 7.28.5 esutils: 2.0.3 '@babel/preset-react@7.27.1(@babel/core@7.28.5)': @@ -5904,20 +5763,8 @@ snapshots: '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.4 - '@babel/types': 7.28.4 - - '@babel/traverse@7.28.4': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.3 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.4 - '@babel/template': 7.27.2 - '@babel/types': 7.28.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 '@babel/traverse@7.28.5': dependencies: @@ -5931,11 +5778,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/types@7.28.4': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - '@babel/types@7.28.5': dependencies: '@babel/helper-string-parser': 7.27.1 @@ -5972,15 +5814,7 @@ snapshots: dependencies: '@changesets/types': 6.1.0 - '@changesets/changelog-github@0.5.2': - dependencies: - '@changesets/get-github-info': 0.7.0 - '@changesets/types': 6.1.0 - dotenv: 8.6.0 - transitivePeerDependencies: - - encoding - - '@changesets/cli@2.29.8(@types/node@24.9.1)': + '@changesets/cli@2.29.8(@types/node@24.10.4)': dependencies: '@changesets/apply-release-plan': 7.0.14 '@changesets/assemble-release-plan': 6.0.9 @@ -5996,7 +5830,7 @@ snapshots: '@changesets/should-skip-package': 0.1.2 '@changesets/types': 6.1.0 '@changesets/write': 0.4.0 - '@inquirer/external-editor': 1.0.2(@types/node@24.9.1) + '@inquirer/external-editor': 1.0.3(@types/node@24.10.4) '@manypkg/get-packages': 1.1.3 ansi-colors: 4.1.3 ci-info: 3.9.0 @@ -6034,13 +5868,6 @@ snapshots: picocolors: 1.1.1 semver: 7.7.3 - '@changesets/get-github-info@0.7.0': - dependencies: - dataloader: 1.4.0 - node-fetch: 2.7.0 - transitivePeerDependencies: - - encoding - '@changesets/get-release-plan@4.0.14': dependencies: '@changesets/assemble-release-plan': 6.0.9 @@ -6276,12 +6103,12 @@ snapshots: '@esbuild/win32-x64@0.27.2': optional: true - '@eslint-community/eslint-utils@4.9.0(eslint@9.39.0)': + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.2)': dependencies: - eslint: 9.39.0 + eslint: 9.39.2 eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.12.1': {} + '@eslint-community/regexpp@4.12.2': {} '@eslint/config-array@0.21.1': dependencies: @@ -6299,7 +6126,7 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/eslintrc@3.3.1': + '@eslint/eslintrc@3.3.3': dependencies: ajv: 6.12.6 debug: 4.4.3 @@ -6307,15 +6134,13 @@ snapshots: globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.1 - js-yaml: 4.1.0 + js-yaml: 4.1.1 minimatch: 3.1.2 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - '@eslint/js@9.38.0': {} - - '@eslint/js@9.39.0': {} + '@eslint/js@9.39.2': {} '@eslint/object-schema@2.1.7': {} @@ -6335,158 +6160,130 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@inquirer/ansi@1.0.0': {} - '@inquirer/ansi@1.0.1': {} - '@inquirer/checkbox@4.3.0(@types/node@24.9.1)': + '@inquirer/checkbox@4.3.0(@types/node@24.10.4)': dependencies: '@inquirer/ansi': 1.0.1 - '@inquirer/core': 10.3.0(@types/node@24.9.1) + '@inquirer/core': 10.3.0(@types/node@24.10.4) '@inquirer/figures': 1.0.14 - '@inquirer/type': 3.0.9(@types/node@24.9.1) + '@inquirer/type': 3.0.9(@types/node@24.10.4) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.9.1 - - '@inquirer/confirm@5.1.18(@types/node@24.9.1)': - dependencies: - '@inquirer/core': 10.2.2(@types/node@24.9.1) - '@inquirer/type': 3.0.8(@types/node@24.9.1) - optionalDependencies: - '@types/node': 24.9.1 - - '@inquirer/confirm@5.1.19(@types/node@24.9.1)': - dependencies: - '@inquirer/core': 10.3.0(@types/node@24.9.1) - '@inquirer/type': 3.0.9(@types/node@24.9.1) - optionalDependencies: - '@types/node': 24.9.1 + '@types/node': 24.10.4 - '@inquirer/core@10.2.2(@types/node@24.9.1)': + '@inquirer/confirm@5.1.19(@types/node@24.10.4)': dependencies: - '@inquirer/ansi': 1.0.0 - '@inquirer/figures': 1.0.13 - '@inquirer/type': 3.0.8(@types/node@24.9.1) - cli-width: 4.1.0 - mute-stream: 2.0.0 - signal-exit: 4.1.0 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.3 + '@inquirer/core': 10.3.0(@types/node@24.10.4) + '@inquirer/type': 3.0.9(@types/node@24.10.4) optionalDependencies: - '@types/node': 24.9.1 + '@types/node': 24.10.4 - '@inquirer/core@10.3.0(@types/node@24.9.1)': + '@inquirer/core@10.3.0(@types/node@24.10.4)': dependencies: '@inquirer/ansi': 1.0.1 '@inquirer/figures': 1.0.14 - '@inquirer/type': 3.0.9(@types/node@24.9.1) + '@inquirer/type': 3.0.9(@types/node@24.10.4) cli-width: 4.1.0 mute-stream: 2.0.0 signal-exit: 4.1.0 wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.9.1 + '@types/node': 24.10.4 - '@inquirer/editor@4.2.21(@types/node@24.9.1)': + '@inquirer/editor@4.2.21(@types/node@24.10.4)': dependencies: - '@inquirer/core': 10.3.0(@types/node@24.9.1) - '@inquirer/external-editor': 1.0.2(@types/node@24.9.1) - '@inquirer/type': 3.0.9(@types/node@24.9.1) + '@inquirer/core': 10.3.0(@types/node@24.10.4) + '@inquirer/external-editor': 1.0.3(@types/node@24.10.4) + '@inquirer/type': 3.0.9(@types/node@24.10.4) optionalDependencies: - '@types/node': 24.9.1 + '@types/node': 24.10.4 - '@inquirer/expand@4.0.21(@types/node@24.9.1)': + '@inquirer/expand@4.0.21(@types/node@24.10.4)': dependencies: - '@inquirer/core': 10.3.0(@types/node@24.9.1) - '@inquirer/type': 3.0.9(@types/node@24.9.1) + '@inquirer/core': 10.3.0(@types/node@24.10.4) + '@inquirer/type': 3.0.9(@types/node@24.10.4) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.9.1 + '@types/node': 24.10.4 - '@inquirer/external-editor@1.0.2(@types/node@24.9.1)': + '@inquirer/external-editor@1.0.3(@types/node@24.10.4)': dependencies: - chardet: 2.1.0 - iconv-lite: 0.7.0 + chardet: 2.1.1 + iconv-lite: 0.7.1 optionalDependencies: - '@types/node': 24.9.1 - - '@inquirer/figures@1.0.13': {} + '@types/node': 24.10.4 '@inquirer/figures@1.0.14': {} - '@inquirer/input@4.2.5(@types/node@24.9.1)': + '@inquirer/input@4.2.5(@types/node@24.10.4)': dependencies: - '@inquirer/core': 10.3.0(@types/node@24.9.1) - '@inquirer/type': 3.0.9(@types/node@24.9.1) + '@inquirer/core': 10.3.0(@types/node@24.10.4) + '@inquirer/type': 3.0.9(@types/node@24.10.4) optionalDependencies: - '@types/node': 24.9.1 + '@types/node': 24.10.4 - '@inquirer/number@3.0.21(@types/node@24.9.1)': + '@inquirer/number@3.0.21(@types/node@24.10.4)': dependencies: - '@inquirer/core': 10.3.0(@types/node@24.9.1) - '@inquirer/type': 3.0.9(@types/node@24.9.1) + '@inquirer/core': 10.3.0(@types/node@24.10.4) + '@inquirer/type': 3.0.9(@types/node@24.10.4) optionalDependencies: - '@types/node': 24.9.1 + '@types/node': 24.10.4 - '@inquirer/password@4.0.21(@types/node@24.9.1)': + '@inquirer/password@4.0.21(@types/node@24.10.4)': dependencies: '@inquirer/ansi': 1.0.1 - '@inquirer/core': 10.3.0(@types/node@24.9.1) - '@inquirer/type': 3.0.9(@types/node@24.9.1) + '@inquirer/core': 10.3.0(@types/node@24.10.4) + '@inquirer/type': 3.0.9(@types/node@24.10.4) optionalDependencies: - '@types/node': 24.9.1 - - '@inquirer/prompts@7.9.0(@types/node@24.9.1)': - dependencies: - '@inquirer/checkbox': 4.3.0(@types/node@24.9.1) - '@inquirer/confirm': 5.1.19(@types/node@24.9.1) - '@inquirer/editor': 4.2.21(@types/node@24.9.1) - '@inquirer/expand': 4.0.21(@types/node@24.9.1) - '@inquirer/input': 4.2.5(@types/node@24.9.1) - '@inquirer/number': 3.0.21(@types/node@24.9.1) - '@inquirer/password': 4.0.21(@types/node@24.9.1) - '@inquirer/rawlist': 4.1.9(@types/node@24.9.1) - '@inquirer/search': 3.2.0(@types/node@24.9.1) - '@inquirer/select': 4.4.0(@types/node@24.9.1) + '@types/node': 24.10.4 + + '@inquirer/prompts@7.9.0(@types/node@24.10.4)': + dependencies: + '@inquirer/checkbox': 4.3.0(@types/node@24.10.4) + '@inquirer/confirm': 5.1.19(@types/node@24.10.4) + '@inquirer/editor': 4.2.21(@types/node@24.10.4) + '@inquirer/expand': 4.0.21(@types/node@24.10.4) + '@inquirer/input': 4.2.5(@types/node@24.10.4) + '@inquirer/number': 3.0.21(@types/node@24.10.4) + '@inquirer/password': 4.0.21(@types/node@24.10.4) + '@inquirer/rawlist': 4.1.9(@types/node@24.10.4) + '@inquirer/search': 3.2.0(@types/node@24.10.4) + '@inquirer/select': 4.4.0(@types/node@24.10.4) optionalDependencies: - '@types/node': 24.9.1 + '@types/node': 24.10.4 - '@inquirer/rawlist@4.1.9(@types/node@24.9.1)': + '@inquirer/rawlist@4.1.9(@types/node@24.10.4)': dependencies: - '@inquirer/core': 10.3.0(@types/node@24.9.1) - '@inquirer/type': 3.0.9(@types/node@24.9.1) + '@inquirer/core': 10.3.0(@types/node@24.10.4) + '@inquirer/type': 3.0.9(@types/node@24.10.4) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.9.1 + '@types/node': 24.10.4 - '@inquirer/search@3.2.0(@types/node@24.9.1)': + '@inquirer/search@3.2.0(@types/node@24.10.4)': dependencies: - '@inquirer/core': 10.3.0(@types/node@24.9.1) + '@inquirer/core': 10.3.0(@types/node@24.10.4) '@inquirer/figures': 1.0.14 - '@inquirer/type': 3.0.9(@types/node@24.9.1) + '@inquirer/type': 3.0.9(@types/node@24.10.4) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.9.1 + '@types/node': 24.10.4 - '@inquirer/select@4.4.0(@types/node@24.9.1)': + '@inquirer/select@4.4.0(@types/node@24.10.4)': dependencies: '@inquirer/ansi': 1.0.1 - '@inquirer/core': 10.3.0(@types/node@24.9.1) + '@inquirer/core': 10.3.0(@types/node@24.10.4) '@inquirer/figures': 1.0.14 - '@inquirer/type': 3.0.9(@types/node@24.9.1) + '@inquirer/type': 3.0.9(@types/node@24.10.4) yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 24.9.1 + '@types/node': 24.10.4 - '@inquirer/type@3.0.8(@types/node@24.9.1)': + '@inquirer/type@3.0.9(@types/node@24.10.4)': optionalDependencies: - '@types/node': 24.9.1 - - '@inquirer/type@3.0.9(@types/node@24.9.1)': - optionalDependencies: - '@types/node': 24.9.1 + '@types/node': 24.10.4 '@isaacs/balanced-match@4.0.1': {} @@ -6577,8 +6374,8 @@ snapshots: dependencies: '@octokit/auth-token': 6.0.0 '@octokit/graphql': 9.0.3 - '@octokit/request': 10.0.6 - '@octokit/request-error': 7.0.2 + '@octokit/request': 10.0.7 + '@octokit/request-error': 7.1.0 '@octokit/types': 16.0.0 before-after-hook: 4.0.0 universal-user-agent: 7.0.3 @@ -6590,7 +6387,7 @@ snapshots: '@octokit/graphql@9.0.3': dependencies: - '@octokit/request': 10.0.6 + '@octokit/request': 10.0.7 '@octokit/types': 16.0.0 universal-user-agent: 7.0.3 @@ -6610,14 +6407,14 @@ snapshots: '@octokit/core': 7.0.6 '@octokit/types': 16.0.0 - '@octokit/request-error@7.0.2': + '@octokit/request-error@7.1.0': dependencies: '@octokit/types': 16.0.0 - '@octokit/request@10.0.6': + '@octokit/request@10.0.7': dependencies: '@octokit/endpoint': 11.0.2 - '@octokit/request-error': 7.0.2 + '@octokit/request-error': 7.1.0 '@octokit/types': 16.0.0 fast-content-type-parse: 3.0.0 universal-user-agent: 7.0.3 @@ -6703,142 +6500,133 @@ snapshots: '@rollup/rollup-android-arm-eabi@4.52.5': optional: true - '@rollup/rollup-android-arm-eabi@4.55.1': + '@rollup/rollup-android-arm-eabi@4.54.0': optional: true '@rollup/rollup-android-arm64@4.52.5': optional: true - '@rollup/rollup-android-arm64@4.55.1': + '@rollup/rollup-android-arm64@4.54.0': optional: true '@rollup/rollup-darwin-arm64@4.52.5': optional: true - '@rollup/rollup-darwin-arm64@4.55.1': + '@rollup/rollup-darwin-arm64@4.54.0': optional: true '@rollup/rollup-darwin-x64@4.52.5': optional: true - '@rollup/rollup-darwin-x64@4.55.1': + '@rollup/rollup-darwin-x64@4.54.0': optional: true '@rollup/rollup-freebsd-arm64@4.52.5': optional: true - '@rollup/rollup-freebsd-arm64@4.55.1': + '@rollup/rollup-freebsd-arm64@4.54.0': optional: true '@rollup/rollup-freebsd-x64@4.52.5': optional: true - '@rollup/rollup-freebsd-x64@4.55.1': + '@rollup/rollup-freebsd-x64@4.54.0': optional: true '@rollup/rollup-linux-arm-gnueabihf@4.52.5': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.55.1': + '@rollup/rollup-linux-arm-gnueabihf@4.54.0': optional: true '@rollup/rollup-linux-arm-musleabihf@4.52.5': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.55.1': + '@rollup/rollup-linux-arm-musleabihf@4.54.0': optional: true '@rollup/rollup-linux-arm64-gnu@4.52.5': optional: true - '@rollup/rollup-linux-arm64-gnu@4.55.1': + '@rollup/rollup-linux-arm64-gnu@4.54.0': optional: true '@rollup/rollup-linux-arm64-musl@4.52.5': optional: true - '@rollup/rollup-linux-arm64-musl@4.55.1': + '@rollup/rollup-linux-arm64-musl@4.54.0': optional: true '@rollup/rollup-linux-loong64-gnu@4.52.5': optional: true - '@rollup/rollup-linux-loong64-gnu@4.55.1': - optional: true - - '@rollup/rollup-linux-loong64-musl@4.55.1': + '@rollup/rollup-linux-loong64-gnu@4.54.0': optional: true '@rollup/rollup-linux-ppc64-gnu@4.52.5': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.55.1': - optional: true - - '@rollup/rollup-linux-ppc64-musl@4.55.1': + '@rollup/rollup-linux-ppc64-gnu@4.54.0': optional: true '@rollup/rollup-linux-riscv64-gnu@4.52.5': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.55.1': + '@rollup/rollup-linux-riscv64-gnu@4.54.0': optional: true '@rollup/rollup-linux-riscv64-musl@4.52.5': optional: true - '@rollup/rollup-linux-riscv64-musl@4.55.1': + '@rollup/rollup-linux-riscv64-musl@4.54.0': optional: true '@rollup/rollup-linux-s390x-gnu@4.52.5': optional: true - '@rollup/rollup-linux-s390x-gnu@4.55.1': + '@rollup/rollup-linux-s390x-gnu@4.54.0': optional: true '@rollup/rollup-linux-x64-gnu@4.52.5': optional: true - '@rollup/rollup-linux-x64-gnu@4.55.1': + '@rollup/rollup-linux-x64-gnu@4.54.0': optional: true '@rollup/rollup-linux-x64-musl@4.52.5': optional: true - '@rollup/rollup-linux-x64-musl@4.55.1': - optional: true - - '@rollup/rollup-openbsd-x64@4.55.1': + '@rollup/rollup-linux-x64-musl@4.54.0': optional: true '@rollup/rollup-openharmony-arm64@4.52.5': optional: true - '@rollup/rollup-openharmony-arm64@4.55.1': + '@rollup/rollup-openharmony-arm64@4.54.0': optional: true '@rollup/rollup-win32-arm64-msvc@4.52.5': optional: true - '@rollup/rollup-win32-arm64-msvc@4.55.1': + '@rollup/rollup-win32-arm64-msvc@4.54.0': optional: true '@rollup/rollup-win32-ia32-msvc@4.52.5': optional: true - '@rollup/rollup-win32-ia32-msvc@4.55.1': + '@rollup/rollup-win32-ia32-msvc@4.54.0': optional: true '@rollup/rollup-win32-x64-gnu@4.52.5': optional: true - '@rollup/rollup-win32-x64-gnu@4.55.1': + '@rollup/rollup-win32-x64-gnu@4.54.0': optional: true '@rollup/rollup-win32-x64-msvc@4.52.5': optional: true - '@rollup/rollup-win32-x64-msvc@4.55.1': + '@rollup/rollup-win32-x64-msvc@4.54.0': optional: true '@rtsao/scc@1.1.0': {} @@ -6886,7 +6674,7 @@ snapshots: '@types/glob@7.2.0': dependencies: '@types/minimatch': 6.0.0 - '@types/node': 24.9.1 + '@types/node': 20.14.5 '@types/json-schema@7.0.15': {} @@ -6904,12 +6692,12 @@ snapshots: dependencies: undici-types: 5.26.5 - '@types/node@20.19.28': + '@types/node@20.19.27': dependencies: undici-types: 6.21.0 optional: true - '@types/node@24.9.1': + '@types/node@24.10.4': dependencies: undici-types: 7.16.0 @@ -6920,59 +6708,58 @@ snapshots: '@types/whatwg-mimetype@3.0.2': optional: true - '@typescript-eslint/project-service@8.46.2(typescript@5.9.3)': + '@typescript-eslint/project-service@8.51.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.9.3) - '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/tsconfig-utils': 8.51.0(typescript@5.9.3) + '@typescript-eslint/types': 8.51.0 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.46.2': + '@typescript-eslint/scope-manager@8.51.0': dependencies: - '@typescript-eslint/types': 8.46.2 - '@typescript-eslint/visitor-keys': 8.46.2 + '@typescript-eslint/types': 8.51.0 + '@typescript-eslint/visitor-keys': 8.51.0 - '@typescript-eslint/tsconfig-utils@8.46.2(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.51.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/types@8.46.2': {} + '@typescript-eslint/types@8.51.0': {} - '@typescript-eslint/typescript-estree@8.46.2(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.51.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.46.2(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.9.3) - '@typescript-eslint/types': 8.46.2 - '@typescript-eslint/visitor-keys': 8.46.2 + '@typescript-eslint/project-service': 8.51.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.51.0(typescript@5.9.3) + '@typescript-eslint/types': 8.51.0 + '@typescript-eslint/visitor-keys': 8.51.0 debug: 4.4.3 - fast-glob: 3.3.3 - is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.3 - ts-api-utils: 2.1.0(typescript@5.9.3) + tinyglobby: 0.2.15 + ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.46.2(eslint@9.39.0)(typescript@5.9.3)': + '@typescript-eslint/utils@8.51.0(eslint@9.39.2)(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.0) - '@typescript-eslint/scope-manager': 8.46.2 - '@typescript-eslint/types': 8.46.2 - '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) - eslint: 9.39.0 + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2) + '@typescript-eslint/scope-manager': 8.51.0 + '@typescript-eslint/types': 8.51.0 + '@typescript-eslint/typescript-estree': 8.51.0(typescript@5.9.3) + eslint: 9.39.2 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.46.2': + '@typescript-eslint/visitor-keys@8.51.0': dependencies: - '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/types': 8.51.0 eslint-visitor-keys: 4.2.1 - '@vitejs/plugin-react@5.1.0(vite@7.1.12(@types/node@24.9.1)(terser@5.44.0)(yaml@2.8.1))': + '@vitejs/plugin-react@5.1.0(vite@7.1.12(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2))': dependencies: '@babel/core': 7.28.5 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.5) @@ -6980,33 +6767,47 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.43 '@types/babel__core': 7.20.5 react-refresh: 0.18.0 - vite: 7.1.12(@types/node@24.9.1)(terser@5.44.0)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color - '@vitest/browser-playwright@4.0.6(msw@2.11.6(@types/node@24.9.1)(typescript@5.9.3))(playwright@1.56.1)(vite@7.1.12(@types/node@24.9.1)(terser@5.44.0)(yaml@2.8.1))(vitest@4.0.6)': + '@vitest/browser-playwright@4.0.16(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(playwright@1.57.0)(vite@7.3.0(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2))(vitest@4.0.16)': dependencies: - '@vitest/browser': 4.0.6(msw@2.11.6(@types/node@24.9.1)(typescript@5.9.3))(vite@7.1.12(@types/node@24.9.1)(terser@5.44.0)(yaml@2.8.1))(vitest@4.0.6) - '@vitest/mocker': 4.0.6(msw@2.11.6(@types/node@24.9.1)(typescript@5.9.3))(vite@7.1.12(@types/node@24.9.1)(terser@5.44.0)(yaml@2.8.1)) - playwright: 1.56.1 + '@vitest/browser': 4.0.16(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(vite@7.3.0(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2))(vitest@4.0.16) + '@vitest/mocker': 4.0.16(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(vite@7.3.0(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2)) + playwright: 1.57.0 tinyrainbow: 3.0.3 - vitest: 4.0.6(@types/node@24.9.1)(@vitest/browser-playwright@4.0.6)(happy-dom@20.0.8)(msw@2.11.6(@types/node@24.9.1)(typescript@5.9.3))(terser@5.44.0)(yaml@2.8.1) + vitest: 4.0.16(@types/node@24.10.4)(@vitest/browser-playwright@4.0.16)(happy-dom@20.0.8)(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(terser@5.44.0)(yaml@2.8.2) transitivePeerDependencies: - bufferutil - msw - utf-8-validate - vite - '@vitest/browser@4.0.6(msw@2.11.6(@types/node@24.9.1)(typescript@5.9.3))(vite@7.1.12(@types/node@24.9.1)(terser@5.44.0)(yaml@2.8.1))(vitest@4.0.6)': + '@vitest/browser-playwright@4.0.6(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(playwright@1.57.0)(vite@7.1.12(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2))(vitest@4.0.6)': dependencies: - '@vitest/mocker': 4.0.6(msw@2.11.6(@types/node@24.9.1)(typescript@5.9.3))(vite@7.1.12(@types/node@24.9.1)(terser@5.44.0)(yaml@2.8.1)) - '@vitest/utils': 4.0.6 - magic-string: 0.30.19 + '@vitest/browser': 4.0.6(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(vite@7.1.12(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2))(vitest@4.0.6) + '@vitest/mocker': 4.0.6(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(vite@7.1.12(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2)) + playwright: 1.57.0 + tinyrainbow: 3.0.3 + vitest: 4.0.6(@types/node@24.10.4)(@vitest/browser-playwright@4.0.6)(happy-dom@20.0.8)(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(terser@5.44.0)(yaml@2.8.2) + transitivePeerDependencies: + - bufferutil + - msw + - utf-8-validate + - vite + optional: true + + '@vitest/browser@4.0.16(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(vite@7.3.0(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2))(vitest@4.0.16)': + dependencies: + '@vitest/mocker': 4.0.16(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(vite@7.3.0(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2)) + '@vitest/utils': 4.0.16 + magic-string: 0.30.21 pixelmatch: 7.1.0 pngjs: 7.0.0 sirv: 3.0.2 tinyrainbow: 3.0.3 - vitest: 4.0.6(@types/node@24.9.1)(@vitest/browser-playwright@4.0.6)(happy-dom@20.0.8)(msw@2.11.6(@types/node@24.9.1)(typescript@5.9.3))(terser@5.44.0)(yaml@2.8.1) + vitest: 4.0.16(@types/node@24.10.4)(@vitest/browser-playwright@4.0.16)(happy-dom@20.0.8)(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(terser@5.44.0)(yaml@2.8.2) ws: 8.18.3 transitivePeerDependencies: - bufferutil @@ -7014,30 +6815,29 @@ snapshots: - utf-8-validate - vite - '@vitest/coverage-v8@3.2.4(vitest@4.0.17(@types/node@24.9.1)(@vitest/browser-playwright@4.0.6)(happy-dom@20.0.8)(msw@2.11.6(@types/node@24.9.1)(typescript@5.9.3))(terser@5.44.0)(yaml@2.8.1))': + '@vitest/browser@4.0.6(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(vite@7.1.12(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2))(vitest@4.0.6)': dependencies: - '@ampproject/remapping': 2.3.0 - '@bcoe/v8-coverage': 1.0.2 - ast-v8-to-istanbul: 0.3.5 - debug: 4.4.3 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 5.0.6 - istanbul-reports: 3.2.0 - magic-string: 0.30.19 - magicast: 0.3.5 - std-env: 3.9.0 - test-exclude: 7.0.1 - tinyrainbow: 2.0.0 - vitest: 4.0.17(@types/node@24.9.1)(@vitest/browser-playwright@4.0.6)(happy-dom@20.0.8)(msw@2.11.6(@types/node@24.9.1)(typescript@5.9.3))(terser@5.44.0)(yaml@2.8.1) + '@vitest/mocker': 4.0.6(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(vite@7.1.12(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2)) + '@vitest/utils': 4.0.6 + magic-string: 0.30.21 + pixelmatch: 7.1.0 + pngjs: 7.0.0 + sirv: 3.0.2 + tinyrainbow: 3.0.3 + vitest: 4.0.6(@types/node@24.10.4)(@vitest/browser-playwright@4.0.6)(happy-dom@20.0.8)(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(terser@5.44.0)(yaml@2.8.2) + ws: 8.18.3 transitivePeerDependencies: - - supports-color + - bufferutil + - msw + - utf-8-validate + - vite + optional: true - '@vitest/coverage-v8@3.2.4(vitest@4.0.6)': + '@vitest/coverage-v8@3.2.4(@vitest/browser@4.0.16(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(vite@7.3.0(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2))(vitest@4.0.16))(vitest@4.0.16)': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 - ast-v8-to-istanbul: 0.3.5 + ast-v8-to-istanbul: 0.3.10 debug: 4.4.3 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 @@ -7045,47 +6845,51 @@ snapshots: istanbul-reports: 3.2.0 magic-string: 0.30.19 magicast: 0.3.5 - std-env: 3.9.0 + std-env: 3.10.0 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 4.0.6(@types/node@24.9.1)(@vitest/browser-playwright@4.0.6)(happy-dom@20.0.8)(msw@2.11.6(@types/node@24.9.1)(typescript@5.9.3))(terser@5.44.0)(yaml@2.8.1) + vitest: 4.0.16(@types/node@24.10.4)(@vitest/browser-playwright@4.0.16)(happy-dom@20.0.8)(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(terser@5.44.0)(yaml@2.8.2) + optionalDependencies: + '@vitest/browser': 4.0.16(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(vite@7.3.0(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2))(vitest@4.0.16) transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@4.0.6(vitest@4.0.6)': + '@vitest/coverage-v8@4.0.16(@vitest/browser@4.0.16(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(vite@7.3.0(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2))(vitest@4.0.16))(vitest@4.0.16)': dependencies: '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.0.6 - ast-v8-to-istanbul: 0.3.5 - debug: 4.4.3 + '@vitest/utils': 4.0.16 + ast-v8-to-istanbul: 0.3.10 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 5.0.6 istanbul-reports: 3.2.0 - magicast: 0.3.5 - std-env: 3.9.0 + magicast: 0.5.1 + obug: 2.1.1 + std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.6(@types/node@24.9.1)(@vitest/browser-playwright@4.0.6)(happy-dom@20.0.8)(msw@2.11.6(@types/node@24.9.1)(typescript@5.9.3))(terser@5.44.0)(yaml@2.8.1) + vitest: 4.0.16(@types/node@24.10.4)(@vitest/browser-playwright@4.0.16)(happy-dom@20.0.8)(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(terser@5.44.0)(yaml@2.8.2) + optionalDependencies: + '@vitest/browser': 4.0.16(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(vite@7.3.0(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2))(vitest@4.0.16) transitivePeerDependencies: - supports-color - '@vitest/eslint-plugin@1.4.0(eslint@9.39.0)(typescript@5.9.3)(vitest@4.0.6)': + '@vitest/eslint-plugin@1.6.5(eslint@9.39.2)(typescript@5.9.3)(vitest@4.0.16)': dependencies: - '@typescript-eslint/scope-manager': 8.46.2 - '@typescript-eslint/utils': 8.46.2(eslint@9.39.0)(typescript@5.9.3) - eslint: 9.39.0 + '@typescript-eslint/scope-manager': 8.51.0 + '@typescript-eslint/utils': 8.51.0(eslint@9.39.2)(typescript@5.9.3) + eslint: 9.39.2 optionalDependencies: typescript: 5.9.3 - vitest: 4.0.6(@types/node@24.9.1)(@vitest/browser-playwright@4.0.6)(happy-dom@20.0.8)(msw@2.11.6(@types/node@24.9.1)(typescript@5.9.3))(terser@5.44.0)(yaml@2.8.1) + vitest: 4.0.16(@types/node@24.10.4)(@vitest/browser-playwright@4.0.16)(happy-dom@20.0.8)(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(terser@5.44.0)(yaml@2.8.2) transitivePeerDependencies: - supports-color - '@vitest/expect@4.0.17': + '@vitest/expect@4.0.16': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@vitest/spy': 4.0.17 - '@vitest/utils': 4.0.17 + '@vitest/spy': 4.0.16 + '@vitest/utils': 4.0.16 chai: 6.2.2 tinyrainbow: 3.0.3 @@ -7098,25 +6902,25 @@ snapshots: chai: 6.2.0 tinyrainbow: 3.0.3 - '@vitest/mocker@4.0.17(msw@2.11.6(@types/node@24.9.1)(typescript@5.9.3))(vite@7.3.1(@types/node@24.9.1)(terser@5.44.0)(yaml@2.8.1))': + '@vitest/mocker@4.0.16(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(vite@7.3.0(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2))': dependencies: - '@vitest/spy': 4.0.17 + '@vitest/spy': 4.0.16 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - msw: 2.11.6(@types/node@24.9.1)(typescript@5.9.3) - vite: 7.3.1(@types/node@24.9.1)(terser@5.44.0)(yaml@2.8.1) + msw: 2.11.6(@types/node@24.10.4)(typescript@5.9.3) + vite: 7.3.0(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2) - '@vitest/mocker@4.0.6(msw@2.11.6(@types/node@24.9.1)(typescript@5.9.3))(vite@7.1.12(@types/node@24.9.1)(terser@5.44.0)(yaml@2.8.1))': + '@vitest/mocker@4.0.6(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(vite@7.1.12(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 4.0.6 estree-walker: 3.0.3 magic-string: 0.30.19 optionalDependencies: - msw: 2.11.6(@types/node@24.9.1)(typescript@5.9.3) - vite: 7.1.12(@types/node@24.9.1)(terser@5.44.0)(yaml@2.8.1) + msw: 2.11.6(@types/node@24.10.4)(typescript@5.9.3) + vite: 7.1.12(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2) - '@vitest/pretty-format@4.0.17': + '@vitest/pretty-format@4.0.16': dependencies: tinyrainbow: 3.0.3 @@ -7124,9 +6928,9 @@ snapshots: dependencies: tinyrainbow: 3.0.3 - '@vitest/runner@4.0.17': + '@vitest/runner@4.0.16': dependencies: - '@vitest/utils': 4.0.17 + '@vitest/utils': 4.0.16 pathe: 2.0.3 '@vitest/runner@4.0.6': @@ -7134,9 +6938,9 @@ snapshots: '@vitest/utils': 4.0.6 pathe: 2.0.3 - '@vitest/snapshot@4.0.17': + '@vitest/snapshot@4.0.16': dependencies: - '@vitest/pretty-format': 4.0.17 + '@vitest/pretty-format': 4.0.16 magic-string: 0.30.21 pathe: 2.0.3 @@ -7146,13 +6950,13 @@ snapshots: magic-string: 0.30.19 pathe: 2.0.3 - '@vitest/spy@4.0.17': {} + '@vitest/spy@4.0.16': {} '@vitest/spy@4.0.6': {} - '@vitest/utils@4.0.17': + '@vitest/utils@4.0.16': dependencies: - '@vitest/pretty-format': 4.0.17 + '@vitest/pretty-format': 4.0.16 tinyrainbow: 3.0.3 '@vitest/utils@4.0.6': @@ -7190,7 +6994,7 @@ snapshots: dependencies: type-fest: 0.21.3 - ansi-escapes@7.1.0: + ansi-escapes@7.2.0: dependencies: environment: 1.1.0 @@ -7234,7 +7038,7 @@ snapshots: call-bind: 1.0.8 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 is-string: 1.1.1 @@ -7252,7 +7056,7 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-errors: 1.3.0 es-object-atoms: 1.1.1 es-shim-unscopables: 1.1.0 @@ -7262,7 +7066,7 @@ snapshots: call-bind: 1.0.8 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-errors: 1.3.0 es-object-atoms: 1.1.1 es-shim-unscopables: 1.1.0 @@ -7271,21 +7075,21 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-shim-unscopables: 1.1.0 array.prototype.flatmap@1.3.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-shim-unscopables: 1.1.0 array.prototype.tosorted@1.1.4: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-errors: 1.3.0 es-shim-unscopables: 1.1.0 @@ -7294,7 +7098,7 @@ snapshots: array-buffer-byte-length: 1.0.2 call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-errors: 1.3.0 get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 @@ -7307,7 +7111,7 @@ snapshots: dependencies: '@mdn/browser-compat-data': 5.7.6 - ast-v8-to-istanbul@0.3.5: + ast-v8-to-istanbul@0.3.10: dependencies: '@jridgewell/trace-mapping': 0.3.31 estree-walker: 3.0.3 @@ -7335,7 +7139,7 @@ snapshots: babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.5): dependencies: - '@babel/compat-data': 7.28.4 + '@babel/compat-data': 7.28.5 '@babel/core': 7.28.5 '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.5) semver: 6.3.1 @@ -7376,7 +7180,7 @@ snapshots: balanced-match@1.0.2: {} - baseline-browser-mapping@2.8.5: {} + baseline-browser-mapping@2.9.11: {} before-after-hook@4.0.0: {} @@ -7404,13 +7208,13 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.26.2: + browserslist@4.28.1: dependencies: - baseline-browser-mapping: 2.8.5 - caniuse-lite: 1.0.30001743 - electron-to-chromium: 1.5.220 - node-releases: 2.0.21 - update-browserslist-db: 1.1.3(browserslist@4.26.2) + baseline-browser-mapping: 2.9.11 + caniuse-lite: 1.0.30001762 + electron-to-chromium: 1.5.267 + node-releases: 2.0.27 + update-browserslist-db: 1.2.3(browserslist@4.28.1) buffer-from@1.1.2: {} @@ -7435,7 +7239,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001743: {} + caniuse-lite@1.0.30001762: {} chai@4.3.4: dependencies: @@ -7463,7 +7267,7 @@ snapshots: chalk@5.6.2: {} - chardet@2.1.0: {} + chardet@2.1.1: {} check-error@1.0.3: dependencies: @@ -7500,7 +7304,7 @@ snapshots: dependencies: restore-cursor: 5.1.0 - cli-truncate@5.1.0: + cli-truncate@5.1.1: dependencies: slice-ansi: 7.1.2 string-width: 8.1.0 @@ -7547,24 +7351,13 @@ snapshots: concat-map@0.0.1: {} - concurrently@9.2.1: - dependencies: - chalk: 4.1.2 - rxjs: 7.8.2 - shell-quote: 1.8.3 - supports-color: 8.1.1 - tree-kill: 1.2.2 - yargs: 17.7.2 - convert-source-map@2.0.0: {} cookie@1.0.2: {} - cookie@1.1.1: {} - core-js-compat@3.45.1: dependencies: - browserslist: 4.26.2 + browserslist: 4.28.1 core-util-is@1.0.3: {} @@ -7594,8 +7387,6 @@ snapshots: es-errors: 1.3.0 is-data-view: 1.0.2 - dataloader@1.4.0: {} - date-fns@4.1.0: {} debug@3.2.7: @@ -7677,8 +7468,6 @@ snapshots: dependencies: esutils: 2.0.3 - dotenv@8.6.0: {} - dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -7687,7 +7476,7 @@ snapshots: eastasianwidth@0.2.0: {} - electron-to-chromium@1.5.220: {} + electron-to-chromium@1.5.267: {} elegant-spinner@1.0.1: {} @@ -7695,7 +7484,7 @@ snapshots: emittery@0.4.1: {} - emoji-regex@10.5.0: {} + emoji-regex@10.6.0: {} emoji-regex@8.0.0: {} @@ -7718,7 +7507,7 @@ snapshots: dependencies: stackframe: 1.3.4 - es-abstract@1.24.0: + es-abstract@1.24.1: dependencies: array-buffer-byte-length: 1.0.2 arraybuffer.prototype.slice: 1.0.4 @@ -7779,12 +7568,12 @@ snapshots: es-errors@1.3.0: {} - es-iterator-helpers@1.2.1: + es-iterator-helpers@1.2.2: dependencies: call-bind: 1.0.8 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-errors: 1.3.0 es-set-tostringtag: 2.1.0 function-bind: 1.1.2 @@ -7885,40 +7674,40 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@10.1.8(eslint@9.39.0): + eslint-config-prettier@10.1.8(eslint@9.39.2): dependencies: - eslint: 9.39.0 + eslint: 9.39.2 eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 is-core-module: 2.16.1 - resolve: 1.22.10 + resolve: 1.22.11 transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(eslint-import-resolver-node@0.3.9)(eslint@9.39.0): + eslint-module-utils@2.12.1(eslint-import-resolver-node@0.3.9)(eslint@9.39.2): dependencies: debug: 3.2.7 optionalDependencies: - eslint: 9.39.0 + eslint: 9.39.2 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-compat@6.0.2(eslint@9.39.0): + eslint-plugin-compat@6.0.2(eslint@9.39.2): dependencies: '@mdn/browser-compat-data': 5.7.6 ast-metadata-inferer: 0.8.1 - browserslist: 4.26.2 - caniuse-lite: 1.0.30001743 - eslint: 9.39.0 + browserslist: 4.28.1 + caniuse-lite: 1.0.30001762 + eslint: 9.39.2 find-up: 5.0.0 globals: 15.15.0 lodash.memoize: 4.1.2 semver: 7.7.3 - eslint-plugin-import@2.32.0(eslint@9.39.0): + eslint-plugin-import@2.32.0(eslint@9.39.2): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -7927,9 +7716,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.39.0 + eslint: 9.39.2 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(eslint-import-resolver-node@0.3.9)(eslint@9.39.0) + eslint-module-utils: 2.12.1(eslint-import-resolver-node@0.3.9)(eslint@9.39.2) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -7945,24 +7734,24 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.8(eslint@9.39.0))(eslint@9.39.0)(prettier@3.6.2): + eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.8(eslint@9.39.2))(eslint@9.39.2)(prettier@3.7.4): dependencies: - eslint: 9.39.0 - prettier: 3.6.2 - prettier-linter-helpers: 1.0.0 + eslint: 9.39.2 + prettier: 3.7.4 + prettier-linter-helpers: 1.0.1 synckit: 0.11.11 optionalDependencies: - eslint-config-prettier: 10.1.8(eslint@9.39.0) + eslint-config-prettier: 10.1.8(eslint@9.39.2) - eslint-plugin-react@7.37.5(eslint@9.39.0): + eslint-plugin-react@7.37.5(eslint@9.39.2): dependencies: array-includes: 3.1.9 array.prototype.findlast: 1.2.5 array.prototype.flatmap: 1.3.3 array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 - es-iterator-helpers: 1.2.1 - eslint: 9.39.0 + es-iterator-helpers: 1.2.2 + eslint: 9.39.2 estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -7985,15 +7774,15 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.39.0: + eslint@9.39.2: dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.0) - '@eslint-community/regexpp': 4.12.1 + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2) + '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.21.1 '@eslint/config-helpers': 0.4.2 '@eslint/core': 0.17.0 - '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.39.0 + '@eslint/eslintrc': 3.3.3 + '@eslint/js': 9.39.2 '@eslint/plugin-kit': 0.4.1 '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 @@ -8007,7 +7796,7 @@ snapshots: eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 - esquery: 1.6.0 + esquery: 1.7.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 8.0.0 @@ -8036,7 +7825,7 @@ snapshots: esprima@4.0.1: {} - esquery@1.6.0: + esquery@1.7.0: dependencies: estraverse: 5.3.0 @@ -8208,6 +7997,8 @@ snapshots: functions-have-names@1.2.3: {} + generator-function@2.0.1: {} + gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} @@ -8267,7 +8058,7 @@ snapshots: dependencies: is-glob: 4.0.3 - glob@10.4.5: + glob@10.5.0: dependencies: foreground-child: 3.3.1 jackspeak: 3.4.3 @@ -8285,6 +8076,21 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 2.0.0 + glob@11.1.0: + dependencies: + foreground-child: 3.3.1 + jackspeak: 4.1.1 + minimatch: 10.1.1 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 2.0.1 + + glob@13.0.0: + dependencies: + minimatch: 10.1.1 + minipass: 7.1.2 + path-scurry: 2.0.1 + glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -8353,7 +8159,7 @@ snapshots: happy-dom@20.0.8: dependencies: - '@types/node': 20.19.28 + '@types/node': 20.19.27 '@types/whatwg-mimetype': 3.0.2 whatwg-mimetype: 3.0.0 optional: true @@ -8419,7 +8225,7 @@ snapshots: dependencies: safer-buffer: 2.1.2 - iconv-lite@0.7.0: + iconv-lite@0.7.1: dependencies: safer-buffer: 2.1.2 @@ -8524,9 +8330,10 @@ snapshots: dependencies: get-east-asian-width: 1.4.0 - is-generator-function@1.1.0: + is-generator-function@1.1.2: dependencies: call-bound: 1.0.4 + generator-function: 2.0.1 get-proto: 1.0.1 has-tostringtag: 1.0.2 safe-regex-test: 1.1.0 @@ -8684,10 +8491,6 @@ snapshots: argparse: 1.0.10 esprima: 4.0.1 - js-yaml@4.1.0: - dependencies: - argparse: 2.0.1 - js-yaml@4.1.1: dependencies: argparse: 2.0.1 @@ -8736,7 +8539,7 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - lint-staged@16.2.6: + lint-staged@16.2.7: dependencies: commander: 14.0.2 listr2: 9.0.5 @@ -8744,7 +8547,7 @@ snapshots: nano-spawn: 2.0.0 pidtree: 0.6.0 string-argv: 0.3.2 - yaml: 2.8.1 + yaml: 2.8.2 linux-platform-info@0.0.3: dependencies: @@ -8752,7 +8555,7 @@ snapshots: listr2@9.0.5: dependencies: - cli-truncate: 5.1.0 + cli-truncate: 5.1.1 colorette: 2.0.20 eventemitter3: 5.0.1 log-update: 6.1.0 @@ -8791,7 +8594,7 @@ snapshots: log-update@6.1.0: dependencies: - ansi-escapes: 7.1.0 + ansi-escapes: 7.2.0 cli-cursor: 5.0.0 slice-ansi: 7.1.2 strip-ansi: 7.1.2 @@ -8807,6 +8610,8 @@ snapshots: lru-cache@11.2.1: {} + lru-cache@11.2.4: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -8831,6 +8636,12 @@ snapshots: '@babel/types': 7.28.5 source-map-js: 1.2.1 + magicast@0.5.1: + dependencies: + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + source-map-js: 1.2.1 + make-dir@2.1.0: dependencies: pify: 4.0.1 @@ -8911,9 +8722,9 @@ snapshots: ms@2.1.3: {} - msw@2.11.6(@types/node@24.9.1)(typescript@5.9.3): + msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3): dependencies: - '@inquirer/confirm': 5.1.18(@types/node@24.9.1) + '@inquirer/confirm': 5.1.19(@types/node@24.10.4) '@mswjs/interceptors': 0.40.0 '@open-draft/deferred-promise': 2.2.0 '@types/statuses': 2.0.6 @@ -8946,11 +8757,7 @@ snapshots: natural-compare@1.4.0: {} - node-fetch@2.7.0: - dependencies: - whatwg-url: 5.0.0 - - node-releases@2.0.21: {} + node-releases@2.0.27: {} normalize-path@3.0.0: optional: true @@ -8985,14 +8792,14 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-object-atoms: 1.1.1 object.groupby@1.0.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 object.values@1.2.1: dependencies: @@ -9120,6 +8927,11 @@ snapshots: lru-cache: 11.2.1 minipass: 7.1.2 + path-scurry@2.0.1: + dependencies: + lru-cache: 11.2.4 + minipass: 7.1.2 + path-to-regexp@6.3.0: {} path-type@4.0.0: {} @@ -9162,11 +8974,11 @@ snapshots: dependencies: find-up: 3.0.0 - playwright-core@1.56.1: {} + playwright-core@1.57.0: {} - playwright@1.56.1: + playwright@1.57.0: dependencies: - playwright-core: 1.56.1 + playwright-core: 1.57.0 optionalDependencies: fsevents: 2.3.2 @@ -9184,13 +8996,13 @@ snapshots: prelude-ls@1.2.1: {} - prettier-linter-helpers@1.0.0: + prettier-linter-helpers@1.0.1: dependencies: fast-diff: 1.3.0 prettier@2.8.8: {} - prettier@3.6.2: {} + prettier@3.7.4: {} pretty-hrtime@1.0.3: {} @@ -9253,11 +9065,11 @@ snapshots: react-refresh@0.18.0: {} - react-router@7.12.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0): + react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0): dependencies: - cookie: 1.1.1 + cookie: 1.0.2 react: 19.2.0 - set-cookie-parser: 2.7.2 + set-cookie-parser: 2.7.1 optionalDependencies: react-dom: 19.2.0(react@19.2.0) @@ -9305,7 +9117,7 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-errors: 1.3.0 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 @@ -9370,6 +9182,12 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + resolve@1.22.11: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + resolve@2.0.0-next.5: dependencies: is-core-module: 2.16.1 @@ -9400,6 +9218,11 @@ snapshots: glob: 11.0.3 package-json-from-dist: 1.0.1 + rimraf@6.1.2: + dependencies: + glob: 13.0.0 + package-json-from-dist: 1.0.1 + rollup-plugin-license@3.6.0(picomatch@4.0.3)(rollup@4.52.5): dependencies: commenting: 1.1.0 @@ -9442,45 +9265,38 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.52.5 fsevents: 2.3.3 - rollup@4.55.1: + rollup@4.54.0: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.55.1 - '@rollup/rollup-android-arm64': 4.55.1 - '@rollup/rollup-darwin-arm64': 4.55.1 - '@rollup/rollup-darwin-x64': 4.55.1 - '@rollup/rollup-freebsd-arm64': 4.55.1 - '@rollup/rollup-freebsd-x64': 4.55.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.55.1 - '@rollup/rollup-linux-arm-musleabihf': 4.55.1 - '@rollup/rollup-linux-arm64-gnu': 4.55.1 - '@rollup/rollup-linux-arm64-musl': 4.55.1 - '@rollup/rollup-linux-loong64-gnu': 4.55.1 - '@rollup/rollup-linux-loong64-musl': 4.55.1 - '@rollup/rollup-linux-ppc64-gnu': 4.55.1 - '@rollup/rollup-linux-ppc64-musl': 4.55.1 - '@rollup/rollup-linux-riscv64-gnu': 4.55.1 - '@rollup/rollup-linux-riscv64-musl': 4.55.1 - '@rollup/rollup-linux-s390x-gnu': 4.55.1 - '@rollup/rollup-linux-x64-gnu': 4.55.1 - '@rollup/rollup-linux-x64-musl': 4.55.1 - '@rollup/rollup-openbsd-x64': 4.55.1 - '@rollup/rollup-openharmony-arm64': 4.55.1 - '@rollup/rollup-win32-arm64-msvc': 4.55.1 - '@rollup/rollup-win32-ia32-msvc': 4.55.1 - '@rollup/rollup-win32-x64-gnu': 4.55.1 - '@rollup/rollup-win32-x64-msvc': 4.55.1 + '@rollup/rollup-android-arm-eabi': 4.54.0 + '@rollup/rollup-android-arm64': 4.54.0 + '@rollup/rollup-darwin-arm64': 4.54.0 + '@rollup/rollup-darwin-x64': 4.54.0 + '@rollup/rollup-freebsd-arm64': 4.54.0 + '@rollup/rollup-freebsd-x64': 4.54.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.54.0 + '@rollup/rollup-linux-arm-musleabihf': 4.54.0 + '@rollup/rollup-linux-arm64-gnu': 4.54.0 + '@rollup/rollup-linux-arm64-musl': 4.54.0 + '@rollup/rollup-linux-loong64-gnu': 4.54.0 + '@rollup/rollup-linux-ppc64-gnu': 4.54.0 + '@rollup/rollup-linux-riscv64-gnu': 4.54.0 + '@rollup/rollup-linux-riscv64-musl': 4.54.0 + '@rollup/rollup-linux-s390x-gnu': 4.54.0 + '@rollup/rollup-linux-x64-gnu': 4.54.0 + '@rollup/rollup-linux-x64-musl': 4.54.0 + '@rollup/rollup-openharmony-arm64': 4.54.0 + '@rollup/rollup-win32-arm64-msvc': 4.54.0 + '@rollup/rollup-win32-ia32-msvc': 4.54.0 + '@rollup/rollup-win32-x64-gnu': 4.54.0 + '@rollup/rollup-win32-x64-msvc': 4.54.0 fsevents: 2.3.3 run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - rxjs@7.8.2: - dependencies: - tslib: 2.8.1 - safe-array-concat@1.1.3: dependencies: call-bind: 1.0.8 @@ -9528,8 +9344,6 @@ snapshots: set-cookie-parser@2.7.1: {} - set-cookie-parser@2.7.2: {} - set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -9558,8 +9372,6 @@ snapshots: shebang-regex@3.0.0: {} - shell-quote@1.8.3: {} - side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 @@ -9689,7 +9501,7 @@ snapshots: string-width@7.2.0: dependencies: - emoji-regex: 10.5.0 + emoji-regex: 10.6.0 get-east-asian-width: 1.4.0 strip-ansi: 7.1.2 @@ -9703,7 +9515,7 @@ snapshots: call-bind: 1.0.8 call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-errors: 1.3.0 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 @@ -9717,7 +9529,7 @@ snapshots: string.prototype.repeat@1.0.0: dependencies: define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 string.prototype.trim@1.2.10: dependencies: @@ -9725,7 +9537,7 @@ snapshots: call-bound: 1.0.4 define-data-property: 1.1.4 define-properties: 1.2.1 - es-abstract: 1.24.0 + es-abstract: 1.24.1 es-object-atoms: 1.1.1 has-property-descriptors: 1.0.2 @@ -9772,10 +9584,6 @@ snapshots: dependencies: has-flag: 4.0.0 - supports-color@8.1.1: - dependencies: - has-flag: 4.0.0 - supports-preserve-symlinks-flag@1.0.0: {} synckit@0.11.11: @@ -9794,12 +9602,12 @@ snapshots: test-exclude@7.0.1: dependencies: '@istanbuljs/schema': 0.1.3 - glob: 10.4.5 + glob: 10.5.0 minimatch: 9.0.5 - testcafe-browser-provider-playwright@1.1.0(playwright@1.56.1): + testcafe-browser-provider-playwright@1.1.0(playwright@1.57.0): dependencies: - playwright: 1.56.1 + playwright: 1.57.0 testcafe-browser-tools@2.0.26: dependencies: @@ -9897,7 +9705,7 @@ snapshots: '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.28.5) '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.5) '@babel/plugin-transform-class-static-block': 7.28.3(@babel/core@7.28.5) - '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.28.5) + '@babel/plugin-transform-exponentiation-operator': 7.28.5(@babel/core@7.28.5) '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.5) '@babel/plugin-transform-object-rest-spread': 7.28.4(@babel/core@7.28.5) '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.5) @@ -10035,15 +9843,13 @@ snapshots: dependencies: tldts: 7.0.14 - tr46@0.0.3: {} - tree-kill@1.2.2: {} truncate-utf8-bytes@1.0.2: dependencies: utf8-byte-length: 1.0.5 - ts-api-utils@2.1.0(typescript@5.9.3): + ts-api-utils@2.4.0(typescript@5.9.3): dependencies: typescript: 5.9.3 @@ -10054,8 +9860,6 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 - tslib@2.8.1: {} - tunnel-agent@0.6.0: dependencies: safe-buffer: 5.2.1 @@ -10146,9 +9950,9 @@ snapshots: until-async@3.0.2: {} - update-browserslist-db@1.1.3(browserslist@4.26.2): + update-browserslist-db@1.2.3(browserslist@4.28.1): dependencies: - browserslist: 4.26.2 + browserslist: 4.28.1 escalade: 3.2.0 picocolors: 1.1.1 @@ -10156,6 +9960,8 @@ snapshots: dependencies: punycode: 2.3.1 + url-exists-nodejs@0.2.4: {} + url-parse@1.5.10: dependencies: querystringify: 2.2.0 @@ -10169,7 +9975,7 @@ snapshots: uuid@13.0.0: {} - vite@7.1.12(@types/node@24.9.1)(terser@5.44.0)(yaml@2.8.1): + vite@7.1.12(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2): dependencies: esbuild: 0.25.11 fdir: 6.5.0(picomatch@4.0.3) @@ -10178,34 +9984,34 @@ snapshots: rollup: 4.52.5 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.9.1 + '@types/node': 24.10.4 fsevents: 2.3.3 terser: 5.44.0 - yaml: 2.8.1 + yaml: 2.8.2 - vite@7.3.1(@types/node@24.9.1)(terser@5.44.0)(yaml@2.8.1): + vite@7.3.0(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2): dependencies: esbuild: 0.27.2 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.55.1 + rollup: 4.54.0 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.9.1 + '@types/node': 24.10.4 fsevents: 2.3.3 terser: 5.44.0 - yaml: 2.8.1 + yaml: 2.8.2 - vitest@4.0.17(@types/node@24.9.1)(@vitest/browser-playwright@4.0.6)(happy-dom@20.0.8)(msw@2.11.6(@types/node@24.9.1)(typescript@5.9.3))(terser@5.44.0)(yaml@2.8.1): + vitest@4.0.16(@types/node@24.10.4)(@vitest/browser-playwright@4.0.16)(happy-dom@20.0.8)(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(terser@5.44.0)(yaml@2.8.2): dependencies: - '@vitest/expect': 4.0.17 - '@vitest/mocker': 4.0.17(msw@2.11.6(@types/node@24.9.1)(typescript@5.9.3))(vite@7.3.1(@types/node@24.9.1)(terser@5.44.0)(yaml@2.8.1)) - '@vitest/pretty-format': 4.0.17 - '@vitest/runner': 4.0.17 - '@vitest/snapshot': 4.0.17 - '@vitest/spy': 4.0.17 - '@vitest/utils': 4.0.17 + '@vitest/expect': 4.0.16 + '@vitest/mocker': 4.0.16(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(vite@7.3.0(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2)) + '@vitest/pretty-format': 4.0.16 + '@vitest/runner': 4.0.16 + '@vitest/snapshot': 4.0.16 + '@vitest/spy': 4.0.16 + '@vitest/utils': 4.0.16 es-module-lexer: 1.7.0 expect-type: 1.3.0 magic-string: 0.30.21 @@ -10217,11 +10023,11 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@24.9.1)(terser@5.44.0)(yaml@2.8.1) + vite: 7.3.0(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 24.9.1 - '@vitest/browser-playwright': 4.0.6(msw@2.11.6(@types/node@24.9.1)(typescript@5.9.3))(playwright@1.56.1)(vite@7.1.12(@types/node@24.9.1)(terser@5.44.0)(yaml@2.8.1))(vitest@4.0.6) + '@types/node': 24.10.4 + '@vitest/browser-playwright': 4.0.16(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(playwright@1.57.0)(vite@7.3.0(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2))(vitest@4.0.16) happy-dom: 20.0.8 transitivePeerDependencies: - jiti @@ -10236,10 +10042,10 @@ snapshots: - tsx - yaml - vitest@4.0.6(@types/node@24.9.1)(@vitest/browser-playwright@4.0.6)(happy-dom@20.0.8)(msw@2.11.6(@types/node@24.9.1)(typescript@5.9.3))(terser@5.44.0)(yaml@2.8.1): + vitest@4.0.6(@types/node@24.10.4)(@vitest/browser-playwright@4.0.6)(happy-dom@20.0.8)(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(terser@5.44.0)(yaml@2.8.2): dependencies: '@vitest/expect': 4.0.6 - '@vitest/mocker': 4.0.6(msw@2.11.6(@types/node@24.9.1)(typescript@5.9.3))(vite@7.1.12(@types/node@24.9.1)(terser@5.44.0)(yaml@2.8.1)) + '@vitest/mocker': 4.0.6(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(vite@7.1.12(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2)) '@vitest/pretty-format': 4.0.6 '@vitest/runner': 4.0.6 '@vitest/snapshot': 4.0.6 @@ -10256,11 +10062,11 @@ snapshots: tinyexec: 0.3.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.1.12(@types/node@24.9.1)(terser@5.44.0)(yaml@2.8.1) + vite: 7.1.12(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 24.9.1 - '@vitest/browser-playwright': 4.0.6(msw@2.11.6(@types/node@24.9.1)(typescript@5.9.3))(playwright@1.56.1)(vite@7.1.12(@types/node@24.9.1)(terser@5.44.0)(yaml@2.8.1))(vitest@4.0.6) + '@types/node': 24.10.4 + '@vitest/browser-playwright': 4.0.6(msw@2.11.6(@types/node@24.10.4)(typescript@5.9.3))(playwright@1.57.0)(vite@7.1.12(@types/node@24.10.4)(terser@5.44.0)(yaml@2.8.2))(vitest@4.0.6) happy-dom: 20.0.8 transitivePeerDependencies: - jiti @@ -10276,16 +10082,9 @@ snapshots: - tsx - yaml - webidl-conversions@3.0.1: {} - whatwg-mimetype@3.0.0: optional: true - whatwg-url@5.0.0: - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - which-boxed-primitive@1.1.1: dependencies: is-bigint: 1.1.0 @@ -10302,7 +10101,7 @@ snapshots: is-async-function: 2.1.1 is-date-object: 1.1.0 is-finalizationregistry: 1.1.1 - is-generator-function: 1.1.0 + is-generator-function: 1.1.2 is-regex: 1.2.1 is-weakref: 1.1.1 isarray: 2.0.5 @@ -10388,7 +10187,7 @@ snapshots: yallist@4.0.0: {} - yaml@2.8.1: {} + yaml@2.8.2: {} yargs-parser@21.1.1: {} diff --git a/sandboxes/browser/.browserslistrc b/sandboxes/browser/.browserslistrc new file mode 100644 index 000000000..148350190 --- /dev/null +++ b/sandboxes/browser/.browserslistrc @@ -0,0 +1,2 @@ +defaults +not op_mini all diff --git a/sandboxes/browser/package.json b/sandboxes/browser/package.json index e39a3f1fc..6b135a96a 100644 --- a/sandboxes/browser/package.json +++ b/sandboxes/browser/package.json @@ -4,6 +4,7 @@ "private": true, "packageManager": "pnpm@10.20.0", "dependencies": { + "@adobe/alloy": "workspace:*", "@adobe/alloy-core": "workspace:*", "react": "^19.2.0", "react-dom": "^19.2.0", @@ -14,10 +15,6 @@ "start": "vite", "build": "vite build" }, - "browserslist": [ - "defaults", - "not op_mini all" - ], "devDependencies": { "@vitejs/plugin-react": "^5.1.0", "vite": "^7.1.12" diff --git a/sandboxes/browser/src/helpers/useAlloy.js b/sandboxes/browser/src/helpers/useAlloy.js index c02fc1006..398a6482c 100644 --- a/sandboxes/browser/src/helpers/useAlloy.js +++ b/sandboxes/browser/src/helpers/useAlloy.js @@ -14,7 +14,8 @@ governing permissions and limitations under the License. import { useEffect } from "react"; -import { baseCode as initializeAlloy } from "@adobe/alloy-core"; +// eslint-disable-next-line import/no-unresolved, import/extensions -- eslint-plugin-import doesn't support package subpath exports +import initializeAlloy from "@adobe/alloy/baseCode.js"; import getUrlParameter from "./getUrlParameter"; import includeScript from "./includeScript"; @@ -45,12 +46,12 @@ const setup = async ({ doesOptInApply: getUrlParameter("legacyOptIn") === "true", }); // Alloy only looks for window.Visitor when it initially loads, so only load Alloy after Visitor loaded. - // eslint-disable-next-line import/extensions,import/no-relative-packages - return import("../../../../packages/core/src/standalone.js"); + // eslint-disable-next-line import/no-unresolved, import/extensions -- eslint-plugin-import doesn't support package subpath exports + return import("@adobe/alloy/standalone.js"); }); } else { - // eslint-disable-next-line import/extensions,import/no-relative-packages - await import("../../../../packages/core/src/standalone.js"); + // eslint-disable-next-line import/no-unresolved, import/extensions -- eslint-plugin-import doesn't support package subpath exports + await import("@adobe/alloy/standalone.js"); } if (onAlloySetupCompleted) { diff --git a/sauceLabsCapabilities.json b/sauceLabsCapabilities.json deleted file mode 100644 index 073d5e8e2..000000000 --- a/sauceLabsCapabilities.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extendedDebugging": true, - "capturePerformance": true, - "recordScreenshots": false, - "recordVideo": false -} \ No newline at end of file diff --git a/scripts/helpers/entryPointGeneratorBabelPlugin.js b/scripts/helpers/entryPointGeneratorBabelPlugin.js deleted file mode 100644 index 5158d9e26..000000000 --- a/scripts/helpers/entryPointGeneratorBabelPlugin.js +++ /dev/null @@ -1,39 +0,0 @@ -/* -Copyright 2023 Adobe. All rights reserved. -This file is licensed to you under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. You may obtain a copy -of the License at http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software distributed under -the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS -OF ANY KIND, either express or implied. See the License for the specific language -governing permissions and limitations under the License. -*/ - -export default (t, includedModules) => ({ - visitor: { - CallExpression(path) { - if (path.node.callee.name === "core") { - path.replaceWith( - t.CallExpression(t.Identifier("core"), [ - t.ObjectExpression([ - t.ObjectProperty( - t.Identifier("components"), - t.ArrayExpression( - includedModules.map((module) => - t.MemberExpression( - t.Identifier("components"), - t.Identifier(module), - ), - ), - ), - ), - ]), - ]), - ); - - path.stop(); - } - }, - }, -}); diff --git a/scripts/helpers/runFunctionalTests.js b/scripts/helpers/runFunctionalTests.js deleted file mode 100644 index 70ea5c2fb..000000000 --- a/scripts/helpers/runFunctionalTests.js +++ /dev/null @@ -1,87 +0,0 @@ -#!/usr/bin/env node - -/* -Copyright 2024 Adobe. All rights reserved. -This file is licensed to you under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. You may obtain a copy -of the License at http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software distributed under -the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS -OF ANY KIND, either express or implied. See the License for the specific language -governing permissions and limitations under the License. -*/ - -import fs from "fs"; -import { glob } from "glob"; -import createTestCafe from "testcafe"; - -fs.readFile("dist/alloy.js", "utf8", (readFileErr, alloyData) => { - if (readFileErr) { - console.error(`readFile error: ${readFileErr}`); - return; - } - - // Extract componentCreators array from alloyData - const componentCreatorsMatch = alloyData.match( - /var componentCreators = \[(.*?)\];/s, - ); - if (!componentCreatorsMatch) { - console.error("componentCreators array not found in dist/alloy.js"); - return; - } - const componentCreators = componentCreatorsMatch[1] - .split(",") - .map((name) => name.trim().replace("create", "")); - - // Convert component creator function names to component names - const componentNames = componentCreators.map( - (creator) => creator.charAt(0).toLowerCase() + creator.slice(1), // Ensure first letter is lowercase to match directory names - ); - - // Define a mapping from component names to their test directory names - const componentNameToTestDirMapping = { - dataCollector: "Data Collector", - activityCollector: "Activity Collector", - identity: "Identity", - audiences: "Audiences", - context: "Context", - consent: "Consent", - eventMerge: "EventMerge", - libraryInfo: "LibraryInfo", - rulesEngine: "RulesEngine", - }; - - // Adjust componentNames using the mapping - const adjustedComponentNames = componentNames.map( - (name) => componentNameToTestDirMapping[name] || name, - ); - - // Generate a glob pattern to match only the included components' test specs - const includedComponentsPattern = adjustedComponentNames.join("|"); - const testSpecsGlobPattern = `packages/core/test/functional/specs/@(${includedComponentsPattern})/**/*.js`; - - glob(testSpecsGlobPattern, (globErr, files) => { - if (globErr) { - console.error(globErr); - process.exit(1); - } - - if (files.length === 0) { - console.log("No test files found for the included components."); - return; - } - - createTestCafe().then((testcafe) => { - const runner = testcafe.createRunner(); - runner - .src(files) - .browsers("chrome") - .run() - .then((failedCount) => { - console.log(`Tests finished. Failed count: ${failedCount}`); - testcafe.close(); - }); - }); - }); -}); diff --git a/scripts/testConvert.js b/scripts/testConvert.js deleted file mode 100755 index 82ea9f8dc..000000000 --- a/scripts/testConvert.js +++ /dev/null @@ -1,381 +0,0 @@ -#!/usr/bin/env node - -/* -Copyright 2025 Adobe. All rights reserved. -This file is licensed to you under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. You may obtain a copy -of the License at http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software distributed under -the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS -OF ANY KIND, either express or implied. See the License for the specific language -governing permissions and limitations under the License. -*/ - -import { execSync as exec } from "child_process"; -import fs from "fs"; -import path from "path"; -import babel from "@babel/core"; - -const getFilesRecursively = (directory, files) => { - const filesInDirectory = fs.readdirSync(directory); - for (let i = 0; i < filesInDirectory.length; i += 1) { - const file = filesInDirectory[i]; - const absolute = path.join(directory, file); - if (fs.statSync(absolute).isDirectory()) { - getFilesRecursively(absolute, files); - } else { - files.push(absolute); - } - } -}; - -const addTopImport = (output) => { - let optionalImports = [ - "beforeEach", - "afterEach", - "afterAll", - "describe", - "it", - "expect", - ]; - const requiredImports = ["vi"]; - - let importIndex = output.indexOf("import") - 1; - - if (importIndex < -1) { - importIndex = output.indexOf("License.\n*/") + 11; - } - - optionalImports = optionalImports.filter((i) => output.indexOf(i) !== -1); - - output = `${output.slice(0, importIndex)}\nimport { ${requiredImports.concat(optionalImports.join(", "))} } from 'vitest';\n${output.slice(importIndex + 1)}`; - return output; -}; - -const start = 0; -const end = 400; - -exec("mkdir -p ./vtest/unit"); -// exec("rm -rf ./vtest/unit/*"); -// -if (!fs.existsSync("./vtest/unit/constants")) { - exec("cp -r ./packages/core/test/unit/constants ./vtest/unit/constants"); -} - -if (!fs.existsSync("./vtest/unit/helpers")) { - exec("cp -r ./packages/core/test/unit/helpers ./vtest/unit/helpers"); -} -exec("mkdir -p ./vtest/unit/specs"); - -const t = babel.types; -const f = []; -getFilesRecursively("./vtest/unit/helpers", f); -getFilesRecursively("./packages/core/test/unit/specs", f); - -f.sort((a, b) => { - const z = [ - "responsesMock/eventResponses.js", - "resetMocks.js", - "functional/helpers/createResponse.js", - ]; - - for (let i = 0; i < z.length; i += 1) { - if (a.includes(z[i])) { - return -1; - } - - if (b.includes(z[i])) { - return 1; - } - } - - return 0; -}); - -for (let fileIndex = start; fileIndex < f.length; fileIndex += 1) { - const filePath = f[fileIndex]; - const newDir = path - .dirname(filePath) - .replace(/^packages\/core\/test\/unit/, "vtest/unit"); - const newFilePath = path.join(newDir, path.basename(filePath)); - - if (!fs.existsSync(newFilePath)) { - let output = babel.transformFileSync(filePath, { - plugins: [ - { - visitor: { - Identifier(babelPath) { - if (babelPath.node.name === "callFake") { - // callFake => mockImplementation - babelPath.replaceWith(t.identifier("mockImplementation")); - } else if (babelPath.node.name === "and") { - if (babelPath.parentPath.node.type === "MemberExpression") { - babelPath.parentPath.replaceWith( - babelPath.parentPath.get("object"), - ); - } - } else if (babelPath.node.name === "returnValue") { - babelPath.replaceWith(t.identifier("mockReturnValue")); - } else if ( - ["toBeTrue", "toBeFalse"].includes(babelPath.node.name) - ) { - const booleanValue = babelPath.node.name === "toBeTrue"; - babelPath.replaceWith(t.identifier("toBe")); - - let v = babelPath; - while (v.parentPath.type !== "ExpressionStatement") { - v = v.parentPath; - } - - v.replaceWith( - t.callExpression(v.get("callee").node, [ - t.booleanLiteral(booleanValue), - ]), - ); - - v.stop(); - } else if (babelPath.node.name === "expectAsync") { - const v = babelPath.findParent( - (p) => p.type === "ReturnStatement", - ); - - if (!v) { - return; - } - - let command = "resolves.toBe"; - if ( - v - .get("argument.arguments") - .map((n) => n.node.type) - .includes("ObjectExpression") - ) { - command = "resolves.toStrictEqual"; - } - - if ( - ["toBeRejectedWithError", "toBeRejected"].includes( - v.get("argument.callee.property").node.name, - ) - ) { - command = "rejects.toThrowError"; - } - - if (v.get("argument.callee.property").node.name !== "then") { - const vPath = v.get("argument.callee.property"); - vPath.replaceWith(t.identifier(`${command}`)); - vPath.stop(); - } - - babelPath.replaceWith(t.identifier("expect")); - } else if (babelPath.node.name === "toThrowMatching") { - const parent = babelPath.findParent( - (p) => p.type === "CallExpression", - ); - const regExp = parent.get( - "arguments.0.body.body.0.argument.callee.object", - ); - parent - .get("callee.property") - .replaceWith(t.identifier("toThrowError")); - parent.get("arguments.0").replaceWith(regExp); - } else if (babelPath.node.name === "returnValues") { - const callExpression = babelPath.findParent((p) => - p.isCallExpression(), - ); - - const args = callExpression - .get("arguments") - .map((n) => n.node.name); - - callExpression.replaceWithSourceString( - `${callExpression.get("callee.object").node.name}.${args.map((v) => `mockReturnValueOnce(${v})`).join(".")}`, - ); - } else if (babelPath.node.name === "toHaveBeenCalledOnceWith") { - const callExpression = babelPath - .findParent((p) => p.isExpressionStatement()) - .get("expression"); - - const args = callExpression.get("arguments").map((a) => a.node); - - babelPath.replaceWith(t.identifier("toHaveBeenNthCalledWith")); - - callExpression.replaceWith( - t.callExpression(callExpression.get("callee").node, [ - t.identifier("1"), - ...args, - ]), - ); - } else if (babelPath.node.name === "toBeResolvedTo") { - babelPath.replaceWith(t.identifier("resolves.toStrictEqual")); - } else if (babelPath.node.name === "callThrough") { - const parentMemberExpression = babelPath.findParent((p) => - p.isMemberExpression(), - ); - const parentCallExpression = parentMemberExpression.findParent( - (pp) => pp.isCallExpression(), - ); - const object = parentMemberExpression.get("object"); - parentCallExpression.replaceWith(object); - } else if (babelPath.node.name === "calls") { - const parentPath = babelPath.parentPath.parentPath; - const callExpressionPath = babelPath.findParent((p) => - p.isCallExpression(), - ); - if (callExpressionPath) { - const pathToKeep = callExpressionPath.get("callee"); - const args = callExpressionPath.get("arguments"); - if (parentPath.isMemberExpression()) { - babelPath.parentPath.parentPath.replaceWith( - babelPath.parentPath, - ); - callExpressionPath.replaceWith(pathToKeep); - - babelPath.replaceWith( - t.identifier(`mock.calls[${args[0]}]`), - ); - } - } - } - }, - - MemberExpression(babelPath) { - if ( - babelPath.node.object.name === "jasmine" && - babelPath.node.property.name === "createSpy" - ) { - babelPath.parentPath.replaceWith( - t.callExpression( - t.memberExpression(t.identifier("vi"), t.identifier("fn")), - [], - ), - ); - } else if ( - babelPath.node.object.name === "jasmine" && - [ - "stringMatching", - "any", - "objectContaining", - "stringContaining", - "arrayContaining", - ].includes(babelPath.node.property.name) - ) { - babelPath.replaceWith( - t.memberExpression( - t.identifier("expect"), - babelPath.node.property, - ), - ); - } - }, - - CallExpression(babelPath) { - if ( - babelPath.node.callee.type === "MemberExpression" && - babelPath.node.callee.object.name === "jasmine" && - babelPath.node.callee.property.name === "createSpyObj" - ) { - // jasmine.createSpyObj => object with mocks - const args = babelPath.get("arguments"); - let newProps = []; - - for (let a = 0; a < args.length; a += 1) { - const obj = args[a]; - - if (obj && obj.type === "ObjectExpression") { - const objectProperties = obj.get("properties"); - - for (let i = 0; i < objectProperties.length; i += 1) { - const v = objectProperties[i].get("value"); - const n = v.node; - - newProps.push( - t.objectProperty( - t.identifier( - objectProperties[i].get("key").node.name, - ), - t.callExpression( - t.memberExpression( - t.callExpression( - t.memberExpression( - t.identifier("vi"), - t.identifier("fn"), - ), - [], - ), - t.identifier("mockReturnValue"), - ), - [n], - ), - ), - ); - } - } else if (obj && obj.type === "ArrayExpression") { - try { - // obj.node.elements - newProps = newProps.concat( - obj.node.elements.map((element) => - t.objectProperty( - t.identifier(element.value), - t.identifier("vi.fn()"), - ), - ), - ); - } catch { - // Catch all errors. - } - } - } - - if (newProps.length) { - babelPath.replaceWith(t.objectExpression(newProps)); - } - } else if ( - babelPath.node.callee.type === "Identifier" && - babelPath.node.callee.name === "spyOn" - ) { - // spyOn => vi.spyOn - const v = babelPath.get("callee"); - v.replaceWith( - t.memberExpression(t.identifier("vi"), t.identifier("spyOn")), - ); - } else if (babelPath.get("callee").node.name === "done") { - babelPath.remove(); - } - }, - }, - }, - ], - }).code; - - output = addTopImport(output); - exec(`mkdir -p ${newDir}`); - if ( - ![ - "vtest/unit/specs/components/Personalization/dom-actions/action.spec.js", - "vtest/unit/specs/components/Personalization/dom-actions/dom/insertBefore.spec.js", - "vtest/unit/specs/components/Personalization/dom-actions/swapImage.spec.js", - "vtest/unit/specs/components/Personalization/dom-actions/remapHeadOffers.spec.js", - "vtest/unit/specs/components/RulesEngine/constants.spec.js", - "vtest/unit/specs/karmaEntry.spec.cjs", - "vtest/unit/specs/utils/cookieJar.spec.js", - "vtest/unit/specs/utils/fireImage.spec.js", - "vtest/unit/specs/utils/querystring.spec.js", - "vtest/unit/specs/utils/request/createRequest.spec.js", - "vtest/unit/specs/utils/request/createRequestPayload.spec.js", - "vtest/unit/specs/utils/uuid.spec.js", - ].includes(newFilePath) - ) { - exec(`touch ${newFilePath}`); - fs.writeFileSync(newFilePath, output); - console.log(`Converted ${newFilePath}`, fileIndex); - } - } else { - console.log(`Skipping ${newFilePath}`, fileIndex); - } - - if (fileIndex === end) { - break; - } -} diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index 441554e4d..000000000 --- a/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "include": ["packages/core/src/**/*"], - "exclude": ["node_modules"], - "compilerOptions": { - "allowJs": true, - "declaration": true, - "emitDeclarationOnly": true, - "outDir": "types", - "declarationMap": true, - "checkJs": false, - "target": "ES2020", - "moduleResolution": "node", - "skipLibCheck": true - } -} diff --git a/vitest.config.js b/vitest.config.js index fe10c2619..b6c5b9672 100644 --- a/vitest.config.js +++ b/vitest.config.js @@ -44,7 +44,7 @@ export default defineConfig({ test: { name: "integration", include: [ - "packages/core/test/integration/**/*.{test,spec}.?(c|m)[jt]s?(x)", + "packages/*/test/integration/**/*.{test,spec}.?(c|m)[jt]s?(x)", ], isolate: false, browser: {