diff --git a/.github/actions/setup-node-env/action.yml b/.github/actions/setup-node-env/action.yml index cdd13880c..454dfbdc3 100644 --- a/.github/actions/setup-node-env/action.yml +++ b/.github/actions/setup-node-env/action.yml @@ -17,19 +17,3 @@ runs: - run: pnpm install --frozen-lockfile shell: bash - - # if cypress tests fail _and_ you have an update to the lockfile, you may - # need to do a single run with this uncommented... - # don't forget to check the version. - # i hate cypress. - # - run: pnpm dlx cypress@13.7.1 install --force - # shell: bash - - # Restores cypress binary cache. If the binary is missing, it will be - # downloaded and cached for next time. - # https://docs.cypress.io/guides/continuous-integration/introduction#Caching - - name: Cache Cypress binary - uses: actions/cache@v4 - with: - path: ~/.cache/Cypress - key: cypress-${{ runner.os }}-cypress-${{ hashFiles('pnpm-lock.yaml') }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c69bc9ca0..f7337a9aa 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,6 +28,13 @@ jobs: - run: make ${{ matrix.task }} + - uses: actions/upload-artifact@v4 + if: ${{ !cancelled() && matrix.task == 'e2e' }} + with: + name: playwright-report + path: ./libs/@guardian/libs/playwright-report/ + retention-days: 14 + chromatic: needs: validate uses: ./.github/workflows/chromatic.yml diff --git a/.gitignore b/.gitignore index 9dfa29699..df1548ea6 100644 --- a/.gitignore +++ b/.gitignore @@ -14,8 +14,6 @@ tsconfig.tsbuildinfo # Speed up eslint .eslintcache -**/cypress/screenshots - # wireit cache dirs # https://github.com/google/wireit .wireit @@ -23,5 +21,8 @@ tsconfig.tsbuildinfo # storybook build dirs storybook-static -# cypress stuff -**/cypress/downloads/ +# playwright stuff +**/test-results/ +**/playwright-report/ +**/blob-report/ +**/playwright/.cache/ diff --git a/Makefile b/Makefile index 450358f11..7a9d69e1b 100644 --- a/Makefile +++ b/Makefile @@ -317,6 +317,10 @@ install: check-node-version @guardian/libs\:e2e: env @corepack pnpm --filter @guardian/libs e2e +.PHONY: @guardian/libs\:e2e\:ui +@guardian/libs\:e2e\:ui: env + @corepack pnpm --filter @guardian/libs e2e:ui + .PHONY: @guardian/libs\:fix @guardian/libs\:fix: env @corepack pnpm --filter @guardian/libs fix diff --git a/README.md b/README.md index 845d562c2..dcd77189e 100644 --- a/README.md +++ b/README.md @@ -147,6 +147,7 @@ Project-specific tasks are defined as `scripts` in their `package.json`, and can - `make @guardian/libs:build` - `make @guardian/libs:dev` - `make @guardian/libs:e2e` +- `make @guardian/libs:e2e:ui` - `make @guardian/libs:fix` - `make @guardian/libs:lint` - `make @guardian/libs:test` diff --git a/libs/@guardian/libs/cypress.config.mjs b/libs/@guardian/libs/cypress.config.mjs deleted file mode 100644 index 0bec5a8f5..000000000 --- a/libs/@guardian/libs/cypress.config.mjs +++ /dev/null @@ -1,21 +0,0 @@ -/* eslint-disable import/no-default-export -- that's what cypress likes */ -import { defineConfig } from 'cypress'; -import plugins from './cypress/plugins/index.mjs'; - -export default defineConfig({ - viewportWidth: 1440, - viewportHeight: 768, - video: false, - chromeWebSecurity: false, - retries: { - runMode: 9, - openMode: 0, - }, - defaultCommandTimeout: 5000, - e2e: { - setupNodeEvents(on, config) { - return plugins(on, config); - }, - baseUrl: 'http://localhost:4321/csnx', - }, -}); diff --git a/libs/@guardian/libs/cypress/.eslintrc.json b/libs/@guardian/libs/cypress/.eslintrc.json deleted file mode 100644 index 54dc2443c..000000000 --- a/libs/@guardian/libs/cypress/.eslintrc.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "plugins": ["cypress"], - "env": { - "cypress/globals": true - }, - "extends": ["plugin:cypress/recommended"], - "rules": { - // cypress wants default exports - "import/no-default-export": 0 - } -} diff --git a/libs/@guardian/libs/cypress/e2e/consent-management-platform/fixtures/ccpa.json b/libs/@guardian/libs/cypress/e2e/consent-management-platform/fixtures/ccpa.json deleted file mode 100644 index 458043a1f..000000000 --- a/libs/@guardian/libs/cypress/e2e/consent-management-platform/fixtures/ccpa.json +++ /dev/null @@ -1 +0,0 @@ -{ "ccpa": { "doNotSell": false } } diff --git a/libs/@guardian/libs/cypress/e2e/consent-management-platform/fixtures/tcfv2.json b/libs/@guardian/libs/cypress/e2e/consent-management-platform/fixtures/tcfv2.json deleted file mode 100644 index 4c91fdd54..000000000 --- a/libs/@guardian/libs/cypress/e2e/consent-management-platform/fixtures/tcfv2.json +++ /dev/null @@ -1,569 +0,0 @@ -{ - "tcfv2": { - "consents": { - "1": false, - "2": false, - "3": false, - "4": false, - "5": false, - "6": false, - "7": false, - "8": false, - "9": false, - "10": false - }, - "eventStatus": "cmpuishown", - "vendorConsents": { - "5e37fc3e56a5e60dff4e1981": false, - "5e37fc3e56a5e60dff4e1982": false, - "5e37fc3e56a5e60dff4e1983": false, - "5e37fc3e56a5e60dff4e1984": false, - "5e37fc3e56a5e60dff4e1985": false, - "5e37fc3e56a5e60dff4e1986": false, - "5e37fc3e56a5e60dff4e1987": false, - "5e37fc3e56a5e60dff4e1988": false, - "5e37fc3e56a5e60dff4e1989": false, - "5e37fc3e56a5e60dff4e198a": false, - "5e37fc3e56a5e60dff4e198b": false, - "5e37fc3e56a5e60dff4e198c": false, - "5e37fc3e56a5e60dff4e198e": false, - "5e37fc3e56a5e60dff4e198f": false, - "5e37fc3e56a5e60dff4e1992": false, - "5e37fc3e56a5e60dff4e1993": false, - "5e37fc3e56a5e60dff4e1994": false, - "5e37fc3e56a5e60dff4e1996": false, - "5e37fc3e56a5e60e003a7111": false, - "5e37fc3e56a5e60e003a7112": false, - "5e37fc3e56a5e60e003a7113": false, - "5e37fc3e56a5e60e003a7114": true, - "5e37fc3e56a5e60e003a7115": false, - "5e37fc3e56a5e60e003a7116": false, - "5e37fc3e56a5e60e003a7117": false, - "5e37fc3e56a5e60e003a7118": false, - "5e37fc3e56a5e60e003a7119": false, - "5e37fc3e56a5e60e003a711a": false, - "5e37fc3e56a5e60e003a711b": false, - "5e37fc3e56a5e60e003a711c": false, - "5e37fc3e56a5e60e003a711d": false, - "5e37fc3e56a5e60e003a711e": false, - "5e37fc3e56a5e60e003a711f": false, - "5e37fc3e56a5e60e003a7120": false, - "5e37fc3e56a5e60e003a7122": false, - "5e37fc3e56a5e60e003a7123": false, - "5e37fc3e56a5e60e003a7124": false, - "5e37fc3e56a5e60e003a7125": false, - "5e37fc3e56a5e66147767221": false, - "5e37fc3e56a5e66147767223": false, - "5e37fc3e56a5e66147767224": false, - "5e37fc3e56a5e66147767225": false, - "5e37fc3e56a5e66147767226": false, - "5e37fc3e56a5e66147767227": false, - "5e37fc3e56a5e66147767228": false, - "5e37fc3e56a5e6614776722a": false, - "5e37fc3e56a5e6614776722b": false, - "5e37fc3e56a5e6614776722c": false, - "5e37fc3e56a5e6614776722d": false, - "5e37fc3e56a5e6614776722e": false, - "5e37fc3e56a5e66147767231": false, - "5e37fc3e56a5e66147767232": false, - "5e37fc3e56a5e66147767233": false, - "5e37fc3e56a5e66147767234": false, - "5e37fc3e56a5e66147767235": false, - "5e37fc3e56a5e66147767236": false, - "5e37fc3e56a5e66147767237": false, - "5e37fc3e56a5e66147767238": false, - "5e37fc3e56a5e6615457a521": false, - "5e37fc3e56a5e6615457a522": false, - "5e37fc3e56a5e6615457a523": false, - "5e37fc3e56a5e6615457a524": false, - "5e37fc3e56a5e6615457a525": false, - "5e37fc3e56a5e6615457a526": false, - "5e37fc3e56a5e6615457a527": false, - "5e37fc3e56a5e6615457a528": false, - "5e37fc3e56a5e6615457a529": false, - "5e37fc3e56a5e6615457a52a": false, - "5e37fc3e56a5e6615457a52b": false, - "5e37fc3e56a5e6615457a52c": false, - "5e37fc3e56a5e6615457a52d": false, - "5e37fc3e56a5e6615457a52f": false, - "5e37fc3e56a5e6615457a530": false, - "5e37fc3e56a5e6615457a531": false, - "5e37fc3e56a5e6615457a532": false, - "5e37fc3e56a5e6615457a533": false, - "5e37fc3e56a5e6615502f9c2": false, - "5e37fc3e56a5e6615502f9c3": false, - "5e37fc3e56a5e6615502f9c4": false, - "5e37fc3e56a5e6615502f9c5": true, - "5e37fc3e56a5e6615502f9c7": false, - "5e37fc3e56a5e6615502f9c8": false, - "5e37fc3e56a5e6615502f9c9": false, - "5e37fc3e56a5e6615502f9ca": false, - "5e37fc3e56a5e6615502f9cb": false, - "5e37fc3e56a5e6615502f9cc": false, - "5e37fc3e56a5e6615502f9cd": false, - "5e37fc3e56a5e6615502f9cf": false, - "5e37fc3e56a5e6615502f9d0": false, - "5e37fc3e56a5e6615502f9d1": false, - "5e37fc3e56a5e6615502f9d2": false, - "5e37fc3e56a5e6615502f9d4": false, - "5e37fc3e56a5e6615502f9d5": false, - "5e37fc3e56a5e6615502f9d6": false, - "5e71760b69966540e4554f01": false, - "5e7ac3fae30e7d1bc1ebf5e8": true, - "5e7ced56b8e05c4854221bb3": false, - "5e7ced57b8e05c47d7081588": false, - "5e7ced57b8e05c47d7081589": false, - "5e7ced57b8e05c47d708158a": false, - "5e7ced57b8e05c47d708158b": false, - "5e7ced57b8e05c47d708158c": false, - "5e7ced57b8e05c47d708158d": false, - "5e7ced57b8e05c47d708158e": false, - "5e7ced57b8e05c47d7081590": false, - "5e7ced57b8e05c47d7081591": false, - "5e7ced57b8e05c47d7081592": false, - "5e7ced57b8e05c47e418b737": false, - "5e7ced57b8e05c47e418b738": false, - "5e7ced57b8e05c47e418b73a": false, - "5e7ced57b8e05c47e418b73b": false, - "5e7ced57b8e05c47e418b73c": false, - "5e7ced57b8e05c47e418b73d": false, - "5e7ced57b8e05c47e418b73e": false, - "5e7ced57b8e05c47e418b73f": false, - "5e7ced57b8e05c47e418b740": false, - "5e7ced57b8e05c47e418b741": false, - "5e7ced57b8e05c47e418b742": false, - "5e7ced57b8e05c47e418b743": false, - "5e7ced57b8e05c47e418b745": false, - "5e7ced57b8e05c47e418b746": false, - "5e7ced57b8e05c47e418b747": false, - "5e7ced57b8e05c47e418b748": false, - "5e7ced57b8e05c47e418b749": false, - "5e7ced57b8e05c47e418b74b": false, - "5e7ced57b8e05c47e418b74c": false, - "5e7ced57b8e05c47e418b74d": false, - "5e7ced57b8e05c47e418b74e": false, - "5e7ced57b8e05c47e418b74f": false, - "5e7ced57b8e05c47e418b750": false, - "5e7ced57b8e05c485246ccd7": false, - "5e7ced57b8e05c485246ccd8": false, - "5e7ced57b8e05c485246ccdb": false, - "5e7ced57b8e05c485246ccdc": false, - "5e7ced57b8e05c485246ccdd": false, - "5e7ced57b8e05c485246ccde": false, - "5e7ced57b8e05c485246ccdf": false, - "5e7ced57b8e05c485246cce0": false, - "5e7ced57b8e05c485246cce2": false, - "5e7ced57b8e05c485246cce3": false, - "5e7ced57b8e05c485246cce6": false, - "5e7ced57b8e05c485246cce7": false, - "5e7ced57b8e05c485246cce8": false, - "5e7ced57b8e05c485246cce9": false, - "5e7ced57b8e05c485246ccea": false, - "5e7ced57b8e05c485246cceb": false, - "5e7ced57b8e05c485246ccec": false, - "5e7ced57b8e05c485246cced": false, - "5e7ced57b8e05c485246ccee": false, - "5e7ced57b8e05c485246ccef": false, - "5e7ced57b8e05c485246ccf0": false, - "5e7ced57b8e05c485246ccf2": false, - "5e7ced57b8e05c485246ccf3": true, - "5e7ced57b8e05c485246ccf4": false, - "5e7ced57b8e05c4854221bb4": false, - "5e7ced57b8e05c4854221bb5": false, - "5e7ced57b8e05c4854221bb6": false, - "5e7ced57b8e05c4854221bb7": false, - "5e7ced57b8e05c4854221bb8": false, - "5e7ced57b8e05c4854221bb9": false, - "5e7ced57b8e05c4854221bba": false, - "5e7ced57b8e05c4854221bbb": false, - "5e7ced57b8e05c4854221bbc": false, - "5e7ced57b8e05c4854221bbd": false, - "5e7ced57b8e05c4854221bbf": false, - "5e7ced57b8e05c4854221bc0": false, - "5e7ced57b8e05c4854221bc1": false, - "5e7ced57b8e05c4854221bc3": false, - "5e7ced57b8e05c4854221bc4": false, - "5e7ced57b8e05c4854221bc5": false, - "5e7ced57b8e05c4854221bc6": false, - "5e7ced57b8e05c4854221bc7": false, - "5e7ced57b8e05c4854221bc8": false, - "5e7ced57b8e05c4854221bca": false, - "5e7ced57b8e05c4854221bcb": false, - "5e7ced57b8e05c4854221bcc": false, - "5e7ced57b8e05c4854221bd0": false, - "5e7ced57b8e05c4854221bd1": false, - "5e7ced57b8e05c4854221bd2": false, - "5e7ced57b8e05c4854221bd3": false, - "5e7ced57b8e05c4854221bd4": false, - "5e7ced57b8e05c4854221bd5": false, - "5e7ced57b8e05c4854221bd6": false, - "5e7ced57b8e05c4854221bd7": false, - "5e7ced57b8e05c4854221bd8": false, - "5e7ced57b8e05c5a7d171cd3": false, - "5e7ced57b8e05c5a7d171cd6": false, - "5e7ced57b8e05c5a7d171cd7": false, - "5e7ced57b8e05c5a7d171cd8": false, - "5e7ced57b8e05c5a7d171cd9": false, - "5e7ced57b8e05c5a7d171cda": false, - "5e7ced57b8e05c5a7d171cdb": false, - "5e7ced57b8e05c5a7d171cdc": false, - "5e7ced57b8e05c5a7d171cde": false, - "5e7e1298b8e05c54a85c52d2": false, - "5e865b36b8e05c48537f60a7": false, - "5e865b36b8e05c48537f60a8": false, - "5e865b36b8e05c48537f60a9": false, - "5e865b36b8e05c48537f60aa": false, - "5e865b36b8e05c6f984a37e6": false, - "5e865b36b8e05c6f984a37e7": false, - "5e865b37b8e05c1c467daa8c": false, - "5e865b37b8e05c1c467daa8d": false, - "5e865b37b8e05c1c467daa8e": false, - "5e865b37b8e05c1c467daa8f": false, - "5e865b37b8e05c1c467daa90": true, - "5e865b37b8e05c1c467daa91": false, - "5e865b37b8e05c1c467daa92": false, - "5e865b37b8e05c1c467daa93": false, - "5e865b37b8e05c48537f60ab": false, - "5e865b37b8e05c48537f60ac": false, - "5e865b37b8e05c48537f60ae": false, - "5e865b37b8e05c48537f60af": false, - "5e865b37b8e05c48537f60b1": false, - "5e865b37b8e05c4e491e73a3": false, - "5e865b37b8e05c4e491e73a4": false, - "5e865b37b8e05c4e491e73a5": false, - "5e865b37b8e05c4e491e73a6": false, - "5e865b37b8e05c6f984a37e8": false, - "5e865b37b8e05c6f984a37e9": false, - "5e865b37b8e05c6f984a37ea": false, - "5e865b37b8e05c6f984a37eb": false, - "5e865b37b8e05c6f984a37ec": false, - "5e865b37b8e05c6f984a37ed": false, - "5e865b37b8e05c6f984a37ee": false, - "5e952f6107d9d20c88e7c975": false, - "5e98e7f0b8e05c1c467daaf0": false, - "5e98e7f0b8e05c1c467daaf1": false, - "5e98e7f0b8e05c1c467daaf2": false, - "5e98e7f0b8e05c241a63c54e": false, - "5e98e7f0b8e05c48537f6111": false, - "5e98e7f1b8e05c111d01b462": false, - "5e98e7f1b8e05c1c467daaf3": false, - "5e98e7f1b8e05c1c467daaf4": false, - "5e98e7f1b8e05c241a63c54f": false, - "5e98e7f1b8e05c241a63c550": false, - "5e98e7f1b8e05c241a63c551": false, - "5e98e7f1b8e05c241a63c552": false, - "5e98e7f1b8e05c241a63c553": false, - "5e98e7f1b8e05c48537f6112": false, - "5e98e7f1b8e05c48537f6113": false, - "5e98e7f1b8e05c48537f6114": false, - "5e98e7f1b8e05c48537f6115": false, - "5e98e7f1b8e05c6f984a3839": false, - "5e98e7f1b8e05c6f984a383a": false, - "5eab3d5ab8e05c1c467dab79": false, - "5eab3d5ab8e05c1c467dab7a": false, - "5eab3d5ab8e05c1c467dab7b": false, - "5eab3d5ab8e05c1c467dab7c": false, - "5eab3d5ab8e05c241a63c5db": false, - "5eab3d5ab8e05c2bbe33f398": false, - "5eab3d5ab8e05c2bbe33f399": false, - "5eab3d5ab8e05c2bbe33f39a": false, - "5eab3d5bb8e05c241a63c5de": false, - "5eab3d5bb8e05c241a63c5df": false, - "5eab3d5bb8e05c2bbe33f39b": false, - "5eab3d5bb8e05c2bbe33f39c": false, - "5eab3d5bb8e05c2bbe33f39d": false, - "5eab3d5bb8e05c48537f61a0": false, - "5eab3d5bb8e05c48537f61a1": false, - "5eab3d5bb8e05c6f984a38a4": false, - "5eb559cfb8e05c111d01b4e3": false, - "5eb559cfb8e05c111d01b4e4": false, - "5eb559cfb8e05c2bbe33f3f3": false, - "5eb559cfb8e05c2bbe33f3f4": false, - "5eb559cfb8e05c2bbe33f3f5": false, - "5eb559cfb8e05c6f984a390a": false, - "5eb559d0b8e05c111d01b4e6": false, - "5eb559d0b8e05c111d01b4e7": false, - "5eb559d0b8e05c1c467dabe9": false, - "5eb559d0b8e05c1c467dabea": false, - "5eb559d0b8e05c241a63c64a": false, - "5eb559d0b8e05c241a63c64b": false, - "5eb559d0b8e05c2bbe33f3f6": false, - "5eb559d0b8e05c2bbe33f3f7": false, - "5eb559d0b8e05c48537f6207": false, - "5eb559d0b8e05c48537f6208": false, - "5eb559d0b8e05c48537f6209": false, - "5eb559d0b8e05c48537f620a": false, - "5eb559d0b8e05c6f984a390b": false, - "5eb559d0b8e05c6f984a390c": false, - "5ebee9f5b8e05c2bbe33f490": false, - "5ebee9f5b8e05c2bbe33f491": false, - "5ebee9f5b8e05c43d547d7cf": false, - "5ebee9f5b8e05c43d547d7d0": false, - "5ebee9f5b8e05c43d547d7d1": false, - "5ebee9f5b8e05c43d547d7d2": false, - "5ebee9f5b8e05c53915bbb9c": false, - "5ebee9f5b8e05c53915bbb9d": false, - "5ebee9f5b8e05c6bd60edbeb": false, - "5ed0eb688a76503f1016578f": false, - "5ed6aeb1b8e05c241a63c71e": false, - "5ed6aeb1b8e05c241a63c71f": false, - "5ed6aeb1b8e05c4a1e720f3b": false, - "5ed6aeb2b8e05c241a63c720": false, - "5ed6aeb2b8e05c241a63c721": false, - "5ed6aeb2b8e05c2bbe33f4fa": false, - "5ed6aeb2b8e05c4a06748dc9": false, - "5ed6aeb2b8e05c4a06748dca": false, - "5ed6aeb2b8e05c4a06748dcb": false, - "5ed6aeb2b8e05c4a06748dcc": false, - "5ed6aeb2b8e05c4a1160fe91": false, - "5ed6aeb2b8e05c4a1160fe92": false, - "5ed6aeb2b8e05c4a1160fe93": false, - "5ed6aeb2b8e05c4a1e720f3d": false, - "5ed6aeb2b8e05c4a1e720f3f": false, - "5ed6aeb2b8e05c4a2002f43b": false, - "5ed8c49c4b8ce4571c7ad801": false, - "5ede3c3d877afa59e3baa1a4": true, - "5edf9a821dc4e95986b66df4": false, - "5ee15bc6b8e05c164c398ae3": false, - "5ee15bc6b8e05c164d21c76b": false, - "5ee15bc6b8e05c164d21c76c": false, - "5ee15bc7b8e05c16353f5b9b": false, - "5ee15bc7b8e05c16366599cb": false, - "5ee15bc7b8e05c16366599cc": false, - "5ee15bc7b8e05c16366599cd": false, - "5ee15bc7b8e05c164c398ae4": false, - "5ee15bc7b8e05c164f6f8fee": false, - "5ee15bc7b8e05c164f6f8fef": false, - "5ee15bc7b8e05c164f6f8ff0": false, - "5ee34ea4b8e05c16353f5bb7": false, - "5ee34ea4b8e05c16366599e8": false, - "5ee34ea4b8e05c164d21c78a": false, - "5ee34ea5b8e05c16353f5bb8": false, - "5ee34ea5b8e05c16366599e9": false, - "5ee34ea5b8e05c164d21c78b": false, - "5ee34ea5b8e05c164d21c78c": false, - "5ee34ea5b8e05c164e3b2060": false, - "5ee34ea5b8e05c164e3b2061": false, - "5ee34ea5b8e05c164f6f8ffe": false, - "5eec8924b8e05c69921d98cf": false, - "5eec8924b8e05c699567f398": false, - "5eec8924b8e05c69980ea9d2": false, - "5eec8924b8e05c69980ea9d3": false, - "5eec8925b8e05c699f3a0af4": false, - "5eec8925b8e05c699f3a0af5": false, - "5ef5c3a4b8e05c69980eaa58": false, - "5ef5c3a4b8e05c69980eaa59": false, - "5ef5c3a4b8e05c699f3a0b81": false, - "5ef5c3a5b8e05c699567f426": false, - "5ef5c3a5b8e05c69980eaa5a": false, - "5ef5c3a5b8e05c69980eaa5b": false, - "5ef5c3a5b8e05c699a65ccc4": false, - "5ef5c3a5b8e05c699f3a0b84": false, - "5ef5c3a5b8e05c699f3a0b85": false, - "5efefe24b8e05c109b4949c8": false, - "5efefe24b8e05c2e742a3a16": false, - "5efefe25b8e05c0652669937": false, - "5efefe25b8e05c0652669938": false, - "5efefe25b8e05c06542b2a77": false, - "5efefe25b8e05c06542b2a79": false, - "5efefe25b8e05c109b4949c9": false, - "5efefe25b8e05c109b4949ca": false, - "5efefe25b8e05c109c2b8324": false, - "5efefe25b8e05c109c2b8325": false, - "5efefe25b8e05c2e742a3a17": false, - "5efefe25b8e05c2e742a3a18": false, - "5eff0d77969bfa03746427eb": false, - "5f0838a5b8e05c065164a384": false, - "5f0838a5b8e05c065164a385": false, - "5f0838a5b8e05c06537897af": false, - "5f0838a5b8e05c06537897b0": false, - "5f0838a5b8e05c06537897b1": false, - "5f0838a5b8e05c06542b2b37": false, - "5f0838a5b8e05c06542b2b38": false, - "5f0838a5b8e05c109c2b8404": false, - "5f0838a5b8e05c109c2b8405": false, - "5f0838a5b8e05c2e742a3aa7": false, - "5f0f39014effda6e8bbd2006": true, - "5f117325b8e05c065164a42c": false, - "5f117325b8e05c0653789861": false, - "5f117326b8e05c065164a42d": false, - "5f117326b8e05c065164a42e": false, - "5f117326b8e05c065164a42f": false, - "5f117326b8e05c0652669a8a": false, - "5f117326b8e05c109c2b84d1": false, - "5f117326b8e05c4ca16c9c78": false, - "5f117326b8e05c4ca16c9c79": false, - "5f199c302425a33f3f090f51": false, - "5f1aada4b8e05c306c0597d5": false, - "5f1aada4b8e05c306e139f00": false, - "5f1aada5b8e05c3057240f2c": false, - "5f1aada5b8e05c306c0597d6": false, - "5f1aada5b8e05c306d724975": false, - "5f1aada5b8e05c306e139f01": false, - "5f1aada6b8e05c30686fd6e1": false, - "5f1aada6b8e05c30686fd6e2": false, - "5f1aada6b8e05c306c0597d7": false, - "5f1aada6b8e05c306c0597d8": false, - "5f1aada6b8e05c306d724976": false, - "5f1aada6b8e05c306d724977": false, - "5f1aada6b8e05c306e139f02": false, - "5f1b2fbdb8e05c3057240f55": false, - "5f1b2fbdb8e05c3057240f56": false, - "5f1b2fbdb8e05c3057240f59": false, - "5f1b2fbdb8e05c3057240f5a": false, - "5f1b2fbdb8e05c306643bace": false, - "5f1b2fbdb8e05c306643bad1": false, - "5f1b2fbdb8e05c30686fd6f3": false, - "5f1b2fbdb8e05c306d724992": false, - "5f1b2fbdb8e05c306d724995": false, - "5f1b2fbdb8e05c306d724996": false, - "5f1b2fbdb8e05c306e139f24": false, - "5f1b2fbdb8e05c306e139f25": false, - "5f1b2fbdb8e05c306e139f26": false, - "5f1b2fbdb8e05c306f2a1eab": false, - "5f1b2fbdb8e05c306f2a1eac": false, - "5f1b2fbeb8e05c3057240f5e": false, - "5f1b2fbeb8e05c3057240f5f": false, - "5f1b2fbeb8e05c3057240f67": false, - "5f1b2fbeb8e05c3057240f68": false, - "5f1b2fbeb8e05c3057240f6a": false, - "5f1b2fbeb8e05c3057240f6b": false, - "5f1b2fbeb8e05c3057240f74": false, - "5f1b2fbeb8e05c3057240f78": false, - "5f1b2fbeb8e05c3057240f7b": false, - "5f1b2fbeb8e05c3057240f7f": false, - "5f1b2fbeb8e05c3057240f82": false, - "5f1b2fbeb8e05c3057240f86": false, - "5f1b2fbeb8e05c3057240f8a": false, - "5f1b2fbeb8e05c3057240f91": false, - "5f1b2fbeb8e05c3057240f9c": false, - "5f1b2fbeb8e05c3057240fc1": false, - "5f1b2fbeb8e05c306643bad7": false, - "5f1b2fbeb8e05c306643bada": false, - "5f1b2fbeb8e05c306643badb": false, - "5f1b2fbeb8e05c306643badc": false, - "5f1b2fbeb8e05c306643bae4": false, - "5f1b2fbeb8e05c306643baf4": false, - "5f1b2fbeb8e05c30686fd6f6": false, - "5f1b2fbeb8e05c30686fd6fe": false, - "5f1b2fbeb8e05c30686fd708": false, - "5f1b2fbeb8e05c30686fd70a": false, - "5f1b2fbeb8e05c30686fd70b": false, - "5f1b2fbeb8e05c30686fd710": false, - "5f1b2fbeb8e05c30686fd712": false, - "5f1b2fbeb8e05c30686fd716": false, - "5f1b2fbeb8e05c30686fd717": false, - "5f1b2fbeb8e05c30686fd718": false, - "5f1b2fbeb8e05c30686fd71c": false, - "5f1b2fbeb8e05c30686fd723": false, - "5f1b2fbeb8e05c30686fd728": false, - "5f1b2fbeb8e05c30686fd729": false, - "5f1b2fbeb8e05c30686fd731": false, - "5f1b2fbeb8e05c30686fd737": false, - "5f1b2fbeb8e05c30686fd74c": false, - "5f1b2fbeb8e05c30686fd750": false, - "5f1b2fbeb8e05c30686fd76c": false, - "5f1b2fbeb8e05c306c05980b": false, - "5f1b2fbeb8e05c306c059822": false, - "5f1b2fbeb8e05c306c059831": false, - "5f1b2fbeb8e05c306d724998": false, - "5f1b2fbeb8e05c306d72499c": false, - "5f1b2fbeb8e05c306d72499f": false, - "5f1b2fbeb8e05c306d7249a5": false, - "5f1b2fbeb8e05c306d7249a6": false, - "5f1b2fbeb8e05c306d7249ad": false, - "5f1b2fbeb8e05c306d7249be": false, - "5f1b2fbeb8e05c306d7249c5": false, - "5f1b2fbeb8e05c306d7249e0": false, - "5f1b2fbeb8e05c306d7249eb": false, - "5f1b2fbeb8e05c306d724a02": false, - "5f1b2fbeb8e05c306e139f28": false, - "5f1b2fbeb8e05c306e139f2a": false, - "5f1b2fbeb8e05c306e139f2f": false, - "5f1b2fbeb8e05c306e139f30": false, - "5f1b2fbeb8e05c306e139f31": false, - "5f1b2fbeb8e05c306e139f32": false, - "5f1b2fbeb8e05c306e139f33": false, - "5f1b2fbeb8e05c306e139f3f": false, - "5f1b2fbeb8e05c306e139f42": false, - "5f1b2fbeb8e05c306e139f45": false, - "5f1b2fbeb8e05c306e139f46": false, - "5f1b2fbeb8e05c306e139f49": false, - "5f1b2fbeb8e05c306e139f58": false, - "5f1b2fbeb8e05c306e139f59": false, - "5f1b2fbeb8e05c306e139f5e": false, - "5f1b2fbeb8e05c306e139f60": false, - "5f1b2fbeb8e05c306e139f71": false, - "5f1b2fbeb8e05c306f2a1ebe": false, - "5f1b2fbeb8e05c306f2a1ec1": false, - "5f1b2fbeb8e05c306f2a1ec2": false, - "5f1b2fbeb8e05c306f2a1ed5": false, - "5f1b2fbeb8e05c306f2a1edc": false, - "5f1b2fbeb8e05c306f2a1ee3": false, - "5f1b2fbeb8e05c306f2a1eeb": false, - "5f1b2fbeb8e05c306f2a1ef5": false, - "5f1b2fbeb8e05c306f2a1ef6": false, - "5f1b2fbeb8e05c306f2a1ef8": false, - "5f1b2fbeb8e05c306f2a1ef9": false, - "5f203dbeeaaaa8768fd3226a": true, - "5f203dcb1f0dea790562e20f": true, - "5f22bfd82a6b6c1afd1181a9": false, - "5f23e824b8e05c2f262fe350": false, - "5f23e824b8e05c2f285becd5": false, - "5f23e824b8e05c2f291f82e9": false, - "5f23e825b8e05c0ed30ea6ac": false, - "5f23e825b8e05c0ed30ea6ad": false, - "5f23e825b8e05c0ed30ea6ae": false, - "5f23e825b8e05c2f262fe351": true, - "5f23e825b8e05c2f291f82ea": false, - "5f23e825b8e05c2f291f82eb": false, - "5f23e826b8e05c0c0d4fdb8c": false, - "5f23e826b8e05c0c0d4fdb8d": false, - "5f23e826b8e05c0c0d4fdb8e": false, - "5f23e826b8e05c0c0d4fdb8f": true, - "5f23e826b8e05c0ed30ea6af": false, - "5f23e826b8e05c2f262fe352": false, - "5f23e826b8e05c2f262fe353": false, - "5f23e826b8e05c2f285becd6": false, - "5f23e826b8e05c7ed76148b2": false, - "5f2d22a5b8e05c028e5c2e97": false, - "5f2d22a5b8e05c02ba124dc1": false, - "5f2d22a6b8e05c028e5c2e98": false, - "5f2d22a6b8e05c028e5c2e99": false, - "5f2d22a6b8e05c02901c9122": false, - "5f2d22a6b8e05c02aa283b3b": false, - "5f2d22a6b8e05c02aa283b3c": false, - "5f2d22a6b8e05c02aa283b3d": false, - "5f2d22a6b8e05c02aa283b3e": false, - "5f2d22a6b8e05c02b03dbb66": false, - "5f2d22a6b8e05c02b03dbb67": false, - "5f2d22a6b8e05c02b03dbb68": false, - "5f2d22a6b8e05c02b355d543": false, - "5f2d22a6b8e05c02ba124dc2": false, - "5f2d22a6b8e05c02ba124dc3": false, - "5f326a4199a9950b0b61ead6": true, - "5f326a4199a9950b0b61ead7": true, - "5f326a4199a9950b0b61ead8": true, - "5f326a4199a9950b0b61ead9": true, - "5f326a4199a9950b0b61eada": true, - "5f326a4199a9950b0b61eadb": true, - "5f326a4199a9950b0b61eadc": true, - "5f326a4199a9950b0b61eadd": true, - "5f326a4199a9950b0b61eade": true, - "5f326a4199a9950b0b61eadf": true, - "5f326b2855f5850a8433045c": true, - "5f326b2855f5850a8433045d": true, - "5f326b2855f5850a8433045e": true, - "5f326b2855f5850a8433045f": true, - "5f326b2855f5850a84330460": true, - "5f326b7fc2fe871f29d22087": true, - "5f326babf5cc461e398ca050": true, - "5f326bc846f6aa0a6c6a7fd1": true, - "5f326bdf9e28e61e74fae8ca": true, - "5f342be64467cf0b10e49501": true, - "5f342be64467cf0b10e49502": true, - "5f34f21b31798240f4cefe2e": true, - "5f34f23d793b7225ee6c170e": true - } - } -} diff --git a/libs/@guardian/libs/cypress/e2e/consent-management-platform/sourcepoint-aus.cy.js b/libs/@guardian/libs/cypress/e2e/consent-management-platform/sourcepoint-aus.cy.js deleted file mode 100644 index 6c644f4e1..000000000 --- a/libs/@guardian/libs/cypress/e2e/consent-management-platform/sourcepoint-aus.cy.js +++ /dev/null @@ -1,85 +0,0 @@ -import 'cypress-wait-until'; -import { - ACCOUNT_ID, - ENDPOINT, - PRIVACY_MANAGER_AUSTRALIA, -} from './fixtures/sourcepointConfig'; - -const iframeMessage = `[id^="sp_message_iframe_"]`; -const iframePrivacyManager = `#sp_message_iframe_${PRIVACY_MANAGER_AUSTRALIA}`; - -// TODO add checkbox in UI, default to production -const url = `/cmp-test-page#aus`; - -const personalisedAdvertisingIs = (boolean) => { - cy.get('[data-personalised-advertising]').should( - 'have.attr', - 'data-personalised-advertising', - boolean.toString(), - ); -}; - -describe('Window', () => { - it('has the guCmpHotFix object', () => { - cy.visit(url); - cy.window().should('have.property', 'guCmpHotFix'); - }); - - it('has correct config params', () => { - cy.visit(url); - cy.window() - .its('_sp_.config') - .then((spConfig) => { - expect(spConfig.accountId).equal(ACCOUNT_ID); - expect(spConfig.baseEndpoint).equal(ENDPOINT); - }); - }); -}); - -describe('Document', () => { - it('should have the Sourcepoint iframe', () => { - cy.visit(url); - cy.get('iframe').should('be.visible').get(iframeMessage); - }); - - it('should have the correct script URL', () => { - cy.visit(url); - cy.get('script#sourcepoint-lib').should( - 'have.attr', - 'src', - ENDPOINT + '/unified/wrapperMessagingWithoutDetection.js', - ); - }); -}); - -describe('Interaction', () => { - it('should have personalised advertising set to true by default', () => { - cy.visit(url); - cy.setCookie('ccpaApplies', 'true'); - personalisedAdvertisingIs(true); - }); - - it('Should click continue to dismiss the banner', () => { - cy.visit(url); - cy.setCookie('ccpaApplies', 'true'); - cy.getIframeBody(iframeMessage).find(`button[title="Continue"]`).click(); - }); - - it(`should be able to retract consent`, () => { - cy.visit(url); - cy.setCookie('ccpaApplies', 'true'); - - personalisedAdvertisingIs(true); - - cy.get('[data-cy=pm]').click(); - - cy.getIframeBody(iframePrivacyManager).find('.pm-toggle .off').click(); - - cy.getIframeBody(iframePrivacyManager) - .find('.sp_choice_type_SAVE_AND_EXIT') - .should('be.visible') - .click(); - - personalisedAdvertisingIs(false); - }); -}); diff --git a/libs/@guardian/libs/cypress/e2e/consent-management-platform/sourcepoint-ccpa.cy.js b/libs/@guardian/libs/cypress/e2e/consent-management-platform/sourcepoint-ccpa.cy.js deleted file mode 100644 index ff0b84ae4..000000000 --- a/libs/@guardian/libs/cypress/e2e/consent-management-platform/sourcepoint-ccpa.cy.js +++ /dev/null @@ -1,88 +0,0 @@ -import 'cypress-wait-until'; -import { ENDPOINT, PRIVACY_MANAGER_CCPA } from './fixtures/sourcepointConfig'; - -const iframeMessage = `[id^="sp_message_iframe_"]`; -const iframePrivacyManager = `#sp_message_iframe_${PRIVACY_MANAGER_CCPA}`; - -// TODO add checkbox in UI, default to production -const url = `/cmp-test-page#ccpa`; - -const doNotSellIs = (boolean) => { - cy.get('[data-donotsell]').should( - 'have.attr', - 'data-donotsell', - boolean.toString(), - ); -}; - -describe('Window', () => { - it('has the guCmpHotFix object', () => { - cy.visit(url); - cy.window().should('have.property', 'guCmpHotFix'); - }); - it('has correct config params', () => { - cy.visit(url); - cy.window() - .its('_sp_.config') - .then((spConfig) => { - expect(spConfig.accountId).equal(1257); - expect(spConfig.baseEndpoint).equal(ENDPOINT); - }); - }); -}); - -describe('Document', () => { - it('should have the SP iframe', () => { - cy.visit(url); - cy.get('iframe').should('be.visible').get(iframeMessage); - }); - it('should have the correct script URL', () => { - cy.visit(url); - cy.get('script#sourcepoint-lib').should( - 'have.attr', - 'src', - ENDPOINT + '/unified/wrapperMessagingWithoutDetection.js', - ); - }); -}); - -describe('Interaction', () => { - const buttonTitle = 'Do not sell my personal information'; - - it('should have DNS set to false by default', () => { - cy.visit(url); - doNotSellIs(false); - }); - - it(`should retract consent when clicking "${buttonTitle}"`, () => { - cy.visit(url); - cy.getIframeBody(iframeMessage) - .find(`button[title="${buttonTitle}"]`) - .click(); - - // eslint-disable-next-line cypress/no-unnecessary-waiting -- should we do this? - cy.wait(2000); - - doNotSellIs(true); - }); - - it(`should be able to retract consent`, () => { - cy.visit(url); - - doNotSellIs(false); - - cy.get('[data-cy=pm]').click(); - - cy.getIframeBody(iframePrivacyManager).find('.pm-toggle .off').click(); - - cy.getIframeBody(iframePrivacyManager) - .find('.sp_choice_type_SAVE_AND_EXIT') - .should('be.visible') - .click(); - - // eslint-disable-next-line cypress/no-unnecessary-waiting -- should we do this? - cy.wait(2000); - - doNotSellIs(true); - }); -}); diff --git a/libs/@guardian/libs/cypress/e2e/consent-management-platform/sourcepoint-tcfv2.cy.js b/libs/@guardian/libs/cypress/e2e/consent-management-platform/sourcepoint-tcfv2.cy.js deleted file mode 100644 index 80596a839..000000000 --- a/libs/@guardian/libs/cypress/e2e/consent-management-platform/sourcepoint-tcfv2.cy.js +++ /dev/null @@ -1,137 +0,0 @@ -import { ENDPOINT } from './fixtures/sourcepointConfig'; - -const iframeMessage = `[id^="sp_message_iframe_"]`; -const iframePrivacyManager = '#sp_message_iframe_106842'; - -// TODO add checkbox in UI, default to production -const url = `/cmp-test-page#tcfv2`; - -describe('Window', () => { - it('has the guCmpHotFix object', () => { - cy.visit(url); - cy.window().should('have.property', 'guCmpHotFix'); - }); - it('has correct config params', () => { - cy.visit(url); - cy.window() - .its('_sp_.config') - .then((spConfig) => { - expect(spConfig.accountId).equal(1257); - expect(spConfig.baseEndpoint).equal(ENDPOINT); - }); - }); -}); - -describe('Document', () => { - it('should have the SP iframe', () => { - cy.visit(url); - cy.get('iframe').should('be.visible').get(iframeMessage); - }); - - it('should have the correct script URL', () => { - cy.visit(url); - cy.get('script#sourcepoint-lib').should( - 'have.attr', - 'src', - ENDPOINT + '/unified/wrapperMessagingWithoutDetection.js', - ); - }); -}); - -describe('Interaction', () => { - const buttonTitle = 'Yes, I accept'; - - it(`should give all consents when clicking "${buttonTitle}"`, () => { - cy.visit(url); - cy.setCookie('ccpaApplies', 'false'); - cy.setCookie('gdprApplies', 'true'); - - cy.getIframeBody(iframeMessage) - .find(`button[title="${buttonTitle}"]`) - .click(); - - // eslint-disable-next-line cypress/no-unnecessary-waiting -- should we do this? - cy.wait(2000); - - [(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)].forEach((purpose) => { - cy.get(`[data-purpose="${purpose}"]`).should( - 'have.data', - 'consent', - true, - ); - }); - }); - - it(`should deactivate purpose 1 only`, () => { - cy.visit(url); - cy.setCookie('ccpaApplies', 'false'); - cy.setCookie('gdprApplies', 'true'); - - cy.getIframeBody(iframeMessage) - .find(`button[title="${buttonTitle}"]`) - .click(); - - // eslint-disable-next-line cypress/no-unnecessary-waiting -- should we do this? - cy.wait(2000); - - cy.get('[data-cy=pm]').click(); - - cy.getIframeBody(iframePrivacyManager) - .find(`div[title="Store and/or access information on a device"]`) - .find('span.off') - .click(); - - cy.getIframeBody(iframePrivacyManager) - .find(`button[title="Save and close"]`) - .click(); - - // eslint-disable-next-line cypress/no-unnecessary-waiting -- should we do this? - cy.wait(2000); - - cy.get(`[data-purpose="1"]`) - .should('have.data', 'consent') - .should('equal', false); - - [2, 3, 4, 5, 6, 7, 8, 9, 10, 11].forEach((purpose) => { - cy.get(`[data-purpose="${purpose}"]`) - .should('have.data', 'consent') - .should('equal', true); - }); - }); - - it(`should deactivate all purposes except purpose 1`, () => { - cy.visit(url); - cy.setCookie('ccpaApplies', 'false'); - cy.setCookie('gdprApplies', 'true'); - - cy.getIframeBody(iframeMessage) - .find(`button[title="${buttonTitle}"]`) - .click(); - - cy.get('[data-cy=pm]').click(); - - cy.getIframeBody(iframePrivacyManager) - .find(`div[title="Store and/or access information on a device"]`) - .find('span.on') - .click(); - - cy.getIframeBody(iframePrivacyManager).find(`div.stack-toggles`).click(); - - cy.getIframeBody(iframePrivacyManager) - .find(`button[title="Save and close"]`) - .click(); - - // eslint-disable-next-line cypress/no-unnecessary-waiting -- should we do this? - cy.wait(2000); - - cy.get(`[data-purpose="1"]`) - .should('have.data', 'consent') - .should('equal', true); - - [2, 3, 4, 5, 6, 7, 8, 9, 10, 11].forEach((purpose) => { - cy.get(`[data-purpose="${purpose}"]`) - .should('have.data', 'consent') - .should('equal', false); - }); - }); -}); diff --git a/libs/@guardian/libs/cypress/e2e/consent-management-platform/support/commands.js b/libs/@guardian/libs/cypress/e2e/consent-management-platform/support/commands.js deleted file mode 100644 index 02ab23ab1..000000000 --- a/libs/@guardian/libs/cypress/e2e/consent-management-platform/support/commands.js +++ /dev/null @@ -1,33 +0,0 @@ -// *********************************************** -// This example commands.js shows you how to -// create various custom commands and overwrite -// existing commands. -// -// For more comprehensive examples of custom -// commands please read more here: -// https://on.cypress.io/custom-commands -// *********************************************** - -Cypress.Commands.add('getIframeBody', (selector = '') => { - // get the iframe > document > body - // and retry until the body element is not empty - return ( - cy - .get(`iframe${selector}`) - .its('0.contentDocument.body') - .should('not.be.empty') - // wraps "body" DOM element to allow - // chaining more Cypress commands, like ".find(...)" - // https://on.cypress.io/wrap - .then(cy.wrap) - ); -}); -Cypress.Commands.overwrite('log', (subject, message) => - cy.task('log', message), -); - -// Ignore uncaught exceptions. getConsentState is called repeatedly until __uspapi or __tcfapi is on window -// and throws an exception if it isn't. -Cypress.on('uncaught:exception', () => { - return false; -}); diff --git a/libs/@guardian/libs/cypress/e2e/example.cy.js b/libs/@guardian/libs/cypress/e2e/example.cy.js deleted file mode 100644 index 5f4c34efe..000000000 --- a/libs/@guardian/libs/cypress/e2e/example.cy.js +++ /dev/null @@ -1,5 +0,0 @@ -describe('template spec', () => { - it('passes', () => { - cy.visit('http://localhost:4321/csnx'); - }); -}); diff --git a/libs/@guardian/libs/cypress/plugins/index.mjs b/libs/@guardian/libs/cypress/plugins/index.mjs deleted file mode 100644 index 351e08480..000000000 --- a/libs/@guardian/libs/cypress/plugins/index.mjs +++ /dev/null @@ -1,25 +0,0 @@ -// *********************************************************** -// This example plugins/index.js can be used to load plugins -// -// You can change the location of this file or turn off loading -// the plugins file with the 'pluginsFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/plugins-guide -// *********************************************************** - -// This function is called when a project is opened or re-opened (e.g. due to -// the project's config changing) - -export default (on, config) => { - on('task', { - log(message) { - console.log(message); - return null; - }, - }); - - config.env = { ...config.env, ...process.env }; - - return config; -}; diff --git a/libs/@guardian/libs/cypress/support/e2e.js b/libs/@guardian/libs/cypress/support/e2e.js deleted file mode 100644 index 8fea77b7e..000000000 --- a/libs/@guardian/libs/cypress/support/e2e.js +++ /dev/null @@ -1,17 +0,0 @@ -// *********************************************************** -// This example support/index.js is processed and -// loaded automatically before your test files. -// -// This is a great place to put global configuration and -// behavior that modifies Cypress. -// -// You can change the location of this file or turn off -// automatically serving support files with the -// 'supportFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/configuration -// *********************************************************** - -// Import commands.js using ES2015 syntax: -import '../e2e/consent-management-platform/support/commands'; diff --git a/libs/@guardian/libs/jest.config.js b/libs/@guardian/libs/jest.config.js index ee0e36782..b0d5d4e5d 100644 --- a/libs/@guardian/libs/jest.config.js +++ b/libs/@guardian/libs/jest.config.js @@ -7,6 +7,7 @@ const config = { ...baseConfig, displayName: '@guardian/libs', testEnvironment: './jest.testEnvironment.js', + testMatch: ['/src/**/*.(spec|test).[jt]s?(x)'], }; export default config; diff --git a/libs/@guardian/libs/package.json b/libs/@guardian/libs/package.json index 12e98d8e8..68028e991 100644 --- a/libs/@guardian/libs/package.json +++ b/libs/@guardian/libs/package.json @@ -19,17 +19,16 @@ "build": "wireit", "dev": "jest --watch", "e2e": "wireit", + "e2e:ui": "wireit", "fix": "wireit", "lint": "wireit", "test": "wireit", "verify-dist": "wireit" }, "devDependencies": { + "@playwright/test": "1.44.1", "@types/jest": "29.5.8", "@types/wcag-contrast": "3.0.3", - "cypress": "13.10.0", - "cypress-wait-until": "3.0.1", - "eslint-plugin-cypress": "3.3.0", "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", "jest-fetch-mock": "3.0.3", @@ -69,13 +68,21 @@ ] }, "e2e": { - "command": "cypress run --headless", + "command": "pnpm exec playwright install chromium && playwright test", + "dependencies": [ + "../../../apps/github-pages:start" + ], "files": [ - "!(dist)/**", - "!(.eslintcache)", - "!(jest*)" + "**", + "!(dist|playwright-report|test-results)/**", + "!.eslintcache", + "!jest*", + "!*.md" ], - "output": [], + "output": [] + }, + "e2e:ui": { + "command": "pnpm exec playwright install chromium && playwright test --ui", "dependencies": [ "../../../apps/github-pages:start" ] diff --git a/libs/@guardian/libs/playwright.config.js b/libs/@guardian/libs/playwright.config.js new file mode 100644 index 000000000..b56e63b4b --- /dev/null +++ b/libs/@guardian/libs/playwright.config.js @@ -0,0 +1,24 @@ +import { defineConfig, devices } from '@playwright/test'; + +/** + * See https://playwright.dev/docs/test-configuration. + */ +// eslint-disable-next-line import/no-default-export -- playwright wants this +export default defineConfig({ + testDir: './playwright', + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 1 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: 'html', + use: { + baseURL: 'http://localhost:4321/csnx', + trace: 'on-first-retry', + }, + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], +}); diff --git a/libs/@guardian/libs/playwright/e2e/sourcepoint-aus.spec.js b/libs/@guardian/libs/playwright/e2e/sourcepoint-aus.spec.js new file mode 100644 index 000000000..32503ea64 --- /dev/null +++ b/libs/@guardian/libs/playwright/e2e/sourcepoint-aus.spec.js @@ -0,0 +1,113 @@ +import { expect, test } from '@playwright/test'; +import { + ACCOUNT_ID, + ENDPOINT, + PRIVACY_MANAGER_AUSTRALIA, +} from '../fixtures/sourcepointConfig'; + +const iframePrivacyManager = `#sp_message_iframe_${PRIVACY_MANAGER_AUSTRALIA}`; + +const url = `http://localhost:4321/csnx/cmp-test-page#aus`; + +async function personalisedAdvertisingIs(page, boolean) { + await page.locator('[data-personalised-advertising]').waitFor({ + state: 'attached', + timeout: 2000, + }); + await page.waitForFunction( + (bool) => + document + .querySelector('[data-personalised-advertising]') + .getAttribute('data-personalised-advertising') === bool.toString(), + boolean, + { timeout: 2000 }, + ); + + const attributeValue = await page + .locator('[data-personalised-advertising]') + .getAttribute('data-personalised-advertising'); + expect(attributeValue).toBe(boolean.toString()); +} + +test.describe('Window', () => { + test('has the guCmpHotFix object', async ({ page }) => { + await page.goto(url); + await page.waitForLoadState('networkidle'); + const guCmpHotFix = await page.evaluate(() => { + return window.guCmpHotFix; + }); + expect(guCmpHotFix).toBeDefined(); + }); + + test('has correct config params', async ({ page }) => { + await page.goto(url); + await page.waitForLoadState('networkidle'); + const spConfig = await page.evaluate(() => { + return window._sp_.config; + }); + expect(spConfig.accountId).toBe(ACCOUNT_ID); + expect(spConfig.baseEndpoint).toBe(ENDPOINT); + }); +}); + +test.describe('Document', () => { + test('should have the Sourcepoint iframe', async ({ page }) => { + await page.goto(url); + const iframe = page + .frameLocator('iframe[title="SP Consent Message"]') + .locator('.message-overlay'); + await expect(iframe).toBeVisible({ timeout: 10000 }); + }); + test('should have the correct script URL', async ({ page }) => { + await page.goto(url); + const script = page.locator('script[id="sourcepoint-lib"]'); + await expect(script).toHaveAttribute( + 'src', + ENDPOINT + '/unified/wrapperMessagingWithoutDetection.js', + ); + }); +}); +test.describe('Interaction', () => { + test('should have personalised advertising set to true by default', async ({ + page, + }) => { + await page.goto(url); + await page + .context() + .addCookies([{ name: 'ccpaApplies', value: 'true', url }]); + await personalisedAdvertisingIs(page, true); + }); + + test('Should click continue to dismiss the banner', async ({ page }) => { + await page.goto(url); + await page + .context() + .addCookies([{ name: 'ccpaApplies', value: 'true', url }]); + await page + .frameLocator('iframe[title="SP Consent Message"]') + .locator('[aria-label="Continue"]') + .click(); + }); + + test('should be able to retract consent', async ({ page }) => { + await page.goto(url); + await page + .context() + .addCookies([{ name: 'ccpaApplies', value: 'true', url }]); + + await personalisedAdvertisingIs(page, true); + + await page + .frameLocator('iframe[title="SP Consent Message"]') + .locator('[aria-label="Continue"]') + .click(); + + await page.locator('[data-cy=pm]').click(); + + const privacyManagerIframe = page.frameLocator(iframePrivacyManager); + await privacyManagerIframe.locator('.pm-toggle .off').click(); + await privacyManagerIframe.locator('.sp_choice_type_SAVE_AND_EXIT').click(); + + await personalisedAdvertisingIs(page, false); + }); +}); diff --git a/libs/@guardian/libs/playwright/e2e/sourcepoint-ccpa.spec.js b/libs/@guardian/libs/playwright/e2e/sourcepoint-ccpa.spec.js new file mode 100644 index 000000000..d621b061d --- /dev/null +++ b/libs/@guardian/libs/playwright/e2e/sourcepoint-ccpa.spec.js @@ -0,0 +1,117 @@ +import { expect, test } from '@playwright/test'; +import { + ACCOUNT_ID, + ENDPOINT, + PRIVACY_MANAGER_CCPA, +} from '../fixtures/sourcepointConfig'; + +const iframePrivacyManager = `#sp_message_iframe_${PRIVACY_MANAGER_CCPA}`; + +const url = `http://localhost:4321/csnx/cmp-test-page#ccpa`; + +async function doNotSellIs(page, expectedValue) { + await page.locator('[data-donotsell]').waitFor({ + state: 'attached', + timeout: 2000, + }); + await page.waitForFunction( + (expectedValue) => + document + .querySelector('[data-donotsell]') + .getAttribute('data-donotsell') === expectedValue.toString(), + expectedValue, + { timeout: 2000 }, + ); + const attributeValue = await page + .locator('[data-donotsell]') + .getAttribute('data-donotsell'); + expect(attributeValue).toBe(expectedValue.toString()); +} + +async function getIframeBody(page, selector) { + const iframeElement = await page.locator(`iframe${selector}`).elementHandle(); + const frame = await iframeElement.contentFrame(); + const iframeBody = await frame.$('body'); + + if (!iframeBody) { + throw new Error('Iframe body is empty'); + } + + return frame; +} + +test.describe('Window', () => { + test('has the guCmpHotFix object', async ({ page }) => { + await page.goto(url); + await page.waitForLoadState('networkidle'); + const guCmpHotFix = await page.evaluate(() => { + return window.guCmpHotFix; + }); + expect(guCmpHotFix).toBeDefined(); + }); + + test('has correct config params', async ({ page }) => { + await page.goto(url); + await page.waitForLoadState('networkidle'); + const spConfig = await page.evaluate(() => window._sp_.config); + expect(spConfig.accountId).toBe(ACCOUNT_ID); + expect(spConfig.baseEndpoint).toBe(ENDPOINT); + }); +}); + +test.describe('Document', () => { + test('should have the SP iframe', async ({ page }) => { + await page.goto(url); + const iframe = page + .frameLocator('iframe[title="SP Consent Message"]') + .getByLabel('Do not sell my personal'); + await expect(iframe).toBeVisible({ timeout: 3000 }); + }); + + test('should have the correct script URL', async ({ page }) => { + await page.goto(url); + const scriptSrc = await page.getAttribute('script#sourcepoint-lib', 'src'); + expect(scriptSrc).toBe( + `${ENDPOINT}/unified/wrapperMessagingWithoutDetection.js`, + ); + }); +}); + +test.describe('Interaction', () => { + const buttonTitle = 'Do not sell my personal information'; + + test('should have DNS set to false by default', async ({ page }) => { + await page.goto(url); + await doNotSellIs(page, false); + }); + + test(`should retract consent when clicking "${buttonTitle}"`, async ({ + page, + }) => { + await page.goto(url); + + await page + .frameLocator('iframe[title="SP Consent Message"]') + .getByLabel('Do not sell my personal') + .click(); + + await doNotSellIs(page, true); + }); + + test(`should be able to retract consent`, async ({ page }) => { + await page.goto(url); + + await doNotSellIs(page, false); + + await page.click('[data-cy=pm]'); + + const privacyManagerIframe = await getIframeBody( + page, + iframePrivacyManager, + ); + await privacyManagerIframe.click('.pm-toggle .off'); + await privacyManagerIframe.click('.sp_choice_type_SAVE_AND_EXIT'); + + await doNotSellIs(page, true); + }); +}); diff --git a/libs/@guardian/libs/playwright/e2e/sourcepoint-tcfv2.spec.js b/libs/@guardian/libs/playwright/e2e/sourcepoint-tcfv2.spec.js new file mode 100644 index 000000000..42e7c742a --- /dev/null +++ b/libs/@guardian/libs/playwright/e2e/sourcepoint-tcfv2.spec.js @@ -0,0 +1,176 @@ +import { expect, test } from '@playwright/test'; +import { ACCOUNT_ID, ENDPOINT } from '../fixtures/sourcepointConfig'; + +const iframeMessage = `[id^="sp_message_iframe_"]`; +const iframePrivacyManager = '#sp_message_iframe_106842'; + +const url = `http://localhost:4321/csnx/cmp-test-page#tcfv2`; + +async function getIframeBody(page, selector) { + const iframeElement = await page.locator(`iframe${selector}`).elementHandle(); + const frame = await iframeElement.contentFrame(); + const iframeBody = await frame.locator('body'); + + if (!iframeBody) { + throw new Error('Iframe body is empty'); + } + + return frame; +} +test.describe('Window', () => { + test('has the guCmpHotFix object', async ({ page }) => { + await page.goto(url); + await page.waitForLoadState('networkidle'); + const guCmpHotFix = await page.evaluate(() => { + return window.guCmpHotFix; + }); + expect(guCmpHotFix).toBeDefined(); + }); + + test('has correct config params', async ({ page }) => { + await page.goto(url); + await page.waitForLoadState('networkidle'); + const spConfig = await page.evaluate(() => { + return window._sp_.config; + }); + expect(spConfig.accountId).toBe(ACCOUNT_ID); + expect(spConfig.baseEndpoint).toBe(ENDPOINT); + }); +}); + +test.describe('Document', () => { + test('should have the Sourcepoint iframe', async ({ page }) => { + await page.goto(url); + await page.waitForLoadState('networkidle'); + const iframe = page + .frameLocator('iframe[title="The Guardian consent message"]') + .locator('.message-overlay'); + await expect(iframe).toBeVisible({ timeout: 3000 }); + }); + test('should have the correct script URL', async ({ page }) => { + await page.goto(url); + const script = page.locator('script[id="sourcepoint-lib"]'); + await expect(script).toHaveAttribute( + 'src', + ENDPOINT + '/unified/wrapperMessagingWithoutDetection.js', + ); + }); +}); +test.describe('Interaction', () => { + const buttonTitle = 'Yes, I accept'; + + test(`should give all consents when clicking "${buttonTitle}"`, async ({ + page, + }) => { + await page.goto(url); + await page.context().addCookies([ + { name: 'ccpaApplies', value: 'false', url }, + { name: 'gdprApplies', value: 'true', url }, + ]); + + const iframe = await getIframeBody(page, iframeMessage); + await iframe.click(`button[title="${buttonTitle}"]`); + + await page.waitForTimeout(2000); + + for (const purpose of [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) { + const consent = await page.getAttribute( + `[data-purpose="${purpose}"]`, + 'data-consent', + ); + expect(consent).toBe('true'); + } + }); + + test(`should deactivate purpose 1 only`, async ({ page }) => { + await page.goto(url); + await page.context().addCookies([ + { name: 'ccpaApplies', value: 'false', url }, + { name: 'gdprApplies', value: 'true', url }, + ]); + + const iframe = await getIframeBody(page, iframeMessage); + await iframe.click(`button[title="${buttonTitle}"]`); + + await page.waitForTimeout(2000); + + await page.click('[data-cy=pm]'); + + const privacyManagerIframe = await getIframeBody( + page, + iframePrivacyManager, + ); + await privacyManagerIframe.click( + 'div[title="Store and/or access information on a device"] span.off', + ); + await privacyManagerIframe.click('button[title="Save and close"]'); + + await page.waitForFunction( + () => + document + .querySelector(`[data-purpose="1"]`) + .getAttribute('data-consent') === 'false', + ); + + const consent = await page.getAttribute( + `[data-purpose="1"]`, + 'data-consent', + ); + expect(consent).toBe('false'); + + for (const purpose of [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) { + const consent = await page.getAttribute( + `[data-purpose="${purpose}"]`, + 'data-consent', + ); + expect(consent).toBe('true'); + } + }); + + test(`should deactivate all purposes except purpose 1`, async ({ page }) => { + await page.goto(url); + await page.context().addCookies([ + { name: 'ccpaApplies', value: 'false', url }, + { name: 'gdprApplies', value: 'true', url }, + ]); + + const iframe = await getIframeBody(page, iframeMessage); + await iframe.click(`button[title="${buttonTitle}"]`); + + await page.click('[data-cy=pm]'); + + const privacyManagerIframe = await getIframeBody( + page, + iframePrivacyManager, + ); + await privacyManagerIframe.click( + 'div[title="Store and/or access information on a device"] span.on', + ); + await page + .frameLocator('iframe[title="SP Consent Message"]') + .getByRole('button', { name: 'Off' }) + .click(); + await privacyManagerIframe.click('button[title="Save and close"]'); + + await page.waitForFunction( + () => + document + .querySelector(`[data-purpose="2"]`) + .getAttribute('data-consent') === 'false', + ); + + const consent = await page.getAttribute( + `[data-purpose="1"]`, + 'data-consent', + ); + expect(consent).toBe('true'); + + for (const purpose of [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) { + const consent = await page.getAttribute( + `[data-purpose="${purpose}"]`, + 'data-consent', + ); + expect(consent).toBe('false'); + } + }); +}); diff --git a/libs/@guardian/libs/playwright/example.spec.js b/libs/@guardian/libs/playwright/example.spec.js new file mode 100644 index 000000000..72e433d92 --- /dev/null +++ b/libs/@guardian/libs/playwright/example.spec.js @@ -0,0 +1,6 @@ +import { expect, test } from '@playwright/test'; + +test('has title CMP Test Page', async ({ page }) => { + await page.goto('http://localhost:4321/csnx/cmp-test-page#tcfv2'); + await expect(page).toHaveTitle(/CMP Test Page/); +}); diff --git a/libs/@guardian/libs/cypress/e2e/consent-management-platform/fixtures/sourcepointConfig.js b/libs/@guardian/libs/playwright/fixtures/sourcepointConfig.js similarity index 100% rename from libs/@guardian/libs/cypress/e2e/consent-management-platform/fixtures/sourcepointConfig.js rename to libs/@guardian/libs/playwright/fixtures/sourcepointConfig.js diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 342685b3d..9ae6f6f0c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -497,21 +497,15 @@ importers: libs/@guardian/libs: devDependencies: + '@playwright/test': + specifier: 1.44.1 + version: 1.44.1 '@types/jest': specifier: 29.5.8 version: 29.5.8 '@types/wcag-contrast': specifier: 3.0.3 version: 3.0.3 - cypress: - specifier: 13.10.0 - version: 13.10.0 - cypress-wait-until: - specifier: 3.0.1 - version: 3.0.1 - eslint-plugin-cypress: - specifier: 3.3.0 - version: 3.3.0(eslint@8.57.0) jest: specifier: 29.7.0 version: 29.7.0(@types/node@20.12.11) @@ -855,7 +849,7 @@ packages: engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0} dependencies: ci-info: 4.0.0 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.5 dlv: 1.1.3 dset: 3.1.3 is-docker: 3.0.0 @@ -931,7 +925,7 @@ packages: '@babel/traverse': 7.24.6 '@babel/types': 7.24.6 convert-source-map: 2.0.0 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.5 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -1025,7 +1019,7 @@ packages: '@babel/core': 7.24.0 '@babel/helper-compilation-targets': 7.24.6 '@babel/helper-plugin-utils': 7.24.5 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.5 lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -1039,7 +1033,7 @@ packages: '@babel/core': 7.24.0 '@babel/helper-compilation-targets': 7.24.6 '@babel/helper-plugin-utils': 7.24.5 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.5 lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -2273,7 +2267,7 @@ packages: '@babel/helper-split-export-declaration': 7.24.6 '@babel/parser': 7.24.6 '@babel/types': 7.24.6 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.5 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -2552,39 +2546,6 @@ packages: dev: true optional: true - /@cypress/request@3.0.1: - resolution: {integrity: sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ==} - engines: {node: '>= 6'} - dependencies: - aws-sign2: 0.7.0 - aws4: 1.12.0 - caseless: 0.12.0 - combined-stream: 1.0.8 - extend: 3.0.2 - forever-agent: 0.6.1 - form-data: 2.3.3 - http-signature: 1.3.6 - is-typedarray: 1.0.0 - isstream: 0.1.2 - json-stringify-safe: 5.0.1 - mime-types: 2.1.35 - performance-now: 2.1.0 - qs: 6.10.4 - safe-buffer: 5.2.1 - tough-cookie: 4.1.3 - tunnel-agent: 0.6.0 - uuid: 8.3.2 - dev: true - - /@cypress/xvfb@1.2.4(supports-color@8.1.1): - resolution: {integrity: sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==} - dependencies: - debug: 3.2.7(supports-color@8.1.1) - lodash.once: 4.1.1 - transitivePeerDependencies: - - supports-color - dev: true - /@discoveryjs/json-ext@0.5.7: resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} @@ -3137,7 +3098,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.5 espree: 9.6.1 globals: 13.24.0 ignore: 5.3.1 @@ -3241,7 +3202,7 @@ packages: engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.5 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -3820,6 +3781,14 @@ packages: requiresBuild: true optional: true + /@playwright/test@1.44.1: + resolution: {integrity: sha512-1hZ4TNvD5z9VuhNJ/walIjvMVvYkZKf71axoF/uiAqpntQJXpG64dlXhoDXE3OczPuTuvjf/M5KWFg5VAVUS3Q==} + engines: {node: '>=16'} + hasBin: true + dependencies: + playwright: 1.44.1 + dev: true + /@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.11)(react@18.2.0): resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} peerDependencies: @@ -4697,7 +4666,7 @@ packages: typescript: '>= 4.x' webpack: '>= 4' dependencies: - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.5 endent: 2.1.0 find-cache-dir: 3.3.2 flat-cache: 3.2.0 @@ -4843,7 +4812,7 @@ packages: vite: ^5.0.0 dependencies: '@sveltejs/vite-plugin-svelte': 3.0.2(svelte@4.2.12)(vite@5.2.12) - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.5 svelte: 4.2.12 vite: 5.2.12(@types/node@20.12.11) transitivePeerDependencies: @@ -4858,7 +4827,7 @@ packages: vite: ^5.0.0 dependencies: '@sveltejs/vite-plugin-svelte-inspector': 2.0.0(@sveltejs/vite-plugin-svelte@3.0.2)(svelte@4.2.12)(vite@5.2.12) - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.5 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.8 @@ -5357,14 +5326,6 @@ packages: '@types/mime': 3.0.4 '@types/node': 20.12.11 - /@types/sinonjs__fake-timers@8.1.1: - resolution: {integrity: sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==} - dev: true - - /@types/sizzle@2.3.8: - resolution: {integrity: sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==} - dev: true - /@types/stack-utils@2.0.3: resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} dev: true @@ -5398,14 +5359,6 @@ packages: '@types/yargs-parser': 21.0.3 dev: true - /@types/yauzl@2.10.3: - resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - requiresBuild: true - dependencies: - '@types/node': 20.12.11 - dev: true - optional: true - /@typescript-eslint/eslint-plugin@7.11.0(@typescript-eslint/parser@7.11.0)(eslint@8.56.0)(typescript@5.3.3): resolution: {integrity: sha512-P+qEahbgeHW4JQ/87FuItjBj8O3MYv5gELDzr8QaQ7fsll1gSMTYb6j87MYyxwf3DtD7uGFB9ShwgmCJB5KmaQ==} engines: {node: ^18.18.0 || >=20.0.0} @@ -5480,7 +5433,7 @@ packages: '@typescript-eslint/types': 7.11.0 '@typescript-eslint/typescript-estree': 7.11.0(typescript@5.3.3) '@typescript-eslint/visitor-keys': 7.11.0 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.5 eslint: 8.56.0 typescript: 5.3.3 transitivePeerDependencies: @@ -5503,7 +5456,7 @@ packages: '@typescript-eslint/types': 7.11.0 '@typescript-eslint/typescript-estree': 7.11.0(typescript@5.3.3) '@typescript-eslint/visitor-keys': 7.11.0 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.5 eslint: 8.57.0 typescript: 5.3.3 transitivePeerDependencies: @@ -5538,7 +5491,7 @@ packages: dependencies: '@typescript-eslint/typescript-estree': 7.11.0(typescript@5.3.3) '@typescript-eslint/utils': 7.11.0(eslint@8.56.0)(typescript@5.3.3) - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.5 eslint: 8.56.0 ts-api-utils: 1.3.0(typescript@5.3.3) typescript: 5.3.3 @@ -5560,7 +5513,7 @@ packages: dependencies: '@typescript-eslint/typescript-estree': 7.11.0(typescript@5.3.3) '@typescript-eslint/utils': 7.11.0(eslint@8.57.0)(typescript@5.3.3) - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.5 eslint: 8.57.0 ts-api-utils: 1.3.0(typescript@5.3.3) typescript: 5.3.3 @@ -5588,7 +5541,7 @@ packages: dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.5 globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 @@ -5609,7 +5562,7 @@ packages: dependencies: '@typescript-eslint/types': 7.11.0 '@typescript-eslint/visitor-keys': 7.11.0 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.5 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.4 @@ -5986,7 +5939,7 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.5 transitivePeerDependencies: - supports-color dev: true @@ -6111,10 +6064,6 @@ packages: /app-root-dir@1.0.2: resolution: {integrity: sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==} - /arch@2.2.0: - resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} - dev: true - /argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: @@ -6248,17 +6197,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /asn1@0.2.6: - resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} - dependencies: - safer-buffer: 2.1.2 - dev: true - - /assert-plus@1.0.0: - resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} - engines: {node: '>=0.8'} - dev: true - /assert@2.1.0: resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} dependencies: @@ -6274,11 +6212,6 @@ packages: dependencies: tslib: 2.6.2 - /astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} - dev: true - /astro@4.9.2(@types/node@20.12.11)(typescript@5.3.3): resolution: {integrity: sha512-apzpRoISk6L8g99m3zKIW5SYxw2GhOju/1Gq0Ccf3SH+X2UcFXF+MTdxPOFl5yJUQg7X0qsVQDOIVf8zHRRKFg==} engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'} @@ -6306,7 +6239,7 @@ packages: common-ancestor-path: 1.0.1 cookie: 0.6.0 cssesc: 3.0.0 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.5 deterministic-object-hash: 2.0.2 devalue: 5.0.0 diff: 5.2.0 @@ -6369,25 +6302,12 @@ packages: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: true - /at-least-node@1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} - dev: true - /available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} dependencies: possible-typed-array-names: 1.0.0 - /aws-sign2@0.7.0: - resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} - dev: true - - /aws4@1.12.0: - resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} - dev: true - /axe-core@4.8.4: resolution: {integrity: sha512-CZLSKisu/bhJ2awW4kJndluz2HLZYIHh5Uy1+ZwDRkJi69811xgIXXfdU9HSLX0Th+ILrHj8qfL/5wzamsFtQg==} engines: {node: '>=4'} @@ -6548,12 +6468,6 @@ packages: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: true - /bcrypt-pbkdf@1.0.2: - resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} - dependencies: - tweetnacl: 0.14.5 - dev: true - /better-opn@3.0.2: resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==} engines: {node: '>=12.0.0'} @@ -6585,14 +6499,6 @@ packages: readable-stream: 3.6.2 dev: true - /blob-util@2.0.2: - resolution: {integrity: sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==} - dev: true - - /bluebird@3.7.2: - resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} - dev: true - /body-parser@1.20.2: resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -6691,10 +6597,6 @@ packages: node-int64: 0.4.0 dev: true - /buffer-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - dev: true - /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -6719,11 +6621,6 @@ packages: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} - /cachedir@2.4.0: - resolution: {integrity: sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==} - engines: {node: '>=6'} - dev: true - /call-bind@1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} @@ -6777,10 +6674,6 @@ packages: engines: {node: '>=4'} dev: false - /caseless@0.12.0: - resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} - dev: true - /ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} dev: true @@ -6826,11 +6719,6 @@ packages: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} dev: true - /check-more-types@2.24.0: - resolution: {integrity: sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==} - engines: {node: '>= 0.8.0'} - dev: true - /chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -6923,14 +6811,6 @@ packages: '@colors/colors': 1.5.0 dev: true - /cli-truncate@2.1.0: - resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} - engines: {node: '>=8'} - dependencies: - slice-ansi: 3.0.0 - string-width: 4.2.3 - dev: true - /cli-truncate@4.0.0: resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} engines: {node: '>=18'} @@ -7077,11 +6957,6 @@ packages: resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} dev: false - /common-tags@1.8.2: - resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} - engines: {node: '>=4.0.0'} - dev: true - /commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} @@ -7147,10 +7022,6 @@ packages: dependencies: browserslist: 4.23.0 - /core-util-is@1.0.2: - resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} - dev: true - /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true @@ -7353,67 +7224,6 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true - /cypress-wait-until@3.0.1: - resolution: {integrity: sha512-kpoa8yL6Bi/JNsThGBbrrm7g4SNzYyBUv9M5pF6/NTVm/ClY0HnJzeuWnHiAUZKIZ5l86Oedb12wQyjx7/CWPg==} - dev: true - - /cypress@13.10.0: - resolution: {integrity: sha512-tOhwRlurVOQbMduX+KonoMeQILs2cwR3yHGGENoFvvSoLUBHmJ8b9/n21gFSDqjlOJ+SRVcwuh+fG/JDsHsT6Q==} - engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0} - hasBin: true - requiresBuild: true - dependencies: - '@cypress/request': 3.0.1 - '@cypress/xvfb': 1.2.4(supports-color@8.1.1) - '@types/sinonjs__fake-timers': 8.1.1 - '@types/sizzle': 2.3.8 - arch: 2.2.0 - blob-util: 2.0.2 - bluebird: 3.7.2 - buffer: 5.7.1 - cachedir: 2.4.0 - chalk: 4.1.2 - check-more-types: 2.24.0 - cli-cursor: 3.1.0 - cli-table3: 0.6.3 - commander: 6.2.1 - common-tags: 1.8.2 - dayjs: 1.11.10 - debug: 4.3.5(supports-color@8.1.1) - enquirer: 2.4.1 - eventemitter2: 6.4.7 - execa: 4.1.0 - executable: 4.1.1 - extract-zip: 2.0.1(supports-color@8.1.1) - figures: 3.2.0 - fs-extra: 9.1.0 - getos: 3.2.1 - is-ci: 3.0.1 - is-installed-globally: 0.4.0 - lazy-ass: 1.6.0 - listr2: 3.14.0(enquirer@2.4.1) - lodash: 4.17.21 - log-symbols: 4.1.0 - minimist: 1.2.8 - ospath: 1.2.2 - pretty-bytes: 5.6.0 - process: 0.11.10 - proxy-from-env: 1.0.0 - request-progress: 3.0.0 - semver: 7.5.4 - supports-color: 8.1.1 - tmp: 0.2.3 - untildify: 4.0.0 - yauzl: 2.10.0 - dev: true - - /dashdash@1.14.1: - resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} - engines: {node: '>=0.10'} - dependencies: - assert-plus: 1.0.0 - dev: true - /data-urls@3.0.2: resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} engines: {node: '>=12'} @@ -7447,10 +7257,6 @@ packages: es-errors: 1.3.0 is-data-view: 1.0.1 - /dayjs@1.11.10: - resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} - dev: true - /debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -7461,7 +7267,7 @@ packages: dependencies: ms: 2.0.0 - /debug@3.2.7(supports-color@8.1.1): + /debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: supports-color: '*' @@ -7470,7 +7276,6 @@ packages: optional: true dependencies: ms: 2.1.3 - supports-color: 8.1.1 /debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} @@ -7483,7 +7288,7 @@ packages: dependencies: ms: 2.1.2 - /debug@4.3.5(supports-color@8.1.1): + /debug@4.3.5: resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} engines: {node: '>=6.0'} peerDependencies: @@ -7493,7 +7298,6 @@ packages: optional: true dependencies: ms: 2.1.2 - supports-color: 8.1.1 /decamelize-keys@1.1.1: resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} @@ -7680,7 +7484,7 @@ packages: hasBin: true dependencies: address: 1.2.2 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.5 transitivePeerDependencies: - supports-color dev: true @@ -7836,13 +7640,6 @@ packages: /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - /ecc-jsbn@0.1.2: - resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} - dependencies: - jsbn: 0.1.1 - safer-buffer: 2.1.2 - dev: true - /ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} @@ -8071,7 +7868,7 @@ packages: peerDependencies: esbuild: '>=0.12 <1' dependencies: - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.5 esbuild: 0.20.2 transitivePeerDependencies: - supports-color @@ -8188,7 +7985,7 @@ packages: /eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} dependencies: - debug: 3.2.7(supports-color@8.1.1) + debug: 3.2.7 is-core-module: 2.13.1 resolve: 1.22.8 transitivePeerDependencies: @@ -8242,7 +8039,7 @@ packages: optional: true dependencies: '@typescript-eslint/parser': 7.11.0(eslint@8.56.0)(typescript@5.3.3) - debug: 3.2.7(supports-color@8.1.1) + debug: 3.2.7 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.11.0)(eslint-plugin-import@2.29.1)(eslint@8.56.0) @@ -8272,7 +8069,7 @@ packages: optional: true dependencies: '@typescript-eslint/parser': 7.11.0(eslint@8.57.0)(typescript@5.3.3) - debug: 3.2.7(supports-color@8.1.1) + debug: 3.2.7 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: @@ -8301,25 +8098,13 @@ packages: optional: true dependencies: '@typescript-eslint/parser': 7.11.0(eslint@8.57.0)(typescript@5.3.3) - debug: 3.2.7(supports-color@8.1.1) + debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-cypress@3.3.0(eslint@8.57.0): - resolution: {integrity: sha512-HPHMPzYBIshzJM8wqgKSKHG2p/8R0Gbg4Pb3tcdC9WrmkuqxiKxSKbjunUrajhV5l7gCIFrh1P7C7GuBqH6YuQ==} - peerDependencies: - eslint: '>=7' - peerDependenciesMeta: - eslint: - optional: true - dependencies: - eslint: 8.57.0 - globals: 13.24.0 - dev: true - /eslint-plugin-eslint-comments@3.2.0(eslint@8.56.0): resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} engines: {node: '>=6.5.0'} @@ -8365,7 +8150,7 @@ packages: array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 - debug: 3.2.7(supports-color@8.1.1) + debug: 3.2.7 doctrine: 2.1.0 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 @@ -8402,7 +8187,7 @@ packages: array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 - debug: 3.2.7(supports-color@8.1.1) + debug: 3.2.7 doctrine: 2.1.0 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 @@ -8439,7 +8224,7 @@ packages: array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 - debug: 3.2.7(supports-color@8.1.1) + debug: 3.2.7 doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 @@ -8554,7 +8339,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.5 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -8600,7 +8385,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.5 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -8690,10 +8475,6 @@ packages: resolution: {integrity: sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==} dev: true - /eventemitter2@6.4.7: - resolution: {integrity: sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==} - dev: true - /eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} dev: true @@ -8703,21 +8484,6 @@ packages: engines: {node: '>=0.8.x'} dev: false - /execa@4.1.0: - resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} - engines: {node: '>=10'} - dependencies: - cross-spawn: 7.0.3 - get-stream: 5.2.0 - human-signals: 1.1.1 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - dev: true - /execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -8747,13 +8513,6 @@ packages: strip-final-newline: 3.0.0 dev: true - /executable@4.1.1: - resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==} - engines: {node: '>=4'} - dependencies: - pify: 2.3.0 - dev: true - /exit@0.1.2: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} @@ -8832,25 +8591,6 @@ packages: tmp: 0.0.33 dev: true - /extract-zip@2.0.1(supports-color@8.1.1): - resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} - engines: {node: '>= 10.17.0'} - hasBin: true - dependencies: - debug: 4.3.5(supports-color@8.1.1) - get-stream: 5.2.0 - yauzl: 2.10.0 - optionalDependencies: - '@types/yauzl': 2.10.3 - transitivePeerDependencies: - - supports-color - dev: true - - /extsprintf@1.3.0: - resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} - engines: {'0': node >=0.6.0} - dev: true - /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -8885,23 +8625,10 @@ packages: bser: 2.1.1 dev: true - /fd-slicer@1.1.0: - resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} - dependencies: - pend: 1.2.0 - dev: true - /fetch-retry@5.0.6: resolution: {integrity: sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==} dev: true - /figures@3.2.0: - resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} - engines: {node: '>=8'} - dependencies: - escape-string-regexp: 1.0.5 - dev: true - /file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -9037,10 +8764,6 @@ packages: cross-spawn: 7.0.3 signal-exit: 4.1.0 - /forever-agent@0.6.1: - resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} - dev: true - /fork-ts-checker-webpack-plugin@8.0.0(typescript@5.3.3)(webpack@5.91.0): resolution: {integrity: sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==} engines: {node: '>=12.13.0', yarn: '>=1.0.0'} @@ -9064,15 +8787,6 @@ packages: webpack: 5.91.0(esbuild@0.20.2) dev: false - /form-data@2.3.3: - resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} - engines: {node: '>= 0.12'} - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - dev: true - /form-data@4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} @@ -9138,16 +8852,6 @@ packages: universalify: 0.1.2 dev: true - /fs-extra@9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} - dependencies: - at-least-node: 1.0.0 - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - dev: true - /fs-minipass@2.1.0: resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} engines: {node: '>= 8'} @@ -9162,6 +8866,14 @@ packages: /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + /fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + /fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -9223,13 +8935,6 @@ packages: engines: {node: '>=12'} dev: true - /get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} - dependencies: - pump: 3.0.0 - dev: true - /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -9252,18 +8957,6 @@ packages: dependencies: resolve-pkg-maps: 1.0.0 - /getos@3.2.1: - resolution: {integrity: sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==} - dependencies: - async: 3.2.5 - dev: true - - /getpass@0.1.7: - resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} - dependencies: - assert-plus: 1.0.0 - dev: true - /giget@1.2.1: resolution: {integrity: sha512-4VG22mopWtIeHwogGSy1FViXVo0YT+m6BrqZfz0JJFwbSsePsCdOzdLIIli5BtMp7Xe8f/o2OmBpQX2NBOC24g==} hasBin: true @@ -9333,13 +9026,6 @@ packages: once: 1.4.0 dev: true - /global-dirs@3.0.1: - resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} - engines: {node: '>=10'} - dependencies: - ini: 2.0.0 - dev: true - /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} @@ -9703,26 +9389,17 @@ packages: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.5 transitivePeerDependencies: - supports-color dev: true - /http-signature@1.3.6: - resolution: {integrity: sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==} - engines: {node: '>=0.10'} - dependencies: - assert-plus: 1.0.0 - jsprim: 2.0.2 - sshpk: 1.18.0 - dev: true - /https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.5 transitivePeerDependencies: - supports-color dev: true @@ -9731,11 +9408,6 @@ packages: resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} dev: true - /human-signals@1.1.1: - resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} - engines: {node: '>=8.12.0'} - dev: true - /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -9824,11 +9496,6 @@ packages: /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - /ini@2.0.0: - resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} - engines: {node: '>=10'} - dev: true - /internal-slot@1.0.6: resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} engines: {node: '>= 0.4'} @@ -9931,13 +9598,6 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - /is-ci@3.0.1: - resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} - hasBin: true - dependencies: - ci-info: 3.9.0 - dev: true - /is-core-module@2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: @@ -10032,14 +9692,6 @@ packages: is-docker: 3.0.0 dev: true - /is-installed-globally@0.4.0: - resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} - engines: {node: '>=10'} - dependencies: - global-dirs: 3.0.1 - is-path-inside: 3.0.3 - dev: true - /is-interactive@1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} @@ -10181,10 +9833,6 @@ packages: dependencies: which-typed-array: 1.1.15 - /is-typedarray@1.0.0: - resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - dev: true - /is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} @@ -10250,10 +9898,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /isstream@0.1.2: - resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} - dev: true - /istanbul-lib-coverage@3.2.2: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} @@ -10298,7 +9942,7 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.5 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -10814,10 +10458,6 @@ packages: dependencies: argparse: 2.0.1 - /jsbn@0.1.1: - resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} - dev: true - /jscodeshift@0.15.2(@babel/preset-env@7.24.0): resolution: {integrity: sha512-FquR7Okgmc4Sd0aEDwqho3rEiKR3BdvuG9jfdHjLJ6JQoWSMpavug3AoIfnfWhxFlf+5pzQh8qjqz0DWFrNQzA==} hasBin: true @@ -10915,17 +10555,9 @@ packages: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} dev: false - /json-schema@0.4.0: - resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} - dev: true - /json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - /json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - dev: true - /json5@1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true @@ -10958,16 +10590,6 @@ packages: optionalDependencies: graceful-fs: 4.2.11 - /jsprim@2.0.2: - resolution: {integrity: sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==} - engines: {'0': node >=0.6.0} - dependencies: - assert-plus: 1.0.0 - extsprintf: 1.3.0 - json-schema: 0.4.0 - verror: 1.10.0 - dev: true - /jsx-ast-utils@3.3.5: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} @@ -10998,11 +10620,6 @@ packages: engines: {node: '>=6'} dev: true - /lazy-ass@1.6.0: - resolution: {integrity: sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==} - engines: {node: '> 0.8'} - dev: true - /lazy-universal-dotenv@4.0.0: resolution: {integrity: sha512-aXpZJRnTkpK6gQ/z4nk+ZBLd/Qdp118cvPruLSIQzQNRhKwEcdXCOzXuF55VDqIiuAaY3UGZ10DJtvZzDcvsxg==} engines: {node: '>=14.0.0'} @@ -11148,26 +10765,6 @@ packages: - supports-color dev: true - /listr2@3.14.0(enquirer@2.4.1): - resolution: {integrity: sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==} - engines: {node: '>=10.0.0'} - peerDependencies: - enquirer: '>= 2.3.0 < 3' - peerDependenciesMeta: - enquirer: - optional: true - dependencies: - cli-truncate: 2.1.0 - colorette: 2.0.20 - enquirer: 2.4.1 - log-update: 4.0.0 - p-map: 4.0.0 - rfdc: 1.3.1 - rxjs: 7.8.1 - through: 2.3.8 - wrap-ansi: 7.0.0 - dev: true - /listr2@8.0.0: resolution: {integrity: sha512-u8cusxAcyqAiQ2RhYvV7kRKNLgUvtObIbhOX2NCXqvp1UU32xIg5CT22ykS2TPKJXZWJwtK3IKLiqAGlGNE+Zg==} engines: {node: '>=18.0.0'} @@ -11236,10 +10833,6 @@ packages: /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - /lodash.once@4.1.1: - resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} - dev: true - /lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} dev: true @@ -11263,16 +10856,6 @@ packages: is-unicode-supported: 1.3.0 dev: true - /log-update@4.0.0: - resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} - engines: {node: '>=10'} - dependencies: - ansi-escapes: 4.3.2 - cli-cursor: 3.1.0 - slice-ansi: 4.0.0 - wrap-ansi: 6.2.0 - dev: true - /log-update@6.0.0: resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} engines: {node: '>=18'} @@ -11828,7 +11411,7 @@ packages: resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} dependencies: '@types/debug': 4.1.12 - debug: 4.3.5(supports-color@8.1.1) + debug: 4.3.5 decode-named-character-reference: 1.0.2 devlop: 1.1.0 micromark-core-commonmark: 2.0.0 @@ -12294,10 +11877,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /ospath@1.2.2: - resolution: {integrity: sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==} - dev: true - /outdent@0.5.0: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} dev: true @@ -12515,14 +12094,6 @@ packages: through2: 2.0.5 dev: true - /pend@1.2.0: - resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - dev: true - - /performance-now@2.1.0: - resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} - dev: true - /periscopic@3.1.0: resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} dependencies: @@ -12547,11 +12118,6 @@ packages: hasBin: true dev: true - /pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - dev: true - /pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} @@ -12598,6 +12164,22 @@ packages: find-up: 6.3.0 dev: false + /playwright-core@1.44.1: + resolution: {integrity: sha512-wh0JWtYTrhv1+OSsLPgFzGzt67Y7BE/ZS3jEqgGBlp2ppp1ZDj8c+9IARNW4dwf1poq5MgHreEM2KV/GuR4cFA==} + engines: {node: '>=16'} + hasBin: true + dev: true + + /playwright@1.44.1: + resolution: {integrity: sha512-qr/0UJ5CFAtloI3avF95Y0L1xQo6r3LQArLIg/z/PoGJ6xa+EwzrwO5lpNr/09STxdHuUoP2mvuELJS+hLdtgg==} + engines: {node: '>=16'} + hasBin: true + dependencies: + playwright-core: 1.44.1 + optionalDependencies: + fsevents: 2.3.2 + dev: true + /polished@4.3.1: resolution: {integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==} engines: {node: '>=10'} @@ -12702,11 +12284,6 @@ packages: hasBin: true dev: true - /pretty-bytes@5.6.0: - resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} - engines: {node: '>=6'} - dev: true - /pretty-error@4.0.0: resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} dependencies: @@ -12787,10 +12364,6 @@ packages: forwarded: 0.2.0 ipaddr.js: 1.9.1 - /proxy-from-env@1.0.0: - resolution: {integrity: sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==} - dev: true - /pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} dev: true @@ -12833,13 +12406,6 @@ packages: resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} dev: true - /qs@6.10.4: - resolution: {integrity: sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==} - engines: {node: '>=0.6'} - dependencies: - side-channel: 1.0.6 - dev: true - /qs@6.11.0: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} @@ -13232,12 +12798,6 @@ packages: resolution: {integrity: sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q==} dev: true - /request-progress@3.0.0: - resolution: {integrity: sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==} - dependencies: - throttleit: 1.0.1 - dev: true - /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -13451,12 +13011,6 @@ packages: dependencies: queue-microtask: 1.2.3 - /rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - dependencies: - tslib: 2.6.2 - dev: true - /safe-array-concat@1.1.2: resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} @@ -13719,24 +13273,6 @@ packages: engines: {node: '>=12'} dev: true - /slice-ansi@3.0.0: - resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} - engines: {node: '>=8'} - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - dev: true - - /slice-ansi@4.0.0: - resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - dev: true - /slice-ansi@5.0.0: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} @@ -13852,22 +13388,6 @@ packages: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: true - /sshpk@1.18.0: - resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} - engines: {node: '>=0.10.0'} - hasBin: true - dependencies: - asn1: 0.2.6 - assert-plus: 1.0.0 - bcrypt-pbkdf: 1.0.2 - dashdash: 1.14.1 - ecc-jsbn: 0.1.2 - getpass: 0.1.7 - jsbn: 0.1.1 - safer-buffer: 2.1.2 - tweetnacl: 0.14.5 - dev: true - /stack-utils@2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} @@ -14285,10 +13805,6 @@ packages: /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - /throttleit@1.0.1: - resolution: {integrity: sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==} - dev: true - /through2@2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} dependencies: @@ -14296,10 +13812,6 @@ packages: xtend: 4.0.2 dev: true - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true - /tiny-invariant@1.3.3: resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} @@ -14310,11 +13822,6 @@ packages: os-tmpdir: 1.0.2 dev: true - /tmp@0.2.3: - resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} - engines: {node: '>=14.14'} - dev: true - /tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} dev: true @@ -14488,17 +13995,6 @@ packages: yargs: 17.7.2 dev: true - /tunnel-agent@0.6.0: - resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} - requiresBuild: true - dependencies: - safe-buffer: 5.2.1 - dev: true - - /tweetnacl@0.14.5: - resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} - dev: true - /type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -14854,11 +14350,6 @@ packages: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} - /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 @@ -14884,15 +14375,6 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - /verror@1.10.0: - resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} - engines: {'0': node >=0.6.0} - dependencies: - assert-plus: 1.0.0 - core-util-is: 1.0.2 - extsprintf: 1.3.0 - dev: true - /vfile-location@5.0.2: resolution: {integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==} dependencies: @@ -15540,13 +15022,6 @@ packages: yargs-parser: 21.1.1 dev: true - /yauzl@2.10.0: - resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} - dependencies: - buffer-crc32: 0.2.13 - fd-slicer: 1.1.0 - dev: true - /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'}