diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 998a91b3e767..6eef230e9a42 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -68,7 +68,9 @@ jobs: path: | node_modules */**/node_modules - key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock', 'packages/**/yarn.lock') }} + key: + ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock', + 'packages/**/yarn.lock') }} - name: Install dependencies run: yarn install --immutable --immutable-cache - name: Build project @@ -95,7 +97,9 @@ jobs: path: | node_modules */**/node_modules - key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock', 'packages/**/yarn.lock') }} + key: + ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock', + 'packages/**/yarn.lock') }} - name: Install dependencies run: yarn install --immutable --immutable-cache - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 @@ -119,8 +123,10 @@ jobs: vrt-runner: strategy: + fail-fast: false matrix: - shard: [1, 2, 3, 4] + shardIndex: [1, 2, 3, 4] + shardTotal: [4] runs-on: ubuntu-latest steps: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 @@ -135,7 +141,9 @@ jobs: path: | node_modules */**/node_modules - key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock', 'packages/**/yarn.lock') }} + key: + ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock', + 'packages/**/yarn.lock') }} - name: Install dependencies run: yarn install --immutable --immutable-cache - name: Install browsers @@ -161,15 +169,16 @@ jobs: PERCY_TOKEN: c9a21a3fde4fda0a0f822d633426ab26e2ab2c1cba55221d342d4047744c8c24 PERCY_PARALLEL_TOTAL: 4 run: | - yarn percy exec --parallel -- yarn playwright test --project chromium --grep @vrt --shard="${{ matrix.shard }}/4" + yarn percy exec --parallel -- yarn playwright test --project chromium --grep @vrt --shard="${{ matrix.shardIndex }}/${{ matrix.shardTotal }}" - name: Stop storybook run: kill ${{ steps.storybook.outputs.pid }} - - name: Upload test results - if: always() - uses: actions/upload-artifact@v3 + - name: Upload blob report to GitHub Actions Artifacts + if: ${{ !cancelled() }} + uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a #4.3.6 with: - name: playwright-vrt-report - path: .playwright + name: playwright-vrt-blob-report-${{ matrix.shardIndex }} + path: blob-report + retention-days: 1 vrt: if: ${{ always() }} @@ -182,8 +191,10 @@ jobs: avt-runner: strategy: + fail-fast: false matrix: - shard: [1, 2, 3, 4] + shardIndex: [1, 2, 3, 4] + shardTotal: [4] runs-on: ubuntu-latest steps: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 @@ -198,7 +209,9 @@ jobs: path: | node_modules */**/node_modules - key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock', 'packages/**/yarn.lock') }} + key: + ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock', + 'packages/**/yarn.lock') }} - name: Install dependencies run: yarn install --immutable --immutable-cache - name: Install browsers @@ -221,15 +234,16 @@ jobs: - name: Run AVT if: github.repository == 'carbon-design-system/carbon' run: | - yarn playwright test --project chromium --grep @avt --shard="${{ matrix.shard }}/4" + yarn playwright test --project chromium --grep @avt --shard="${{ matrix.shardIndex }}/${{ matrix.shardTotal }}" - name: Stop storybook run: kill ${{ steps.storybook.outputs.pid }} - - name: Upload test results - if: always() - uses: actions/upload-artifact@v3 + - name: Upload blob report to GitHub Actions Artifacts + if: ${{ !cancelled() }} + uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a #4.3.6 with: - name: playwright-avt-report - path: .playwright + name: playwright-avt-blob-report-${{ matrix.shardIndex }} + path: blob-report + retention-days: 1 avt: if: ${{ always() }} @@ -238,4 +252,67 @@ jobs: steps: - name: Check AVT Runner job status if: ${{ needs.avt-runner.result != 'success' }} - run: exit 1 \ No newline at end of file + run: exit 1 + + merge-playwright-reports: + # Merge reports after *-runner jobs, even if some shards have failed + if: ${{ !cancelled() }} + needs: [vrt-runner, avt-runner] + + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - name: Use Node.js 20.x + uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b #v4.0.3 + with: + node-version: '20.x' + - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 #v4.0.2 + if: github.event_name != 'merge_group' + id: cache + with: + path: | + node_modules + */**/node_modules + key: + ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock', + 'packages/**/yarn.lock') }} + - name: Install dependencies + run: yarn install --immutable --immutable-cache + + - name: Download vrt blob reports from GitHub Actions Artifacts + uses: actions/download-artifact@v4 + with: + path: all-playwright-vrt-blob-reports + pattern: playwright-vrt-blob-report-* + merge-multiple: true + + - name: Merge vrt reports into HTML Report + run: + npx playwright merge-reports --reporter html + ./all-playwright-vrt-blob-reports + + - name: Upload vrt HTML report + uses: actions/upload-artifact@v4 + with: + name: html-playwright-vrt-report--attempt-${{ github.run_attempt }} + path: playwright-vrt-report + retention-days: 14 + + - name: Download avt blob reports from GitHub Actions Artifacts + uses: actions/download-artifact@v4 + with: + path: all-playwright-avt-blob-reports + pattern: playwright-avt-blob-report-* + merge-multiple: true + + - name: Merge avt reports into HTML Report + run: + npx playwright merge-reports --reporter html + ./all-playwright-avt-blob-reports + + - name: Upload avt HTML report + uses: actions/upload-artifact@v4 + with: + name: html-playwright-avt-report--attempt-${{ github.run_attempt }} + path: playwright-avt-report + retention-days: 14 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 35385d2ad027..2c8a33a266b2 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -58,7 +58,7 @@ jobs: run: kill ${{ steps.storybook.outputs.pid }} - name: Upload test results if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a #4.3.6 with: name: playwright-avt-report path: .playwright diff --git a/.gitignore b/.gitignore index f8b369ec9f1a..76112674087b 100644 --- a/.gitignore +++ b/.gitignore @@ -57,6 +57,7 @@ package-lock.json # Playwright .playwright +blob-report # Local token .env diff --git a/.yarn/cache/@percy-cli-app-npm-1.27.0-b3f1e3b4b2-53225aa1a2.zip b/.yarn/cache/@percy-cli-app-npm-1.29.2-96e08847c3-701dc58fe0.zip similarity index 72% rename from .yarn/cache/@percy-cli-app-npm-1.27.0-b3f1e3b4b2-53225aa1a2.zip rename to .yarn/cache/@percy-cli-app-npm-1.29.2-96e08847c3-701dc58fe0.zip index 334eb0b1d6fa..d6903420eb12 100644 Binary files a/.yarn/cache/@percy-cli-app-npm-1.27.0-b3f1e3b4b2-53225aa1a2.zip and b/.yarn/cache/@percy-cli-app-npm-1.29.2-96e08847c3-701dc58fe0.zip differ diff --git a/.yarn/cache/@percy-cli-build-npm-1.27.0-1d1385ddf1-623855a9ab.zip b/.yarn/cache/@percy-cli-build-npm-1.29.2-c797ed1c57-596618d7d8.zip similarity index 88% rename from .yarn/cache/@percy-cli-build-npm-1.27.0-1d1385ddf1-623855a9ab.zip rename to .yarn/cache/@percy-cli-build-npm-1.29.2-c797ed1c57-596618d7d8.zip index 8e20ff13e12a..b5f7529e142d 100644 Binary files a/.yarn/cache/@percy-cli-build-npm-1.27.0-1d1385ddf1-623855a9ab.zip and b/.yarn/cache/@percy-cli-build-npm-1.29.2-c797ed1c57-596618d7d8.zip differ diff --git a/.yarn/cache/@percy-cli-command-npm-1.27.0-c972c6e7fd-82a434fe5b.zip b/.yarn/cache/@percy-cli-command-npm-1.29.2-1939756e70-ff9a5ab09a.zip similarity index 72% rename from .yarn/cache/@percy-cli-command-npm-1.27.0-c972c6e7fd-82a434fe5b.zip rename to .yarn/cache/@percy-cli-command-npm-1.29.2-1939756e70-ff9a5ab09a.zip index df94d8f8811e..0dff2bd435d4 100644 Binary files a/.yarn/cache/@percy-cli-command-npm-1.27.0-c972c6e7fd-82a434fe5b.zip and b/.yarn/cache/@percy-cli-command-npm-1.29.2-1939756e70-ff9a5ab09a.zip differ diff --git a/.yarn/cache/@percy-cli-config-npm-1.27.0-e05ea63b52-b444f8ac56.zip b/.yarn/cache/@percy-cli-config-npm-1.29.2-9c9a36ac88-9cb7c08014.zip similarity index 87% rename from .yarn/cache/@percy-cli-config-npm-1.27.0-e05ea63b52-b444f8ac56.zip rename to .yarn/cache/@percy-cli-config-npm-1.29.2-9c9a36ac88-9cb7c08014.zip index 65b7707f1421..f27541c1d84a 100644 Binary files a/.yarn/cache/@percy-cli-config-npm-1.27.0-e05ea63b52-b444f8ac56.zip and b/.yarn/cache/@percy-cli-config-npm-1.29.2-9c9a36ac88-9cb7c08014.zip differ diff --git a/.yarn/cache/@percy-cli-exec-npm-1.27.0-85d128b976-3bcabce315.zip b/.yarn/cache/@percy-cli-exec-npm-1.27.0-85d128b976-3bcabce315.zip deleted file mode 100644 index e4ad8b4021c2..000000000000 Binary files a/.yarn/cache/@percy-cli-exec-npm-1.27.0-85d128b976-3bcabce315.zip and /dev/null differ diff --git a/.yarn/cache/@percy-cli-exec-npm-1.29.2-066ce40f33-45e4a18286.zip b/.yarn/cache/@percy-cli-exec-npm-1.29.2-066ce40f33-45e4a18286.zip new file mode 100644 index 000000000000..024a6e490864 Binary files /dev/null and b/.yarn/cache/@percy-cli-exec-npm-1.29.2-066ce40f33-45e4a18286.zip differ diff --git a/.yarn/cache/@percy-cli-npm-1.27.0-21cadb4899-5d6334e9ae.zip b/.yarn/cache/@percy-cli-npm-1.27.0-21cadb4899-5d6334e9ae.zip deleted file mode 100644 index 06792f44074f..000000000000 Binary files a/.yarn/cache/@percy-cli-npm-1.27.0-21cadb4899-5d6334e9ae.zip and /dev/null differ diff --git a/.yarn/cache/@percy-cli-npm-1.29.2-2cfbaa255c-073d993182.zip b/.yarn/cache/@percy-cli-npm-1.29.2-2cfbaa255c-073d993182.zip new file mode 100644 index 000000000000..99d1e0c888a7 Binary files /dev/null and b/.yarn/cache/@percy-cli-npm-1.29.2-2cfbaa255c-073d993182.zip differ diff --git a/.yarn/cache/@percy-cli-snapshot-npm-1.27.0-f1fa166e19-086f074937.zip b/.yarn/cache/@percy-cli-snapshot-npm-1.29.2-5505f4b62f-20762bfc7c.zip similarity index 64% rename from .yarn/cache/@percy-cli-snapshot-npm-1.27.0-f1fa166e19-086f074937.zip rename to .yarn/cache/@percy-cli-snapshot-npm-1.29.2-5505f4b62f-20762bfc7c.zip index 9776c8476f43..f09a4b87ba40 100644 Binary files a/.yarn/cache/@percy-cli-snapshot-npm-1.27.0-f1fa166e19-086f074937.zip and b/.yarn/cache/@percy-cli-snapshot-npm-1.29.2-5505f4b62f-20762bfc7c.zip differ diff --git a/.yarn/cache/@percy-cli-upload-npm-1.27.0-aa88ec7d24-6fa20ba7c5.zip b/.yarn/cache/@percy-cli-upload-npm-1.29.2-5850e84d18-e3d4f251b7.zip similarity index 83% rename from .yarn/cache/@percy-cli-upload-npm-1.27.0-aa88ec7d24-6fa20ba7c5.zip rename to .yarn/cache/@percy-cli-upload-npm-1.29.2-5850e84d18-e3d4f251b7.zip index fcb0b9e0f6e7..0ec5eea80eac 100644 Binary files a/.yarn/cache/@percy-cli-upload-npm-1.27.0-aa88ec7d24-6fa20ba7c5.zip and b/.yarn/cache/@percy-cli-upload-npm-1.29.2-5850e84d18-e3d4f251b7.zip differ diff --git a/.yarn/cache/@percy-client-npm-1.27.0-3e4df89432-78646a5155.zip b/.yarn/cache/@percy-client-npm-1.27.0-3e4df89432-78646a5155.zip deleted file mode 100644 index e7ba73b76f87..000000000000 Binary files a/.yarn/cache/@percy-client-npm-1.27.0-3e4df89432-78646a5155.zip and /dev/null differ diff --git a/.yarn/cache/@percy-client-npm-1.29.2-0001ec903b-557c9861af.zip b/.yarn/cache/@percy-client-npm-1.29.2-0001ec903b-557c9861af.zip new file mode 100644 index 000000000000..a6d5374b0a0c Binary files /dev/null and b/.yarn/cache/@percy-client-npm-1.29.2-0001ec903b-557c9861af.zip differ diff --git a/.yarn/cache/@percy-config-npm-1.27.0-e1a54a679b-29dfe9f2a3.zip b/.yarn/cache/@percy-config-npm-1.29.2-68378e83af-2749031619.zip similarity index 60% rename from .yarn/cache/@percy-config-npm-1.27.0-e1a54a679b-29dfe9f2a3.zip rename to .yarn/cache/@percy-config-npm-1.29.2-68378e83af-2749031619.zip index 7554fae73d67..992d2c9db523 100644 Binary files a/.yarn/cache/@percy-config-npm-1.27.0-e1a54a679b-29dfe9f2a3.zip and b/.yarn/cache/@percy-config-npm-1.29.2-68378e83af-2749031619.zip differ diff --git a/.yarn/cache/@percy-core-npm-1.27.0-0a34d5339a-ffb01080d7.zip b/.yarn/cache/@percy-core-npm-1.27.0-0a34d5339a-ffb01080d7.zip deleted file mode 100644 index 0c3a9a4ecaba..000000000000 Binary files a/.yarn/cache/@percy-core-npm-1.27.0-0a34d5339a-ffb01080d7.zip and /dev/null differ diff --git a/.yarn/cache/@percy-core-npm-1.29.2-22f43748bc-84e0ec9e82.zip b/.yarn/cache/@percy-core-npm-1.29.2-22f43748bc-84e0ec9e82.zip new file mode 100644 index 000000000000..a7d5a9d37429 Binary files /dev/null and b/.yarn/cache/@percy-core-npm-1.29.2-22f43748bc-84e0ec9e82.zip differ diff --git a/.yarn/cache/@percy-dom-npm-1.27.0-2262c7abf9-17231b81fa.zip b/.yarn/cache/@percy-dom-npm-1.27.0-2262c7abf9-17231b81fa.zip deleted file mode 100644 index 5603b41dd0a3..000000000000 Binary files a/.yarn/cache/@percy-dom-npm-1.27.0-2262c7abf9-17231b81fa.zip and /dev/null differ diff --git a/.yarn/cache/@percy-dom-npm-1.29.2-0c0ab72900-b92a3ff294.zip b/.yarn/cache/@percy-dom-npm-1.29.2-0c0ab72900-b92a3ff294.zip new file mode 100644 index 000000000000..0bc2b4914722 Binary files /dev/null and b/.yarn/cache/@percy-dom-npm-1.29.2-0c0ab72900-b92a3ff294.zip differ diff --git a/.yarn/cache/@percy-env-npm-1.27.0-d9ecdde1ec-8899f8f914.zip b/.yarn/cache/@percy-env-npm-1.27.0-d9ecdde1ec-8899f8f914.zip deleted file mode 100644 index c518b5c0026c..000000000000 Binary files a/.yarn/cache/@percy-env-npm-1.27.0-d9ecdde1ec-8899f8f914.zip and /dev/null differ diff --git a/.yarn/cache/@percy-env-npm-1.29.2-e3a5f7cc77-07a6ead152.zip b/.yarn/cache/@percy-env-npm-1.29.2-e3a5f7cc77-07a6ead152.zip new file mode 100644 index 000000000000..b44583afdef6 Binary files /dev/null and b/.yarn/cache/@percy-env-npm-1.29.2-e3a5f7cc77-07a6ead152.zip differ diff --git a/.yarn/cache/@percy-logger-npm-1.27.0-6502f392f5-5fb9a1ad87.zip b/.yarn/cache/@percy-logger-npm-1.27.0-6502f392f5-5fb9a1ad87.zip deleted file mode 100644 index 143fdecdf437..000000000000 Binary files a/.yarn/cache/@percy-logger-npm-1.27.0-6502f392f5-5fb9a1ad87.zip and /dev/null differ diff --git a/.yarn/cache/@percy-logger-npm-1.29.2-10e4659f58-f951293610.zip b/.yarn/cache/@percy-logger-npm-1.29.2-10e4659f58-f951293610.zip new file mode 100644 index 000000000000..088894fb693b Binary files /dev/null and b/.yarn/cache/@percy-logger-npm-1.29.2-10e4659f58-f951293610.zip differ diff --git a/.yarn/cache/@percy-playwright-npm-1.0.4-023a9f4261-d0969b4920.zip b/.yarn/cache/@percy-playwright-npm-1.0.4-023a9f4261-d0969b4920.zip deleted file mode 100644 index 4ccc9e7daa31..000000000000 Binary files a/.yarn/cache/@percy-playwright-npm-1.0.4-023a9f4261-d0969b4920.zip and /dev/null differ diff --git a/.yarn/cache/@percy-playwright-npm-1.0.6-b2ba39c2f0-d64564c5fe.zip b/.yarn/cache/@percy-playwright-npm-1.0.6-b2ba39c2f0-d64564c5fe.zip new file mode 100644 index 000000000000..c098f3e9f27b Binary files /dev/null and b/.yarn/cache/@percy-playwright-npm-1.0.6-b2ba39c2f0-d64564c5fe.zip differ diff --git a/.yarn/cache/@percy-sdk-utils-npm-1.27.0-ce27f89592-94fb71a6c7.zip b/.yarn/cache/@percy-sdk-utils-npm-1.27.0-ce27f89592-94fb71a6c7.zip deleted file mode 100644 index 615e2fbf98c2..000000000000 Binary files a/.yarn/cache/@percy-sdk-utils-npm-1.27.0-ce27f89592-94fb71a6c7.zip and /dev/null differ diff --git a/.yarn/cache/@percy-sdk-utils-npm-1.29.2-3658f685ac-4ff24d2980.zip b/.yarn/cache/@percy-sdk-utils-npm-1.29.2-3658f685ac-4ff24d2980.zip new file mode 100644 index 000000000000..e236adbf0456 Binary files /dev/null and b/.yarn/cache/@percy-sdk-utils-npm-1.29.2-3658f685ac-4ff24d2980.zip differ diff --git a/.yarn/cache/@percy-webdriver-utils-npm-1.27.0-4a6d7c7b51-d0900235c8.zip b/.yarn/cache/@percy-webdriver-utils-npm-1.27.0-4a6d7c7b51-d0900235c8.zip deleted file mode 100644 index 52434327ca8c..000000000000 Binary files a/.yarn/cache/@percy-webdriver-utils-npm-1.27.0-4a6d7c7b51-d0900235c8.zip and /dev/null differ diff --git a/.yarn/cache/@percy-webdriver-utils-npm-1.29.2-6f24fa6181-8cc7140363.zip b/.yarn/cache/@percy-webdriver-utils-npm-1.29.2-6f24fa6181-8cc7140363.zip new file mode 100644 index 000000000000..fbed15569025 Binary files /dev/null and b/.yarn/cache/@percy-webdriver-utils-npm-1.29.2-6f24fa6181-8cc7140363.zip differ diff --git a/.yarn/cache/@playwright-test-npm-1.36.2-0b5c09b329-4bbe0fa72e.zip b/.yarn/cache/@playwright-test-npm-1.36.2-0b5c09b329-4bbe0fa72e.zip deleted file mode 100644 index b9f7ff2b1cec..000000000000 Binary files a/.yarn/cache/@playwright-test-npm-1.36.2-0b5c09b329-4bbe0fa72e.zip and /dev/null differ diff --git a/.yarn/cache/@playwright-test-npm-1.46.1-3828e797fa-09e2c28574.zip b/.yarn/cache/@playwright-test-npm-1.46.1-3828e797fa-09e2c28574.zip new file mode 100644 index 000000000000..d062ccd77011 Binary files /dev/null and b/.yarn/cache/@playwright-test-npm-1.46.1-3828e797fa-09e2c28574.zip differ diff --git a/.yarn/cache/braces-npm-3.0.2-782240b28a-966b1fb48d.zip b/.yarn/cache/braces-npm-3.0.2-782240b28a-966b1fb48d.zip deleted file mode 100644 index 4cf997e3b77e..000000000000 Binary files a/.yarn/cache/braces-npm-3.0.2-782240b28a-966b1fb48d.zip and /dev/null differ diff --git a/.yarn/cache/braces-npm-3.0.3-582c14023c-fad11a0d46.zip b/.yarn/cache/braces-npm-3.0.3-582c14023c-fad11a0d46.zip new file mode 100644 index 000000000000..bebc93863a1e Binary files /dev/null and b/.yarn/cache/braces-npm-3.0.3-582c14023c-fad11a0d46.zip differ diff --git a/.yarn/cache/fill-range-npm-7.0.1-b8b1817caa-e260f7592f.zip b/.yarn/cache/fill-range-npm-7.0.1-b8b1817caa-e260f7592f.zip deleted file mode 100644 index 7be5ed272da5..000000000000 Binary files a/.yarn/cache/fill-range-npm-7.0.1-b8b1817caa-e260f7592f.zip and /dev/null differ diff --git a/.yarn/cache/fill-range-npm-7.1.1-bf491486db-a7095cb39e.zip b/.yarn/cache/fill-range-npm-7.1.1-bf491486db-a7095cb39e.zip new file mode 100644 index 000000000000..2dbb57d46b58 Binary files /dev/null and b/.yarn/cache/fill-range-npm-7.1.1-bf491486db-a7095cb39e.zip differ diff --git a/.yarn/cache/micromatch-npm-4.0.7-28fb7387ee-a11ed1cb67.zip b/.yarn/cache/micromatch-npm-4.0.7-28fb7387ee-a11ed1cb67.zip new file mode 100644 index 000000000000..41a698b10dec Binary files /dev/null and b/.yarn/cache/micromatch-npm-4.0.7-28fb7387ee-a11ed1cb67.zip differ diff --git a/.yarn/cache/pako-npm-2.1.0-78df11948c-38a04991d0.zip b/.yarn/cache/pako-npm-2.1.0-78df11948c-38a04991d0.zip new file mode 100644 index 000000000000..17b8a6248f1a Binary files /dev/null and b/.yarn/cache/pako-npm-2.1.0-78df11948c-38a04991d0.zip differ diff --git a/.yarn/cache/playwright-core-npm-1.36.2-37b679cd9b-5cd22b77f4.zip b/.yarn/cache/playwright-core-npm-1.36.2-37b679cd9b-5cd22b77f4.zip deleted file mode 100644 index d05a53fb5f68..000000000000 Binary files a/.yarn/cache/playwright-core-npm-1.36.2-37b679cd9b-5cd22b77f4.zip and /dev/null differ diff --git a/.yarn/cache/playwright-core-npm-1.46.1-a6f314b87a-950aa935bb.zip b/.yarn/cache/playwright-core-npm-1.46.1-a6f314b87a-950aa935bb.zip new file mode 100644 index 000000000000..d7ec01c568ac Binary files /dev/null and b/.yarn/cache/playwright-core-npm-1.46.1-a6f314b87a-950aa935bb.zip differ diff --git a/.yarn/cache/playwright-npm-1.46.1-b809f5e477-17b0e7495a.zip b/.yarn/cache/playwright-npm-1.46.1-b809f5e477-17b0e7495a.zip new file mode 100644 index 000000000000..b0760667177c Binary files /dev/null and b/.yarn/cache/playwright-npm-1.46.1-b809f5e477-17b0e7495a.zip differ diff --git a/.yarn/cache/ws-npm-8.18.0-56f68bc4d6-70dfe53f23.zip b/.yarn/cache/ws-npm-8.18.0-56f68bc4d6-70dfe53f23.zip new file mode 100644 index 000000000000..4b76225c8709 Binary files /dev/null and b/.yarn/cache/ws-npm-8.18.0-56f68bc4d6-70dfe53f23.zip differ diff --git a/.yarn/cache/yaml-npm-2.5.0-402c6c0928-72e903fdbe.zip b/.yarn/cache/yaml-npm-2.5.0-402c6c0928-72e903fdbe.zip new file mode 100644 index 000000000000..0f05d824c9e6 Binary files /dev/null and b/.yarn/cache/yaml-npm-2.5.0-402c6c0928-72e903fdbe.zip differ diff --git a/e2e/components/Button/Button-test.avt.e2e.js b/e2e/components/Button/Button-test.avt.e2e.js index b6bdc8f82bbf..5e1be5b678ef 100644 --- a/e2e/components/Button/Button-test.avt.e2e.js +++ b/e2e/components/Button/Button-test.avt.e2e.js @@ -150,7 +150,7 @@ test.describe('@avt Button', () => { }, }); await expect(page.getByRole('button')).toBeVisible(); - page.getByRole('button').hover(); + await page.getByRole('button').hover(); await expect(page).toHaveNoACViolations('Button-hover'); }); diff --git a/e2e/components/CodeSnippet/CodeSnippet-test.avt.e2e.js b/e2e/components/CodeSnippet/CodeSnippet-test.avt.e2e.js index 1957ffa6b882..722786ed6478 100644 --- a/e2e/components/CodeSnippet/CodeSnippet-test.avt.e2e.js +++ b/e2e/components/CodeSnippet/CodeSnippet-test.avt.e2e.js @@ -32,7 +32,7 @@ test.describe('@avt CodeSnippet', () => { }); await expect(page.getByRole('button')).toBeVisible(); - page.getByRole('button').hover(); + await page.getByRole('button').hover(); await expect(page).toHaveNoACViolations('CodeSnippet inline hover'); }); diff --git a/e2e/components/DataTable/DataTable-test.avt.e2e.js b/e2e/components/DataTable/DataTable-test.avt.e2e.js index 9e87f0a9f0b9..6b687af0cfc1 100644 --- a/e2e/components/DataTable/DataTable-test.avt.e2e.js +++ b/e2e/components/DataTable/DataTable-test.avt.e2e.js @@ -276,16 +276,19 @@ test.describe('@avt DataTable', () => { 'components-datatable-selection--default' ); }); - test('@avt-advanced-states with-radio-expansion', async ({ page }) => { + test.skip('@avt-advanced-states with-radio-expansion', async ({ page }) => { await visitStory(page, { component: 'DataTable', - id: 'components-datatable-selection--with-radio-expansion', + id: 'components-datatable-dynamic--playground', globals: { theme: 'white', }, + args: { + radio: true, + }, }); await expect(page).toHaveNoACViolations( - 'components-datatable-selection--with-radio-expansion' + 'components-datatable-with-radio-expansion' ); }); test('@avt-advanced-states with-selection-and-sorting', async ({ diff --git a/e2e/components/DatePicker/DatePicker-test.avt.e2e.js b/e2e/components/DatePicker/DatePicker-test.avt.e2e.js index 9c1e4f2f911b..874996c618c2 100644 --- a/e2e/components/DatePicker/DatePicker-test.avt.e2e.js +++ b/e2e/components/DatePicker/DatePicker-test.avt.e2e.js @@ -49,7 +49,6 @@ test.describe('@avt DatePicker', () => { await expect(page).toHaveNoACViolations('DatePicker-Disabled'); }); - // skipping for now due to accessibility violation test('@avt-advanced-states skeleton', async ({ page }) => { await visitStory(page, { component: 'DatePicker', @@ -62,8 +61,8 @@ test.describe('@avt DatePicker', () => { await expect(page).toHaveNoACViolations('DatePicker-Skeleton'); }); - // skipping for now due to accessibility violation - test('@avt-advanced-states open', async ({ page }) => { + // skipped due to text contrast accessibility violation + test.skip('@avt-advanced-states open', async ({ page }) => { await visitStory(page, { component: 'DatePicker', id: 'components-datepicker--playground', @@ -92,13 +91,26 @@ test.describe('@avt DatePicker', () => { await expect( page.getByRole('textbox', { name: 'Date Picker label' }) ).toBeFocused(); - await expect(page.locator('div.flatpickr-calendar')).toHaveClass(/open/); - await page.keyboard.press('ArrowDown'); - await expect(page.locator('span.today')).toBeFocused(); - await page.keyboard.press('Escape'); - await expect(page.locator('div.flatpickr-calendar')).not.toHaveClass( - /open/ - ); + const calendar = await page.locator('div.flatpickr-calendar'); + await expect(calendar).toHaveClass(/open/); + + // avoid flaky test failures from the keyboard press happening too quickly + // this retries the keypress along with the focus assertion until it passes + await expect(async () => { + await page.keyboard.press('ArrowDown'); + const today = await page.locator('span.today'); + await expect(today).toBeVisible(); + await expect(today).toBeFocused(); + }).toPass(); + + // avoid flaky test failures from the keyboard press happening too quickly + // this retries the keypress along with the focus assertion until it passes + await expect(async () => { + await page.keyboard.press('Escape'); + await expect(page.locator('div.flatpickr-calendar')).not.toHaveClass( + /open/ + ); + }).toPass(); }); test('@avt-keyboard-nav range state', async ({ page }) => { diff --git a/e2e/components/ErrorBoundary/ErrorBoundary-test.avt.e2e.js b/e2e/components/ErrorBoundary/ErrorBoundary-test.avt.e2e.js index cba42e7b13ed..8cb498a62426 100644 --- a/e2e/components/ErrorBoundary/ErrorBoundary-test.avt.e2e.js +++ b/e2e/components/ErrorBoundary/ErrorBoundary-test.avt.e2e.js @@ -25,7 +25,7 @@ test.describe('@avt ErrorBoundary', () => { test('@avt-advanced-states with Custom context', async ({ page }) => { await visitStory(page, { component: 'ErrorBoundary', - id: 'components-errorboundary--skeleton', + id: 'components-errorboundary--with-custom-context', globals: { theme: 'white', }, diff --git a/e2e/components/FluidDatePicker/FluidDatePicker-test.avt.e2e.js b/e2e/components/FluidDatePicker/FluidDatePicker-test.avt.e2e.js index 47a1bdc67042..1deb1f77d92b 100644 --- a/e2e/components/FluidDatePicker/FluidDatePicker-test.avt.e2e.js +++ b/e2e/components/FluidDatePicker/FluidDatePicker-test.avt.e2e.js @@ -65,14 +65,29 @@ test.describe('@avt FluidDatePicker', () => { }); // for some reason the firs tab is not working to focus the first tabstop, so focusing manually await page.getByRole('textbox', { name: 'Label' }).focus(); - await expect(page.getByRole('textbox', { name: 'Label' })).toBeFocused(); - await expect(page.locator('div.flatpickr-calendar')).toHaveClass(/open/); - await page.keyboard.press('ArrowDown'); - await expect(page.locator('span.today')).toBeFocused(); - await page.keyboard.press('Escape'); - await expect(page.locator('div.flatpickr-calendar')).not.toHaveClass( - /open/ - ); + const textbox = await page.getByRole('textbox', { name: 'Label' }); + await expect(textbox).toBeFocused(); + const calendar = await page.locator('div.flatpickr-calendar'); + await expect(calendar).toHaveClass(/open/); + await expect(calendar).toBeVisible(); + + const today = await page.locator('.flatpickr-day.today'); + + // avoid flaky test failures from the keyboard press happening too quickly + // this retries the keypress along with the focus assertion until it passes + await expect(async () => { + await page.keyboard.press('ArrowDown'); + await expect(today).toBeVisible(); + await expect(today).toBeFocused(); + }).toPass(); + + // avoid flaky test failures from the keyboard press happening too quickly + // this retries the keypress along with the focus assertion until it passes + await expect(async () => { + await page.keyboard.press('Escape'); + await expect(calendar).not.toHaveClass(/open/); + await expect(calendar).toBeHidden(); + }).toPass(); }); test('@avt-keyboard-nav range', async ({ page }) => { diff --git a/e2e/components/FluidTextInput/FluidTextInput-test.avt.e2e.js b/e2e/components/FluidTextInput/FluidTextInput-test.avt.e2e.js index d26e24b0224a..5ca4480b950e 100644 --- a/e2e/components/FluidTextInput/FluidTextInput-test.avt.e2e.js +++ b/e2e/components/FluidTextInput/FluidTextInput-test.avt.e2e.js @@ -25,7 +25,7 @@ test.describe('@avt FluidTextInput', () => { test('@avt-advanced-states password input', async ({ page }) => { await visitStory(page, { component: 'FluidTextInput', - id: 'experimental-fluid-components-unstable-fluidtextinput--password-input', + id: 'experimental-fluid-components-unstable-fluidpasswordinput--default', globals: { theme: 'white', }, diff --git a/e2e/components/FluidTextInput/FluidTextInput-test.e2e.js b/e2e/components/FluidTextInput/FluidTextInput-test.e2e.js index 1f15e881b45e..9ee1007de4ea 100644 --- a/e2e/components/FluidTextInput/FluidTextInput-test.e2e.js +++ b/e2e/components/FluidTextInput/FluidTextInput-test.e2e.js @@ -22,8 +22,8 @@ test.describe('FluidTextInput', () => { }); await snapshotStory(page, { - component: 'FluidTextInput', - id: 'experimental-fluid-components-unstable-fluidtextinput--password-input', + component: 'FluidPasswordInput', + id: 'experimental-fluid-components-unstable-fluidpasswordinput--default', theme, }); }); diff --git a/e2e/components/Menu/Menu-test.avt.e2e.js b/e2e/components/Menu/Menu-test.avt.e2e.js index 8facaf04c427..acbea3b270d3 100644 --- a/e2e/components/Menu/Menu-test.avt.e2e.js +++ b/e2e/components/Menu/Menu-test.avt.e2e.js @@ -31,14 +31,13 @@ test.describe('@avt Menu', () => { }, }); - const firstItem = page.getByRole('menuitem', { name: 'Share with' }); - const LastItem = page.getByRole('menuitem', { name: 'Delete' }); - const nestedMenu = page.getByRole('menu', { name: 'Share with' }); - const nestedMenuItem = page - .getByRole('menuitemradio', { - name: 'None', - }) - .first(); + const firstItem = await page.getByRole('menuitem', { name: 'Share with' }); + const LastItem = await page.getByRole('menuitem', { name: 'Delete' }); + const nestedMenu = await page.getByRole('menu', { name: 'Share with' }); + const nestedMenuItem = await page + .getByRole('menuitemradio') + .filter({ hasText: 'None' }) + .nth(0); await expect(firstItem).toBeVisible(); await expect(LastItem).toBeVisible(); @@ -52,18 +51,32 @@ test.describe('@avt Menu', () => { // Should open menu with ArrowRight and focus on first item await page.keyboard.press('ArrowDown'); await expect(firstItem).toBeFocused(); - await page.keyboard.press('ArrowRight'); + + // avoid flaky test failures from the keyboard press happening too quickly + // this retries the keypress along with the focus assertion until it passes + await expect(async () => { + await page.keyboard.press('ArrowRight'); + expect(nestedMenuItem).toBeFocused(); + }).toPass(); + await expect(nestedMenu).toBeVisible(); await expect(nestedMenuItem).toBeVisible(); - await expect(nestedMenuItem).toBeFocused(); - await expect(nestedMenuItem).not.toBeChecked(); + await expect(nestedMenuItem).toHaveAttribute('aria-checked', 'false'); - // Should select item with enter key - await page.keyboard.press('Enter'); - await expect(nestedMenuItem).toBeChecked(); + // avoid flaky test failures from the keyboard press happening too quickly + // this retries the keypress along with the focus assertion until it passes + await expect(async () => { + // Should select item with enter key + await page.keyboard.press('Enter'); + await expect(nestedMenuItem).toHaveAttribute('aria-checked', 'true'); + }).toPass(); - // Should close menu with ArrowLeft - await page.keyboard.press('ArrowLeft'); - await expect(nestedMenu).toBeHidden(); + // avoid flaky test failures from the keyboard press happening too quickly + // this retries the keypress along with the focus assertion until it passes + await expect(async () => { + // Should close menu with ArrowLeft + await page.keyboard.press('ArrowLeft'); + await expect(nestedMenu).toBeHidden(); + }).toPass(); }); }); diff --git a/e2e/components/Modal/Modal-test.avt.e2e.js b/e2e/components/Modal/Modal-test.avt.e2e.js index 2842ab3e3d89..03615dfbf237 100644 --- a/e2e/components/Modal/Modal-test.avt.e2e.js +++ b/e2e/components/Modal/Modal-test.avt.e2e.js @@ -34,7 +34,6 @@ test.describe('@avt Modal', () => { const button = page.getByRole('button', { name: 'Launch modal' }); // Open the modal via keyboard navigation - await page.keyboard.press('Tab'); await expect(button).toBeFocused(); button.press('Enter'); diff --git a/e2e/components/ProgressIndicator/ProgressIndicator-test.avt.e2e.js b/e2e/components/ProgressIndicator/ProgressIndicator-test.avt.e2e.js index 14a182478d7c..d3b6f502931d 100644 --- a/e2e/components/ProgressIndicator/ProgressIndicator-test.avt.e2e.js +++ b/e2e/components/ProgressIndicator/ProgressIndicator-test.avt.e2e.js @@ -44,22 +44,6 @@ test.describe('@avt ProgressIndicator', () => { await expect(page).toHaveNoACViolations('ProgressIndicator-skeleton'); }); - test('@avt-advanced-states - onHover', async ({ page }) => { - await visitStory(page, { - component: 'ProgressIndicator', - id: 'components-progressindicator--default', - globals: { - theme: 'white', - }, - }); - - await expect(page.getByText('First step')).toBeVisible(); - - page.getByText('First step').hover(); - - await expect(page).toHaveNoACViolations('ProgressIndicator-onhover'); - }); - test('@avt-advanced-states - complete', async ({ page }) => { await visitStory(page, { component: 'ProgressIndicator', @@ -95,9 +79,11 @@ test.describe('@avt ProgressIndicator', () => { }, }); - await expect(page.getByText('Click me')).toBeVisible(); + const clickMeButton = page.getByRole('button').first(); + + await expect(clickMeButton).toBeVisible(); - page.getByText('Click me').hover(); + await clickMeButton.hover(); await expect(page).toHaveNoACViolations( 'ProgressIndicator-interactive-onhover' diff --git a/e2e/components/Tag/Tag-test.e2e.js b/e2e/components/Tag/Tag-test.e2e.js index 3a1b7861c4ef..7f9d6b23cf59 100644 --- a/e2e/components/Tag/Tag-test.e2e.js +++ b/e2e/components/Tag/Tag-test.e2e.js @@ -17,7 +17,7 @@ test.describe('Tag', () => { test('default @vrt', async ({ page }) => { await snapshotStory(page, { component: 'Tag', - id: 'components-tag--default', + id: 'components-tag--read-only', theme, }); }); diff --git a/e2e/components/UIShell/UIShell-test.e2e.js b/e2e/components/UIShell/UIShell-test.e2e.js index ce4829be9be6..331fe4749a4f 100644 --- a/e2e/components/UIShell/UIShell-test.e2e.js +++ b/e2e/components/UIShell/UIShell-test.e2e.js @@ -14,42 +14,26 @@ const { snapshotStory } = require('../../test-utils/storybook'); test.describe('UIShell', () => { themes.forEach((theme) => { test.describe(theme, () => { - test('header @vrt', async ({ page }) => { - await snapshotStory(page, { - component: 'UIShell', - id: 'components-ui-shell--header', - theme, - }); - }); - - test('header w/ navigation @vrt', async ({ page }) => { - await snapshotStory(page, { - component: 'UIShell', - id: 'components-ui-shell--header-w-navigation', - theme, - }); - }); - - test('header w/ actions @vrt', async ({ page }) => { + test('header w/ actions and right panel @vrt', async ({ page }) => { await snapshotStory(page, { component: 'UIShell', - id: 'components-ui-shell--header-w-actions', + id: 'components-ui-shell-header--header-w-actions-and-right-panel', theme, }); }); - test('header w/ skiptocontent @vrt', async ({ page }) => { + test('header w/ actions and switcher @vrt', async ({ page }) => { await snapshotStory(page, { component: 'UIShell', - id: 'components-ui-shell--header-w-skip-to-content', + id: 'components-ui-shell-header--header-w-actions-and-switcher', theme, }); }); - test('header w/ navigation and actions @vrt', async ({ page }) => { + test('header w/ navigation @vrt', async ({ page }) => { await snapshotStory(page, { component: 'UIShell', - id: 'components-ui-shell--header-w-navigation-and-actions', + id: 'components-ui-shell-header--header-w-navigation', theme, }); }); @@ -59,31 +43,23 @@ test.describe('UIShell', () => { }) => { await snapshotStory(page, { component: 'UIShell', - id: 'components-ui-shell--header-w-navigation-actions-and-side-nav', + id: 'components-ui-shell-header--header-w-navigation-actions-and-side-nav', theme, }); }); - test('header w/ sidenav @vrt', async ({ page }) => { - await snapshotStory(page, { - component: 'UIShell', - id: 'components-ui-shell--header-w-side-nav', - theme, - }); - }); - - test('header w/ actions and right panel @vrt', async ({ page }) => { + test('header w/ navigation and actions @vrt', async ({ page }) => { await snapshotStory(page, { component: 'UIShell', - id: 'components-ui-shell--header-w-actions-and-right-panel', + id: 'components-ui-shell-header--header-w-navigation-and-actions', theme, }); }); - test('header w/ actions and switcher @vrt', async ({ page }) => { + test('header w/ sidenav @vrt', async ({ page }) => { await snapshotStory(page, { component: 'UIShell', - id: 'components-ui-shell--header-w-actions-and-switcher', + id: 'components-ui-shell-header--header-w-side-nav', theme, }); }); @@ -91,15 +67,7 @@ test.describe('UIShell', () => { test('fixed sidenav @vrt', async ({ page }) => { await snapshotStory(page, { component: 'UIShell', - id: 'components-ui-shell--fixed-side-nav', - theme, - }); - }); - - test('fixed sidenav w/ icons @vrt', async ({ page }) => { - await snapshotStory(page, { - component: 'UIShell', - id: 'components-ui-shell--fixed-side-nav-w-icons', + id: 'components-ui-shell-sidenav--fixed-side-nav', theme, }); }); @@ -107,23 +75,22 @@ test.describe('UIShell', () => { test('fixed sidenav w/ divider @vrt', async ({ page }) => { await snapshotStory(page, { component: 'UIShell', - id: 'components-ui-shell--fixed-side-nav-w-divider', + id: 'components-ui-shell-sidenav--fixed-side-nav-w-divider', theme, }); }); - test('sidenav rail @vrt', async ({ page }) => { + test('fixed sidenav w/ icons @vrt', async ({ page }) => { await snapshotStory(page, { component: 'UIShell', - id: 'components-ui-shell--side-nav-rail', + id: 'components-ui-shell-sidenav--fixed-side-nav-w-icons', theme, }); }); - test('sidenav rail w/header @vrt', async ({ page }) => { await snapshotStory(page, { component: 'UIShell', - id: 'components-ui-shell--side-nav-rail-w-header', + id: 'components-ui-shell-sidenav--side-nav-rail-w-header', theme, }); }); @@ -131,7 +98,7 @@ test.describe('UIShell', () => { test('sidenav w/ large side nav items @vrt', async ({ page }) => { await snapshotStory(page, { component: 'UIShell', - id: 'components-ui-shell--side-nav-w-large-side-nav-items', + id: 'components-ui-shell-sidenav--side-nav-w-large-side-nav-items', theme, }); }); diff --git a/e2e/test-utils/storybook.js b/e2e/test-utils/storybook.js index 8b70eab29b19..5f57dd92c39d 100644 --- a/e2e/test-utils/storybook.js +++ b/e2e/test-utils/storybook.js @@ -6,6 +6,7 @@ */ const { snapshot } = require('./snapshot'); +const { expect } = require('@playwright/test'); async function visitStory(page, options) { const { component, story, id, globals, args } = options; @@ -34,6 +35,7 @@ async function visitStory(page, options) { } await page.goto(url); + await expect(page).toContainAStory(options); } function getStoryUrl({ component, story, id }) { diff --git a/package.json b/package.json index 14573a155976..6bd35818344b 100644 --- a/package.json +++ b/package.json @@ -49,9 +49,9 @@ "@carbon/cli": "workspace:packages/cli", "@commitlint/cli": "^18.0.0", "@commitlint/config-conventional": "^18.0.0", - "@percy/cli": "^1.27.0", - "@percy/playwright": "^1.0.4", - "@playwright/test": "^1.36.2", + "@percy/cli": "^1.29.2", + "@percy/playwright": "^1.0.6", + "@playwright/test": "^1.46.1", "@testing-library/dom": "^10.1.0", "@testing-library/jest-dom": "^6.0.0", "@testing-library/react": "^16.0.0", @@ -63,7 +63,7 @@ "cross-spawn": "^7.0.0", "doctoc": "^2.0.0", "eslint": "^9.0.0", - "eslint-plugin-playwright": "^1.0.0", + "eslint-plugin-playwright": "^1.6.2", "fs-extra": "^11.0.0", "glob": "^11.0.0", "husky": "^9.0.0", diff --git a/playwright.config.js b/playwright.config.js index 787eda241a09..d212bda53a04 100644 --- a/playwright.config.js +++ b/playwright.config.js @@ -34,9 +34,6 @@ const config = { outputDir: path.join(__dirname, '.playwright', 'results'), snapshotDir: path.join(__dirname, '.playwright', 'snapshots'), - // https://playwright.dev/docs/test-parallel#parallelize-tests-in-a-single-file - // fullyParallel: true, - forbidOnly: !!process.env.CI, retries: process.env.CI ? 2 : 0, use: { @@ -53,7 +50,12 @@ const config = { }, ], reporter: [ - ['line'], + // Dot reporter is used in CI because it's very concise - it only produces a + // single character per successful test run. + [process.env.CI ? 'dot' : 'line'], + + // The remaining reporters should always be used, in both CI and dev. + ['blob'], [ 'json', { @@ -118,4 +120,43 @@ expect.extend({ }, }); +expect.extend({ + async toContainAStory(page, options) { + let pass; + try { + /** + * This isn't a foolproof way to determine that an actual story + * has been rendered, but it should determine if a storybook + * error page is present or not. + */ + await expect(page.locator('css=.cds--layout')).toBeAttached(); + pass = true; + } catch (e) { + pass = false; + } + + if (pass) { + return { + pass: true, + }; + } else { + return { + pass: false, + message: + () => `An element with the "cds--layout" class was not found at url: + ${page.url()} + + The url is probably invalid and does not render a story. + Check the url locally, and verify the parameters passed to visitStory are correct. + + component: ${options.component} + story: ${options.story} + id: ${options.id} + globals: ${JSON.stringify(options.globals)} + args: ${JSON.stringify(options.args)}`, + }; + } + }, +}); + module.exports = config; diff --git a/yarn.lock b/yarn.lock index c68f8092ee1b..a3d7d0494bb9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4425,190 +4425,192 @@ __metadata: languageName: node linkType: hard -"@percy/cli-app@npm:1.27.0": - version: 1.27.0 - resolution: "@percy/cli-app@npm:1.27.0" +"@percy/cli-app@npm:1.29.2": + version: 1.29.2 + resolution: "@percy/cli-app@npm:1.29.2" dependencies: - "@percy/cli-command": "npm:1.27.0" - "@percy/cli-exec": "npm:1.27.0" - checksum: 10/53225aa1a2bfee2ba379f3d6f1c152e23fedab394a13b66c31195feedc5f7c3b36e2551e67630166c1a926ca8cf30966ddf9f60b6e1fefbb8bc3f660a60916fd + "@percy/cli-command": "npm:1.29.2" + "@percy/cli-exec": "npm:1.29.2" + checksum: 10/701dc58fe07c3527e703ad717bbde3de6e0bdc30be5a5d0bd7a2ca8cdbab2e15cadda5556b3b93cf078f929b83165a60f28269d6d8a4ef11e4e43fd380443df0 languageName: node linkType: hard -"@percy/cli-build@npm:1.27.0": - version: 1.27.0 - resolution: "@percy/cli-build@npm:1.27.0" +"@percy/cli-build@npm:1.29.2": + version: 1.29.2 + resolution: "@percy/cli-build@npm:1.29.2" dependencies: - "@percy/cli-command": "npm:1.27.0" - checksum: 10/623855a9ab7edcb50d6deb847f1f430a7e31c5c979b647e1a262aca38a24b461075662ff3317a38e12fc4902d26896d7ed1d1cabcc329499b377a9e8f5eedbdd + "@percy/cli-command": "npm:1.29.2" + checksum: 10/596618d7d8ec0873e6464961c0a10e350e209ee2b064c2e3e639c3b02b423a4acaa339f9fb062540944fc54bb992ec4f762bb016e31201531a0094804398f01b languageName: node linkType: hard -"@percy/cli-command@npm:1.27.0": - version: 1.27.0 - resolution: "@percy/cli-command@npm:1.27.0" +"@percy/cli-command@npm:1.29.2": + version: 1.29.2 + resolution: "@percy/cli-command@npm:1.29.2" dependencies: - "@percy/config": "npm:1.27.0" - "@percy/core": "npm:1.27.0" - "@percy/logger": "npm:1.27.0" + "@percy/config": "npm:1.29.2" + "@percy/core": "npm:1.29.2" + "@percy/logger": "npm:1.29.2" bin: percy-cli-readme: bin/readme.js - checksum: 10/82a434fe5b3f759a6c27ec120b6bde266ea9333f6b2d04cdf3a895a0f8a892051b943e9c5629d0da75c020ea2a6f0b80bd955ce022b46f7489f9e6d086cecb2c + checksum: 10/ff9a5ab09a7e3c96ff468d74b633058db95cbc0752452b26e5271c7b8d8295b5d92c412befa3920eac47f7782dc6c5ca2c9062c0f59836850b15f9c447d27523 languageName: node linkType: hard -"@percy/cli-config@npm:1.27.0": - version: 1.27.0 - resolution: "@percy/cli-config@npm:1.27.0" +"@percy/cli-config@npm:1.29.2": + version: 1.29.2 + resolution: "@percy/cli-config@npm:1.29.2" dependencies: - "@percy/cli-command": "npm:1.27.0" - checksum: 10/b444f8ac5678aa4f90677514dd9f99a1414813e9babdc8bdb1a7cf22033254422d6298ad3caec7eab8b6c5dc69268134d4d97875d4246c5aec171c5f9ac45d78 + "@percy/cli-command": "npm:1.29.2" + checksum: 10/9cb7c080142e2f679b28c06faf3978a6e1715ad6ae6cc61f9dd827363f1426620061f754cb78285181369f2f963ac0b5ea426799ee40f6a25c7b9381a4260d6c languageName: node linkType: hard -"@percy/cli-exec@npm:1.27.0": - version: 1.27.0 - resolution: "@percy/cli-exec@npm:1.27.0" +"@percy/cli-exec@npm:1.29.2": + version: 1.29.2 + resolution: "@percy/cli-exec@npm:1.29.2" dependencies: - "@percy/cli-command": "npm:1.27.0" + "@percy/cli-command": "npm:1.29.2" + "@percy/logger": "npm:1.29.2" cross-spawn: "npm:^7.0.3" which: "npm:^2.0.2" - checksum: 10/3bcabce315d679004a6a476dbc1cd6a5d1f3d28d82b7632f9411c33a0dc8f5543cb2c10c6f73fa2ef0a3cc670708f3116ff4710bfa40572aa04b357b8512f7d4 + checksum: 10/45e4a1828628a3fe69f1fc727ef7fd2a9f0e1af463ac5bb5ea64bbdb943b88b68e50dbe221c41e09be419cd975b2bd40abd130cf22af9316566e24bb540c118f languageName: node linkType: hard -"@percy/cli-snapshot@npm:1.27.0": - version: 1.27.0 - resolution: "@percy/cli-snapshot@npm:1.27.0" +"@percy/cli-snapshot@npm:1.29.2": + version: 1.29.2 + resolution: "@percy/cli-snapshot@npm:1.29.2" dependencies: - "@percy/cli-command": "npm:1.27.0" + "@percy/cli-command": "npm:1.29.2" yaml: "npm:^2.0.0" - checksum: 10/086f074937b146915031ed2273f4fc85f6a272bd4f6391085a97b762e27afef9792dc9ee14ef46d5291bf83b395a789e1b0df4bc02dd62bf5c687e5df6cb9fd4 + checksum: 10/20762bfc7c3803cfb5ad7466ac6feb1757977e758f0131f92645f4565f4987601a5049b414cea020d3a5695ec05f65be66f2e3e07700823f707eeb6397358e03 languageName: node linkType: hard -"@percy/cli-upload@npm:1.27.0": - version: 1.27.0 - resolution: "@percy/cli-upload@npm:1.27.0" +"@percy/cli-upload@npm:1.29.2": + version: 1.29.2 + resolution: "@percy/cli-upload@npm:1.29.2" dependencies: - "@percy/cli-command": "npm:1.27.0" + "@percy/cli-command": "npm:1.29.2" fast-glob: "npm:^3.2.11" image-size: "npm:^1.0.0" - checksum: 10/6fa20ba7c5c990cbecbddc93a6b7f1a2e06362cdca5a0e8c9e85dd6b0f1f43896449f7092aceb997fd09c37af90b2e2b65dcbeb1dc249380b19cd60e0c46483d + checksum: 10/e3d4f251b76bc3f9db04fd10388bd994371ace76eb6b6f49f226d37453e7eae6ffa1f4f32b809b23ef6e5fd6298aa80ef8c84bb684a733549812ac3f4141e649 languageName: node linkType: hard -"@percy/cli@npm:^1.27.0": - version: 1.27.0 - resolution: "@percy/cli@npm:1.27.0" - dependencies: - "@percy/cli-app": "npm:1.27.0" - "@percy/cli-build": "npm:1.27.0" - "@percy/cli-command": "npm:1.27.0" - "@percy/cli-config": "npm:1.27.0" - "@percy/cli-exec": "npm:1.27.0" - "@percy/cli-snapshot": "npm:1.27.0" - "@percy/cli-upload": "npm:1.27.0" - "@percy/client": "npm:1.27.0" - "@percy/logger": "npm:1.27.0" +"@percy/cli@npm:^1.29.2": + version: 1.29.2 + resolution: "@percy/cli@npm:1.29.2" + dependencies: + "@percy/cli-app": "npm:1.29.2" + "@percy/cli-build": "npm:1.29.2" + "@percy/cli-command": "npm:1.29.2" + "@percy/cli-config": "npm:1.29.2" + "@percy/cli-exec": "npm:1.29.2" + "@percy/cli-snapshot": "npm:1.29.2" + "@percy/cli-upload": "npm:1.29.2" + "@percy/client": "npm:1.29.2" + "@percy/logger": "npm:1.29.2" bin: percy: bin/run.cjs - checksum: 10/5d6334e9ae9f127bdfad172ab703a5cd6ba3a99227f0fd7eb9315257e7c6dd25324056b7a75ac268a0a667174c68407edc30d4b10d1169638b9180fb4926c9fb + checksum: 10/073d9931824a24b1f4fecc5b494dac025354e1bf5f38e82e88a1271fdebe5498b9477cf5e6ff905fc062210f352c6eef867cdbf0888c7fb0d96918c47b1919e9 languageName: node linkType: hard -"@percy/client@npm:1.27.0": - version: 1.27.0 - resolution: "@percy/client@npm:1.27.0" +"@percy/client@npm:1.29.2": + version: 1.29.2 + resolution: "@percy/client@npm:1.29.2" dependencies: - "@percy/env": "npm:1.27.0" - "@percy/logger": "npm:1.27.0" - checksum: 10/78646a5155aca4677d1ab26e80e8cd880d9509c9dcaa4374bb35df69eda6beaa42d3a207a8088757a08b2d015992e14e8d3b124e8124f2d2dffa95c61a01bfb4 + "@percy/env": "npm:1.29.2" + "@percy/logger": "npm:1.29.2" + pako: "npm:^2.1.0" + checksum: 10/557c9861af79e04aa1b32a913a037e5f1547cff3b23abd9acc687638797c6b337bb509746f40b57e794739ee74c1e22cfab8207fb36c4e9fd96f6b3195636dcb languageName: node linkType: hard -"@percy/config@npm:1.27.0": - version: 1.27.0 - resolution: "@percy/config@npm:1.27.0" +"@percy/config@npm:1.29.2": + version: 1.29.2 + resolution: "@percy/config@npm:1.29.2" dependencies: - "@percy/logger": "npm:1.27.0" + "@percy/logger": "npm:1.29.2" ajv: "npm:^8.6.2" cosmiconfig: "npm:^8.0.0" yaml: "npm:^2.0.0" - checksum: 10/29dfe9f2a3e2264c5799f2e0387f072140d0f4e18e30f85b96b70563d683cf34296666d9d87adf38fd8b6594dc19d87cf1abfb3baddb05ade56e42848d2e3b3c + checksum: 10/2749031619db2df210c3df19c142b6fcb2f6574c450c7ff1a05986aed37e860aa6ecf1cf6f47d64914605a75046f64ef71068409634acab730b2004b5558def2 languageName: node linkType: hard -"@percy/core@npm:1.27.0": - version: 1.27.0 - resolution: "@percy/core@npm:1.27.0" +"@percy/core@npm:1.29.2": + version: 1.29.2 + resolution: "@percy/core@npm:1.29.2" dependencies: - "@percy/client": "npm:1.27.0" - "@percy/config": "npm:1.27.0" - "@percy/dom": "npm:1.27.0" - "@percy/logger": "npm:1.27.0" - "@percy/webdriver-utils": "npm:1.27.0" + "@percy/client": "npm:1.29.2" + "@percy/config": "npm:1.29.2" + "@percy/dom": "npm:1.29.2" + "@percy/logger": "npm:1.29.2" + "@percy/webdriver-utils": "npm:1.29.2" content-disposition: "npm:^0.5.4" cross-spawn: "npm:^7.0.3" extract-zip: "npm:^2.0.1" fast-glob: "npm:^3.2.11" - micromatch: "npm:^4.0.4" + micromatch: "npm:^4.0.6" mime-types: "npm:^2.1.34" + pako: "npm:^2.1.0" path-to-regexp: "npm:^6.2.0" rimraf: "npm:^3.0.2" - ws: "npm:^8.0.0" - checksum: 10/ffb01080d772fe5d08adc777d8b2f3c5ec4435a58f18f5529dedcf61ada74b37b16efaae1a4f1dee3241d3d03543bd4cdc949dc84c25d51b8c4e7f277c159f2b + ws: "npm:^8.17.1" + yaml: "npm:^2.4.1" + checksum: 10/84e0ec9e82ce00941140bb5f2537359be407be156dbf3fc68b43c897b56af12305bc8e5205fecbcb49391060ed631a2c8fedfc327af6ba655a0195241d5dee6c languageName: node linkType: hard -"@percy/dom@npm:1.27.0": - version: 1.27.0 - resolution: "@percy/dom@npm:1.27.0" - checksum: 10/17231b81fa380015af37caba39fa49c9f493b4e8670509c0ec721d09c6a9e222294dc0a4511cb8fa1d52467098ffc7f6fe021c3acc15c1ddc5cb9d0247c1e76e +"@percy/dom@npm:1.29.2": + version: 1.29.2 + resolution: "@percy/dom@npm:1.29.2" + checksum: 10/b92a3ff29495b194b4b4c5155ef49595b863e557d14b3f78f88d9c1c02f23e44181397064399f1c3dc5bc6bbf57626d863dec29facfdfcc1f9b2ed5d9adf362e languageName: node linkType: hard -"@percy/env@npm:1.27.0": - version: 1.27.0 - resolution: "@percy/env@npm:1.27.0" +"@percy/env@npm:1.29.2": + version: 1.29.2 + resolution: "@percy/env@npm:1.29.2" dependencies: - "@percy/logger": "npm:1.27.0" - checksum: 10/8899f8f9145631e7ed5014685767e81ed5a1806a796642b57d7888dda764b20ac9eaf288e943f0e9eb3220281276c67a2463dcc69142ffe1d522b4b5c39cf4d1 + "@percy/logger": "npm:1.29.2" + checksum: 10/07a6ead152aeb949d1de3918fecbc551a16d5a40db54fad39c6f418d1bb324a0f6eada3c6ac827177352365fac24e445be12e9dba9382666a6d56a7d7bb5d5d4 languageName: node linkType: hard -"@percy/logger@npm:1.27.0": - version: 1.27.0 - resolution: "@percy/logger@npm:1.27.0" - checksum: 10/5fb9a1ad8710567b9e3cec75f5bd221b1a81b10d53c9b804c0b9c5e9b34eaed2318fb2a603e723994878e4162b8fd3a55ad3a1670fa92bc052b78c3f07091989 +"@percy/logger@npm:1.29.2": + version: 1.29.2 + resolution: "@percy/logger@npm:1.29.2" + checksum: 10/f9512936105077b2cf7eac0be13d54d62fbe0facada67dd2cda863dec75c244d98113874a0a34317304e23909a19844d434b97a401ded81185b3c3336e7dbec3 languageName: node linkType: hard -"@percy/playwright@npm:^1.0.4": - version: 1.0.4 - resolution: "@percy/playwright@npm:1.0.4" - dependencies: - "@percy/sdk-utils": "npm:^1.0.0" +"@percy/playwright@npm:^1.0.6": + version: 1.0.6 + resolution: "@percy/playwright@npm:1.0.6" peerDependencies: playwright-core: ">=1" - checksum: 10/d0969b49208178a7221093517b50b5cee1e3094b89be301dc5f194172f4132b601570a89bdad617830dcfce7599cdbbe23cef4398bc58faeec05ef7b1f222802 + checksum: 10/d64564c5fe5f2c4adcfff86f067d0eed77368bd8498284697037d19f7aaf21f78ac49eafc5648fd0b0d74a3fd90dd1461edce920abd75f55f438e32ed9a5e3cd languageName: node linkType: hard -"@percy/sdk-utils@npm:1.27.0, @percy/sdk-utils@npm:^1.0.0": - version: 1.27.0 - resolution: "@percy/sdk-utils@npm:1.27.0" - checksum: 10/94fb71a6c73518d3a92c06e2fa336e9196fc1ee79030223c1a70e7eee45bea080495f5cd7df7b2b03ce742b738acfd8ac4c0fd13855b2e0925ff22af68a92025 +"@percy/sdk-utils@npm:1.29.2": + version: 1.29.2 + resolution: "@percy/sdk-utils@npm:1.29.2" + checksum: 10/4ff24d2980bb49cc7fa989b2fe022de17699475b247567d47ad0d32cab5249491c04da70e731e25f3236512250b94c1c9ec3519c5bba392cb8632ab52244a329 languageName: node linkType: hard -"@percy/webdriver-utils@npm:1.27.0": - version: 1.27.0 - resolution: "@percy/webdriver-utils@npm:1.27.0" +"@percy/webdriver-utils@npm:1.29.2": + version: 1.29.2 + resolution: "@percy/webdriver-utils@npm:1.29.2" dependencies: - "@percy/config": "npm:1.27.0" - "@percy/sdk-utils": "npm:1.27.0" - checksum: 10/d0900235c8887047f432959a19fe92cd95580e6d0dc240b5361adaca41c13d3d755e46b74791e8c06e207e7f7e793cdb186a5841d1b411246ad050b2e51d592c + "@percy/config": "npm:1.29.2" + "@percy/sdk-utils": "npm:1.29.2" + checksum: 10/8cc7140363ead5487d8163625fd99bf6dd681530e78ca394ee21d148f43c2eab316a70b2e7c9cc30e22455a0a28af4be2955cda496c5b4135aa6f99bf686fb27 languageName: node linkType: hard @@ -4633,19 +4635,14 @@ __metadata: languageName: node linkType: hard -"@playwright/test@npm:^1.36.2": - version: 1.36.2 - resolution: "@playwright/test@npm:1.36.2" +"@playwright/test@npm:^1.46.1": + version: 1.46.1 + resolution: "@playwright/test@npm:1.46.1" dependencies: - "@types/node": "npm:*" - fsevents: "npm:2.3.2" - playwright-core: "npm:1.36.2" - dependenciesMeta: - fsevents: - optional: true + playwright: "npm:1.46.1" bin: playwright: cli.js - checksum: 10/4bbe0fa72efbf03c127e55f153ab9c9221aa484011feea764f5e40185656c96953dc4ec32ec5e0842dfbe4a5395955b0c41d6729041fa2ee699117668a42d82b + checksum: 10/09e2c28574402f14e2d6f6843022c5778382dc7f703bae931dd531fc0fc1b725a862d3b52932bd6912cb13cbaed54822af33eb3d70134d93b0f1c10ec3fb0756 languageName: node linkType: hard @@ -9443,12 +9440,12 @@ __metadata: languageName: node linkType: hard -"braces@npm:^3.0.2, braces@npm:~3.0.2": - version: 3.0.2 - resolution: "braces@npm:3.0.2" +"braces@npm:^3.0.2, braces@npm:^3.0.3, braces@npm:~3.0.2": + version: 3.0.3 + resolution: "braces@npm:3.0.3" dependencies: - fill-range: "npm:^7.0.1" - checksum: 10/966b1fb48d193b9d155f810e5efd1790962f2c4e0829f8440b8ad236ba009222c501f70185ef732fef17a4c490bb33a03b90dab0631feafbdf447da91e8165b1 + fill-range: "npm:^7.1.1" + checksum: 10/fad11a0d4697a27162840b02b1fad249c1683cbc510cd5bf1a471f2f8085c046d41094308c577a50a03a579dd99d5a6b3724c4b5e8b14df2c4443844cfcda2c6 languageName: node linkType: hard @@ -9919,9 +9916,9 @@ __metadata: "@carbon/cli": "workspace:packages/cli" "@commitlint/cli": "npm:^18.0.0" "@commitlint/config-conventional": "npm:^18.0.0" - "@percy/cli": "npm:^1.27.0" - "@percy/playwright": "npm:^1.0.4" - "@playwright/test": "npm:^1.36.2" + "@percy/cli": "npm:^1.29.2" + "@percy/playwright": "npm:^1.0.6" + "@playwright/test": "npm:^1.46.1" "@testing-library/dom": "npm:^10.1.0" "@testing-library/jest-dom": "npm:^6.0.0" "@testing-library/react": "npm:^16.0.0" @@ -9933,7 +9930,7 @@ __metadata: cross-spawn: "npm:^7.0.0" doctoc: "npm:^2.0.0" eslint: "npm:^9.0.0" - eslint-plugin-playwright: "npm:^1.0.0" + eslint-plugin-playwright: "npm:^1.6.2" fs-extra: "npm:^11.0.0" glob: "npm:^11.0.0" husky: "npm:^9.0.0" @@ -13388,7 +13385,7 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-playwright@npm:^1.0.0": +"eslint-plugin-playwright@npm:^1.6.2": version: 1.6.2 resolution: "eslint-plugin-playwright@npm:1.6.2" dependencies: @@ -14313,12 +14310,12 @@ __metadata: languageName: node linkType: hard -"fill-range@npm:^7.0.1": - version: 7.0.1 - resolution: "fill-range@npm:7.0.1" +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" dependencies: to-regex-range: "npm:^5.0.1" - checksum: 10/e260f7592fd196b4421504d3597cc76f4a1ca7a9488260d533b611fc3cefd61e9a9be1417cb82d3b01ad9f9c0ff2dbf258e1026d2445e26b0cf5148ff4250429 + checksum: 10/a7095cb39e5bc32fada2aa7c7249d3f6b01bd1ce461a61b0adabacccabd9198500c6fb1f68a7c851a657e273fce2233ba869638897f3d7ed2e87a2d89b4436ea languageName: node linkType: hard @@ -20137,7 +20134,7 @@ __metadata: languageName: node linkType: hard -"micromatch@npm:4.0.5, micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": +"micromatch@npm:4.0.5": version: 4.0.5 resolution: "micromatch@npm:4.0.5" dependencies: @@ -20168,6 +20165,16 @@ __metadata: languageName: node linkType: hard +"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5, micromatch@npm:^4.0.6": + version: 4.0.7 + resolution: "micromatch@npm:4.0.7" + dependencies: + braces: "npm:^3.0.3" + picomatch: "npm:^2.3.1" + checksum: 10/a11ed1cb67dcbbe9a5fc02c4062cf8bb0157d73bf86956003af8dcfdf9b287f9e15ec0f6d6925ff6b8b5b496202335e497b01de4d95ef6cf06411bc5e5c474a0 + languageName: node + linkType: hard + "mime-db@npm:1.52.0, mime-db@npm:>= 1.43.0 < 2": version: 1.52.0 resolution: "mime-db@npm:1.52.0" @@ -21840,6 +21847,13 @@ __metadata: languageName: node linkType: hard +"pako@npm:^2.1.0": + version: 2.1.0 + resolution: "pako@npm:2.1.0" + checksum: 10/38a04991d0ec4f4b92794a68b8c92bf7340692c5d980255c92148da96eb3e550df7a86a7128b5ac0c65ecddfe5ef3bbe9c6dab13e1bc315086e759b18f7c1401 + languageName: node + linkType: hard + "pako@npm:~1.0.2, pako@npm:~1.0.5": version: 1.0.10 resolution: "pako@npm:1.0.10" @@ -22237,12 +22251,27 @@ __metadata: languageName: node linkType: hard -"playwright-core@npm:1.36.2": - version: 1.36.2 - resolution: "playwright-core@npm:1.36.2" +"playwright-core@npm:1.46.1": + version: 1.46.1 + resolution: "playwright-core@npm:1.46.1" bin: playwright-core: cli.js - checksum: 10/5cd22b77f4f2160c56654592f1767c578a3945e86d227c324ee5bd021eb85d8c36a00e0dcf785fb66623d7c448f973b99bafcc790a43e90d7d9f04f471f3a605 + checksum: 10/950aa935bba0b67ed289e07f31a52104c2b2ff9e39c46cda70b83f0b327e8114bcbcdeb4e8f94333ec941f9cd49cfac3af4cad91e247206ce927283482f24d91 + languageName: node + linkType: hard + +"playwright@npm:1.46.1": + version: 1.46.1 + resolution: "playwright@npm:1.46.1" + dependencies: + fsevents: "npm:2.3.2" + playwright-core: "npm:1.46.1" + dependenciesMeta: + fsevents: + optional: true + bin: + playwright: cli.js + checksum: 10/17b0e7495a663dccbda4baf4953823a133af0b7cd4a5978bd2f40768a23e1a92d3659d7b48289a5160c9fa6269d8b9bbf5e2040aa4a63a3dd5f29475343ad3f2 languageName: node linkType: hard @@ -28589,7 +28618,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:8.5.0, ws@npm:^8.0.0, ws@npm:^8.2.3, ws@npm:^8.4.2": +"ws@npm:8.5.0": version: 8.5.0 resolution: "ws@npm:8.5.0" peerDependencies: @@ -28613,6 +28642,21 @@ __metadata: languageName: node linkType: hard +"ws@npm:^8.17.1, ws@npm:^8.2.3, ws@npm:^8.4.2": + version: 8.18.0 + resolution: "ws@npm:8.18.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10/70dfe53f23ff4368d46e4c0b1d4ca734db2c4149c6f68bc62cb16fc21f753c47b35fcc6e582f3bdfba0eaeb1c488cddab3c2255755a5c3eecb251431e42b3ff6 + languageName: node + linkType: hard + "www@workspace:www": version: 0.0.0-use.local resolution: "www@workspace:www" @@ -28733,7 +28777,7 @@ __metadata: languageName: node linkType: hard -"yaml@npm:2.3.4, yaml@npm:^2.0.0": +"yaml@npm:2.3.4": version: 2.3.4 resolution: "yaml@npm:2.3.4" checksum: 10/f8207ce43065a22268a2806ea6a0fa3974c6fde92b4b2fa0082357e487bc333e85dc518910007e7ac001b532c7c84bd3eccb6c7757e94182b564028b0008f44b @@ -28747,6 +28791,15 @@ __metadata: languageName: node linkType: hard +"yaml@npm:^2.0.0, yaml@npm:^2.4.1": + version: 2.5.0 + resolution: "yaml@npm:2.5.0" + bin: + yaml: bin.mjs + checksum: 10/72e903fdbe3742058885205db4a6c9ff38e5f497f4e05e631264f7756083c05e7d10dfb5e4ce9d7a95de95338f9b20d19dd0b91c60c65f7d7608b6b3929820ad + languageName: node + linkType: hard + "yargs-parser@npm:21.1.1, yargs-parser@npm:^21.1.1": version: 21.1.1 resolution: "yargs-parser@npm:21.1.1"