From dc5416cb67cfba067e37126d0b9e230530f1df7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= Date: Tue, 16 Apr 2024 15:00:03 +0200 Subject: [PATCH] Setup Replay recording on CI --- .github/workflows/playwright.yml | 14 +- package.json | 8 +- playwright.config.ts | 23 ++- pnpm-lock.yaml | 249 +++++++++++++++++++++++++++++-- 4 files changed, 268 insertions(+), 26 deletions(-) diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml index b13e1616..4bcc265e 100644 --- a/.github/workflows/playwright.yml +++ b/.github/workflows/playwright.yml @@ -3,9 +3,6 @@ on: push: branches: main pull_request: -env: - RECORD_REPLAY_API_KEY: rwk_yaEG8jo6gcisGHHoMj8SNoOMIHSbT7REuU5E1QnKCiL - RECORD_REPLAY_METADATA_TEST_RUN_TITLE: E2E Tests jobs: wait-for-vercel: name: Wait for vercel @@ -78,17 +75,20 @@ jobs: path: | ~/.cache/ms-playwright key: ${{ runner.os }}-playwright-${{ env.PLAYWRIGHT_VERSION }} - - run: npx playwright install --with-deps - if: steps.playwright-cache.outputs.cache-hit != 'true' - - run: npx playwright install-deps + - run: npx playwright install-deps chromium if: steps.playwright-cache.outputs.cache-hit != 'true' + - name: Get Replay Chromium + run: npx replayio update + - name: Run Playwright tests - run: pnpm test:e2e + run: pnpm test:e2e:record env: APP_URL: ${{ needs.wait-for-vercel.outputs.preview_url }} AUTH0_BASE_URL: ${{ needs.wait-for-vercel.outputs.preview_url }} + RECORD_REPLAY_METADATA_TEST_RUN_TITLE: E2E Tests RECORD_REPLAY_TEST_RUN_ID: ${{ needs.generate-test-run-id.outputs.testRunId }} + REPLAY_API_KEY: ${{ secrets.REPLAY_API_KEY }} TEST_USER_API_KEY: ${{ secrets.TEST_USER_API_KEY }} - uses: actions/upload-artifact@v4 if: always() diff --git a/package.json b/package.json index f5d3b616..611567ca 100644 --- a/package.json +++ b/package.json @@ -12,8 +12,9 @@ "start": "next start", "test": "jest", "test:watch": "jest --watch", - "test:e2e": "playwright test", + "test:e2e": "playwright test --project chromium", "test:e2e:debug": "playwright test --project chromium --workers 1 --headed", + "test:e2e:record": "REPLAY_PLAYWRIGHT_FIXTURE=1 playwright test --project replay-chromium", "typescript": "tsc --noEmit", "typescript:watch": "tsc --noEmit --watch" }, @@ -42,7 +43,8 @@ "@graphql-codegen/client-preset": "4.2.4", "@graphql-typed-document-node/core": "^3.2.0", "@jest/globals": "^29.7.0", - "@playwright/test": "^1.42.1", + "@playwright/test": "1.38.1", + "@replayio/playwright": "3.0.0-alpha.3", "@testing-library/jest-dom": "^6.4.1", "@testing-library/react": "^14.2.1", "@types/cookie": "^0.6.0", @@ -60,7 +62,7 @@ "graphqurl": "^1.0.1", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", - "playwright": "^1.42.1", + "playwright": "1.38.1", "postcss": "^8.4.33", "strip-ansi": "^6", "tailwindcss": "^3.4.1", diff --git a/playwright.config.ts b/playwright.config.ts index b62431ad..e0cab7ba 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -1,9 +1,14 @@ -import { resolve } from "path"; import { defineConfig, devices } from "@playwright/test"; +import { + createReplayReporterConfig, + devices as replayDevices, +} from "@replayio/playwright"; +import dotenv from "dotenv"; +import { resolve } from "path"; // Read environment variables from file. // https://github.com/motdotla/dotenv -require("dotenv").config({ path: resolve(__dirname, ".env.local") }); +dotenv.config({ path: resolve(__dirname, ".env.local") }); // See https://playwright.dev/docs/test-configuration. export default defineConfig({ @@ -12,7 +17,15 @@ export default defineConfig({ forbidOnly: !!process.env.CI, retries: process.env.CI ? 2 : 0, workers: 1, - reporter: "line", + reporter: process.env.CI + ? [ + ["line"], + createReplayReporterConfig({ + apiKey: process.env.REPLAY_API_KEY, + upload: true, + }) as [string, unknown], + ] + : "line", use: { launchOptions: { // ... @@ -27,5 +40,9 @@ export default defineConfig({ name: "chromium", use: { ...devices["Desktop Chrome"] }, }, + { + name: "replay-chromium", + use: { ...replayDevices["Replay Chromium"] }, + }, ], }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 300e199b..c842acc6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -74,8 +74,11 @@ devDependencies: specifier: ^29.7.0 version: 29.7.0 '@playwright/test': - specifier: ^1.42.1 - version: 1.42.1 + specifier: 1.38.1 + version: 1.38.1 + '@replayio/playwright': + specifier: 3.0.0-alpha.3 + version: 3.0.0-alpha.3(@playwright/test@1.38.1) '@testing-library/jest-dom': specifier: ^6.4.1 version: 6.4.1(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0) @@ -128,8 +131,8 @@ devDependencies: specifier: ^29.7.0 version: 29.7.0 playwright: - specifier: ^1.42.1 - version: 1.42.1 + specifier: 1.38.1 + version: 1.38.1 postcss: specifier: ^8.4.33 version: 8.4.33 @@ -2644,12 +2647,12 @@ packages: engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} dev: true - /@playwright/test@1.42.1: - resolution: {integrity: sha512-Gq9rmS54mjBL/7/MvBaNOBwbfnh7beHvS6oS4srqXFcQHpQCV1+c8JXWE8VLPyRDhgS3H8x8A7hztqI9VnwrAQ==} + /@playwright/test@1.38.1: + resolution: {integrity: sha512-NqRp8XMwj3AK+zKLbZShl0r/9wKgzqI/527bkptKXomtuo+dOjU9NdMASQ8DNC9z9zLOMbG53T4eihYr3XR+BQ==} engines: {node: '>=16'} hasBin: true dependencies: - playwright: 1.42.1 + playwright: 1.38.1 dev: true /@popmotion/easing@1.0.2: @@ -2687,6 +2690,81 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@replayio/playwright@3.0.0-alpha.3(@playwright/test@1.38.1): + resolution: {integrity: sha512-udY4ni7Gky2vcR7CJQ2zFbS5Mmvy08cJoVgb2F/9iOqWNMna3K/L7w4IWoeRiN148EtwYYTka2uNuN/3CKbrWQ==} + hasBin: true + requiresBuild: true + peerDependencies: + '@playwright/test': 1.x + dependencies: + '@playwright/test': 1.38.1 + '@replayio/replay': 0.22.0 + '@replayio/test-utils': 2.0.0 + debug: 4.3.4(supports-color@8.1.1) + uuid: 8.3.2 + ws: 8.16.0 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + + /@replayio/replay@0.22.0: + resolution: {integrity: sha512-e1+qwvDmPShu4cCTqdJ1vzRikCZNJkt7Jyyx3+AiFx7hjU47bDSd5Ck8caip1TZsyic5YOFAuBFaWKxYqLfY5w==} + hasBin: true + dependencies: + '@replayio/sourcemap-upload': 2.0.1 + '@types/semver': 7.5.8 + commander: 12.0.0 + debug: 4.3.4(supports-color@8.1.1) + is-uuid: 1.0.2 + jsonata: 1.8.7 + launchdarkly-node-client-sdk: 3.1.0 + node-fetch: 2.7.0 + p-map: 4.0.0 + query-registry: 2.6.0 + semver: 7.5.4 + superstruct: 0.15.5 + text-table: 0.2.0 + ws: 7.5.9 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + + /@replayio/sourcemap-upload@2.0.1: + resolution: {integrity: sha512-koIuZOdxE8zK79YM2ox7aAkIUSGPcjaW/uW47XZSZYB6moPNAbhWu+oftsnWT5BVH84aj5pcBddC8ycFvICy/Q==} + engines: {node: '>=10.13'} + dependencies: + commander: 7.2.0 + debug: 4.3.4(supports-color@8.1.1) + glob: 7.2.3 + node-fetch: 2.7.0 + p-map: 4.0.0 + string.prototype.matchall: 4.0.8 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /@replayio/test-utils@2.0.0: + resolution: {integrity: sha512-FygZePI/sHudcMP9VOOsThaFY+jjzvy5IoZsGNN4P4XhoKdaTF4QbiQg9PO7E5H65hChe1yJWd80yZAMOu590A==} + dependencies: + '@replayio/replay': 0.22.0 + debug: 4.3.4(supports-color@8.1.1) + node-fetch: 2.7.0 + sha-1: 1.0.0 + uuid: 8.3.2 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + /@rushstack/eslint-patch@1.3.3: resolution: {integrity: sha512-0xd7qez0AQ+MbHatZTlI1gu5vkG8r7MYRUJAHPAHJBmGLs16zpkrpAVLvjQKQOqaXPDUBwOiJzNc00znHSCVBw==} dev: true @@ -2958,6 +3036,10 @@ packages: /@types/scheduler@0.16.3: resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} + /@types/semver@7.5.8: + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + dev: true + /@types/stack-utils@2.0.3: resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} dev: true @@ -4039,6 +4121,12 @@ packages: ieee754: 1.2.1 dev: true + /builtins@5.1.0: + resolution: {integrity: sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==} + dependencies: + semver: 7.5.4 + dev: true + /busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} @@ -4402,11 +4490,21 @@ packages: delayed-stream: 1.0.0 dev: true + /commander@12.0.0: + resolution: {integrity: sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==} + engines: {node: '>=18'} + dev: true + /commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} dev: true + /commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + dev: true + /common-tags@1.8.2: resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} engines: {node: '>=4.0.0'} @@ -5478,6 +5576,10 @@ packages: resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} dev: true + /fast-deep-equal@2.0.1: + resolution: {integrity: sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==} + dev: true + /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true @@ -6791,6 +6893,10 @@ packages: tslib: 2.6.2 dev: true + /is-uuid@1.0.2: + resolution: {integrity: sha512-tCByphFcJgf2qmiMo5hMCgNAquNSagOetVetDvBXswGkNfoyEMvGH1yDlF8cbZbKnbVBr4Y5/rlpMz9umxyBkQ==} + dev: true + /is-weakmap@2.0.1: resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} dev: true @@ -6842,6 +6948,15 @@ packages: - encoding dev: true + /isomorphic-unfetch@3.1.0: + resolution: {integrity: sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==} + dependencies: + node-fetch: 2.7.0 + unfetch: 4.2.0 + transitivePeerDependencies: + - encoding + dev: true + /isomorphic-ws@4.0.1(ws@7.4.2): resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} peerDependencies: @@ -7551,6 +7666,11 @@ packages: engines: {node: '>=6'} hasBin: true + /jsonata@1.8.7: + resolution: {integrity: sha512-tOW2/hZ+nR2bcQZs+0T62LVe5CHaNa3laFFWb/262r39utN6whJGBF7IR2Wq1QXrDbhftolk5gggW8uUJYlBTQ==} + engines: {node: '>= 8'} + dev: true + /jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} optionalDependencies: @@ -7600,6 +7720,30 @@ packages: language-subtag-registry: 0.3.22 dev: true + /launchdarkly-eventsource@1.4.3: + resolution: {integrity: sha512-taeidSNMbF4AuUXjoFStT5CSTknicaKqu+0vrw7gYEMrpQgG74BEzlS0BGYmxW20JdGm2gpm7jtZ542ZG/h8tA==} + engines: {node: '>=0.12.0'} + dependencies: + original: 1.0.2 + dev: true + + /launchdarkly-js-sdk-common@5.1.0: + resolution: {integrity: sha512-0/dUtXpCxd4wgbJHaE0kWwt9Te2WjaiTuHhgNte+x3oCIwB3Odp6caQ4QOkR4Nh9GfjNeBE/WMHFD/s4wrX9cg==} + dependencies: + base64-js: 1.5.1 + fast-deep-equal: 2.0.1 + uuid: 8.3.2 + dev: true + + /launchdarkly-node-client-sdk@3.1.0: + resolution: {integrity: sha512-IYgO+JhTOk3agwfAIb7qzxsT7M8CYAmXSdTxRnzGsJWbXjj+fCZZJDR9IWhTAIhU6KdhCqEmBlasu6KYc+p/Zg==} + engines: {node: '>= 12.0.0'} + dependencies: + launchdarkly-eventsource: 1.4.3 + launchdarkly-js-sdk-common: 5.1.0 + node-localstorage: 1.3.1 + dev: true + /lazyness@1.2.0: resolution: {integrity: sha512-KenL6EFbwxBwRxG93t0gcUyi0Nw0Ub31FJKN1laA4UscdkL1K1AxUd0gYZdcLU3v+x+wcFi4uQKS5hL+fk500g==} engines: {node: '>=6.0.0'} @@ -8144,6 +8288,13 @@ packages: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true + /node-localstorage@1.3.1: + resolution: {integrity: sha512-NMWCSWWc6JbHT5PyWlNT2i8r7PgGYXVntmKawY83k/M0UJScZ5jirb61TLnqKwd815DfBQu+lR3sRw08SPzIaQ==} + engines: {node: '>=0.12'} + dependencies: + write-file-atomic: 1.3.4 + dev: true + /node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} @@ -8382,6 +8533,12 @@ packages: wcwidth: 1.0.1 dev: true + /original@1.0.2: + resolution: {integrity: sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==} + dependencies: + url-parse: 1.5.10 + dev: true + /os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} @@ -8599,18 +8756,18 @@ packages: find-up: 4.1.0 dev: true - /playwright-core@1.42.1: - resolution: {integrity: sha512-mxz6zclokgrke9p1vtdy/COWBH+eOZgYUVVU34C73M+4j4HLlQJHtfcqiqqxpP0o8HhMkflvfbquLX5dg6wlfA==} + /playwright-core@1.38.1: + resolution: {integrity: sha512-tQqNFUKa3OfMf4b2jQ7aGLB8o9bS3bOY0yMEtldtC2+spf8QXG9zvXLTXUeRsoNuxEYMgLYR+NXfAa1rjKRcrg==} engines: {node: '>=16'} hasBin: true dev: true - /playwright@1.42.1: - resolution: {integrity: sha512-PgwB03s2DZBcNRoW+1w9E+VkLBxweib6KTXM0M3tkiT4jVxKSi6PmVJ591J+0u10LUrgxB7dLRbiJqO5s2QPMg==} + /playwright@1.38.1: + resolution: {integrity: sha512-oRMSJmZrOu1FP5iu3UrCx8JEFRIMxLDM0c/3o4bpzU5Tz97BypefWf7TuTNPWeCe279TPal5RtPPZ+9lW/Qkow==} engines: {node: '>=16'} hasBin: true dependencies: - playwright-core: 1.42.1 + playwright-core: 1.38.1 optionalDependencies: fsevents: 2.3.2 dev: true @@ -8816,6 +8973,19 @@ packages: engines: {node: '>=0.6'} dev: true + /query-registry@2.6.0: + resolution: {integrity: sha512-Z5oNq7qH0g96qBTx2jAvS0X71hKP4tETtSJKEl6BdihzYqh9QKiJQBMT7qIQuzxR9lxfiso+aXCFhZ+EcAoppQ==} + engines: {node: '>=12'} + dependencies: + isomorphic-unfetch: 3.1.0 + make-error: 1.3.6 + tiny-lru: 8.0.2 + url-join: 4.0.1 + validate-npm-package-name: 4.0.0 + transitivePeerDependencies: + - encoding + dev: true + /query-string@6.14.1: resolution: {integrity: sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==} engines: {node: '>=6'} @@ -9317,6 +9487,10 @@ packages: setimmediate: 1.0.5 dev: true + /sha-1@1.0.0: + resolution: {integrity: sha512-qjFA/+LdT0Gvu/JcmYTGZMvVy6WXJOWv1KQuY7HvSr2oBrMxA8PnZu2mc1/ZS2EvLMokj7lIeQsNPjkRzXrImw==} + dev: true + /sha.js@2.4.11: resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} hasBin: true @@ -9409,6 +9583,10 @@ packages: is-fullwidth-code-point: 3.0.0 dev: true + /slide@1.1.6: + resolution: {integrity: sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw==} + dev: true + /snake-case@3.0.4: resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} dependencies: @@ -9700,6 +9878,10 @@ packages: ts-interface-checker: 0.1.13 dev: true + /superstruct@0.15.5: + resolution: {integrity: sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==} + dev: true + /supports-color@2.0.0: resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} engines: {node: '>=0.8.0'} @@ -9863,6 +10045,11 @@ packages: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} dev: true + /tiny-lru@8.0.2: + resolution: {integrity: sha512-ApGvZ6vVvTNdsmt676grvCkUCGwzG9IqXma5Z07xJgiC5L7akUMof5U8G2JTI9Rz/ovtVhJBlY6mNhEvtjzOIg==} + engines: {node: '>=6'} + dev: true + /title-case@3.0.3: resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==} dependencies: @@ -10128,6 +10315,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /unfetch@4.2.0: + resolution: {integrity: sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==} + dev: true + /uniq@1.0.1: resolution: {integrity: sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==} dev: true @@ -10189,7 +10380,6 @@ packages: /url-join@4.0.1: resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==} - dev: false /url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} @@ -10235,6 +10425,11 @@ packages: engines: {node: '>= 0.4.0'} dev: true + /uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + dev: true + /uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true @@ -10253,6 +10448,13 @@ packages: convert-source-map: 2.0.0 dev: true + /validate-npm-package-name@4.0.0: + resolution: {integrity: sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + dependencies: + builtins: 5.1.0 + dev: true + /value-or-promise@1.0.12: resolution: {integrity: sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==} engines: {node: '>=12'} @@ -10498,6 +10700,14 @@ packages: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true + /write-file-atomic@1.3.4: + resolution: {integrity: sha512-SdrHoC/yVBPpV0Xq/mUZQIpW2sWXAShb/V4pomcJXh92RuaO+f3UTWItiR3Px+pLnV2PvC2/bfn5cwr5X6Vfxw==} + dependencies: + graceful-fs: 4.2.11 + imurmurhash: 0.1.4 + slide: 1.1.6 + dev: true + /write-file-atomic@4.0.2: resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -10533,6 +10743,19 @@ packages: optional: true dev: true + /ws@7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + /ws@8.13.0: resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} engines: {node: '>=10.0.0'}