diff --git a/.github/workflows/e2e_tests.yaml b/.github/workflows/e2e_tests.yaml index 0c92e0727e..25feaf670d 100644 --- a/.github/workflows/e2e_tests.yaml +++ b/.github/workflows/e2e_tests.yaml @@ -4,23 +4,25 @@ on: push: branches: - staging + - feat-e2e-tests jobs: test: runs-on: ubuntu-latest + defaults: + run: + working-directory: ./e2e-tests steps: - uses: actions/setup-node@v3 with: node-version: 18.x - uses: actions/checkout@v3 - with: - repository: 'serlo/frontend-e2e-tests' - uses: patrickedqvist/wait-for-vercel-preview@v1.3.1 with: token: ${{ secrets.GITHUB_TOKEN }} max_timeout: 1200 check_interval: 20 - run: yarn - - run: yarn test-workers + - run: yarn e2e-workers - uses: actions/upload-artifact@v3 if: failure() with: diff --git a/.github/workflows/e2e_tests_firefox.yaml b/.github/workflows/e2e_tests_firefox.yaml index 4fe539c043..0621126325 100644 --- a/.github/workflows/e2e_tests_firefox.yaml +++ b/.github/workflows/e2e_tests_firefox.yaml @@ -4,23 +4,25 @@ on: push: branches: - staging + - feat-e2e-tests jobs: test: runs-on: ubuntu-latest + defaults: + run: + working-directory: ./e2e-tests steps: + - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: 18.x - - uses: actions/checkout@v3 - with: - repository: 'serlo/frontend-e2e-tests' - uses: patrickedqvist/wait-for-vercel-preview@v1.3.1 with: token: ${{ secrets.GITHUB_TOKEN }} max_timeout: 1200 check_interval: 20 - run: yarn - - run: yarn test-firefox tests/4*.ts + - run: yarn e2e-firefox tests/4*.ts - uses: actions/upload-artifact@v3 if: failure() with: diff --git a/.gitignore b/.gitignore index 8f4fca1408..eef35d88a2 100644 --- a/.gitignore +++ b/.gitignore @@ -39,4 +39,15 @@ yarn-error.log* .tool-versions # nvm -.nvmrc \ No newline at end of file +.nvmrc + +# E2E tests output +e2e-tests/output + +# E2E tests Yarn +e2e-tests/.yarn/* +!e2e-tests/.yarn/cache +!e2e-tests/.yarn/plugins +!e2e-tests/.yarn/releases +e2e-tests/yarn-debug.log* +e2e-tests/yarn-error.log* diff --git a/.yarn/cache/@next-swc-linux-arm64-musl-npm-13.5.6-b77ca7b049-8.zip b/.yarn/cache/@next-swc-linux-arm64-musl-npm-13.5.6-b77ca7b049-8.zip new file mode 100644 index 0000000000..e3bf9016eb Binary files /dev/null and b/.yarn/cache/@next-swc-linux-arm64-musl-npm-13.5.6-b77ca7b049-8.zip differ diff --git a/.yarn/cache/@next-swc-linux-arm64-musl-npm-14.0.3-bb94b70bd6-8.zip b/.yarn/cache/@next-swc-linux-arm64-musl-npm-14.0.3-bb94b70bd6-8.zip new file mode 100644 index 0000000000..7f99d87722 Binary files /dev/null and b/.yarn/cache/@next-swc-linux-arm64-musl-npm-14.0.3-bb94b70bd6-8.zip differ diff --git a/.yarn/cache/@next-swc-linux-x64-musl-npm-13.5.6-b283330cf9-8.zip b/.yarn/cache/@next-swc-linux-x64-musl-npm-13.5.6-b283330cf9-8.zip new file mode 100644 index 0000000000..1597f2be30 Binary files /dev/null and b/.yarn/cache/@next-swc-linux-x64-musl-npm-13.5.6-b283330cf9-8.zip differ diff --git a/.yarn/cache/@next-swc-linux-x64-musl-npm-14.0.3-3c88b04db3-8.zip b/.yarn/cache/@next-swc-linux-x64-musl-npm-14.0.3-3c88b04db3-8.zip new file mode 100644 index 0000000000..34d65b8399 Binary files /dev/null and b/.yarn/cache/@next-swc-linux-x64-musl-npm-14.0.3-3c88b04db3-8.zip differ diff --git a/.yarnrc.yml b/.yarnrc.yml index 476de13b36..8e55e311ad 100644 --- a/.yarnrc.yml +++ b/.yarnrc.yml @@ -7,6 +7,10 @@ plugins: spec: 'https://mskelton.dev/yarn-outdated/v2' supportedArchitectures: + libc: + - current + - libc + - musl os: - linux - darwin diff --git a/e2e-tests/.env b/e2e-tests/.env new file mode 100644 index 0000000000..14069930fb --- /dev/null +++ b/e2e-tests/.env @@ -0,0 +1,7 @@ +# Uncomment if using local frontend +# Warning: Testing dev server can sometimes be unreliable, +# then use a production build instead: `yarn build && yarn start` +# FRONTEND_URL=http://localhost:3000 + +# Uncomment if frontend is using local api (sets url to localhost as well) +#FRONTEND_API=local \ No newline at end of file diff --git a/e2e-tests/.yarn/cache/@babel-helper-string-parser-npm-7.23.4-b1f0d030c3-c0641144cf.zip b/e2e-tests/.yarn/cache/@babel-helper-string-parser-npm-7.23.4-b1f0d030c3-c0641144cf.zip new file mode 100644 index 0000000000..1cf46fb0b3 Binary files /dev/null and b/e2e-tests/.yarn/cache/@babel-helper-string-parser-npm-7.23.4-b1f0d030c3-c0641144cf.zip differ diff --git a/e2e-tests/.yarn/cache/@babel-helper-validator-identifier-npm-7.22.20-18305bb306-136412784d.zip b/e2e-tests/.yarn/cache/@babel-helper-validator-identifier-npm-7.22.20-18305bb306-136412784d.zip new file mode 100644 index 0000000000..53d7fc0339 Binary files /dev/null and b/e2e-tests/.yarn/cache/@babel-helper-validator-identifier-npm-7.22.20-18305bb306-136412784d.zip differ diff --git a/e2e-tests/.yarn/cache/@babel-parser-npm-7.23.6-2fad283d6e-140801c437.zip b/e2e-tests/.yarn/cache/@babel-parser-npm-7.23.6-2fad283d6e-140801c437.zip new file mode 100644 index 0000000000..5537b3ffb2 Binary files /dev/null and b/e2e-tests/.yarn/cache/@babel-parser-npm-7.23.6-2fad283d6e-140801c437.zip differ diff --git a/e2e-tests/.yarn/cache/@babel-types-npm-7.23.6-4e68ac9e9b-68187dbec0.zip b/e2e-tests/.yarn/cache/@babel-types-npm-7.23.6-4e68ac9e9b-68187dbec0.zip new file mode 100644 index 0000000000..cb120e9247 Binary files /dev/null and b/e2e-tests/.yarn/cache/@babel-types-npm-7.23.6-4e68ac9e9b-68187dbec0.zip differ diff --git a/e2e-tests/.yarn/cache/@codeceptjs-configure-npm-0.8.0-620f1ec880-ec530dcf16.zip b/e2e-tests/.yarn/cache/@codeceptjs-configure-npm-0.8.0-620f1ec880-ec530dcf16.zip new file mode 100644 index 0000000000..399aa9ac85 Binary files /dev/null and b/e2e-tests/.yarn/cache/@codeceptjs-configure-npm-0.8.0-620f1ec880-ec530dcf16.zip differ diff --git a/e2e-tests/.yarn/cache/@codeceptjs-helper-npm-1.0.2-458696996c-e1f9bdc76c.zip b/e2e-tests/.yarn/cache/@codeceptjs-helper-npm-1.0.2-458696996c-e1f9bdc76c.zip new file mode 100644 index 0000000000..4d8ba9430e Binary files /dev/null and b/e2e-tests/.yarn/cache/@codeceptjs-helper-npm-1.0.2-458696996c-e1f9bdc76c.zip differ diff --git a/e2e-tests/.yarn/cache/@cspotcode-source-map-support-npm-0.8.1-964f2de99d-5718f26708.zip b/e2e-tests/.yarn/cache/@cspotcode-source-map-support-npm-0.8.1-964f2de99d-5718f26708.zip new file mode 100644 index 0000000000..1a4763a4fe Binary files /dev/null and b/e2e-tests/.yarn/cache/@cspotcode-source-map-support-npm-0.8.1-964f2de99d-5718f26708.zip differ diff --git a/e2e-tests/.yarn/cache/@cucumber-cucumber-expressions-npm-16.1.2-9c57852232-636a903a74.zip b/e2e-tests/.yarn/cache/@cucumber-cucumber-expressions-npm-16.1.2-9c57852232-636a903a74.zip new file mode 100644 index 0000000000..4a169bbc6c Binary files /dev/null and b/e2e-tests/.yarn/cache/@cucumber-cucumber-expressions-npm-16.1.2-9c57852232-636a903a74.zip differ diff --git a/e2e-tests/.yarn/cache/@cucumber-gherkin-npm-26.2.0-8df6a26563-d7bcc12fe5.zip b/e2e-tests/.yarn/cache/@cucumber-gherkin-npm-26.2.0-8df6a26563-d7bcc12fe5.zip new file mode 100644 index 0000000000..12d3c2dab5 Binary files /dev/null and b/e2e-tests/.yarn/cache/@cucumber-gherkin-npm-26.2.0-8df6a26563-d7bcc12fe5.zip differ diff --git a/e2e-tests/.yarn/cache/@cucumber-messages-npm-21.0.1-5dd3dcfba8-01849f35bb.zip b/e2e-tests/.yarn/cache/@cucumber-messages-npm-21.0.1-5dd3dcfba8-01849f35bb.zip new file mode 100644 index 0000000000..86e6310c0b Binary files /dev/null and b/e2e-tests/.yarn/cache/@cucumber-messages-npm-21.0.1-5dd3dcfba8-01849f35bb.zip differ diff --git a/e2e-tests/.yarn/cache/@cucumber-messages-npm-22.0.0-923f9d93f5-e9e8f3bda0.zip b/e2e-tests/.yarn/cache/@cucumber-messages-npm-22.0.0-923f9d93f5-e9e8f3bda0.zip new file mode 100644 index 0000000000..70e86422b0 Binary files /dev/null and b/e2e-tests/.yarn/cache/@cucumber-messages-npm-22.0.0-923f9d93f5-e9e8f3bda0.zip differ diff --git a/e2e-tests/.yarn/cache/@hapi-hoek-npm-9.3.0-447eb8d274-4771c7a776.zip b/e2e-tests/.yarn/cache/@hapi-hoek-npm-9.3.0-447eb8d274-4771c7a776.zip new file mode 100644 index 0000000000..ff8a0ee9c1 Binary files /dev/null and b/e2e-tests/.yarn/cache/@hapi-hoek-npm-9.3.0-447eb8d274-4771c7a776.zip differ diff --git a/e2e-tests/.yarn/cache/@hapi-topo-npm-5.1.0-5e0b776809-604dfd5dde.zip b/e2e-tests/.yarn/cache/@hapi-topo-npm-5.1.0-5e0b776809-604dfd5dde.zip new file mode 100644 index 0000000000..de25bd9e86 Binary files /dev/null and b/e2e-tests/.yarn/cache/@hapi-topo-npm-5.1.0-5e0b776809-604dfd5dde.zip differ diff --git a/e2e-tests/.yarn/cache/@isaacs-cliui-npm-8.0.2-f4364666d5-4a473b9b32.zip b/e2e-tests/.yarn/cache/@isaacs-cliui-npm-8.0.2-f4364666d5-4a473b9b32.zip new file mode 100644 index 0000000000..d19176fadd Binary files /dev/null and b/e2e-tests/.yarn/cache/@isaacs-cliui-npm-8.0.2-f4364666d5-4a473b9b32.zip differ diff --git a/e2e-tests/.yarn/cache/@jridgewell-resolve-uri-npm-3.1.1-aa2de3f210-f5b441fe79.zip b/e2e-tests/.yarn/cache/@jridgewell-resolve-uri-npm-3.1.1-aa2de3f210-f5b441fe79.zip new file mode 100644 index 0000000000..0cb5724371 Binary files /dev/null and b/e2e-tests/.yarn/cache/@jridgewell-resolve-uri-npm-3.1.1-aa2de3f210-f5b441fe79.zip differ diff --git a/e2e-tests/.yarn/cache/@jridgewell-sourcemap-codec-npm-1.4.15-a055fb62cf-b881c7e503.zip b/e2e-tests/.yarn/cache/@jridgewell-sourcemap-codec-npm-1.4.15-a055fb62cf-b881c7e503.zip new file mode 100644 index 0000000000..402f52b7ae Binary files /dev/null and b/e2e-tests/.yarn/cache/@jridgewell-sourcemap-codec-npm-1.4.15-a055fb62cf-b881c7e503.zip differ diff --git a/e2e-tests/.yarn/cache/@jridgewell-trace-mapping-npm-0.3.9-91625cd7fb-d89597752f.zip b/e2e-tests/.yarn/cache/@jridgewell-trace-mapping-npm-0.3.9-91625cd7fb-d89597752f.zip new file mode 100644 index 0000000000..8bf87a916e Binary files /dev/null and b/e2e-tests/.yarn/cache/@jridgewell-trace-mapping-npm-0.3.9-91625cd7fb-d89597752f.zip differ diff --git a/e2e-tests/.yarn/cache/@npmcli-agent-npm-2.2.0-cf04e8a830-3b25312edb.zip b/e2e-tests/.yarn/cache/@npmcli-agent-npm-2.2.0-cf04e8a830-3b25312edb.zip new file mode 100644 index 0000000000..d6bb06d7ed Binary files /dev/null and b/e2e-tests/.yarn/cache/@npmcli-agent-npm-2.2.0-cf04e8a830-3b25312edb.zip differ diff --git a/e2e-tests/.yarn/cache/@npmcli-fs-npm-3.1.0-0844a57978-a50a6818de.zip b/e2e-tests/.yarn/cache/@npmcli-fs-npm-3.1.0-0844a57978-a50a6818de.zip new file mode 100644 index 0000000000..2fca778dd0 Binary files /dev/null and b/e2e-tests/.yarn/cache/@npmcli-fs-npm-3.1.0-0844a57978-a50a6818de.zip differ diff --git a/e2e-tests/.yarn/cache/@one-ini-wasm-npm-0.1.1-cee8120e33-11de17108e.zip b/e2e-tests/.yarn/cache/@one-ini-wasm-npm-0.1.1-cee8120e33-11de17108e.zip new file mode 100644 index 0000000000..636d88198b Binary files /dev/null and b/e2e-tests/.yarn/cache/@one-ini-wasm-npm-0.1.1-cee8120e33-11de17108e.zip differ diff --git a/e2e-tests/.yarn/cache/@pkgjs-parseargs-npm-0.11.0-cd2a3fe948-6ad6a00fc4.zip b/e2e-tests/.yarn/cache/@pkgjs-parseargs-npm-0.11.0-cd2a3fe948-6ad6a00fc4.zip new file mode 100644 index 0000000000..96f576f7de Binary files /dev/null and b/e2e-tests/.yarn/cache/@pkgjs-parseargs-npm-0.11.0-cd2a3fe948-6ad6a00fc4.zip differ diff --git a/e2e-tests/.yarn/cache/@sideway-address-npm-4.1.4-32f94bc9f5-b9fca2a93a.zip b/e2e-tests/.yarn/cache/@sideway-address-npm-4.1.4-32f94bc9f5-b9fca2a93a.zip new file mode 100644 index 0000000000..0d78830d8d Binary files /dev/null and b/e2e-tests/.yarn/cache/@sideway-address-npm-4.1.4-32f94bc9f5-b9fca2a93a.zip differ diff --git a/e2e-tests/.yarn/cache/@sideway-formula-npm-3.0.1-ee371b2ddf-e4beeebc9d.zip b/e2e-tests/.yarn/cache/@sideway-formula-npm-3.0.1-ee371b2ddf-e4beeebc9d.zip new file mode 100644 index 0000000000..c4835760e9 Binary files /dev/null and b/e2e-tests/.yarn/cache/@sideway-formula-npm-3.0.1-ee371b2ddf-e4beeebc9d.zip differ diff --git a/e2e-tests/.yarn/cache/@sideway-pinpoint-npm-2.0.0-66d94e687e-0f4491e589.zip b/e2e-tests/.yarn/cache/@sideway-pinpoint-npm-2.0.0-66d94e687e-0f4491e589.zip new file mode 100644 index 0000000000..dec4ec2607 Binary files /dev/null and b/e2e-tests/.yarn/cache/@sideway-pinpoint-npm-2.0.0-66d94e687e-0f4491e589.zip differ diff --git a/e2e-tests/.yarn/cache/@tsconfig-node10-npm-1.0.9-f2e2d20feb-a33ae4dc2a.zip b/e2e-tests/.yarn/cache/@tsconfig-node10-npm-1.0.9-f2e2d20feb-a33ae4dc2a.zip new file mode 100644 index 0000000000..b213bf3439 Binary files /dev/null and b/e2e-tests/.yarn/cache/@tsconfig-node10-npm-1.0.9-f2e2d20feb-a33ae4dc2a.zip differ diff --git a/e2e-tests/.yarn/cache/@tsconfig-node12-npm-1.0.11-9710d1c61b-5ce29a41b1.zip b/e2e-tests/.yarn/cache/@tsconfig-node12-npm-1.0.11-9710d1c61b-5ce29a41b1.zip new file mode 100644 index 0000000000..001dd135c0 Binary files /dev/null and b/e2e-tests/.yarn/cache/@tsconfig-node12-npm-1.0.11-9710d1c61b-5ce29a41b1.zip differ diff --git a/e2e-tests/.yarn/cache/@tsconfig-node14-npm-1.0.3-15321421d2-19275fe80c.zip b/e2e-tests/.yarn/cache/@tsconfig-node14-npm-1.0.3-15321421d2-19275fe80c.zip new file mode 100644 index 0000000000..9b825a0f17 Binary files /dev/null and b/e2e-tests/.yarn/cache/@tsconfig-node14-npm-1.0.3-15321421d2-19275fe80c.zip differ diff --git a/e2e-tests/.yarn/cache/@tsconfig-node16-npm-1.0.4-b7cb87d859-2023197859.zip b/e2e-tests/.yarn/cache/@tsconfig-node16-npm-1.0.4-b7cb87d859-2023197859.zip new file mode 100644 index 0000000000..2638f0fa88 Binary files /dev/null and b/e2e-tests/.yarn/cache/@tsconfig-node16-npm-1.0.4-b7cb87d859-2023197859.zip differ diff --git a/e2e-tests/.yarn/cache/@types-node-npm-18.19.3-9a233afc47-58c4fa45a7.zip b/e2e-tests/.yarn/cache/@types-node-npm-18.19.3-9a233afc47-58c4fa45a7.zip new file mode 100644 index 0000000000..d67ce4d3b3 Binary files /dev/null and b/e2e-tests/.yarn/cache/@types-node-npm-18.19.3-9a233afc47-58c4fa45a7.zip differ diff --git a/e2e-tests/.yarn/cache/@types-uuid-npm-8.3.4-7547f4402c-6f11f3ff70.zip b/e2e-tests/.yarn/cache/@types-uuid-npm-8.3.4-7547f4402c-6f11f3ff70.zip new file mode 100644 index 0000000000..2e4a25adb6 Binary files /dev/null and b/e2e-tests/.yarn/cache/@types-uuid-npm-8.3.4-7547f4402c-6f11f3ff70.zip differ diff --git a/e2e-tests/.yarn/cache/@types-uuid-npm-9.0.1-b44e45eb8a-c472b8a77c.zip b/e2e-tests/.yarn/cache/@types-uuid-npm-9.0.1-b44e45eb8a-c472b8a77c.zip new file mode 100644 index 0000000000..b197329d12 Binary files /dev/null and b/e2e-tests/.yarn/cache/@types-uuid-npm-9.0.1-b44e45eb8a-c472b8a77c.zip differ diff --git a/e2e-tests/.yarn/cache/@xmldom-xmldom-npm-0.7.13-652e4dab05-b405407853.zip b/e2e-tests/.yarn/cache/@xmldom-xmldom-npm-0.7.13-652e4dab05-b405407853.zip new file mode 100644 index 0000000000..27a7d45ede Binary files /dev/null and b/e2e-tests/.yarn/cache/@xmldom-xmldom-npm-0.7.13-652e4dab05-b405407853.zip differ diff --git a/e2e-tests/.yarn/cache/abbrev-npm-2.0.0-0eb38a17e5-0e994ad2aa.zip b/e2e-tests/.yarn/cache/abbrev-npm-2.0.0-0eb38a17e5-0e994ad2aa.zip new file mode 100644 index 0000000000..bcebdcb6a4 Binary files /dev/null and b/e2e-tests/.yarn/cache/abbrev-npm-2.0.0-0eb38a17e5-0e994ad2aa.zip differ diff --git a/e2e-tests/.yarn/cache/acorn-npm-8.11.2-a470f49bb6-8184504086.zip b/e2e-tests/.yarn/cache/acorn-npm-8.11.2-a470f49bb6-8184504086.zip new file mode 100644 index 0000000000..88d69d271f Binary files /dev/null and b/e2e-tests/.yarn/cache/acorn-npm-8.11.2-a470f49bb6-8184504086.zip differ diff --git a/e2e-tests/.yarn/cache/acorn-walk-npm-8.3.1-2a7e2dbd77-5c8926ddb5.zip b/e2e-tests/.yarn/cache/acorn-walk-npm-8.3.1-2a7e2dbd77-5c8926ddb5.zip new file mode 100644 index 0000000000..ebd9041093 Binary files /dev/null and b/e2e-tests/.yarn/cache/acorn-walk-npm-8.3.1-2a7e2dbd77-5c8926ddb5.zip differ diff --git a/e2e-tests/.yarn/cache/agent-base-npm-7.1.0-4b12ba5111-f7828f9914.zip b/e2e-tests/.yarn/cache/agent-base-npm-7.1.0-4b12ba5111-f7828f9914.zip new file mode 100644 index 0000000000..cfa8ee7b64 Binary files /dev/null and b/e2e-tests/.yarn/cache/agent-base-npm-7.1.0-4b12ba5111-f7828f9914.zip differ diff --git a/e2e-tests/.yarn/cache/aggregate-error-npm-3.1.0-415a406f4e-1101a33f21.zip b/e2e-tests/.yarn/cache/aggregate-error-npm-3.1.0-415a406f4e-1101a33f21.zip new file mode 100644 index 0000000000..7db0127bfd Binary files /dev/null and b/e2e-tests/.yarn/cache/aggregate-error-npm-3.1.0-415a406f4e-1101a33f21.zip differ diff --git a/e2e-tests/.yarn/cache/ansi-colors-npm-4.1.1-97ad42f223-138d04a510.zip b/e2e-tests/.yarn/cache/ansi-colors-npm-4.1.1-97ad42f223-138d04a510.zip new file mode 100644 index 0000000000..19c6d99a78 Binary files /dev/null and b/e2e-tests/.yarn/cache/ansi-colors-npm-4.1.1-97ad42f223-138d04a510.zip differ diff --git a/e2e-tests/.yarn/cache/ansi-escapes-npm-3.2.0-a9d573100e-0f94695b67.zip b/e2e-tests/.yarn/cache/ansi-escapes-npm-3.2.0-a9d573100e-0f94695b67.zip new file mode 100644 index 0000000000..6faf69c10b Binary files /dev/null and b/e2e-tests/.yarn/cache/ansi-escapes-npm-3.2.0-a9d573100e-0f94695b67.zip differ diff --git a/e2e-tests/.yarn/cache/ansi-regex-npm-3.0.1-01f44078a3-09daf180c5.zip b/e2e-tests/.yarn/cache/ansi-regex-npm-3.0.1-01f44078a3-09daf180c5.zip new file mode 100644 index 0000000000..b7e261d15b Binary files /dev/null and b/e2e-tests/.yarn/cache/ansi-regex-npm-3.0.1-01f44078a3-09daf180c5.zip differ diff --git a/e2e-tests/.yarn/cache/ansi-regex-npm-4.1.1-af0a582bb9-b1a6ee44cb.zip b/e2e-tests/.yarn/cache/ansi-regex-npm-4.1.1-af0a582bb9-b1a6ee44cb.zip new file mode 100644 index 0000000000..e568811030 Binary files /dev/null and b/e2e-tests/.yarn/cache/ansi-regex-npm-4.1.1-af0a582bb9-b1a6ee44cb.zip differ diff --git a/e2e-tests/.yarn/cache/ansi-regex-npm-5.0.1-c963a48615-2aa4bb54ca.zip b/e2e-tests/.yarn/cache/ansi-regex-npm-5.0.1-c963a48615-2aa4bb54ca.zip new file mode 100644 index 0000000000..fffc17acac Binary files /dev/null and b/e2e-tests/.yarn/cache/ansi-regex-npm-5.0.1-c963a48615-2aa4bb54ca.zip differ diff --git a/e2e-tests/.yarn/cache/ansi-regex-npm-6.0.1-8d663a607d-1ff8b7667c.zip b/e2e-tests/.yarn/cache/ansi-regex-npm-6.0.1-8d663a607d-1ff8b7667c.zip new file mode 100644 index 0000000000..088e552d0f Binary files /dev/null and b/e2e-tests/.yarn/cache/ansi-regex-npm-6.0.1-8d663a607d-1ff8b7667c.zip differ diff --git a/e2e-tests/.yarn/cache/ansi-styles-npm-3.2.1-8cb8107983-d85ade01c1.zip b/e2e-tests/.yarn/cache/ansi-styles-npm-3.2.1-8cb8107983-d85ade01c1.zip new file mode 100644 index 0000000000..4ffdcc4946 Binary files /dev/null and b/e2e-tests/.yarn/cache/ansi-styles-npm-3.2.1-8cb8107983-d85ade01c1.zip differ diff --git a/e2e-tests/.yarn/cache/ansi-styles-npm-4.3.0-245c7d42c7-513b44c3b2.zip b/e2e-tests/.yarn/cache/ansi-styles-npm-4.3.0-245c7d42c7-513b44c3b2.zip new file mode 100644 index 0000000000..a18e3e6439 Binary files /dev/null and b/e2e-tests/.yarn/cache/ansi-styles-npm-4.3.0-245c7d42c7-513b44c3b2.zip differ diff --git a/e2e-tests/.yarn/cache/ansi-styles-npm-6.2.1-d43647018c-ef940f2f0c.zip b/e2e-tests/.yarn/cache/ansi-styles-npm-6.2.1-d43647018c-ef940f2f0c.zip new file mode 100644 index 0000000000..aa1bdfde18 Binary files /dev/null and b/e2e-tests/.yarn/cache/ansi-styles-npm-6.2.1-d43647018c-ef940f2f0c.zip differ diff --git a/e2e-tests/.yarn/cache/anymatch-npm-3.1.3-bc81d103b1-3e044fd6d1.zip b/e2e-tests/.yarn/cache/anymatch-npm-3.1.3-bc81d103b1-3e044fd6d1.zip new file mode 100644 index 0000000000..095ff20933 Binary files /dev/null and b/e2e-tests/.yarn/cache/anymatch-npm-3.1.3-bc81d103b1-3e044fd6d1.zip differ diff --git a/e2e-tests/.yarn/cache/arg-npm-4.1.3-1748b966a8-544af8dd3f.zip b/e2e-tests/.yarn/cache/arg-npm-4.1.3-1748b966a8-544af8dd3f.zip new file mode 100644 index 0000000000..21128e2b87 Binary files /dev/null and b/e2e-tests/.yarn/cache/arg-npm-4.1.3-1748b966a8-544af8dd3f.zip differ diff --git a/e2e-tests/.yarn/cache/argparse-npm-2.0.1-faff7999e6-83644b5649.zip b/e2e-tests/.yarn/cache/argparse-npm-2.0.1-faff7999e6-83644b5649.zip new file mode 100644 index 0000000000..26a9ce4aca Binary files /dev/null and b/e2e-tests/.yarn/cache/argparse-npm-2.0.1-faff7999e6-83644b5649.zip differ diff --git a/e2e-tests/.yarn/cache/arrify-npm-2.0.1-38c408f77c-067c4c1afd.zip b/e2e-tests/.yarn/cache/arrify-npm-2.0.1-38c408f77c-067c4c1afd.zip new file mode 100644 index 0000000000..5dbd5402d5 Binary files /dev/null and b/e2e-tests/.yarn/cache/arrify-npm-2.0.1-38c408f77c-067c4c1afd.zip differ diff --git a/e2e-tests/.yarn/cache/assertion-error-npm-1.1.0-66b893015e-fd9429d3a3.zip b/e2e-tests/.yarn/cache/assertion-error-npm-1.1.0-66b893015e-fd9429d3a3.zip new file mode 100644 index 0000000000..e7b45eee3a Binary files /dev/null and b/e2e-tests/.yarn/cache/assertion-error-npm-1.1.0-66b893015e-fd9429d3a3.zip differ diff --git a/e2e-tests/.yarn/cache/asynckit-npm-0.4.0-c718858525-7b78c451df.zip b/e2e-tests/.yarn/cache/asynckit-npm-0.4.0-c718858525-7b78c451df.zip new file mode 100644 index 0000000000..bb08c24f1b Binary files /dev/null and b/e2e-tests/.yarn/cache/asynckit-npm-0.4.0-c718858525-7b78c451df.zip differ diff --git a/e2e-tests/.yarn/cache/axios-npm-0.26.1-a6641ce4e3-d9eb58ff4b.zip b/e2e-tests/.yarn/cache/axios-npm-0.26.1-a6641ce4e3-d9eb58ff4b.zip new file mode 100644 index 0000000000..35d97b5c67 Binary files /dev/null and b/e2e-tests/.yarn/cache/axios-npm-0.26.1-a6641ce4e3-d9eb58ff4b.zip differ diff --git a/e2e-tests/.yarn/cache/axios-npm-1.6.2-2334cb6eee-4a7429e2b7.zip b/e2e-tests/.yarn/cache/axios-npm-1.6.2-2334cb6eee-4a7429e2b7.zip new file mode 100644 index 0000000000..e616f86cd0 Binary files /dev/null and b/e2e-tests/.yarn/cache/axios-npm-1.6.2-2334cb6eee-4a7429e2b7.zip differ diff --git a/e2e-tests/.yarn/cache/balanced-match-npm-1.0.2-a53c126459-9706c088a2.zip b/e2e-tests/.yarn/cache/balanced-match-npm-1.0.2-a53c126459-9706c088a2.zip new file mode 100644 index 0000000000..0693b6d7be Binary files /dev/null and b/e2e-tests/.yarn/cache/balanced-match-npm-1.0.2-a53c126459-9706c088a2.zip differ diff --git a/e2e-tests/.yarn/cache/base64-js-npm-1.5.1-b2f7275641-669632eb37.zip b/e2e-tests/.yarn/cache/base64-js-npm-1.5.1-b2f7275641-669632eb37.zip new file mode 100644 index 0000000000..a49ec87ac2 Binary files /dev/null and b/e2e-tests/.yarn/cache/base64-js-npm-1.5.1-b2f7275641-669632eb37.zip differ diff --git a/e2e-tests/.yarn/cache/binary-extensions-npm-2.2.0-180c33fec7-ccd267956c.zip b/e2e-tests/.yarn/cache/binary-extensions-npm-2.2.0-180c33fec7-ccd267956c.zip new file mode 100644 index 0000000000..2ac750c15e Binary files /dev/null and b/e2e-tests/.yarn/cache/binary-extensions-npm-2.2.0-180c33fec7-ccd267956c.zip differ diff --git a/e2e-tests/.yarn/cache/bl-npm-4.1.0-7f94cdcf3f-9e8521fa7e.zip b/e2e-tests/.yarn/cache/bl-npm-4.1.0-7f94cdcf3f-9e8521fa7e.zip new file mode 100644 index 0000000000..0b0454bb89 Binary files /dev/null and b/e2e-tests/.yarn/cache/bl-npm-4.1.0-7f94cdcf3f-9e8521fa7e.zip differ diff --git a/e2e-tests/.yarn/cache/bo-selector-npm-0.0.10-ececd665cc-b52e0e5267.zip b/e2e-tests/.yarn/cache/bo-selector-npm-0.0.10-ececd665cc-b52e0e5267.zip new file mode 100644 index 0000000000..7135b76408 Binary files /dev/null and b/e2e-tests/.yarn/cache/bo-selector-npm-0.0.10-ececd665cc-b52e0e5267.zip differ diff --git a/e2e-tests/.yarn/cache/brace-expansion-npm-1.1.11-fb95eb05ad-faf34a7bb0.zip b/e2e-tests/.yarn/cache/brace-expansion-npm-1.1.11-fb95eb05ad-faf34a7bb0.zip new file mode 100644 index 0000000000..9deab64add Binary files /dev/null and b/e2e-tests/.yarn/cache/brace-expansion-npm-1.1.11-fb95eb05ad-faf34a7bb0.zip differ diff --git a/e2e-tests/.yarn/cache/brace-expansion-npm-2.0.1-17aa2616f9-a61e7cd2e8.zip b/e2e-tests/.yarn/cache/brace-expansion-npm-2.0.1-17aa2616f9-a61e7cd2e8.zip new file mode 100644 index 0000000000..11d5bd0dbc Binary files /dev/null and b/e2e-tests/.yarn/cache/brace-expansion-npm-2.0.1-17aa2616f9-a61e7cd2e8.zip differ diff --git a/e2e-tests/.yarn/cache/braces-npm-3.0.2-782240b28a-e2a8e769a8.zip b/e2e-tests/.yarn/cache/braces-npm-3.0.2-782240b28a-e2a8e769a8.zip new file mode 100644 index 0000000000..92998e3cc7 Binary files /dev/null and b/e2e-tests/.yarn/cache/braces-npm-3.0.2-782240b28a-e2a8e769a8.zip differ diff --git a/e2e-tests/.yarn/cache/browser-stdout-npm-1.3.1-6b2376bf3f-b717b19b25.zip b/e2e-tests/.yarn/cache/browser-stdout-npm-1.3.1-6b2376bf3f-b717b19b25.zip new file mode 100644 index 0000000000..bf43caa582 Binary files /dev/null and b/e2e-tests/.yarn/cache/browser-stdout-npm-1.3.1-6b2376bf3f-b717b19b25.zip differ diff --git a/e2e-tests/.yarn/cache/buffer-npm-5.7.1-513ef8259e-e2cf8429e1.zip b/e2e-tests/.yarn/cache/buffer-npm-5.7.1-513ef8259e-e2cf8429e1.zip new file mode 100644 index 0000000000..15c7810bc9 Binary files /dev/null and b/e2e-tests/.yarn/cache/buffer-npm-5.7.1-513ef8259e-e2cf8429e1.zip differ diff --git a/e2e-tests/.yarn/cache/cacache-npm-18.0.1-11c6564db0-5a0b3b2ea4.zip b/e2e-tests/.yarn/cache/cacache-npm-18.0.1-11c6564db0-5a0b3b2ea4.zip new file mode 100644 index 0000000000..2b83327a09 Binary files /dev/null and b/e2e-tests/.yarn/cache/cacache-npm-18.0.1-11c6564db0-5a0b3b2ea4.zip differ diff --git a/e2e-tests/.yarn/cache/camel-case-npm-3.0.0-d87e5afe35-4190ed6ab8.zip b/e2e-tests/.yarn/cache/camel-case-npm-3.0.0-d87e5afe35-4190ed6ab8.zip new file mode 100644 index 0000000000..df3951c35d Binary files /dev/null and b/e2e-tests/.yarn/cache/camel-case-npm-3.0.0-d87e5afe35-4190ed6ab8.zip differ diff --git a/e2e-tests/.yarn/cache/camelcase-npm-6.3.0-e5e42a0d15-8c96818a90.zip b/e2e-tests/.yarn/cache/camelcase-npm-6.3.0-e5e42a0d15-8c96818a90.zip new file mode 100644 index 0000000000..c10ab683ed Binary files /dev/null and b/e2e-tests/.yarn/cache/camelcase-npm-6.3.0-e5e42a0d15-8c96818a90.zip differ diff --git a/e2e-tests/.yarn/cache/chai-deep-match-npm-1.2.1-dabaea01b5-fb8500cab7.zip b/e2e-tests/.yarn/cache/chai-deep-match-npm-1.2.1-dabaea01b5-fb8500cab7.zip new file mode 100644 index 0000000000..2b83a45a18 Binary files /dev/null and b/e2e-tests/.yarn/cache/chai-deep-match-npm-1.2.1-dabaea01b5-fb8500cab7.zip differ diff --git a/e2e-tests/.yarn/cache/chai-npm-4.3.10-96f52a35f0-536668c60a.zip b/e2e-tests/.yarn/cache/chai-npm-4.3.10-96f52a35f0-536668c60a.zip new file mode 100644 index 0000000000..1e8d11f1dc Binary files /dev/null and b/e2e-tests/.yarn/cache/chai-npm-4.3.10-96f52a35f0-536668c60a.zip differ diff --git a/e2e-tests/.yarn/cache/chalk-npm-2.4.2-3ea16dd91e-ec3661d38f.zip b/e2e-tests/.yarn/cache/chalk-npm-2.4.2-3ea16dd91e-ec3661d38f.zip new file mode 100644 index 0000000000..3f58a7b233 Binary files /dev/null and b/e2e-tests/.yarn/cache/chalk-npm-2.4.2-3ea16dd91e-ec3661d38f.zip differ diff --git a/e2e-tests/.yarn/cache/chalk-npm-4.1.2-ba8b67ab80-fe75c9d5c7.zip b/e2e-tests/.yarn/cache/chalk-npm-4.1.2-ba8b67ab80-fe75c9d5c7.zip new file mode 100644 index 0000000000..03d46b8646 Binary files /dev/null and b/e2e-tests/.yarn/cache/chalk-npm-4.1.2-ba8b67ab80-fe75c9d5c7.zip differ diff --git a/e2e-tests/.yarn/cache/chardet-npm-0.7.0-27933dd6c7-6fd5da1f5d.zip b/e2e-tests/.yarn/cache/chardet-npm-0.7.0-27933dd6c7-6fd5da1f5d.zip new file mode 100644 index 0000000000..0316560c62 Binary files /dev/null and b/e2e-tests/.yarn/cache/chardet-npm-0.7.0-27933dd6c7-6fd5da1f5d.zip differ diff --git a/e2e-tests/.yarn/cache/check-error-npm-1.0.3-137994eabc-e2131025cf.zip b/e2e-tests/.yarn/cache/check-error-npm-1.0.3-137994eabc-e2131025cf.zip new file mode 100644 index 0000000000..4a3d2b537e Binary files /dev/null and b/e2e-tests/.yarn/cache/check-error-npm-1.0.3-137994eabc-e2131025cf.zip differ diff --git a/e2e-tests/.yarn/cache/chokidar-npm-3.5.3-c5f9b0a56a-b49fcde401.zip b/e2e-tests/.yarn/cache/chokidar-npm-3.5.3-c5f9b0a56a-b49fcde401.zip new file mode 100644 index 0000000000..f5261bc278 Binary files /dev/null and b/e2e-tests/.yarn/cache/chokidar-npm-3.5.3-c5f9b0a56a-b49fcde401.zip differ diff --git a/e2e-tests/.yarn/cache/chownr-npm-2.0.0-638f1c9c61-c57cf9dd07.zip b/e2e-tests/.yarn/cache/chownr-npm-2.0.0-638f1c9c61-c57cf9dd07.zip new file mode 100644 index 0000000000..e074b2f4c7 Binary files /dev/null and b/e2e-tests/.yarn/cache/chownr-npm-2.0.0-638f1c9c61-c57cf9dd07.zip differ diff --git a/e2e-tests/.yarn/cache/class-transformer-npm-0.5.1-96b5161e6c-f191c8b4cc.zip b/e2e-tests/.yarn/cache/class-transformer-npm-0.5.1-96b5161e6c-f191c8b4cc.zip new file mode 100644 index 0000000000..0dadc13be3 Binary files /dev/null and b/e2e-tests/.yarn/cache/class-transformer-npm-0.5.1-96b5161e6c-f191c8b4cc.zip differ diff --git a/e2e-tests/.yarn/cache/clean-css-npm-4.2.4-5d1d0f2f9b-045ff6fcf4.zip b/e2e-tests/.yarn/cache/clean-css-npm-4.2.4-5d1d0f2f9b-045ff6fcf4.zip new file mode 100644 index 0000000000..ee504fea7f Binary files /dev/null and b/e2e-tests/.yarn/cache/clean-css-npm-4.2.4-5d1d0f2f9b-045ff6fcf4.zip differ diff --git a/e2e-tests/.yarn/cache/clean-stack-npm-2.2.0-a8ce435a5c-2ac8cd2b2f.zip b/e2e-tests/.yarn/cache/clean-stack-npm-2.2.0-a8ce435a5c-2ac8cd2b2f.zip new file mode 100644 index 0000000000..c510995715 Binary files /dev/null and b/e2e-tests/.yarn/cache/clean-stack-npm-2.2.0-a8ce435a5c-2ac8cd2b2f.zip differ diff --git a/e2e-tests/.yarn/cache/cli-cursor-npm-2.1.0-3920629c9c-d88e97bfda.zip b/e2e-tests/.yarn/cache/cli-cursor-npm-2.1.0-3920629c9c-d88e97bfda.zip new file mode 100644 index 0000000000..b8aff0b465 Binary files /dev/null and b/e2e-tests/.yarn/cache/cli-cursor-npm-2.1.0-3920629c9c-d88e97bfda.zip differ diff --git a/e2e-tests/.yarn/cache/cli-cursor-npm-3.1.0-fee1e46b5e-2692784c6c.zip b/e2e-tests/.yarn/cache/cli-cursor-npm-3.1.0-fee1e46b5e-2692784c6c.zip new file mode 100644 index 0000000000..2a8723c64e Binary files /dev/null and b/e2e-tests/.yarn/cache/cli-cursor-npm-3.1.0-fee1e46b5e-2692784c6c.zip differ diff --git a/e2e-tests/.yarn/cache/cli-spinners-npm-2.9.2-be9c08efee-1bd588289b.zip b/e2e-tests/.yarn/cache/cli-spinners-npm-2.9.2-be9c08efee-1bd588289b.zip new file mode 100644 index 0000000000..84deb09e2d Binary files /dev/null and b/e2e-tests/.yarn/cache/cli-spinners-npm-2.9.2-be9c08efee-1bd588289b.zip differ diff --git a/e2e-tests/.yarn/cache/cli-width-npm-2.2.1-4bdb77393c-3c21b897a2.zip b/e2e-tests/.yarn/cache/cli-width-npm-2.2.1-4bdb77393c-3c21b897a2.zip new file mode 100644 index 0000000000..c75e542aa2 Binary files /dev/null and b/e2e-tests/.yarn/cache/cli-width-npm-2.2.1-4bdb77393c-3c21b897a2.zip differ diff --git a/e2e-tests/.yarn/cache/cliui-npm-7.0.4-d6b8a9edb6-ce2e8f578a.zip b/e2e-tests/.yarn/cache/cliui-npm-7.0.4-d6b8a9edb6-ce2e8f578a.zip new file mode 100644 index 0000000000..24f58564e4 Binary files /dev/null and b/e2e-tests/.yarn/cache/cliui-npm-7.0.4-d6b8a9edb6-ce2e8f578a.zip differ diff --git a/e2e-tests/.yarn/cache/clone-npm-1.0.4-a610fcbcf9-d06418b733.zip b/e2e-tests/.yarn/cache/clone-npm-1.0.4-a610fcbcf9-d06418b733.zip new file mode 100644 index 0000000000..e06cc8632e Binary files /dev/null and b/e2e-tests/.yarn/cache/clone-npm-1.0.4-a610fcbcf9-d06418b733.zip differ diff --git a/e2e-tests/.yarn/cache/codeceptjs-npm-3.5.2-8c1b566c17-b1b3f19d62.zip b/e2e-tests/.yarn/cache/codeceptjs-npm-3.5.2-8c1b566c17-b1b3f19d62.zip new file mode 100644 index 0000000000..bb2c3f4112 Binary files /dev/null and b/e2e-tests/.yarn/cache/codeceptjs-npm-3.5.2-8c1b566c17-b1b3f19d62.zip differ diff --git a/e2e-tests/.yarn/cache/color-convert-npm-1.9.3-1fe690075e-fd7a64a17c.zip b/e2e-tests/.yarn/cache/color-convert-npm-1.9.3-1fe690075e-fd7a64a17c.zip new file mode 100644 index 0000000000..1b4c9391ea Binary files /dev/null and b/e2e-tests/.yarn/cache/color-convert-npm-1.9.3-1fe690075e-fd7a64a17c.zip differ diff --git a/e2e-tests/.yarn/cache/color-convert-npm-2.0.1-79730e935b-79e6bdb9fd.zip b/e2e-tests/.yarn/cache/color-convert-npm-2.0.1-79730e935b-79e6bdb9fd.zip new file mode 100644 index 0000000000..b3499adbb8 Binary files /dev/null and b/e2e-tests/.yarn/cache/color-convert-npm-2.0.1-79730e935b-79e6bdb9fd.zip differ diff --git a/e2e-tests/.yarn/cache/color-name-npm-1.1.3-728b7b5d39-09c5d3e33d.zip b/e2e-tests/.yarn/cache/color-name-npm-1.1.3-728b7b5d39-09c5d3e33d.zip new file mode 100644 index 0000000000..f158de9e2e Binary files /dev/null and b/e2e-tests/.yarn/cache/color-name-npm-1.1.3-728b7b5d39-09c5d3e33d.zip differ diff --git a/e2e-tests/.yarn/cache/color-name-npm-1.1.4-025792b0ea-b044585952.zip b/e2e-tests/.yarn/cache/color-name-npm-1.1.4-025792b0ea-b044585952.zip new file mode 100644 index 0000000000..ce1ffc4bf3 Binary files /dev/null and b/e2e-tests/.yarn/cache/color-name-npm-1.1.4-025792b0ea-b044585952.zip differ diff --git a/e2e-tests/.yarn/cache/combined-stream-npm-1.0.8-dc14d4a63a-49fa4aeb49.zip b/e2e-tests/.yarn/cache/combined-stream-npm-1.0.8-dc14d4a63a-49fa4aeb49.zip new file mode 100644 index 0000000000..89c8caa0fd Binary files /dev/null and b/e2e-tests/.yarn/cache/combined-stream-npm-1.0.8-dc14d4a63a-49fa4aeb49.zip differ diff --git a/e2e-tests/.yarn/cache/commander-npm-10.0.1-f17613b72b-436901d64a.zip b/e2e-tests/.yarn/cache/commander-npm-10.0.1-f17613b72b-436901d64a.zip new file mode 100644 index 0000000000..6e5dd2648d Binary files /dev/null and b/e2e-tests/.yarn/cache/commander-npm-10.0.1-f17613b72b-436901d64a.zip differ diff --git a/e2e-tests/.yarn/cache/commander-npm-11.1.0-56e979613c-fd1a8557c6.zip b/e2e-tests/.yarn/cache/commander-npm-11.1.0-56e979613c-fd1a8557c6.zip new file mode 100644 index 0000000000..6b16e27dfc Binary files /dev/null and b/e2e-tests/.yarn/cache/commander-npm-11.1.0-56e979613c-fd1a8557c6.zip differ diff --git a/e2e-tests/.yarn/cache/commander-npm-2.20.3-d8dcbaa39b-ab8c07884e.zip b/e2e-tests/.yarn/cache/commander-npm-2.20.3-d8dcbaa39b-ab8c07884e.zip new file mode 100644 index 0000000000..6a14adf507 Binary files /dev/null and b/e2e-tests/.yarn/cache/commander-npm-2.20.3-d8dcbaa39b-ab8c07884e.zip differ diff --git a/e2e-tests/.yarn/cache/concat-map-npm-0.0.1-85a921b7ee-902a9f5d89.zip b/e2e-tests/.yarn/cache/concat-map-npm-0.0.1-85a921b7ee-902a9f5d89.zip new file mode 100644 index 0000000000..66b4c329f8 Binary files /dev/null and b/e2e-tests/.yarn/cache/concat-map-npm-0.0.1-85a921b7ee-902a9f5d89.zip differ diff --git a/e2e-tests/.yarn/cache/config-chain-npm-1.1.13-82e06afbc4-828137a28e.zip b/e2e-tests/.yarn/cache/config-chain-npm-1.1.13-82e06afbc4-828137a28e.zip new file mode 100644 index 0000000000..b6b3d5f2bb Binary files /dev/null and b/e2e-tests/.yarn/cache/config-chain-npm-1.1.13-82e06afbc4-828137a28e.zip differ diff --git a/e2e-tests/.yarn/cache/create-require-npm-1.1.1-839884ca2e-a9a1503d43.zip b/e2e-tests/.yarn/cache/create-require-npm-1.1.1-839884ca2e-a9a1503d43.zip new file mode 100644 index 0000000000..afbfac2109 Binary files /dev/null and b/e2e-tests/.yarn/cache/create-require-npm-1.1.1-839884ca2e-a9a1503d43.zip differ diff --git a/e2e-tests/.yarn/cache/cross-env-npm-7.0.3-96d81820f4-26f2f3ea2a.zip b/e2e-tests/.yarn/cache/cross-env-npm-7.0.3-96d81820f4-26f2f3ea2a.zip new file mode 100644 index 0000000000..5f6297f326 Binary files /dev/null and b/e2e-tests/.yarn/cache/cross-env-npm-7.0.3-96d81820f4-26f2f3ea2a.zip differ diff --git a/e2e-tests/.yarn/cache/cross-spawn-npm-7.0.3-e4ff3e65b3-671cc7c728.zip b/e2e-tests/.yarn/cache/cross-spawn-npm-7.0.3-e4ff3e65b3-671cc7c728.zip new file mode 100644 index 0000000000..9613e383d1 Binary files /dev/null and b/e2e-tests/.yarn/cache/cross-spawn-npm-7.0.3-e4ff3e65b3-671cc7c728.zip differ diff --git a/e2e-tests/.yarn/cache/css-to-xpath-npm-0.1.0-cde91ed602-48e7150d8c.zip b/e2e-tests/.yarn/cache/css-to-xpath-npm-0.1.0-cde91ed602-48e7150d8c.zip new file mode 100644 index 0000000000..0135d1cada Binary files /dev/null and b/e2e-tests/.yarn/cache/css-to-xpath-npm-0.1.0-cde91ed602-48e7150d8c.zip differ diff --git a/e2e-tests/.yarn/cache/debug-npm-4.3.4-4513954577-3dbad3f94e.zip b/e2e-tests/.yarn/cache/debug-npm-4.3.4-4513954577-3dbad3f94e.zip new file mode 100644 index 0000000000..d3a11d8e2a Binary files /dev/null and b/e2e-tests/.yarn/cache/debug-npm-4.3.4-4513954577-3dbad3f94e.zip differ diff --git a/e2e-tests/.yarn/cache/decamelize-npm-4.0.0-12410e3409-b7d09b8265.zip b/e2e-tests/.yarn/cache/decamelize-npm-4.0.0-12410e3409-b7d09b8265.zip new file mode 100644 index 0000000000..ab2e946434 Binary files /dev/null and b/e2e-tests/.yarn/cache/decamelize-npm-4.0.0-12410e3409-b7d09b8265.zip differ diff --git a/e2e-tests/.yarn/cache/deep-eql-npm-4.1.3-020a64f862-7f6d30cb41.zip b/e2e-tests/.yarn/cache/deep-eql-npm-4.1.3-020a64f862-7f6d30cb41.zip new file mode 100644 index 0000000000..754bfdf3ad Binary files /dev/null and b/e2e-tests/.yarn/cache/deep-eql-npm-4.1.3-020a64f862-7f6d30cb41.zip differ diff --git a/e2e-tests/.yarn/cache/deep-keys-npm-0.5.0-e62ee82f7b-0f8a9b4042.zip b/e2e-tests/.yarn/cache/deep-keys-npm-0.5.0-e62ee82f7b-0f8a9b4042.zip new file mode 100644 index 0000000000..3e93ce245d Binary files /dev/null and b/e2e-tests/.yarn/cache/deep-keys-npm-0.5.0-e62ee82f7b-0f8a9b4042.zip differ diff --git a/e2e-tests/.yarn/cache/defaults-npm-1.0.4-f3fbaf2528-3a88b7a587.zip b/e2e-tests/.yarn/cache/defaults-npm-1.0.4-f3fbaf2528-3a88b7a587.zip new file mode 100644 index 0000000000..cbd9cc402f Binary files /dev/null and b/e2e-tests/.yarn/cache/defaults-npm-1.0.4-f3fbaf2528-3a88b7a587.zip differ diff --git a/e2e-tests/.yarn/cache/delayed-stream-npm-1.0.0-c5a4c4cc02-46fe6e83e2.zip b/e2e-tests/.yarn/cache/delayed-stream-npm-1.0.0-c5a4c4cc02-46fe6e83e2.zip new file mode 100644 index 0000000000..71514340e4 Binary files /dev/null and b/e2e-tests/.yarn/cache/delayed-stream-npm-1.0.0-c5a4c4cc02-46fe6e83e2.zip differ diff --git a/e2e-tests/.yarn/cache/diff-npm-4.0.2-73133c7102-f2c09b0ce4.zip b/e2e-tests/.yarn/cache/diff-npm-4.0.2-73133c7102-f2c09b0ce4.zip new file mode 100644 index 0000000000..e532815fd0 Binary files /dev/null and b/e2e-tests/.yarn/cache/diff-npm-4.0.2-73133c7102-f2c09b0ce4.zip differ diff --git a/e2e-tests/.yarn/cache/diff-npm-5.0.0-ad6900db18-f19fe29284.zip b/e2e-tests/.yarn/cache/diff-npm-5.0.0-ad6900db18-f19fe29284.zip new file mode 100644 index 0000000000..301b142879 Binary files /dev/null and b/e2e-tests/.yarn/cache/diff-npm-5.0.0-ad6900db18-f19fe29284.zip differ diff --git a/e2e-tests/.yarn/cache/dotenv-npm-16.3.1-e6d380a398-15d75e7279.zip b/e2e-tests/.yarn/cache/dotenv-npm-16.3.1-e6d380a398-15d75e7279.zip new file mode 100644 index 0000000000..7bdd10c0d7 Binary files /dev/null and b/e2e-tests/.yarn/cache/dotenv-npm-16.3.1-e6d380a398-15d75e7279.zip differ diff --git a/e2e-tests/.yarn/cache/eastasianwidth-npm-0.2.0-c37eb16bd1-7d00d7cd8e.zip b/e2e-tests/.yarn/cache/eastasianwidth-npm-0.2.0-c37eb16bd1-7d00d7cd8e.zip new file mode 100644 index 0000000000..10385995a6 Binary files /dev/null and b/e2e-tests/.yarn/cache/eastasianwidth-npm-0.2.0-c37eb16bd1-7d00d7cd8e.zip differ diff --git a/e2e-tests/.yarn/cache/editorconfig-npm-1.0.4-95c5a5b144-09904f1938.zip b/e2e-tests/.yarn/cache/editorconfig-npm-1.0.4-95c5a5b144-09904f1938.zip new file mode 100644 index 0000000000..29db2cb776 Binary files /dev/null and b/e2e-tests/.yarn/cache/editorconfig-npm-1.0.4-95c5a5b144-09904f1938.zip differ diff --git a/e2e-tests/.yarn/cache/emoji-regex-npm-8.0.0-213764015c-d4c5c39d5a.zip b/e2e-tests/.yarn/cache/emoji-regex-npm-8.0.0-213764015c-d4c5c39d5a.zip new file mode 100644 index 0000000000..d02d887971 Binary files /dev/null and b/e2e-tests/.yarn/cache/emoji-regex-npm-8.0.0-213764015c-d4c5c39d5a.zip differ diff --git a/e2e-tests/.yarn/cache/emoji-regex-npm-9.2.2-e6fac8d058-8487182da7.zip b/e2e-tests/.yarn/cache/emoji-regex-npm-9.2.2-e6fac8d058-8487182da7.zip new file mode 100644 index 0000000000..e6b0ab4d80 Binary files /dev/null and b/e2e-tests/.yarn/cache/emoji-regex-npm-9.2.2-e6fac8d058-8487182da7.zip differ diff --git a/e2e-tests/.yarn/cache/encoding-npm-0.1.13-82a1837d30-bb98632f8f.zip b/e2e-tests/.yarn/cache/encoding-npm-0.1.13-82a1837d30-bb98632f8f.zip new file mode 100644 index 0000000000..202e93181a Binary files /dev/null and b/e2e-tests/.yarn/cache/encoding-npm-0.1.13-82a1837d30-bb98632f8f.zip differ diff --git a/e2e-tests/.yarn/cache/entities-npm-4.5.0-7cdb83b832-853f8ebd5b.zip b/e2e-tests/.yarn/cache/entities-npm-4.5.0-7cdb83b832-853f8ebd5b.zip new file mode 100644 index 0000000000..3772a4510c Binary files /dev/null and b/e2e-tests/.yarn/cache/entities-npm-4.5.0-7cdb83b832-853f8ebd5b.zip differ diff --git a/e2e-tests/.yarn/cache/env-paths-npm-2.2.1-7c7577428c-65b5df55a8.zip b/e2e-tests/.yarn/cache/env-paths-npm-2.2.1-7c7577428c-65b5df55a8.zip new file mode 100644 index 0000000000..5fecf17a47 Binary files /dev/null and b/e2e-tests/.yarn/cache/env-paths-npm-2.2.1-7c7577428c-65b5df55a8.zip differ diff --git a/e2e-tests/.yarn/cache/envinfo-npm-7.11.0-5631444898-c45a7d2040.zip b/e2e-tests/.yarn/cache/envinfo-npm-7.11.0-5631444898-c45a7d2040.zip new file mode 100644 index 0000000000..e9dec103fc Binary files /dev/null and b/e2e-tests/.yarn/cache/envinfo-npm-7.11.0-5631444898-c45a7d2040.zip differ diff --git a/e2e-tests/.yarn/cache/err-code-npm-1.1.2-76c4ec5eff-a1c6a194d2.zip b/e2e-tests/.yarn/cache/err-code-npm-1.1.2-76c4ec5eff-a1c6a194d2.zip new file mode 100644 index 0000000000..c8793a2214 Binary files /dev/null and b/e2e-tests/.yarn/cache/err-code-npm-1.1.2-76c4ec5eff-a1c6a194d2.zip differ diff --git a/e2e-tests/.yarn/cache/err-code-npm-2.0.3-082e0ff9a7-8b7b1be20d.zip b/e2e-tests/.yarn/cache/err-code-npm-2.0.3-082e0ff9a7-8b7b1be20d.zip new file mode 100644 index 0000000000..3058584568 Binary files /dev/null and b/e2e-tests/.yarn/cache/err-code-npm-2.0.3-082e0ff9a7-8b7b1be20d.zip differ diff --git a/e2e-tests/.yarn/cache/escalade-npm-3.1.1-e02da076aa-a3e2a99f07.zip b/e2e-tests/.yarn/cache/escalade-npm-3.1.1-e02da076aa-a3e2a99f07.zip new file mode 100644 index 0000000000..88c57af4b8 Binary files /dev/null and b/e2e-tests/.yarn/cache/escalade-npm-3.1.1-e02da076aa-a3e2a99f07.zip differ diff --git a/e2e-tests/.yarn/cache/escape-string-regexp-npm-1.0.5-3284de402f-6092fda75c.zip b/e2e-tests/.yarn/cache/escape-string-regexp-npm-1.0.5-3284de402f-6092fda75c.zip new file mode 100644 index 0000000000..b7ea3be147 Binary files /dev/null and b/e2e-tests/.yarn/cache/escape-string-regexp-npm-1.0.5-3284de402f-6092fda75c.zip differ diff --git a/e2e-tests/.yarn/cache/escape-string-regexp-npm-4.0.0-4b531d8d59-98b48897d9.zip b/e2e-tests/.yarn/cache/escape-string-regexp-npm-4.0.0-4b531d8d59-98b48897d9.zip new file mode 100644 index 0000000000..c23e416b5a Binary files /dev/null and b/e2e-tests/.yarn/cache/escape-string-regexp-npm-4.0.0-4b531d8d59-98b48897d9.zip differ diff --git a/e2e-tests/.yarn/cache/exponential-backoff-npm-3.1.1-04df458b30-3d21519a4f.zip b/e2e-tests/.yarn/cache/exponential-backoff-npm-3.1.1-04df458b30-3d21519a4f.zip new file mode 100644 index 0000000000..ea4828ae9a Binary files /dev/null and b/e2e-tests/.yarn/cache/exponential-backoff-npm-3.1.1-04df458b30-3d21519a4f.zip differ diff --git a/e2e-tests/.yarn/cache/external-editor-npm-3.1.0-878e7807af-1c2a616a73.zip b/e2e-tests/.yarn/cache/external-editor-npm-3.1.0-878e7807af-1c2a616a73.zip new file mode 100644 index 0000000000..6375d6aad0 Binary files /dev/null and b/e2e-tests/.yarn/cache/external-editor-npm-3.1.0-878e7807af-1c2a616a73.zip differ diff --git a/e2e-tests/.yarn/cache/fast-deep-equal-npm-2.0.1-9c01e08a62-b701835a87.zip b/e2e-tests/.yarn/cache/fast-deep-equal-npm-2.0.1-9c01e08a62-b701835a87.zip new file mode 100644 index 0000000000..7da7ed6cb4 Binary files /dev/null and b/e2e-tests/.yarn/cache/fast-deep-equal-npm-2.0.1-9c01e08a62-b701835a87.zip differ diff --git a/e2e-tests/.yarn/cache/figures-npm-2.0.0-f2db814eec-081beb16ea.zip b/e2e-tests/.yarn/cache/figures-npm-2.0.0-f2db814eec-081beb16ea.zip new file mode 100644 index 0000000000..6f6dfbb7d4 Binary files /dev/null and b/e2e-tests/.yarn/cache/figures-npm-2.0.0-f2db814eec-081beb16ea.zip differ diff --git a/e2e-tests/.yarn/cache/figures-npm-3.2.0-85d357e955-85a6ad29e9.zip b/e2e-tests/.yarn/cache/figures-npm-3.2.0-85d357e955-85a6ad29e9.zip new file mode 100644 index 0000000000..eac0ef7226 Binary files /dev/null and b/e2e-tests/.yarn/cache/figures-npm-3.2.0-85d357e955-85a6ad29e9.zip differ diff --git a/e2e-tests/.yarn/cache/fill-range-npm-7.0.1-b8b1817caa-cc283f4e65.zip b/e2e-tests/.yarn/cache/fill-range-npm-7.0.1-b8b1817caa-cc283f4e65.zip new file mode 100644 index 0000000000..1da4a361d8 Binary files /dev/null and b/e2e-tests/.yarn/cache/fill-range-npm-7.0.1-b8b1817caa-cc283f4e65.zip differ diff --git a/e2e-tests/.yarn/cache/find-up-npm-5.0.0-e03e9b796d-07955e3573.zip b/e2e-tests/.yarn/cache/find-up-npm-5.0.0-e03e9b796d-07955e3573.zip new file mode 100644 index 0000000000..034f3a07ef Binary files /dev/null and b/e2e-tests/.yarn/cache/find-up-npm-5.0.0-e03e9b796d-07955e3573.zip differ diff --git a/e2e-tests/.yarn/cache/flat-npm-5.0.2-12748102a5-12a1536ac7.zip b/e2e-tests/.yarn/cache/flat-npm-5.0.2-12748102a5-12a1536ac7.zip new file mode 100644 index 0000000000..e3295fae7b Binary files /dev/null and b/e2e-tests/.yarn/cache/flat-npm-5.0.2-12748102a5-12a1536ac7.zip differ diff --git a/e2e-tests/.yarn/cache/fn-args-npm-4.0.0-840bf02a71-22cc41e5de.zip b/e2e-tests/.yarn/cache/fn-args-npm-4.0.0-840bf02a71-22cc41e5de.zip new file mode 100644 index 0000000000..ff4942f272 Binary files /dev/null and b/e2e-tests/.yarn/cache/fn-args-npm-4.0.0-840bf02a71-22cc41e5de.zip differ diff --git a/e2e-tests/.yarn/cache/follow-redirects-npm-1.15.3-ca69c47b72-584da22ec5.zip b/e2e-tests/.yarn/cache/follow-redirects-npm-1.15.3-ca69c47b72-584da22ec5.zip new file mode 100644 index 0000000000..7dbb7d2a3d Binary files /dev/null and b/e2e-tests/.yarn/cache/follow-redirects-npm-1.15.3-ca69c47b72-584da22ec5.zip differ diff --git a/e2e-tests/.yarn/cache/foreground-child-npm-3.1.1-77e78ed774-139d270bc8.zip b/e2e-tests/.yarn/cache/foreground-child-npm-3.1.1-77e78ed774-139d270bc8.zip new file mode 100644 index 0000000000..a288850fbb Binary files /dev/null and b/e2e-tests/.yarn/cache/foreground-child-npm-3.1.1-77e78ed774-139d270bc8.zip differ diff --git a/e2e-tests/.yarn/cache/form-data-npm-4.0.0-916facec2d-01135bf867.zip b/e2e-tests/.yarn/cache/form-data-npm-4.0.0-916facec2d-01135bf867.zip new file mode 100644 index 0000000000..8ae5189b00 Binary files /dev/null and b/e2e-tests/.yarn/cache/form-data-npm-4.0.0-916facec2d-01135bf867.zip differ diff --git a/e2e-tests/.yarn/cache/fs-extra-npm-8.1.0-197473387f-bf44f0e6ce.zip b/e2e-tests/.yarn/cache/fs-extra-npm-8.1.0-197473387f-bf44f0e6ce.zip new file mode 100644 index 0000000000..feb64dafe9 Binary files /dev/null and b/e2e-tests/.yarn/cache/fs-extra-npm-8.1.0-197473387f-bf44f0e6ce.zip differ diff --git a/e2e-tests/.yarn/cache/fs-minipass-npm-2.1.0-501ef87306-1b8d128dae.zip b/e2e-tests/.yarn/cache/fs-minipass-npm-2.1.0-501ef87306-1b8d128dae.zip new file mode 100644 index 0000000000..21a91aac75 Binary files /dev/null and b/e2e-tests/.yarn/cache/fs-minipass-npm-2.1.0-501ef87306-1b8d128dae.zip differ diff --git a/e2e-tests/.yarn/cache/fs-minipass-npm-3.0.3-d148d6ac19-8722a41109.zip b/e2e-tests/.yarn/cache/fs-minipass-npm-3.0.3-d148d6ac19-8722a41109.zip new file mode 100644 index 0000000000..b87db2e0d8 Binary files /dev/null and b/e2e-tests/.yarn/cache/fs-minipass-npm-3.0.3-d148d6ac19-8722a41109.zip differ diff --git a/e2e-tests/.yarn/cache/fs.realpath-npm-1.0.0-c8f05d8126-99ddea01a7.zip b/e2e-tests/.yarn/cache/fs.realpath-npm-1.0.0-c8f05d8126-99ddea01a7.zip new file mode 100644 index 0000000000..920c4caedc Binary files /dev/null and b/e2e-tests/.yarn/cache/fs.realpath-npm-1.0.0-c8f05d8126-99ddea01a7.zip differ diff --git a/e2e-tests/.yarn/cache/fsevents-npm-2.3.3-ce9fb0ffae-11e6ea6fea.zip b/e2e-tests/.yarn/cache/fsevents-npm-2.3.3-ce9fb0ffae-11e6ea6fea.zip new file mode 100644 index 0000000000..044eb1ba3b Binary files /dev/null and b/e2e-tests/.yarn/cache/fsevents-npm-2.3.3-ce9fb0ffae-11e6ea6fea.zip differ diff --git a/e2e-tests/.yarn/cache/fsevents-patch-21ad2b1333-8.zip b/e2e-tests/.yarn/cache/fsevents-patch-21ad2b1333-8.zip new file mode 100644 index 0000000000..c6a96dfcdf Binary files /dev/null and b/e2e-tests/.yarn/cache/fsevents-patch-21ad2b1333-8.zip differ diff --git a/e2e-tests/.yarn/cache/get-caller-file-npm-2.0.5-80e8a86305-b9769a836d.zip b/e2e-tests/.yarn/cache/get-caller-file-npm-2.0.5-80e8a86305-b9769a836d.zip new file mode 100644 index 0000000000..0aa2c9cd03 Binary files /dev/null and b/e2e-tests/.yarn/cache/get-caller-file-npm-2.0.5-80e8a86305-b9769a836d.zip differ diff --git a/e2e-tests/.yarn/cache/get-func-name-npm-2.0.2-409dbe3703-3f62f4c236.zip b/e2e-tests/.yarn/cache/get-func-name-npm-2.0.2-409dbe3703-3f62f4c236.zip new file mode 100644 index 0000000000..d80affc5a5 Binary files /dev/null and b/e2e-tests/.yarn/cache/get-func-name-npm-2.0.2-409dbe3703-3f62f4c236.zip differ diff --git a/e2e-tests/.yarn/cache/glob-npm-10.3.10-da1ef8b112-4f2fe2511e.zip b/e2e-tests/.yarn/cache/glob-npm-10.3.10-da1ef8b112-4f2fe2511e.zip new file mode 100644 index 0000000000..c64c67dbcd Binary files /dev/null and b/e2e-tests/.yarn/cache/glob-npm-10.3.10-da1ef8b112-4f2fe2511e.zip differ diff --git a/e2e-tests/.yarn/cache/glob-npm-6.0.4-dbb227ba4a-c4946c3d01.zip b/e2e-tests/.yarn/cache/glob-npm-6.0.4-dbb227ba4a-c4946c3d01.zip new file mode 100644 index 0000000000..93c0ddfb6f Binary files /dev/null and b/e2e-tests/.yarn/cache/glob-npm-6.0.4-dbb227ba4a-c4946c3d01.zip differ diff --git a/e2e-tests/.yarn/cache/glob-npm-7.2.0-bb4644d239-78a8ea9423.zip b/e2e-tests/.yarn/cache/glob-npm-7.2.0-bb4644d239-78a8ea9423.zip new file mode 100644 index 0000000000..0ef1638a62 Binary files /dev/null and b/e2e-tests/.yarn/cache/glob-npm-7.2.0-bb4644d239-78a8ea9423.zip differ diff --git a/e2e-tests/.yarn/cache/glob-parent-npm-5.1.2-021ab32634-f4f2bfe242.zip b/e2e-tests/.yarn/cache/glob-parent-npm-5.1.2-021ab32634-f4f2bfe242.zip new file mode 100644 index 0000000000..8a94317ecb Binary files /dev/null and b/e2e-tests/.yarn/cache/glob-parent-npm-5.1.2-021ab32634-f4f2bfe242.zip differ diff --git a/e2e-tests/.yarn/cache/graceful-fs-npm-4.2.11-24bb648a68-ac85f94da9.zip b/e2e-tests/.yarn/cache/graceful-fs-npm-4.2.11-24bb648a68-ac85f94da9.zip new file mode 100644 index 0000000000..99f412b523 Binary files /dev/null and b/e2e-tests/.yarn/cache/graceful-fs-npm-4.2.11-24bb648a68-ac85f94da9.zip differ diff --git a/e2e-tests/.yarn/cache/has-flag-npm-3.0.0-16ac11fe05-4a15638b45.zip b/e2e-tests/.yarn/cache/has-flag-npm-3.0.0-16ac11fe05-4a15638b45.zip new file mode 100644 index 0000000000..60eafa65f5 Binary files /dev/null and b/e2e-tests/.yarn/cache/has-flag-npm-3.0.0-16ac11fe05-4a15638b45.zip differ diff --git a/e2e-tests/.yarn/cache/has-flag-npm-4.0.0-32af9f0536-261a135703.zip b/e2e-tests/.yarn/cache/has-flag-npm-4.0.0-32af9f0536-261a135703.zip new file mode 100644 index 0000000000..6f5845da2f Binary files /dev/null and b/e2e-tests/.yarn/cache/has-flag-npm-4.0.0-32af9f0536-261a135703.zip differ diff --git a/e2e-tests/.yarn/cache/he-npm-1.2.0-3b73a2ff07-3d4d6babcc.zip b/e2e-tests/.yarn/cache/he-npm-1.2.0-3b73a2ff07-3d4d6babcc.zip new file mode 100644 index 0000000000..fe1d45f763 Binary files /dev/null and b/e2e-tests/.yarn/cache/he-npm-1.2.0-3b73a2ff07-3d4d6babcc.zip differ diff --git a/e2e-tests/.yarn/cache/html-minifier-npm-4.0.0-2c414aaddf-b426aee771.zip b/e2e-tests/.yarn/cache/html-minifier-npm-4.0.0-2c414aaddf-b426aee771.zip new file mode 100644 index 0000000000..88911e5f82 Binary files /dev/null and b/e2e-tests/.yarn/cache/html-minifier-npm-4.0.0-2c414aaddf-b426aee771.zip differ diff --git a/e2e-tests/.yarn/cache/http-cache-semantics-npm-4.1.1-1120131375-83ac0bc60b.zip b/e2e-tests/.yarn/cache/http-cache-semantics-npm-4.1.1-1120131375-83ac0bc60b.zip new file mode 100644 index 0000000000..19f1e0a201 Binary files /dev/null and b/e2e-tests/.yarn/cache/http-cache-semantics-npm-4.1.1-1120131375-83ac0bc60b.zip differ diff --git a/e2e-tests/.yarn/cache/http-proxy-agent-npm-7.0.0-106a57cc8c-48d4fac997.zip b/e2e-tests/.yarn/cache/http-proxy-agent-npm-7.0.0-106a57cc8c-48d4fac997.zip new file mode 100644 index 0000000000..99aaff14c0 Binary files /dev/null and b/e2e-tests/.yarn/cache/http-proxy-agent-npm-7.0.0-106a57cc8c-48d4fac997.zip differ diff --git a/e2e-tests/.yarn/cache/https-proxy-agent-npm-7.0.2-83ea6a5d42-088969a0dd.zip b/e2e-tests/.yarn/cache/https-proxy-agent-npm-7.0.2-83ea6a5d42-088969a0dd.zip new file mode 100644 index 0000000000..5ef9e3b10c Binary files /dev/null and b/e2e-tests/.yarn/cache/https-proxy-agent-npm-7.0.2-83ea6a5d42-088969a0dd.zip differ diff --git a/e2e-tests/.yarn/cache/iconv-lite-npm-0.4.24-c5c4ac6695-bd9f120f5a.zip b/e2e-tests/.yarn/cache/iconv-lite-npm-0.4.24-c5c4ac6695-bd9f120f5a.zip new file mode 100644 index 0000000000..9cae309cf9 Binary files /dev/null and b/e2e-tests/.yarn/cache/iconv-lite-npm-0.4.24-c5c4ac6695-bd9f120f5a.zip differ diff --git a/e2e-tests/.yarn/cache/iconv-lite-npm-0.6.3-24b8aae27e-3f60d47a5c.zip b/e2e-tests/.yarn/cache/iconv-lite-npm-0.6.3-24b8aae27e-3f60d47a5c.zip new file mode 100644 index 0000000000..f3f767a22d Binary files /dev/null and b/e2e-tests/.yarn/cache/iconv-lite-npm-0.6.3-24b8aae27e-3f60d47a5c.zip differ diff --git a/e2e-tests/.yarn/cache/ieee754-npm-1.2.1-fb63b3caeb-5144c0c981.zip b/e2e-tests/.yarn/cache/ieee754-npm-1.2.1-fb63b3caeb-5144c0c981.zip new file mode 100644 index 0000000000..74128ad8f2 Binary files /dev/null and b/e2e-tests/.yarn/cache/ieee754-npm-1.2.1-fb63b3caeb-5144c0c981.zip differ diff --git a/e2e-tests/.yarn/cache/imurmurhash-npm-0.1.4-610c5068a0-7cae75c8cd.zip b/e2e-tests/.yarn/cache/imurmurhash-npm-0.1.4-610c5068a0-7cae75c8cd.zip new file mode 100644 index 0000000000..9ddf4f880f Binary files /dev/null and b/e2e-tests/.yarn/cache/imurmurhash-npm-0.1.4-610c5068a0-7cae75c8cd.zip differ diff --git a/e2e-tests/.yarn/cache/indent-string-npm-4.0.0-7b717435b2-824cfb9929.zip b/e2e-tests/.yarn/cache/indent-string-npm-4.0.0-7b717435b2-824cfb9929.zip new file mode 100644 index 0000000000..eedfdb0f37 Binary files /dev/null and b/e2e-tests/.yarn/cache/indent-string-npm-4.0.0-7b717435b2-824cfb9929.zip differ diff --git a/e2e-tests/.yarn/cache/inflight-npm-1.0.6-ccedb4b908-f4f76aa072.zip b/e2e-tests/.yarn/cache/inflight-npm-1.0.6-ccedb4b908-f4f76aa072.zip new file mode 100644 index 0000000000..c5a4bb0725 Binary files /dev/null and b/e2e-tests/.yarn/cache/inflight-npm-1.0.6-ccedb4b908-f4f76aa072.zip differ diff --git a/e2e-tests/.yarn/cache/inherits-npm-2.0.4-c66b3957a0-4a48a73384.zip b/e2e-tests/.yarn/cache/inherits-npm-2.0.4-c66b3957a0-4a48a73384.zip new file mode 100644 index 0000000000..62c31cb78b Binary files /dev/null and b/e2e-tests/.yarn/cache/inherits-npm-2.0.4-c66b3957a0-4a48a73384.zip differ diff --git a/e2e-tests/.yarn/cache/ini-npm-1.3.8-fb5040b4c0-dfd98b0ca3.zip b/e2e-tests/.yarn/cache/ini-npm-1.3.8-fb5040b4c0-dfd98b0ca3.zip new file mode 100644 index 0000000000..ee9245b9cd Binary files /dev/null and b/e2e-tests/.yarn/cache/ini-npm-1.3.8-fb5040b4c0-dfd98b0ca3.zip differ diff --git a/e2e-tests/.yarn/cache/inquirer-npm-6.5.2-4f6408c247-175ad4cd1e.zip b/e2e-tests/.yarn/cache/inquirer-npm-6.5.2-4f6408c247-175ad4cd1e.zip new file mode 100644 index 0000000000..20b2deb196 Binary files /dev/null and b/e2e-tests/.yarn/cache/inquirer-npm-6.5.2-4f6408c247-175ad4cd1e.zip differ diff --git a/e2e-tests/.yarn/cache/ip-npm-2.0.0-204facb3cc-cfcfac6b87.zip b/e2e-tests/.yarn/cache/ip-npm-2.0.0-204facb3cc-cfcfac6b87.zip new file mode 100644 index 0000000000..0aad8938ba Binary files /dev/null and b/e2e-tests/.yarn/cache/ip-npm-2.0.0-204facb3cc-cfcfac6b87.zip differ diff --git a/e2e-tests/.yarn/cache/is-binary-path-npm-2.1.0-e61d46f557-84192eb88c.zip b/e2e-tests/.yarn/cache/is-binary-path-npm-2.1.0-e61d46f557-84192eb88c.zip new file mode 100644 index 0000000000..b509d00f58 Binary files /dev/null and b/e2e-tests/.yarn/cache/is-binary-path-npm-2.1.0-e61d46f557-84192eb88c.zip differ diff --git a/e2e-tests/.yarn/cache/is-extglob-npm-2.1.1-0870ea68b5-df033653d0.zip b/e2e-tests/.yarn/cache/is-extglob-npm-2.1.1-0870ea68b5-df033653d0.zip new file mode 100644 index 0000000000..0acbc56e22 Binary files /dev/null and b/e2e-tests/.yarn/cache/is-extglob-npm-2.1.1-0870ea68b5-df033653d0.zip differ diff --git a/e2e-tests/.yarn/cache/is-fullwidth-code-point-npm-2.0.0-507f56ec71-eef9c6e15f.zip b/e2e-tests/.yarn/cache/is-fullwidth-code-point-npm-2.0.0-507f56ec71-eef9c6e15f.zip new file mode 100644 index 0000000000..56f17d3988 Binary files /dev/null and b/e2e-tests/.yarn/cache/is-fullwidth-code-point-npm-2.0.0-507f56ec71-eef9c6e15f.zip differ diff --git a/e2e-tests/.yarn/cache/is-fullwidth-code-point-npm-3.0.0-1ecf4ebee5-44a30c2945.zip b/e2e-tests/.yarn/cache/is-fullwidth-code-point-npm-3.0.0-1ecf4ebee5-44a30c2945.zip new file mode 100644 index 0000000000..dccc80a970 Binary files /dev/null and b/e2e-tests/.yarn/cache/is-fullwidth-code-point-npm-3.0.0-1ecf4ebee5-44a30c2945.zip differ diff --git a/e2e-tests/.yarn/cache/is-glob-npm-4.0.3-cb87bf1bdb-d381c1319f.zip b/e2e-tests/.yarn/cache/is-glob-npm-4.0.3-cb87bf1bdb-d381c1319f.zip new file mode 100644 index 0000000000..52274ed254 Binary files /dev/null and b/e2e-tests/.yarn/cache/is-glob-npm-4.0.3-cb87bf1bdb-d381c1319f.zip differ diff --git a/e2e-tests/.yarn/cache/is-interactive-npm-1.0.0-7ff7c6e04a-824808776e.zip b/e2e-tests/.yarn/cache/is-interactive-npm-1.0.0-7ff7c6e04a-824808776e.zip new file mode 100644 index 0000000000..0c1f90e041 Binary files /dev/null and b/e2e-tests/.yarn/cache/is-interactive-npm-1.0.0-7ff7c6e04a-824808776e.zip differ diff --git a/e2e-tests/.yarn/cache/is-lambda-npm-1.0.1-7ab55bc8a8-93a32f0194.zip b/e2e-tests/.yarn/cache/is-lambda-npm-1.0.1-7ab55bc8a8-93a32f0194.zip new file mode 100644 index 0000000000..f981b1bea6 Binary files /dev/null and b/e2e-tests/.yarn/cache/is-lambda-npm-1.0.1-7ab55bc8a8-93a32f0194.zip differ diff --git a/e2e-tests/.yarn/cache/is-number-npm-7.0.0-060086935c-456ac6f8e0.zip b/e2e-tests/.yarn/cache/is-number-npm-7.0.0-060086935c-456ac6f8e0.zip new file mode 100644 index 0000000000..e4ae048576 Binary files /dev/null and b/e2e-tests/.yarn/cache/is-number-npm-7.0.0-060086935c-456ac6f8e0.zip differ diff --git a/e2e-tests/.yarn/cache/is-plain-obj-npm-2.1.0-8dffd7ae9c-cec9100678.zip b/e2e-tests/.yarn/cache/is-plain-obj-npm-2.1.0-8dffd7ae9c-cec9100678.zip new file mode 100644 index 0000000000..49504a5bbc Binary files /dev/null and b/e2e-tests/.yarn/cache/is-plain-obj-npm-2.1.0-8dffd7ae9c-cec9100678.zip differ diff --git a/e2e-tests/.yarn/cache/is-unicode-supported-npm-0.1.0-0833e1bbfb-a2aab86ee7.zip b/e2e-tests/.yarn/cache/is-unicode-supported-npm-0.1.0-0833e1bbfb-a2aab86ee7.zip new file mode 100644 index 0000000000..7425daa366 Binary files /dev/null and b/e2e-tests/.yarn/cache/is-unicode-supported-npm-0.1.0-0833e1bbfb-a2aab86ee7.zip differ diff --git a/e2e-tests/.yarn/cache/isexe-npm-2.0.0-b58870bd2e-26bf6c5480.zip b/e2e-tests/.yarn/cache/isexe-npm-2.0.0-b58870bd2e-26bf6c5480.zip new file mode 100644 index 0000000000..077597d686 Binary files /dev/null and b/e2e-tests/.yarn/cache/isexe-npm-2.0.0-b58870bd2e-26bf6c5480.zip differ diff --git a/e2e-tests/.yarn/cache/isexe-npm-3.1.1-9c0061eead-7fe1931ee4.zip b/e2e-tests/.yarn/cache/isexe-npm-3.1.1-9c0061eead-7fe1931ee4.zip new file mode 100644 index 0000000000..7ea5462480 Binary files /dev/null and b/e2e-tests/.yarn/cache/isexe-npm-3.1.1-9c0061eead-7fe1931ee4.zip differ diff --git a/e2e-tests/.yarn/cache/jackspeak-npm-2.3.6-42e1233172-57d43ad11e.zip b/e2e-tests/.yarn/cache/jackspeak-npm-2.3.6-42e1233172-57d43ad11e.zip new file mode 100644 index 0000000000..7e9aaab68f Binary files /dev/null and b/e2e-tests/.yarn/cache/jackspeak-npm-2.3.6-42e1233172-57d43ad11e.zip differ diff --git a/e2e-tests/.yarn/cache/joi-npm-17.11.0-66efd6d755-3a4e9ecba3.zip b/e2e-tests/.yarn/cache/joi-npm-17.11.0-66efd6d755-3a4e9ecba3.zip new file mode 100644 index 0000000000..33aedc8b9b Binary files /dev/null and b/e2e-tests/.yarn/cache/joi-npm-17.11.0-66efd6d755-3a4e9ecba3.zip differ diff --git a/e2e-tests/.yarn/cache/js-beautify-npm-1.14.11-6578c9c9d5-92512b8dcc.zip b/e2e-tests/.yarn/cache/js-beautify-npm-1.14.11-6578c9c9d5-92512b8dcc.zip new file mode 100644 index 0000000000..cd7afa839c Binary files /dev/null and b/e2e-tests/.yarn/cache/js-beautify-npm-1.14.11-6578c9c9d5-92512b8dcc.zip differ diff --git a/e2e-tests/.yarn/cache/js-yaml-npm-4.1.0-3606f32312-c7830dfd45.zip b/e2e-tests/.yarn/cache/js-yaml-npm-4.1.0-3606f32312-c7830dfd45.zip new file mode 100644 index 0000000000..659c85d097 Binary files /dev/null and b/e2e-tests/.yarn/cache/js-yaml-npm-4.1.0-3606f32312-c7830dfd45.zip differ diff --git a/e2e-tests/.yarn/cache/jsonfile-npm-4.0.0-10ce3aea15-6447d6224f.zip b/e2e-tests/.yarn/cache/jsonfile-npm-4.0.0-10ce3aea15-6447d6224f.zip new file mode 100644 index 0000000000..a8f0e975ad Binary files /dev/null and b/e2e-tests/.yarn/cache/jsonfile-npm-4.0.0-10ce3aea15-6447d6224f.zip differ diff --git a/e2e-tests/.yarn/cache/locate-path-npm-6.0.0-06a1e4c528-72eb661788.zip b/e2e-tests/.yarn/cache/locate-path-npm-6.0.0-06a1e4c528-72eb661788.zip new file mode 100644 index 0000000000..b67b77440b Binary files /dev/null and b/e2e-tests/.yarn/cache/locate-path-npm-6.0.0-06a1e4c528-72eb661788.zip differ diff --git a/e2e-tests/.yarn/cache/lodash-npm-4.17.21-6382451519-eb835a2e51.zip b/e2e-tests/.yarn/cache/lodash-npm-4.17.21-6382451519-eb835a2e51.zip new file mode 100644 index 0000000000..22ac44c4ef Binary files /dev/null and b/e2e-tests/.yarn/cache/lodash-npm-4.17.21-6382451519-eb835a2e51.zip differ diff --git a/e2e-tests/.yarn/cache/lodash-pickdeep-npm-1.0.2-d49bd1a0b5-ba9aeb5929.zip b/e2e-tests/.yarn/cache/lodash-pickdeep-npm-1.0.2-d49bd1a0b5-ba9aeb5929.zip new file mode 100644 index 0000000000..2d1d4bf697 Binary files /dev/null and b/e2e-tests/.yarn/cache/lodash-pickdeep-npm-1.0.2-d49bd1a0b5-ba9aeb5929.zip differ diff --git a/e2e-tests/.yarn/cache/lodash.clonedeep-npm-4.5.0-fbc3cda4e5-92c46f094b.zip b/e2e-tests/.yarn/cache/lodash.clonedeep-npm-4.5.0-fbc3cda4e5-92c46f094b.zip new file mode 100644 index 0000000000..5765f760d7 Binary files /dev/null and b/e2e-tests/.yarn/cache/lodash.clonedeep-npm-4.5.0-fbc3cda4e5-92c46f094b.zip differ diff --git a/e2e-tests/.yarn/cache/lodash.merge-npm-4.6.2-77cb4416bf-ad580b4bdb.zip b/e2e-tests/.yarn/cache/lodash.merge-npm-4.6.2-77cb4416bf-ad580b4bdb.zip new file mode 100644 index 0000000000..f6bc72b461 Binary files /dev/null and b/e2e-tests/.yarn/cache/lodash.merge-npm-4.6.2-77cb4416bf-ad580b4bdb.zip differ diff --git a/e2e-tests/.yarn/cache/lodash.mergewith-npm-4.6.2-7d2d4201ec-a6db2a9339.zip b/e2e-tests/.yarn/cache/lodash.mergewith-npm-4.6.2-7d2d4201ec-a6db2a9339.zip new file mode 100644 index 0000000000..a307f13c94 Binary files /dev/null and b/e2e-tests/.yarn/cache/lodash.mergewith-npm-4.6.2-7d2d4201ec-a6db2a9339.zip differ diff --git a/e2e-tests/.yarn/cache/log-symbols-npm-4.1.0-0a13492d8b-fce1497b31.zip b/e2e-tests/.yarn/cache/log-symbols-npm-4.1.0-0a13492d8b-fce1497b31.zip new file mode 100644 index 0000000000..6a7e076159 Binary files /dev/null and b/e2e-tests/.yarn/cache/log-symbols-npm-4.1.0-0a13492d8b-fce1497b31.zip differ diff --git a/e2e-tests/.yarn/cache/loupe-npm-2.3.7-f294c2ef33-96c058ec71.zip b/e2e-tests/.yarn/cache/loupe-npm-2.3.7-f294c2ef33-96c058ec71.zip new file mode 100644 index 0000000000..92d878f597 Binary files /dev/null and b/e2e-tests/.yarn/cache/loupe-npm-2.3.7-f294c2ef33-96c058ec71.zip differ diff --git a/e2e-tests/.yarn/cache/lower-case-npm-1.1.4-9880e9dcb0-1ca9393b5e.zip b/e2e-tests/.yarn/cache/lower-case-npm-1.1.4-9880e9dcb0-1ca9393b5e.zip new file mode 100644 index 0000000000..1fdb47db5e Binary files /dev/null and b/e2e-tests/.yarn/cache/lower-case-npm-1.1.4-9880e9dcb0-1ca9393b5e.zip differ diff --git a/e2e-tests/.yarn/cache/lru-cache-npm-10.1.0-f3d3a0f0ab-58056d33e2.zip b/e2e-tests/.yarn/cache/lru-cache-npm-10.1.0-f3d3a0f0ab-58056d33e2.zip new file mode 100644 index 0000000000..43c8ce7528 Binary files /dev/null and b/e2e-tests/.yarn/cache/lru-cache-npm-10.1.0-f3d3a0f0ab-58056d33e2.zip differ diff --git a/e2e-tests/.yarn/cache/lru-cache-npm-6.0.0-b4c8668fe1-f97f499f89.zip b/e2e-tests/.yarn/cache/lru-cache-npm-6.0.0-b4c8668fe1-f97f499f89.zip new file mode 100644 index 0000000000..1635dac9b2 Binary files /dev/null and b/e2e-tests/.yarn/cache/lru-cache-npm-6.0.0-b4c8668fe1-f97f499f89.zip differ diff --git a/e2e-tests/.yarn/cache/make-error-npm-1.3.6-ccb85d9458-b86e5e0e25.zip b/e2e-tests/.yarn/cache/make-error-npm-1.3.6-ccb85d9458-b86e5e0e25.zip new file mode 100644 index 0000000000..7f7dc189d2 Binary files /dev/null and b/e2e-tests/.yarn/cache/make-error-npm-1.3.6-ccb85d9458-b86e5e0e25.zip differ diff --git a/e2e-tests/.yarn/cache/make-fetch-happen-npm-13.0.0-f87a92bb87-7c7a6d381c.zip b/e2e-tests/.yarn/cache/make-fetch-happen-npm-13.0.0-f87a92bb87-7c7a6d381c.zip new file mode 100644 index 0000000000..fa4a8924bc Binary files /dev/null and b/e2e-tests/.yarn/cache/make-fetch-happen-npm-13.0.0-f87a92bb87-7c7a6d381c.zip differ diff --git a/e2e-tests/.yarn/cache/mime-db-npm-1.52.0-b5371d6fd2-0d99a03585.zip b/e2e-tests/.yarn/cache/mime-db-npm-1.52.0-b5371d6fd2-0d99a03585.zip new file mode 100644 index 0000000000..8db7263574 Binary files /dev/null and b/e2e-tests/.yarn/cache/mime-db-npm-1.52.0-b5371d6fd2-0d99a03585.zip differ diff --git a/e2e-tests/.yarn/cache/mime-types-npm-2.1.35-dd9ea9f3e2-89a5b7f1de.zip b/e2e-tests/.yarn/cache/mime-types-npm-2.1.35-dd9ea9f3e2-89a5b7f1de.zip new file mode 100644 index 0000000000..166d33254d Binary files /dev/null and b/e2e-tests/.yarn/cache/mime-types-npm-2.1.35-dd9ea9f3e2-89a5b7f1de.zip differ diff --git a/e2e-tests/.yarn/cache/mimic-fn-npm-1.2.0-960bf15ab7-69c0820515.zip b/e2e-tests/.yarn/cache/mimic-fn-npm-1.2.0-960bf15ab7-69c0820515.zip new file mode 100644 index 0000000000..ae711478fd Binary files /dev/null and b/e2e-tests/.yarn/cache/mimic-fn-npm-1.2.0-960bf15ab7-69c0820515.zip differ diff --git a/e2e-tests/.yarn/cache/mimic-fn-npm-2.1.0-4fbeb3abb4-d2421a3444.zip b/e2e-tests/.yarn/cache/mimic-fn-npm-2.1.0-4fbeb3abb4-d2421a3444.zip new file mode 100644 index 0000000000..1cc2414f46 Binary files /dev/null and b/e2e-tests/.yarn/cache/mimic-fn-npm-2.1.0-4fbeb3abb4-d2421a3444.zip differ diff --git a/e2e-tests/.yarn/cache/minimatch-npm-3.1.2-9405269906-c154e56640.zip b/e2e-tests/.yarn/cache/minimatch-npm-3.1.2-9405269906-c154e56640.zip new file mode 100644 index 0000000000..ba0c510402 Binary files /dev/null and b/e2e-tests/.yarn/cache/minimatch-npm-3.1.2-9405269906-c154e56640.zip differ diff --git a/e2e-tests/.yarn/cache/minimatch-npm-5.0.1-612724f6f0-b34b98463d.zip b/e2e-tests/.yarn/cache/minimatch-npm-5.0.1-612724f6f0-b34b98463d.zip new file mode 100644 index 0000000000..3e1e05a8e4 Binary files /dev/null and b/e2e-tests/.yarn/cache/minimatch-npm-5.0.1-612724f6f0-b34b98463d.zip differ diff --git a/e2e-tests/.yarn/cache/minimatch-npm-9.0.1-277fdc6fbd-97f5f5284b.zip b/e2e-tests/.yarn/cache/minimatch-npm-9.0.1-277fdc6fbd-97f5f5284b.zip new file mode 100644 index 0000000000..66cac932f1 Binary files /dev/null and b/e2e-tests/.yarn/cache/minimatch-npm-9.0.1-277fdc6fbd-97f5f5284b.zip differ diff --git a/e2e-tests/.yarn/cache/minimatch-npm-9.0.3-69d7d6fad5-253487976b.zip b/e2e-tests/.yarn/cache/minimatch-npm-9.0.3-69d7d6fad5-253487976b.zip new file mode 100644 index 0000000000..265822fc2b Binary files /dev/null and b/e2e-tests/.yarn/cache/minimatch-npm-9.0.3-69d7d6fad5-253487976b.zip differ diff --git a/e2e-tests/.yarn/cache/minipass-collect-npm-2.0.1-73d3907e40-b251bceea6.zip b/e2e-tests/.yarn/cache/minipass-collect-npm-2.0.1-73d3907e40-b251bceea6.zip new file mode 100644 index 0000000000..96df703423 Binary files /dev/null and b/e2e-tests/.yarn/cache/minipass-collect-npm-2.0.1-73d3907e40-b251bceea6.zip differ diff --git a/e2e-tests/.yarn/cache/minipass-fetch-npm-3.0.4-200ac7c66d-af7aad15d5.zip b/e2e-tests/.yarn/cache/minipass-fetch-npm-3.0.4-200ac7c66d-af7aad15d5.zip new file mode 100644 index 0000000000..8eafd96084 Binary files /dev/null and b/e2e-tests/.yarn/cache/minipass-fetch-npm-3.0.4-200ac7c66d-af7aad15d5.zip differ diff --git a/e2e-tests/.yarn/cache/minipass-flush-npm-1.0.5-efe79d9826-56269a0b22.zip b/e2e-tests/.yarn/cache/minipass-flush-npm-1.0.5-efe79d9826-56269a0b22.zip new file mode 100644 index 0000000000..913b687a4d Binary files /dev/null and b/e2e-tests/.yarn/cache/minipass-flush-npm-1.0.5-efe79d9826-56269a0b22.zip differ diff --git a/e2e-tests/.yarn/cache/minipass-npm-3.3.6-b8d93a945b-a30d083c80.zip b/e2e-tests/.yarn/cache/minipass-npm-3.3.6-b8d93a945b-a30d083c80.zip new file mode 100644 index 0000000000..26e006f393 Binary files /dev/null and b/e2e-tests/.yarn/cache/minipass-npm-3.3.6-b8d93a945b-a30d083c80.zip differ diff --git a/e2e-tests/.yarn/cache/minipass-npm-5.0.0-c64fb63c92-425dab2887.zip b/e2e-tests/.yarn/cache/minipass-npm-5.0.0-c64fb63c92-425dab2887.zip new file mode 100644 index 0000000000..c49ee93fbb Binary files /dev/null and b/e2e-tests/.yarn/cache/minipass-npm-5.0.0-c64fb63c92-425dab2887.zip differ diff --git a/e2e-tests/.yarn/cache/minipass-npm-7.0.4-eacb4e042e-87585e258b.zip b/e2e-tests/.yarn/cache/minipass-npm-7.0.4-eacb4e042e-87585e258b.zip new file mode 100644 index 0000000000..472202f6bc Binary files /dev/null and b/e2e-tests/.yarn/cache/minipass-npm-7.0.4-eacb4e042e-87585e258b.zip differ diff --git a/e2e-tests/.yarn/cache/minipass-pipeline-npm-1.2.4-5924cb077f-b14240dac0.zip b/e2e-tests/.yarn/cache/minipass-pipeline-npm-1.2.4-5924cb077f-b14240dac0.zip new file mode 100644 index 0000000000..4deae416db Binary files /dev/null and b/e2e-tests/.yarn/cache/minipass-pipeline-npm-1.2.4-5924cb077f-b14240dac0.zip differ diff --git a/e2e-tests/.yarn/cache/minipass-sized-npm-1.0.3-306d86f432-79076749fc.zip b/e2e-tests/.yarn/cache/minipass-sized-npm-1.0.3-306d86f432-79076749fc.zip new file mode 100644 index 0000000000..b6f4644f62 Binary files /dev/null and b/e2e-tests/.yarn/cache/minipass-sized-npm-1.0.3-306d86f432-79076749fc.zip differ diff --git a/e2e-tests/.yarn/cache/minizlib-npm-2.1.2-ea89cd0cfb-f1fdeac0b0.zip b/e2e-tests/.yarn/cache/minizlib-npm-2.1.2-ea89cd0cfb-f1fdeac0b0.zip new file mode 100644 index 0000000000..efb1b7f6b6 Binary files /dev/null and b/e2e-tests/.yarn/cache/minizlib-npm-2.1.2-ea89cd0cfb-f1fdeac0b0.zip differ diff --git a/e2e-tests/.yarn/cache/mkdirp-npm-1.0.4-37f6ef56b9-a96865108c.zip b/e2e-tests/.yarn/cache/mkdirp-npm-1.0.4-37f6ef56b9-a96865108c.zip new file mode 100644 index 0000000000..4625e914a4 Binary files /dev/null and b/e2e-tests/.yarn/cache/mkdirp-npm-1.0.4-37f6ef56b9-a96865108c.zip differ diff --git a/e2e-tests/.yarn/cache/mocha-npm-10.2.0-87db25c7c5-406c45eab1.zip b/e2e-tests/.yarn/cache/mocha-npm-10.2.0-87db25c7c5-406c45eab1.zip new file mode 100644 index 0000000000..171c682ed7 Binary files /dev/null and b/e2e-tests/.yarn/cache/mocha-npm-10.2.0-87db25c7c5-406c45eab1.zip differ diff --git a/e2e-tests/.yarn/cache/ms-npm-2.1.2-ec0c1512ff-673cdb2c31.zip b/e2e-tests/.yarn/cache/ms-npm-2.1.2-ec0c1512ff-673cdb2c31.zip new file mode 100644 index 0000000000..725e9b8c17 Binary files /dev/null and b/e2e-tests/.yarn/cache/ms-npm-2.1.2-ec0c1512ff-673cdb2c31.zip differ diff --git a/e2e-tests/.yarn/cache/ms-npm-2.1.3-81ff3cfac1-aa92de6080.zip b/e2e-tests/.yarn/cache/ms-npm-2.1.3-81ff3cfac1-aa92de6080.zip new file mode 100644 index 0000000000..2b635f28eb Binary files /dev/null and b/e2e-tests/.yarn/cache/ms-npm-2.1.3-81ff3cfac1-aa92de6080.zip differ diff --git a/e2e-tests/.yarn/cache/mute-stream-npm-0.0.7-22b59a65dd-a9d4772c1c.zip b/e2e-tests/.yarn/cache/mute-stream-npm-0.0.7-22b59a65dd-a9d4772c1c.zip new file mode 100644 index 0000000000..b1d92e46c3 Binary files /dev/null and b/e2e-tests/.yarn/cache/mute-stream-npm-0.0.7-22b59a65dd-a9d4772c1c.zip differ diff --git a/e2e-tests/.yarn/cache/nanoid-npm-3.3.3-25d865be84-ada019402a.zip b/e2e-tests/.yarn/cache/nanoid-npm-3.3.3-25d865be84-ada019402a.zip new file mode 100644 index 0000000000..d28e91f1ff Binary files /dev/null and b/e2e-tests/.yarn/cache/nanoid-npm-3.3.3-25d865be84-ada019402a.zip differ diff --git a/e2e-tests/.yarn/cache/negotiator-npm-0.6.3-9d50e36171-b8ffeb1e26.zip b/e2e-tests/.yarn/cache/negotiator-npm-0.6.3-9d50e36171-b8ffeb1e26.zip new file mode 100644 index 0000000000..e8c5cf4899 Binary files /dev/null and b/e2e-tests/.yarn/cache/negotiator-npm-0.6.3-9d50e36171-b8ffeb1e26.zip differ diff --git a/e2e-tests/.yarn/cache/no-case-npm-2.3.2-5403767f87-8564877319.zip b/e2e-tests/.yarn/cache/no-case-npm-2.3.2-5403767f87-8564877319.zip new file mode 100644 index 0000000000..b8d6273fdb Binary files /dev/null and b/e2e-tests/.yarn/cache/no-case-npm-2.3.2-5403767f87-8564877319.zip differ diff --git a/e2e-tests/.yarn/cache/node-gyp-npm-10.0.1-48708ce70b-60a74e66d3.zip b/e2e-tests/.yarn/cache/node-gyp-npm-10.0.1-48708ce70b-60a74e66d3.zip new file mode 100644 index 0000000000..a0fdba867f Binary files /dev/null and b/e2e-tests/.yarn/cache/node-gyp-npm-10.0.1-48708ce70b-60a74e66d3.zip differ diff --git a/e2e-tests/.yarn/cache/nopt-npm-7.2.0-dd734b678d-a9c0f57fb8.zip b/e2e-tests/.yarn/cache/nopt-npm-7.2.0-dd734b678d-a9c0f57fb8.zip new file mode 100644 index 0000000000..ddae56fcb3 Binary files /dev/null and b/e2e-tests/.yarn/cache/nopt-npm-7.2.0-dd734b678d-a9c0f57fb8.zip differ diff --git a/e2e-tests/.yarn/cache/normalize-path-npm-3.0.0-658ba7d77f-88eeb4da89.zip b/e2e-tests/.yarn/cache/normalize-path-npm-3.0.0-658ba7d77f-88eeb4da89.zip new file mode 100644 index 0000000000..855af70e63 Binary files /dev/null and b/e2e-tests/.yarn/cache/normalize-path-npm-3.0.0-658ba7d77f-88eeb4da89.zip differ diff --git a/e2e-tests/.yarn/cache/once-npm-1.4.0-ccf03ef07a-cd0a885013.zip b/e2e-tests/.yarn/cache/once-npm-1.4.0-ccf03ef07a-cd0a885013.zip new file mode 100644 index 0000000000..1b943eec95 Binary files /dev/null and b/e2e-tests/.yarn/cache/once-npm-1.4.0-ccf03ef07a-cd0a885013.zip differ diff --git a/e2e-tests/.yarn/cache/onetime-npm-2.0.1-6c39ecc911-bb44015ac7.zip b/e2e-tests/.yarn/cache/onetime-npm-2.0.1-6c39ecc911-bb44015ac7.zip new file mode 100644 index 0000000000..df76b4087b Binary files /dev/null and b/e2e-tests/.yarn/cache/onetime-npm-2.0.1-6c39ecc911-bb44015ac7.zip differ diff --git a/e2e-tests/.yarn/cache/onetime-npm-5.1.2-3ed148fa42-2478859ef8.zip b/e2e-tests/.yarn/cache/onetime-npm-5.1.2-3ed148fa42-2478859ef8.zip new file mode 100644 index 0000000000..958e05b7dd Binary files /dev/null and b/e2e-tests/.yarn/cache/onetime-npm-5.1.2-3ed148fa42-2478859ef8.zip differ diff --git a/e2e-tests/.yarn/cache/openai-npm-3.3.0-62dcac56ba-28ccff8c09.zip b/e2e-tests/.yarn/cache/openai-npm-3.3.0-62dcac56ba-28ccff8c09.zip new file mode 100644 index 0000000000..c61b95c691 Binary files /dev/null and b/e2e-tests/.yarn/cache/openai-npm-3.3.0-62dcac56ba-28ccff8c09.zip differ diff --git a/e2e-tests/.yarn/cache/ora-classic-npm-5.4.2-baa3a941a8-f52ec97c8f.zip b/e2e-tests/.yarn/cache/ora-classic-npm-5.4.2-baa3a941a8-f52ec97c8f.zip new file mode 100644 index 0000000000..09f3e95830 Binary files /dev/null and b/e2e-tests/.yarn/cache/ora-classic-npm-5.4.2-baa3a941a8-f52ec97c8f.zip differ diff --git a/e2e-tests/.yarn/cache/os-tmpdir-npm-1.0.2-e305b0689b-5666560f7b.zip b/e2e-tests/.yarn/cache/os-tmpdir-npm-1.0.2-e305b0689b-5666560f7b.zip new file mode 100644 index 0000000000..d68d710638 Binary files /dev/null and b/e2e-tests/.yarn/cache/os-tmpdir-npm-1.0.2-e305b0689b-5666560f7b.zip differ diff --git a/e2e-tests/.yarn/cache/p-limit-npm-3.1.0-05d2ede37f-7c3690c4db.zip b/e2e-tests/.yarn/cache/p-limit-npm-3.1.0-05d2ede37f-7c3690c4db.zip new file mode 100644 index 0000000000..b87d97ccf8 Binary files /dev/null and b/e2e-tests/.yarn/cache/p-limit-npm-3.1.0-05d2ede37f-7c3690c4db.zip differ diff --git a/e2e-tests/.yarn/cache/p-locate-npm-5.0.0-92cc7c7a3e-1623088f36.zip b/e2e-tests/.yarn/cache/p-locate-npm-5.0.0-92cc7c7a3e-1623088f36.zip new file mode 100644 index 0000000000..077f1c6eeb Binary files /dev/null and b/e2e-tests/.yarn/cache/p-locate-npm-5.0.0-92cc7c7a3e-1623088f36.zip differ diff --git a/e2e-tests/.yarn/cache/p-map-npm-4.0.0-4677ae07c7-cb0ab21ec0.zip b/e2e-tests/.yarn/cache/p-map-npm-4.0.0-4677ae07c7-cb0ab21ec0.zip new file mode 100644 index 0000000000..092fe42ff7 Binary files /dev/null and b/e2e-tests/.yarn/cache/p-map-npm-4.0.0-4677ae07c7-cb0ab21ec0.zip differ diff --git a/e2e-tests/.yarn/cache/param-case-npm-2.1.1-e0aef3c289-3a63dcb8d8.zip b/e2e-tests/.yarn/cache/param-case-npm-2.1.1-e0aef3c289-3a63dcb8d8.zip new file mode 100644 index 0000000000..f409d4737a Binary files /dev/null and b/e2e-tests/.yarn/cache/param-case-npm-2.1.1-e0aef3c289-3a63dcb8d8.zip differ diff --git a/e2e-tests/.yarn/cache/parse-function-npm-5.6.10-05344a4ba6-84a8c54e9b.zip b/e2e-tests/.yarn/cache/parse-function-npm-5.6.10-05344a4ba6-84a8c54e9b.zip new file mode 100644 index 0000000000..a603a8bbd8 Binary files /dev/null and b/e2e-tests/.yarn/cache/parse-function-npm-5.6.10-05344a4ba6-84a8c54e9b.zip differ diff --git a/e2e-tests/.yarn/cache/parse5-npm-7.1.2-aa9a92c270-59465dd05e.zip b/e2e-tests/.yarn/cache/parse5-npm-7.1.2-aa9a92c270-59465dd05e.zip new file mode 100644 index 0000000000..d6319d936f Binary files /dev/null and b/e2e-tests/.yarn/cache/parse5-npm-7.1.2-aa9a92c270-59465dd05e.zip differ diff --git a/e2e-tests/.yarn/cache/path-exists-npm-4.0.0-e9e4f63eb0-505807199d.zip b/e2e-tests/.yarn/cache/path-exists-npm-4.0.0-e9e4f63eb0-505807199d.zip new file mode 100644 index 0000000000..b504841699 Binary files /dev/null and b/e2e-tests/.yarn/cache/path-exists-npm-4.0.0-e9e4f63eb0-505807199d.zip differ diff --git a/e2e-tests/.yarn/cache/path-is-absolute-npm-1.0.1-31bc695ffd-060840f92c.zip b/e2e-tests/.yarn/cache/path-is-absolute-npm-1.0.1-31bc695ffd-060840f92c.zip new file mode 100644 index 0000000000..ce195de705 Binary files /dev/null and b/e2e-tests/.yarn/cache/path-is-absolute-npm-1.0.1-31bc695ffd-060840f92c.zip differ diff --git a/e2e-tests/.yarn/cache/path-key-npm-3.1.1-0e66ea8321-55cd7a9dd4.zip b/e2e-tests/.yarn/cache/path-key-npm-3.1.1-0e66ea8321-55cd7a9dd4.zip new file mode 100644 index 0000000000..dd7212e2cd Binary files /dev/null and b/e2e-tests/.yarn/cache/path-key-npm-3.1.1-0e66ea8321-55cd7a9dd4.zip differ diff --git a/e2e-tests/.yarn/cache/path-scurry-npm-1.10.1-52bd946f2e-e2557cff3a.zip b/e2e-tests/.yarn/cache/path-scurry-npm-1.10.1-52bd946f2e-e2557cff3a.zip new file mode 100644 index 0000000000..e466a978a7 Binary files /dev/null and b/e2e-tests/.yarn/cache/path-scurry-npm-1.10.1-52bd946f2e-e2557cff3a.zip differ diff --git a/e2e-tests/.yarn/cache/pathval-npm-1.1.1-ce0311d7e0-090e314771.zip b/e2e-tests/.yarn/cache/pathval-npm-1.1.1-ce0311d7e0-090e314771.zip new file mode 100644 index 0000000000..b5cdc46250 Binary files /dev/null and b/e2e-tests/.yarn/cache/pathval-npm-1.1.1-ce0311d7e0-090e314771.zip differ diff --git a/e2e-tests/.yarn/cache/picomatch-npm-2.3.1-c782cfd986-050c865ce8.zip b/e2e-tests/.yarn/cache/picomatch-npm-2.3.1-c782cfd986-050c865ce8.zip new file mode 100644 index 0000000000..3384698427 Binary files /dev/null and b/e2e-tests/.yarn/cache/picomatch-npm-2.3.1-c782cfd986-050c865ce8.zip differ diff --git a/e2e-tests/.yarn/cache/playwright-core-npm-1.36.0-b8372782e2-d6b5fed5ae.zip b/e2e-tests/.yarn/cache/playwright-core-npm-1.36.0-b8372782e2-d6b5fed5ae.zip new file mode 100644 index 0000000000..d42a31c2a7 Binary files /dev/null and b/e2e-tests/.yarn/cache/playwright-core-npm-1.36.0-b8372782e2-d6b5fed5ae.zip differ diff --git a/e2e-tests/.yarn/cache/playwright-npm-1.36.0-40ee6045fa-c49ed1666b.zip b/e2e-tests/.yarn/cache/playwright-npm-1.36.0-40ee6045fa-c49ed1666b.zip new file mode 100644 index 0000000000..a1e65d7293 Binary files /dev/null and b/e2e-tests/.yarn/cache/playwright-npm-1.36.0-40ee6045fa-c49ed1666b.zip differ diff --git a/e2e-tests/.yarn/cache/proc-log-npm-3.0.0-a8c21c2f0f-02b64e1b39.zip b/e2e-tests/.yarn/cache/proc-log-npm-3.0.0-a8c21c2f0f-02b64e1b39.zip new file mode 100644 index 0000000000..0436b17634 Binary files /dev/null and b/e2e-tests/.yarn/cache/proc-log-npm-3.0.0-a8c21c2f0f-02b64e1b39.zip differ diff --git a/e2e-tests/.yarn/cache/promise-retry-npm-1.1.1-56f07257a8-18180b4cf8.zip b/e2e-tests/.yarn/cache/promise-retry-npm-1.1.1-56f07257a8-18180b4cf8.zip new file mode 100644 index 0000000000..9c43424cb0 Binary files /dev/null and b/e2e-tests/.yarn/cache/promise-retry-npm-1.1.1-56f07257a8-18180b4cf8.zip differ diff --git a/e2e-tests/.yarn/cache/promise-retry-npm-2.0.1-871f0b01b7-f96a3f6d90.zip b/e2e-tests/.yarn/cache/promise-retry-npm-2.0.1-871f0b01b7-f96a3f6d90.zip new file mode 100644 index 0000000000..9cefe07769 Binary files /dev/null and b/e2e-tests/.yarn/cache/promise-retry-npm-2.0.1-871f0b01b7-f96a3f6d90.zip differ diff --git a/e2e-tests/.yarn/cache/proto-list-npm-1.2.4-a96a43df28-4d4826e171.zip b/e2e-tests/.yarn/cache/proto-list-npm-1.2.4-a96a43df28-4d4826e171.zip new file mode 100644 index 0000000000..5c173ee139 Binary files /dev/null and b/e2e-tests/.yarn/cache/proto-list-npm-1.2.4-a96a43df28-4d4826e171.zip differ diff --git a/e2e-tests/.yarn/cache/proxy-from-env-npm-1.1.0-c13d07f26b-ed7fcc2ba0.zip b/e2e-tests/.yarn/cache/proxy-from-env-npm-1.1.0-c13d07f26b-ed7fcc2ba0.zip new file mode 100644 index 0000000000..a58e6bf3e4 Binary files /dev/null and b/e2e-tests/.yarn/cache/proxy-from-env-npm-1.1.0-c13d07f26b-ed7fcc2ba0.zip differ diff --git a/e2e-tests/.yarn/cache/randombytes-npm-2.1.0-e3da76bccf-d779499376.zip b/e2e-tests/.yarn/cache/randombytes-npm-2.1.0-e3da76bccf-d779499376.zip new file mode 100644 index 0000000000..cfc11435d2 Binary files /dev/null and b/e2e-tests/.yarn/cache/randombytes-npm-2.1.0-e3da76bccf-d779499376.zip differ diff --git a/e2e-tests/.yarn/cache/readable-stream-npm-3.6.2-d2a6069158-bdcbe6c22e.zip b/e2e-tests/.yarn/cache/readable-stream-npm-3.6.2-d2a6069158-bdcbe6c22e.zip new file mode 100644 index 0000000000..0053b67230 Binary files /dev/null and b/e2e-tests/.yarn/cache/readable-stream-npm-3.6.2-d2a6069158-bdcbe6c22e.zip differ diff --git a/e2e-tests/.yarn/cache/readdirp-npm-3.6.0-f950cc74ab-1ced032e6e.zip b/e2e-tests/.yarn/cache/readdirp-npm-3.6.0-f950cc74ab-1ced032e6e.zip new file mode 100644 index 0000000000..f3687812b2 Binary files /dev/null and b/e2e-tests/.yarn/cache/readdirp-npm-3.6.0-f950cc74ab-1ced032e6e.zip differ diff --git a/e2e-tests/.yarn/cache/reflect-metadata-npm-0.1.13-c525998e20-798d379a7b.zip b/e2e-tests/.yarn/cache/reflect-metadata-npm-0.1.13-c525998e20-798d379a7b.zip new file mode 100644 index 0000000000..244085ace9 Binary files /dev/null and b/e2e-tests/.yarn/cache/reflect-metadata-npm-0.1.13-c525998e20-798d379a7b.zip differ diff --git a/e2e-tests/.yarn/cache/regexp-match-indices-npm-1.0.2-9d4b896d66-8cc779f6cf.zip b/e2e-tests/.yarn/cache/regexp-match-indices-npm-1.0.2-9d4b896d66-8cc779f6cf.zip new file mode 100644 index 0000000000..19b5c0a338 Binary files /dev/null and b/e2e-tests/.yarn/cache/regexp-match-indices-npm-1.0.2-9d4b896d66-8cc779f6cf.zip differ diff --git a/e2e-tests/.yarn/cache/regexp-tree-npm-0.1.27-e0324e6a9c-129aebb34d.zip b/e2e-tests/.yarn/cache/regexp-tree-npm-0.1.27-e0324e6a9c-129aebb34d.zip new file mode 100644 index 0000000000..f80bccedb1 Binary files /dev/null and b/e2e-tests/.yarn/cache/regexp-tree-npm-0.1.27-e0324e6a9c-129aebb34d.zip differ diff --git a/e2e-tests/.yarn/cache/relateurl-npm-0.2.7-7687cc0a2a-5891e792ea.zip b/e2e-tests/.yarn/cache/relateurl-npm-0.2.7-7687cc0a2a-5891e792ea.zip new file mode 100644 index 0000000000..f8f3ef37e8 Binary files /dev/null and b/e2e-tests/.yarn/cache/relateurl-npm-0.2.7-7687cc0a2a-5891e792ea.zip differ diff --git a/e2e-tests/.yarn/cache/require-directory-npm-2.1.1-8608aee50b-fb47e70bf0.zip b/e2e-tests/.yarn/cache/require-directory-npm-2.1.1-8608aee50b-fb47e70bf0.zip new file mode 100644 index 0000000000..5af5579b18 Binary files /dev/null and b/e2e-tests/.yarn/cache/require-directory-npm-2.1.1-8608aee50b-fb47e70bf0.zip differ diff --git a/e2e-tests/.yarn/cache/resq-npm-1.11.0-cdc288c879-a596c01258.zip b/e2e-tests/.yarn/cache/resq-npm-1.11.0-cdc288c879-a596c01258.zip new file mode 100644 index 0000000000..9b7d9f8687 Binary files /dev/null and b/e2e-tests/.yarn/cache/resq-npm-1.11.0-cdc288c879-a596c01258.zip differ diff --git a/e2e-tests/.yarn/cache/restore-cursor-npm-2.0.0-80278eb6b7-482e13d02d.zip b/e2e-tests/.yarn/cache/restore-cursor-npm-2.0.0-80278eb6b7-482e13d02d.zip new file mode 100644 index 0000000000..3b01b88c0e Binary files /dev/null and b/e2e-tests/.yarn/cache/restore-cursor-npm-2.0.0-80278eb6b7-482e13d02d.zip differ diff --git a/e2e-tests/.yarn/cache/restore-cursor-npm-3.1.0-52c5a4c98f-f877dd8741.zip b/e2e-tests/.yarn/cache/restore-cursor-npm-3.1.0-52c5a4c98f-f877dd8741.zip new file mode 100644 index 0000000000..f11afe99bb Binary files /dev/null and b/e2e-tests/.yarn/cache/restore-cursor-npm-3.1.0-52c5a4c98f-f877dd8741.zip differ diff --git a/e2e-tests/.yarn/cache/retry-npm-0.10.1-49d64d46ee-133ef7c202.zip b/e2e-tests/.yarn/cache/retry-npm-0.10.1-49d64d46ee-133ef7c202.zip new file mode 100644 index 0000000000..ffb88b6884 Binary files /dev/null and b/e2e-tests/.yarn/cache/retry-npm-0.10.1-49d64d46ee-133ef7c202.zip differ diff --git a/e2e-tests/.yarn/cache/retry-npm-0.12.0-72ac7fb4cc-623bd7d2e5.zip b/e2e-tests/.yarn/cache/retry-npm-0.12.0-72ac7fb4cc-623bd7d2e5.zip new file mode 100644 index 0000000000..12e25fcd41 Binary files /dev/null and b/e2e-tests/.yarn/cache/retry-npm-0.12.0-72ac7fb4cc-623bd7d2e5.zip differ diff --git a/e2e-tests/.yarn/cache/run-async-npm-2.4.1-a94bb90861-a2c88aa15d.zip b/e2e-tests/.yarn/cache/run-async-npm-2.4.1-a94bb90861-a2c88aa15d.zip new file mode 100644 index 0000000000..34c485e0b0 Binary files /dev/null and b/e2e-tests/.yarn/cache/run-async-npm-2.4.1-a94bb90861-a2c88aa15d.zip differ diff --git a/e2e-tests/.yarn/cache/rxjs-npm-6.6.7-055046ea3c-bc334edef1.zip b/e2e-tests/.yarn/cache/rxjs-npm-6.6.7-055046ea3c-bc334edef1.zip new file mode 100644 index 0000000000..ba92cebbd3 Binary files /dev/null and b/e2e-tests/.yarn/cache/rxjs-npm-6.6.7-055046ea3c-bc334edef1.zip differ diff --git a/e2e-tests/.yarn/cache/safe-buffer-npm-5.2.1-3481c8aa9b-b99c4b41fd.zip b/e2e-tests/.yarn/cache/safe-buffer-npm-5.2.1-3481c8aa9b-b99c4b41fd.zip new file mode 100644 index 0000000000..c80798aecd Binary files /dev/null and b/e2e-tests/.yarn/cache/safe-buffer-npm-5.2.1-3481c8aa9b-b99c4b41fd.zip differ diff --git a/e2e-tests/.yarn/cache/safer-buffer-npm-2.1.2-8d5c0b705e-cab8f25ae6.zip b/e2e-tests/.yarn/cache/safer-buffer-npm-2.1.2-8d5c0b705e-cab8f25ae6.zip new file mode 100644 index 0000000000..1a93be6423 Binary files /dev/null and b/e2e-tests/.yarn/cache/safer-buffer-npm-2.1.2-8d5c0b705e-cab8f25ae6.zip differ diff --git a/e2e-tests/.yarn/cache/semver-npm-7.5.4-c4ad957fcd-12d8ad952f.zip b/e2e-tests/.yarn/cache/semver-npm-7.5.4-c4ad957fcd-12d8ad952f.zip new file mode 100644 index 0000000000..f8689471f5 Binary files /dev/null and b/e2e-tests/.yarn/cache/semver-npm-7.5.4-c4ad957fcd-12d8ad952f.zip differ diff --git a/e2e-tests/.yarn/cache/serialize-javascript-npm-6.0.0-0bb8a3c88d-56f90b562a.zip b/e2e-tests/.yarn/cache/serialize-javascript-npm-6.0.0-0bb8a3c88d-56f90b562a.zip new file mode 100644 index 0000000000..46090b6c5b Binary files /dev/null and b/e2e-tests/.yarn/cache/serialize-javascript-npm-6.0.0-0bb8a3c88d-56f90b562a.zip differ diff --git a/e2e-tests/.yarn/cache/shebang-command-npm-2.0.0-eb2b01921d-6b52fe8727.zip b/e2e-tests/.yarn/cache/shebang-command-npm-2.0.0-eb2b01921d-6b52fe8727.zip new file mode 100644 index 0000000000..727c5471e2 Binary files /dev/null and b/e2e-tests/.yarn/cache/shebang-command-npm-2.0.0-eb2b01921d-6b52fe8727.zip differ diff --git a/e2e-tests/.yarn/cache/shebang-regex-npm-3.0.0-899a0cd65e-1a2bcae50d.zip b/e2e-tests/.yarn/cache/shebang-regex-npm-3.0.0-899a0cd65e-1a2bcae50d.zip new file mode 100644 index 0000000000..3e891cda95 Binary files /dev/null and b/e2e-tests/.yarn/cache/shebang-regex-npm-3.0.0-899a0cd65e-1a2bcae50d.zip differ diff --git a/e2e-tests/.yarn/cache/signal-exit-npm-3.0.7-bd270458a3-a2f098f247.zip b/e2e-tests/.yarn/cache/signal-exit-npm-3.0.7-bd270458a3-a2f098f247.zip new file mode 100644 index 0000000000..98720bd8c7 Binary files /dev/null and b/e2e-tests/.yarn/cache/signal-exit-npm-3.0.7-bd270458a3-a2f098f247.zip differ diff --git a/e2e-tests/.yarn/cache/signal-exit-npm-4.1.0-61fb957687-64c757b498.zip b/e2e-tests/.yarn/cache/signal-exit-npm-4.1.0-61fb957687-64c757b498.zip new file mode 100644 index 0000000000..7242dbce48 Binary files /dev/null and b/e2e-tests/.yarn/cache/signal-exit-npm-4.1.0-61fb957687-64c757b498.zip differ diff --git a/e2e-tests/.yarn/cache/smart-buffer-npm-4.2.0-5ac3f668bb-b5167a7142.zip b/e2e-tests/.yarn/cache/smart-buffer-npm-4.2.0-5ac3f668bb-b5167a7142.zip new file mode 100644 index 0000000000..d587b3db7a Binary files /dev/null and b/e2e-tests/.yarn/cache/smart-buffer-npm-4.2.0-5ac3f668bb-b5167a7142.zip differ diff --git a/e2e-tests/.yarn/cache/socks-npm-2.7.1-17f2b53052-259d9e3e8e.zip b/e2e-tests/.yarn/cache/socks-npm-2.7.1-17f2b53052-259d9e3e8e.zip new file mode 100644 index 0000000000..f225cdefdf Binary files /dev/null and b/e2e-tests/.yarn/cache/socks-npm-2.7.1-17f2b53052-259d9e3e8e.zip differ diff --git a/e2e-tests/.yarn/cache/socks-proxy-agent-npm-8.0.2-df165543cf-4fb165df08.zip b/e2e-tests/.yarn/cache/socks-proxy-agent-npm-8.0.2-df165543cf-4fb165df08.zip new file mode 100644 index 0000000000..a8e45c47bf Binary files /dev/null and b/e2e-tests/.yarn/cache/socks-proxy-agent-npm-8.0.2-df165543cf-4fb165df08.zip differ diff --git a/e2e-tests/.yarn/cache/source-map-npm-0.6.1-1a3621db16-59ce8640cf.zip b/e2e-tests/.yarn/cache/source-map-npm-0.6.1-1a3621db16-59ce8640cf.zip new file mode 100644 index 0000000000..5f6c0e46b7 Binary files /dev/null and b/e2e-tests/.yarn/cache/source-map-npm-0.6.1-1a3621db16-59ce8640cf.zip differ diff --git a/e2e-tests/.yarn/cache/sprintf-js-npm-1.1.3-b99efd75b2-a3fdac7b49.zip b/e2e-tests/.yarn/cache/sprintf-js-npm-1.1.3-b99efd75b2-a3fdac7b49.zip new file mode 100644 index 0000000000..8e2aa35645 Binary files /dev/null and b/e2e-tests/.yarn/cache/sprintf-js-npm-1.1.3-b99efd75b2-a3fdac7b49.zip differ diff --git a/e2e-tests/.yarn/cache/ssri-npm-10.0.5-1a7557d04d-0a31b65f21.zip b/e2e-tests/.yarn/cache/ssri-npm-10.0.5-1a7557d04d-0a31b65f21.zip new file mode 100644 index 0000000000..29bd203c56 Binary files /dev/null and b/e2e-tests/.yarn/cache/ssri-npm-10.0.5-1a7557d04d-0a31b65f21.zip differ diff --git a/e2e-tests/.yarn/cache/string-width-npm-2.1.1-0c2c6ae53f-d6173abe08.zip b/e2e-tests/.yarn/cache/string-width-npm-2.1.1-0c2c6ae53f-d6173abe08.zip new file mode 100644 index 0000000000..4547a8bf7c Binary files /dev/null and b/e2e-tests/.yarn/cache/string-width-npm-2.1.1-0c2c6ae53f-d6173abe08.zip differ diff --git a/e2e-tests/.yarn/cache/string-width-npm-4.2.3-2c27177bae-e52c10dc3f.zip b/e2e-tests/.yarn/cache/string-width-npm-4.2.3-2c27177bae-e52c10dc3f.zip new file mode 100644 index 0000000000..9b4c088118 Binary files /dev/null and b/e2e-tests/.yarn/cache/string-width-npm-4.2.3-2c27177bae-e52c10dc3f.zip differ diff --git a/e2e-tests/.yarn/cache/string-width-npm-5.1.2-bf60531341-7369deaa29.zip b/e2e-tests/.yarn/cache/string-width-npm-5.1.2-bf60531341-7369deaa29.zip new file mode 100644 index 0000000000..bd88405658 Binary files /dev/null and b/e2e-tests/.yarn/cache/string-width-npm-5.1.2-bf60531341-7369deaa29.zip differ diff --git a/e2e-tests/.yarn/cache/string_decoder-npm-1.3.0-2422117fd0-8417646695.zip b/e2e-tests/.yarn/cache/string_decoder-npm-1.3.0-2422117fd0-8417646695.zip new file mode 100644 index 0000000000..e12cf75910 Binary files /dev/null and b/e2e-tests/.yarn/cache/string_decoder-npm-1.3.0-2422117fd0-8417646695.zip differ diff --git a/e2e-tests/.yarn/cache/strip-ansi-npm-4.0.0-d4de985014-d9186e6c0c.zip b/e2e-tests/.yarn/cache/strip-ansi-npm-4.0.0-d4de985014-d9186e6c0c.zip new file mode 100644 index 0000000000..f39efd27f2 Binary files /dev/null and b/e2e-tests/.yarn/cache/strip-ansi-npm-4.0.0-d4de985014-d9186e6c0c.zip differ diff --git a/e2e-tests/.yarn/cache/strip-ansi-npm-5.2.0-275214c316-bdb5f76ade.zip b/e2e-tests/.yarn/cache/strip-ansi-npm-5.2.0-275214c316-bdb5f76ade.zip new file mode 100644 index 0000000000..2231cf5894 Binary files /dev/null and b/e2e-tests/.yarn/cache/strip-ansi-npm-5.2.0-275214c316-bdb5f76ade.zip differ diff --git a/e2e-tests/.yarn/cache/strip-ansi-npm-6.0.1-caddc7cb40-f3cd25890a.zip b/e2e-tests/.yarn/cache/strip-ansi-npm-6.0.1-caddc7cb40-f3cd25890a.zip new file mode 100644 index 0000000000..1a63f3baa2 Binary files /dev/null and b/e2e-tests/.yarn/cache/strip-ansi-npm-6.0.1-caddc7cb40-f3cd25890a.zip differ diff --git a/e2e-tests/.yarn/cache/strip-ansi-npm-7.1.0-7453b80b79-859c73fcf2.zip b/e2e-tests/.yarn/cache/strip-ansi-npm-7.1.0-7453b80b79-859c73fcf2.zip new file mode 100644 index 0000000000..2cc856e86a Binary files /dev/null and b/e2e-tests/.yarn/cache/strip-ansi-npm-7.1.0-7453b80b79-859c73fcf2.zip differ diff --git a/e2e-tests/.yarn/cache/strip-json-comments-npm-3.1.1-dcb2324823-492f73e272.zip b/e2e-tests/.yarn/cache/strip-json-comments-npm-3.1.1-dcb2324823-492f73e272.zip new file mode 100644 index 0000000000..e74ed10a6f Binary files /dev/null and b/e2e-tests/.yarn/cache/strip-json-comments-npm-3.1.1-dcb2324823-492f73e272.zip differ diff --git a/e2e-tests/.yarn/cache/supports-color-npm-5.5.0-183ac537bc-95f6f4ba5a.zip b/e2e-tests/.yarn/cache/supports-color-npm-5.5.0-183ac537bc-95f6f4ba5a.zip new file mode 100644 index 0000000000..aa46b9881d Binary files /dev/null and b/e2e-tests/.yarn/cache/supports-color-npm-5.5.0-183ac537bc-95f6f4ba5a.zip differ diff --git a/e2e-tests/.yarn/cache/supports-color-npm-7.2.0-606bfcf7da-3dda818de0.zip b/e2e-tests/.yarn/cache/supports-color-npm-7.2.0-606bfcf7da-3dda818de0.zip new file mode 100644 index 0000000000..1fd9e12d4e Binary files /dev/null and b/e2e-tests/.yarn/cache/supports-color-npm-7.2.0-606bfcf7da-3dda818de0.zip differ diff --git a/e2e-tests/.yarn/cache/supports-color-npm-8.1.1-289e937149-c052193a7e.zip b/e2e-tests/.yarn/cache/supports-color-npm-8.1.1-289e937149-c052193a7e.zip new file mode 100644 index 0000000000..3fd0d6c6a4 Binary files /dev/null and b/e2e-tests/.yarn/cache/supports-color-npm-8.1.1-289e937149-c052193a7e.zip differ diff --git a/e2e-tests/.yarn/cache/tar-npm-6.2.0-3eb25205a7-db4d9fe74a.zip b/e2e-tests/.yarn/cache/tar-npm-6.2.0-3eb25205a7-db4d9fe74a.zip new file mode 100644 index 0000000000..6fece5e6bd Binary files /dev/null and b/e2e-tests/.yarn/cache/tar-npm-6.2.0-3eb25205a7-db4d9fe74a.zip differ diff --git a/e2e-tests/.yarn/cache/through-npm-2.3.8-df5f72a16e-a38c3e0598.zip b/e2e-tests/.yarn/cache/through-npm-2.3.8-df5f72a16e-a38c3e0598.zip new file mode 100644 index 0000000000..425b87ec87 Binary files /dev/null and b/e2e-tests/.yarn/cache/through-npm-2.3.8-df5f72a16e-a38c3e0598.zip differ diff --git a/e2e-tests/.yarn/cache/tmp-npm-0.0.33-bcbf65df2a-902d7aceb7.zip b/e2e-tests/.yarn/cache/tmp-npm-0.0.33-bcbf65df2a-902d7aceb7.zip new file mode 100644 index 0000000000..fa335bbc04 Binary files /dev/null and b/e2e-tests/.yarn/cache/tmp-npm-0.0.33-bcbf65df2a-902d7aceb7.zip differ diff --git a/e2e-tests/.yarn/cache/to-fast-properties-npm-2.0.0-0dc60cc481-be2de62fe5.zip b/e2e-tests/.yarn/cache/to-fast-properties-npm-2.0.0-0dc60cc481-be2de62fe5.zip new file mode 100644 index 0000000000..bed5e126bb Binary files /dev/null and b/e2e-tests/.yarn/cache/to-fast-properties-npm-2.0.0-0dc60cc481-be2de62fe5.zip differ diff --git a/e2e-tests/.yarn/cache/to-regex-range-npm-5.0.1-f1e8263b00-f76fa01b3d.zip b/e2e-tests/.yarn/cache/to-regex-range-npm-5.0.1-f1e8263b00-f76fa01b3d.zip new file mode 100644 index 0000000000..acdc9630b7 Binary files /dev/null and b/e2e-tests/.yarn/cache/to-regex-range-npm-5.0.1-f1e8263b00-f76fa01b3d.zip differ diff --git a/e2e-tests/.yarn/cache/ts-node-npm-10.9.2-3f3890b9ac-fde256c907.zip b/e2e-tests/.yarn/cache/ts-node-npm-10.9.2-3f3890b9ac-fde256c907.zip new file mode 100644 index 0000000000..437dc2b18d Binary files /dev/null and b/e2e-tests/.yarn/cache/ts-node-npm-10.9.2-3f3890b9ac-fde256c907.zip differ diff --git a/e2e-tests/.yarn/cache/tslib-npm-1.14.1-102499115e-dbe628ef87.zip b/e2e-tests/.yarn/cache/tslib-npm-1.14.1-102499115e-dbe628ef87.zip new file mode 100644 index 0000000000..5569f012b5 Binary files /dev/null and b/e2e-tests/.yarn/cache/tslib-npm-1.14.1-102499115e-dbe628ef87.zip differ diff --git a/e2e-tests/.yarn/cache/type-detect-npm-4.0.8-8d8127b901-62b5628bff.zip b/e2e-tests/.yarn/cache/type-detect-npm-4.0.8-8d8127b901-62b5628bff.zip new file mode 100644 index 0000000000..a3c01d86ab Binary files /dev/null and b/e2e-tests/.yarn/cache/type-detect-npm-4.0.8-8d8127b901-62b5628bff.zip differ diff --git a/e2e-tests/.yarn/cache/typescript-npm-5.3.3-6b23a5da18-2007ccb6e5.zip b/e2e-tests/.yarn/cache/typescript-npm-5.3.3-6b23a5da18-2007ccb6e5.zip new file mode 100644 index 0000000000..eebdd9e659 Binary files /dev/null and b/e2e-tests/.yarn/cache/typescript-npm-5.3.3-6b23a5da18-2007ccb6e5.zip differ diff --git a/e2e-tests/.yarn/cache/typescript-patch-47de0b8a47-f61375590b.zip b/e2e-tests/.yarn/cache/typescript-patch-47de0b8a47-f61375590b.zip new file mode 100644 index 0000000000..5f94a45d9b Binary files /dev/null and b/e2e-tests/.yarn/cache/typescript-patch-47de0b8a47-f61375590b.zip differ diff --git a/e2e-tests/.yarn/cache/uglify-js-npm-3.17.4-58d4ab56aa-7b3897df38.zip b/e2e-tests/.yarn/cache/uglify-js-npm-3.17.4-58d4ab56aa-7b3897df38.zip new file mode 100644 index 0000000000..c3d1c955cb Binary files /dev/null and b/e2e-tests/.yarn/cache/uglify-js-npm-3.17.4-58d4ab56aa-7b3897df38.zip differ diff --git a/e2e-tests/.yarn/cache/undici-types-npm-5.26.5-de4f7c7bb9-3192ef6f3f.zip b/e2e-tests/.yarn/cache/undici-types-npm-5.26.5-de4f7c7bb9-3192ef6f3f.zip new file mode 100644 index 0000000000..6ab5ae67e3 Binary files /dev/null and b/e2e-tests/.yarn/cache/undici-types-npm-5.26.5-de4f7c7bb9-3192ef6f3f.zip differ diff --git a/e2e-tests/.yarn/cache/unique-filename-npm-3.0.0-77d68e0a45-8e2f59b356.zip b/e2e-tests/.yarn/cache/unique-filename-npm-3.0.0-77d68e0a45-8e2f59b356.zip new file mode 100644 index 0000000000..bb91bbf957 Binary files /dev/null and b/e2e-tests/.yarn/cache/unique-filename-npm-3.0.0-77d68e0a45-8e2f59b356.zip differ diff --git a/e2e-tests/.yarn/cache/unique-slug-npm-4.0.0-e6b08f28aa-0884b58365.zip b/e2e-tests/.yarn/cache/unique-slug-npm-4.0.0-e6b08f28aa-0884b58365.zip new file mode 100644 index 0000000000..9d1cb9ff3d Binary files /dev/null and b/e2e-tests/.yarn/cache/unique-slug-npm-4.0.0-e6b08f28aa-0884b58365.zip differ diff --git a/e2e-tests/.yarn/cache/universalify-npm-0.1.2-9b22d31d2d-40cdc60f6e.zip b/e2e-tests/.yarn/cache/universalify-npm-0.1.2-9b22d31d2d-40cdc60f6e.zip new file mode 100644 index 0000000000..b49f2fc0bd Binary files /dev/null and b/e2e-tests/.yarn/cache/universalify-npm-0.1.2-9b22d31d2d-40cdc60f6e.zip differ diff --git a/e2e-tests/.yarn/cache/upper-case-npm-1.1.3-061d82781f-991c845de7.zip b/e2e-tests/.yarn/cache/upper-case-npm-1.1.3-061d82781f-991c845de7.zip new file mode 100644 index 0000000000..f9841879d4 Binary files /dev/null and b/e2e-tests/.yarn/cache/upper-case-npm-1.1.3-061d82781f-991c845de7.zip differ diff --git a/e2e-tests/.yarn/cache/util-deprecate-npm-1.0.2-e3fe1a219c-474acf1146.zip b/e2e-tests/.yarn/cache/util-deprecate-npm-1.0.2-e3fe1a219c-474acf1146.zip new file mode 100644 index 0000000000..c2309cfe4d Binary files /dev/null and b/e2e-tests/.yarn/cache/util-deprecate-npm-1.0.2-e3fe1a219c-474acf1146.zip differ diff --git a/e2e-tests/.yarn/cache/uuid-npm-9.0.0-46c41e3e43-8dd2c83c43.zip b/e2e-tests/.yarn/cache/uuid-npm-9.0.0-46c41e3e43-8dd2c83c43.zip new file mode 100644 index 0000000000..90b6b788ad Binary files /dev/null and b/e2e-tests/.yarn/cache/uuid-npm-9.0.0-46c41e3e43-8dd2c83c43.zip differ diff --git a/e2e-tests/.yarn/cache/uuid-npm-9.0.1-39a8442bc6-39931f6da7.zip b/e2e-tests/.yarn/cache/uuid-npm-9.0.1-39a8442bc6-39931f6da7.zip new file mode 100644 index 0000000000..9a64a74202 Binary files /dev/null and b/e2e-tests/.yarn/cache/uuid-npm-9.0.1-39a8442bc6-39931f6da7.zip differ diff --git a/e2e-tests/.yarn/cache/v8-compile-cache-lib-npm-3.0.1-4886071ece-78089ad549.zip b/e2e-tests/.yarn/cache/v8-compile-cache-lib-npm-3.0.1-4886071ece-78089ad549.zip new file mode 100644 index 0000000000..005ea72112 Binary files /dev/null and b/e2e-tests/.yarn/cache/v8-compile-cache-lib-npm-3.0.1-4886071ece-78089ad549.zip differ diff --git a/e2e-tests/.yarn/cache/wcwidth-npm-1.0.1-05fa596453-814e9d1ddc.zip b/e2e-tests/.yarn/cache/wcwidth-npm-1.0.1-05fa596453-814e9d1ddc.zip new file mode 100644 index 0000000000..b18e4e3458 Binary files /dev/null and b/e2e-tests/.yarn/cache/wcwidth-npm-1.0.1-05fa596453-814e9d1ddc.zip differ diff --git a/e2e-tests/.yarn/cache/which-npm-2.0.2-320ddf72f7-1a5c563d3c.zip b/e2e-tests/.yarn/cache/which-npm-2.0.2-320ddf72f7-1a5c563d3c.zip new file mode 100644 index 0000000000..389ec5e25e Binary files /dev/null and b/e2e-tests/.yarn/cache/which-npm-2.0.2-320ddf72f7-1a5c563d3c.zip differ diff --git a/e2e-tests/.yarn/cache/which-npm-4.0.0-dd31cd4928-f17e84c042.zip b/e2e-tests/.yarn/cache/which-npm-4.0.0-dd31cd4928-f17e84c042.zip new file mode 100644 index 0000000000..093e6f578f Binary files /dev/null and b/e2e-tests/.yarn/cache/which-npm-4.0.0-dd31cd4928-f17e84c042.zip differ diff --git a/e2e-tests/.yarn/cache/workerpool-npm-6.2.1-1486cb2056-c2c6eebbc5.zip b/e2e-tests/.yarn/cache/workerpool-npm-6.2.1-1486cb2056-c2c6eebbc5.zip new file mode 100644 index 0000000000..0de5c0c438 Binary files /dev/null and b/e2e-tests/.yarn/cache/workerpool-npm-6.2.1-1486cb2056-c2c6eebbc5.zip differ diff --git a/e2e-tests/.yarn/cache/wrap-ansi-npm-7.0.0-ad6e1a0554-a790b846fd.zip b/e2e-tests/.yarn/cache/wrap-ansi-npm-7.0.0-ad6e1a0554-a790b846fd.zip new file mode 100644 index 0000000000..ab6ea6e871 Binary files /dev/null and b/e2e-tests/.yarn/cache/wrap-ansi-npm-7.0.0-ad6e1a0554-a790b846fd.zip differ diff --git a/e2e-tests/.yarn/cache/wrap-ansi-npm-8.1.0-26a4e6ae28-371733296d.zip b/e2e-tests/.yarn/cache/wrap-ansi-npm-8.1.0-26a4e6ae28-371733296d.zip new file mode 100644 index 0000000000..2ee78f31c8 Binary files /dev/null and b/e2e-tests/.yarn/cache/wrap-ansi-npm-8.1.0-26a4e6ae28-371733296d.zip differ diff --git a/e2e-tests/.yarn/cache/wrappy-npm-1.0.2-916de4d4b3-159da4805f.zip b/e2e-tests/.yarn/cache/wrappy-npm-1.0.2-916de4d4b3-159da4805f.zip new file mode 100644 index 0000000000..6072a9f2e7 Binary files /dev/null and b/e2e-tests/.yarn/cache/wrappy-npm-1.0.2-916de4d4b3-159da4805f.zip differ diff --git a/e2e-tests/.yarn/cache/xpath-builder-npm-0.0.7-e84a5490b8-00df6ba4a0.zip b/e2e-tests/.yarn/cache/xpath-builder-npm-0.0.7-e84a5490b8-00df6ba4a0.zip new file mode 100644 index 0000000000..2d7f2027cd Binary files /dev/null and b/e2e-tests/.yarn/cache/xpath-builder-npm-0.0.7-e84a5490b8-00df6ba4a0.zip differ diff --git a/e2e-tests/.yarn/cache/y18n-npm-5.0.8-5f3a0a7e62-54f0fb9562.zip b/e2e-tests/.yarn/cache/y18n-npm-5.0.8-5f3a0a7e62-54f0fb9562.zip new file mode 100644 index 0000000000..bf39a466ce Binary files /dev/null and b/e2e-tests/.yarn/cache/y18n-npm-5.0.8-5f3a0a7e62-54f0fb9562.zip differ diff --git a/e2e-tests/.yarn/cache/yallist-npm-4.0.0-b493d9e907-343617202a.zip b/e2e-tests/.yarn/cache/yallist-npm-4.0.0-b493d9e907-343617202a.zip new file mode 100644 index 0000000000..f2d3306fed Binary files /dev/null and b/e2e-tests/.yarn/cache/yallist-npm-4.0.0-b493d9e907-343617202a.zip differ diff --git a/e2e-tests/.yarn/cache/yargs-npm-16.2.0-547873d425-b14afbb51e.zip b/e2e-tests/.yarn/cache/yargs-npm-16.2.0-547873d425-b14afbb51e.zip new file mode 100644 index 0000000000..d11c27d510 Binary files /dev/null and b/e2e-tests/.yarn/cache/yargs-npm-16.2.0-547873d425-b14afbb51e.zip differ diff --git a/e2e-tests/.yarn/cache/yargs-parser-npm-20.2.4-1de20916a6-d251998a37.zip b/e2e-tests/.yarn/cache/yargs-parser-npm-20.2.4-1de20916a6-d251998a37.zip new file mode 100644 index 0000000000..fe57a9c8d6 Binary files /dev/null and b/e2e-tests/.yarn/cache/yargs-parser-npm-20.2.4-1de20916a6-d251998a37.zip differ diff --git a/e2e-tests/.yarn/cache/yargs-parser-npm-20.2.9-a1d19e598d-8bb69015f2.zip b/e2e-tests/.yarn/cache/yargs-parser-npm-20.2.9-a1d19e598d-8bb69015f2.zip new file mode 100644 index 0000000000..f230038cfc Binary files /dev/null and b/e2e-tests/.yarn/cache/yargs-parser-npm-20.2.9-a1d19e598d-8bb69015f2.zip differ diff --git a/e2e-tests/.yarn/cache/yargs-unparser-npm-2.0.0-930f3ff3f6-68f9a542c6.zip b/e2e-tests/.yarn/cache/yargs-unparser-npm-2.0.0-930f3ff3f6-68f9a542c6.zip new file mode 100644 index 0000000000..2d106745e6 Binary files /dev/null and b/e2e-tests/.yarn/cache/yargs-unparser-npm-2.0.0-930f3ff3f6-68f9a542c6.zip differ diff --git a/e2e-tests/.yarn/cache/yn-npm-3.1.1-8ad4259784-2c487b0e14.zip b/e2e-tests/.yarn/cache/yn-npm-3.1.1-8ad4259784-2c487b0e14.zip new file mode 100644 index 0000000000..4a3116218c Binary files /dev/null and b/e2e-tests/.yarn/cache/yn-npm-3.1.1-8ad4259784-2c487b0e14.zip differ diff --git a/e2e-tests/.yarn/cache/yocto-queue-npm-0.1.0-c6c9a7db29-f77b3d8d00.zip b/e2e-tests/.yarn/cache/yocto-queue-npm-0.1.0-c6c9a7db29-f77b3d8d00.zip new file mode 100644 index 0000000000..f56730df00 Binary files /dev/null and b/e2e-tests/.yarn/cache/yocto-queue-npm-0.1.0-c6c9a7db29-f77b3d8d00.zip differ diff --git a/e2e-tests/LICENSE b/e2e-tests/LICENSE new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/e2e-tests/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/e2e-tests/README.md b/e2e-tests/README.md new file mode 100644 index 0000000000..1f0ce5220d --- /dev/null +++ b/e2e-tests/README.md @@ -0,0 +1,42 @@ +# frontend-e2e-tests + +integration tests for serlo.org + +```sh +git clone https://github.com/serlo/frontend-e2e-tests.git +cd frontend-e2e-tests +yarn +yarn test +``` + +output should look something like that: + +![grafik](https://user-images.githubusercontent.com/13507950/210520199-ad502693-8f84-4956-9417-f750a243911d.png) + +Tests are written with Playwright (wrapped by CodeceptJS), extensive documentation can be found at https://codecept.io/helpers/Playwright/ + +To run a single test, use `--grep`: + +```sh +yarn test --grep "Quickbar" +``` + +You can also run a single file: + +```sh +yarn test tests/000-general.ts +``` + +Run all editor tests: + +```sh +yarn test tests/4*.ts +``` + +You can run tests on firefox instead of chromium with + +```sh +yarn test-firefox +``` + +The tests are written in `/tests`, the file names are setting the order of execution. The browser session is stored between tests, TypeScript is supported. diff --git a/e2e-tests/assets/sample-image.png b/e2e-tests/assets/sample-image.png new file mode 100644 index 0000000000..ab3f53e19c Binary files /dev/null and b/e2e-tests/assets/sample-image.png differ diff --git a/e2e-tests/codecept.config.ts b/e2e-tests/codecept.config.ts new file mode 100644 index 0000000000..042bb1acbd --- /dev/null +++ b/e2e-tests/codecept.config.ts @@ -0,0 +1,80 @@ +const useLocalAPI = process.env.FRONTEND_API == 'local' + +const adminUser = useLocalAPI ? 'admin' : 'Kulla' +const isCI = Boolean(process.env.CI) +const browser = process.env.BROWSER ?? 'chromium' +const frontendUrl = + process.env.FRONTEND_URL ?? useLocalAPI + ? 'http://localhost:3000' + : 'https://de.serlo-staging.dev' + +const isChromium = browser === 'chromium' + +exports.config = { + tests: 'tests/**.ts', + output: './output', // we are not using any artifacts right now, but still need an output directory + helpers: { + Playwright: { + url: frontendUrl, + restart: 'keep', + keepBrowserState: true, + keepCookies: true, + show: isCI ? false : true, + ...(isCI && isChromium + ? { + chromium: { + args: ['--no-sandbox'], // this is needed for github CI to work + }, + } + : { browser }), + }, + }, + name: 'frontend-e2e-tests', + plugins: { + // https://codecept.io/locators/#custom-locators + customLocator: { + enabled: true, + // Allows data-qa attributes to be selected with $ prefix. E.g + // `I.click({ css: '[data-qa=register_button]'})` becomes `I.click('$register_button')` + attribute: 'data-qa', + }, + autoLogin: { + enabled: true, + saveToFile: false, + inject: 'login', + users: { + admin: { + login: (I) => { + I.amOnPage('/') + I.see('Anmelden') + I.click('Anmelden') + I.waitForText('Benutzername oder E-Mailadresse', 10) + I.fillField('Benutzername oder E-Mailadresse', adminUser) + I.fillField('Passwort', '123456') + I.click('Anmelden', "button[value='password']") + I.waitForText(`Willkommen ${adminUser}!`, 30) + // Wait as a fix for: https://github.com/microsoft/playwright/issues/20749 + I.wait(1) + }, + check: (I) => { + I.amOnPage('/') + I.waitForElement(`header nav img[alt='Avatar']`, 15) + }, + // see https://github.com/codeceptjs/CodeceptJS/issues/1591#issuecomment-480800333 + fetch: () => 'whatever', + restore: () => {}, + }, + }, + }, + pauseOnFail: {}, + retryFailedStep: { + enabled: true, + }, + tryTo: { + enabled: true, + }, + screenshotOnFail: { + enabled: true, + }, + }, +} diff --git a/e2e-tests/config.ts b/e2e-tests/config.ts new file mode 100644 index 0000000000..bd024dcfa6 --- /dev/null +++ b/e2e-tests/config.ts @@ -0,0 +1,21 @@ +import dotenv from 'dotenv' + +function createConfig() { + dotenv.config() + + const useLocalAPI = process.env.FRONTEND_API == 'local' + + return { + adminUser: useLocalAPI ? 'admin' : 'Kulla', + isCI: Boolean(process.env.CI), + browser: process.env.BROWSER ?? 'chromium', + frontendUrl: + process.env.FRONTEND_URL ?? useLocalAPI + ? 'http://localhost:3000' + : 'https://de.serlo-staging.dev', + } +} + +const config = createConfig() + +export default config diff --git a/e2e-tests/package.json b/e2e-tests/package.json new file mode 100644 index 0000000000..d584a1aae1 --- /dev/null +++ b/e2e-tests/package.json @@ -0,0 +1,26 @@ +{ + "name": "@serlo/e2e-tests", + "version": "0.0.0", + "private": true, + "scripts": { + "e2e": "codeceptjs run --debug", + "e2e-firefox": "cross-env BROWSER=firefox codeceptjs run --steps", + "e2e-firefox-localhost": "cross-env BROWSER=firefox FRONTEND_URL=http://localhost:3000 codeceptjs run --steps", + "e2e-localapi": "cross-env FRONTEND_API=local codeceptjs run --steps", + "e2e-localhost": "cross-env FRONTEND_URL=http://localhost:3000 codeceptjs run --steps", + "e2e-workers": "codeceptjs run-workers --suites 3" + }, + "devDependencies": { + "@types/node": "^18.16.19", + "codeceptjs": "3.5.2", + "cross-env": "^7.0.3", + "dotenv": "^16.3.1", + "playwright": "1.36.0", + "ts-node": "^10.9.1", + "typescript": "^5.1.6" + }, + "packageManager": "yarn@3.6.1", + "engines": { + "node": "^18.0.0" + } +} diff --git a/e2e-tests/steps.d.ts b/e2e-tests/steps.d.ts new file mode 100644 index 0000000000..a0a2ad89ad --- /dev/null +++ b/e2e-tests/steps.d.ts @@ -0,0 +1,14 @@ +/// + +declare namespace CodeceptJS { + interface SupportObject { + I: I + current: any + login: any + } + interface Methods extends Playwright {} + interface I extends WithTranslation {} + namespace Translation { + interface Actions {} + } +} diff --git a/e2e-tests/tests/000-general.ts b/e2e-tests/tests/000-general.ts new file mode 100644 index 0000000000..933134ceac --- /dev/null +++ b/e2e-tests/tests/000-general.ts @@ -0,0 +1,286 @@ +import assert from 'assert' + +Feature('General') + +Scenario('About Serlo', ({ I }) => { + I.amOnPage('/') + + // Make sure it's the landing page + I.see('einfache Erklärungen') + I.see('Biologie') + I.see('werbefrei') + + // Rounded corners are probably causing problems, move cursor a bit + I.click('Mehr über uns', null, { position: { x: 10, y: 10 } }) + + // Try to reduce flakyness + I.waitForText('Über Serlo', 10, 'h1') + + // I am on the about page + I.seeInTitle('Über Serlo') + I.see('mehr als 10 Jahren') + + // Navigating around + I.click('Pädagogisches Konzept') + I.click('Anleitung für die Lernplattform serlo.org') + I.scrollPageToBottom() + I.click('Community') + + // Make sure it's the right page, wait longer to reduce flakiness + I.waitForText("Was gibt's zu tun?", 20) +}) + +Scenario('Main Menu', async ({ I }) => { + async function ensureMenuState( + button: string, + item: string, + open: boolean, + context = 'ul.bg-white' + ) { + let maxLoop = 20 + while ( + (await tryTo(() => { + I.see(item, context) + })) != open + ) { + await I.click(button, 'ul') + await I.wait(0.2) + maxLoop-- + if (maxLoop <= 0) throw 'endless loop' + } + } + + async function testMenu() { + await ensureMenuState('Fächer', 'Angewandte Nachhaltigkeit', true) + I.see('Mathematik', 'ul.bg-white') + await ensureMenuState('Fächer', 'Angewandte Nachhaltigkeit', false) + + await ensureMenuState('Über Uns', 'Transparenz', true) + I.see('Wirkung', 'ul.bg-white') + I.see('Transparenz', 'ul.bg-white') + await ensureMenuState('Über Uns', 'Transparenz', false) + + // The li is clickable, therefore the context is ul + await ensureMenuState('Mitmachen', 'Neu hier?', true, 'div.bg-white') + I.see('Neu hier?') + I.see('Teste den Editor', 'li') + I.see('Hilfe', 'li') + } + + // Test menu on landing and in content + I.amOnPage('/') + await testMenu() + + I.amOnPage('/mathe') + await testMenu() +}) + +Scenario('Quickbar', ({ I }) => { + I.amOnPage('/') + + I.say('Open quickbar') + I.click('$quickbar-input') + I.type('Vektor') + + // Check dropdown + I.seeElement('$quickbar-combobox-overlay') + I.see('Kreuzprodukt') + I.see('Vektorbegriff') + I.see('Auf Serlo nach') + + I.say('Assert aria attributes and navigate options using keyboard') + I.seeAttributesOnElements('$quickbar-combobox-overlay', { role: 'listbox' }) + I.seeAttributesOnElements('$quickbar-input', { role: 'combobox' }) + + I.seeAttributesOnElements('$quickbar-option-0', { 'aria-selected': 'true' }) + I.seeAttributesOnElements('$quickbar-option-1', { 'aria-selected': 'false' }) + I.seeAttributesOnElements('$quickbar-option-2', { 'aria-selected': 'false' }) + + I.pressKey('ArrowDown') + I.seeAttributesOnElements('$quickbar-option-0', { 'aria-selected': 'false' }) + I.seeAttributesOnElements('$quickbar-option-1', { 'aria-selected': 'true' }) + I.seeAttributesOnElements('$quickbar-option-2', { 'aria-selected': 'false' }) + + I.pressKey('ArrowUp') + I.seeAttributesOnElements('$quickbar-option-0', { 'aria-selected': 'true' }) + I.seeAttributesOnElements('$quickbar-option-1', { 'aria-selected': 'false' }) + I.seeAttributesOnElements('$quickbar-option-2', { 'aria-selected': 'false' }) + + I.pressKey('Enter') + I.seeInTitle('Vektor') + + I.say('Perform another search') + I.amOnPage('/') + I.click('$quickbar-input') + I.type('Aufgaben zu Urnenmodellen') + + I.click('Aufgaben zu Urnenmodellen') + I.seeInTitle('Aufgaben zu Urnenmodellen') + I.see('Abiturkurs Stochastik') +}) + +Scenario('Share modal', ({ I }) => { + I.amOnPage('/1553') + I.click('Teilen') + I.see('Link kopieren') + I.see('Als PDF herunterladen') + + // QR code + I.seeElement('svg[width="128"][height="128"]') +}) + +// Language versions are testing production +// This is not intended +/* +Scenario('Languages', ({ I }) => { + I.amOnPage('/') + I.click('Serlo in anderen Sprachen') + I.see('Serlo.org in other languages') + + I.click('English') + I.see('personalized learning') + I.click('Serlo in other languages') + + I.click('Français') + I.see('Notre vision est de permettre un apprentissage') + I.click("Serlo dans d'autres langues") + + I.click('Español') + I.see('Somos una organización de base') + I.click('Serlo en otros idiomas') + + I.click('हिंदी') + I.see('हम नॉनप्रॉफिट आर्गेनाइजेशन संगठन') + // Somehow this is the only way to go back + I.usePlaywrightTo('go back', async ({ page }) => { + await page.goBack() + }) + + I.click('தமிழ் (Tamil)') + I.see('நாம் சமமான கல்வி வாய்ப்புகளை') +}) +*/ + +Scenario('Donation', ({ I }) => { + I.amOnPage('/') + I.click('Jetzt Spenden') + I.see('Deine Spende macht einen Unterschied') + I.see('Mit PayPal spenden') + + I.click('Spendenformular laden') + I.switchTo('iframe') + I.waitForText('Bitte gib einen Spendenbetrag ein', 30) + I.click('Jetzt spenden') + I.see('Wähle eine Zahlungsart') + I.switchTo() // back from iframe + + I.amOnPage('/') + I.click('Einwilligungen widerrufen') + I.see('Einwilligungen für externe Inhalte', 'h1') +}) + +Scenario('Legal Pages', async ({ I }) => { + I.amOnPage('/') + I.click('Impressum') + I.see('Amtsgericht München') + I.see('Haftung für Inhalte') + I.seeInCurrentUrl('/legal') + + I.amOnPage('/') + I.click('Datenschutz') + I.see('personenbezogene Daten') + I.see('Verarbeitung der Nutzerdaten') + I.see('Einwilligungen für externe Inhalte') + const date = await I.grabTextFrom('time') + assert.equal(true, date && date.length !== 0) + I.seeInCurrentUrl('/privacy') + + I.amOnPage('/') + I.click('Nutzungsbedingungen und Urheberrecht') + I.see('Änderungsvorbehalt') + I.see('CC-BY-SA-Lizenz') + + I.amOnPage('/hi/privacy') + I.see('Privacy Policy') + I.see('en@serlo.org') +}) + +Scenario('Consent', async ({ I }) => { + I.amOnPage('/') + I.click('Jetzt Spenden') + + // Make sure that twingle is activated + const needConfirmation = await tryTo(() => { + I.see('Spendenformular laden') + }) + if (needConfirmation) { + I.click('Spendenformular laden') + } + + I.amOnPage('/') + I.click('Einwilligungen widerrufen') + I.see('Twingle') + I.click('Nicht mehr erlauben') + I.see('Keine Einwilligungen gespeichert') + + // Go back and check + I.amOnPage('/') + I.click('Jetzt Spenden') + I.see('Spendenformular laden') +}) + +Scenario('Special Pages', ({ I }) => { + I.amOnPage('/') + I.click('Kontakt') + I.see('Kontakt und Standorte', 'h1') + I.click('Jobs') + I.see('Digitale Bildung braucht dich', 'h1') + I.see('Unsere offenen Stellen') + I.see('Weiterbildung') + + I.amOnPage('/') + I.click('Kontakt') + + // Wait for next page to load before clicking team + I.see('Kontakt und Standorte', 'h1') + I.click('Team') + + // Needs to do external fetching, so wait a bit longer + I.waitForText('Softwareentwicklung', 30) +}) + +Scenario('Meta robots tags', ({ I }) => { + // should index + I.amOnPage('/') + I.dontSeeElementInDOM('meta[content=noindex]') + + I.amOnPage('/serlo') + I.dontSeeElementInDOM('meta[content=noindex]') + + I.amOnPage('/1555') + I.dontSeeElementInDOM('meta[content=noindex]') + + // hide test area + I.amOnPage('/community/106082/testbereich') + I.seeElementInDOM('meta[content=noindex]') + + I.amOnPage('/community/185201/kullas-testartikel-nicht-l%C3%B6schen') + I.seeElementInDOM('meta[content=noindex]') + + // hide trashed + I.amOnPage('/268814') + I.seeElementInDOM('meta[content=noindex]') +}) + +Scenario('Link component should not rewrite assets.serlo.org', ({ I }) => { + I.amOnPage('/transparenz') + I.click('Serlo Education Jahresbericht 2010') + I.wait(2) + I.dontSee('Es tut uns leid') +}) + +Scenario('Link to community chat should work', ({ I }) => { + I.amOnPage('/19880/mitmachen-in-mathematik') + I.click('Chat für Mathe-AutorInnen') + I.seeInTitle('Serlo Communitychat') +}) diff --git a/e2e-tests/tests/100-learners.ts b/e2e-tests/tests/100-learners.ts new file mode 100644 index 0000000000..2a24e8b1b3 --- /dev/null +++ b/e2e-tests/tests/100-learners.ts @@ -0,0 +1,365 @@ +Feature('Learners') + +const subjectQuickbarSelector = 'input[placeholder*="heute lerne ich"]' + +interface LandingPageData { + iconSelector: string + headingText: string + taxRootName: string + quickbarKeyword: string + quickbarKeywordResult: string + quickbarDistractor: string + quickbarDistractorDontSee: string + taxonomy1: string + taxonomyEntry1: string + taxonomy2: string + taxonomyEntry2: string +} + +async function testLandingPage(I: CodeceptJS.I, data: LandingPageData) { + I.amOnPage('/') + + // Use icon + I.click(data.iconSelector) + + I.see(data.headingText) + + // Visit taxonomy + I.click('Alle Themen') + I.click(data.taxRootName, 'nav > a') + + // Check correct filter + I.click(subjectQuickbarSelector) + I.type(data.quickbarKeyword) + I.see(data.quickbarKeywordResult, 'div.shadow') + + // Clear input + I.pressKey('Escape') + I.click(subjectQuickbarSelector) + + I.type(data.quickbarDistractor) + I.dontSee(data.quickbarDistractorDontSee, 'div.shadow') + + // Close quickbar + I.refreshPage() + + // Taxonomy explorer + I.dontSee(data.taxonomyEntry1, 'li > a.serlo-link') + I.click(data.taxonomy1) + I.see(data.taxonomyEntry1, 'li > a.serlo-link') + I.dontSee(data.taxonomyEntry2, 'li > a.serlo-link') + I.click(data.taxonomy2) + I.see(data.taxonomyEntry2, 'li > a.serlo-link') + + // Mitmachen + I.click('Mitmachen', '.bg-blueWave') + I.see('Werde Teil der Serlo Community') +} + +const landingPages: LandingPageData[] = [ + { + iconSelector: 'svg.superspecial-math', + headingText: 'Keine Angst vor Zahlen', + taxRootName: 'Mathematik', + quickbarKeyword: 'vektor', + quickbarKeywordResult: 'Vektorbegriff', + quickbarDistractor: 'zelle', + quickbarDistractorDontSee: 'Brennstoffzelle', + taxonomy1: 'Zahlen & Größen', + taxonomyEntry1: 'Grundrechenarten', + taxonomy2: 'Stochastik', + taxonomyEntry2: 'Kombinatorik', + }, + { + iconSelector: 'svg.superspecial-sus', + headingText: 'Unsere Welt gibt es nur einmal', + taxRootName: 'Angewandte Nachhaltigkeit', + quickbarKeyword: 'umwelt', + quickbarKeywordResult: 'Umweltschutz', + quickbarDistractor: 'zelle', + quickbarDistractorDontSee: 'Brennstoffzelle', + taxonomy1: 'Plastik', + taxonomyEntry1: 'Leben ohne Plastik?', + taxonomy2: 'Klimaschutz aktiv leben', + taxonomyEntry2: 'Klimawandel', + }, + { + iconSelector: 'svg.superspecial-bio', + headingText: 'Gib deinem Hirn einen Evolutionssprung', + taxRootName: 'Biologie', + quickbarKeyword: 'zelle', + quickbarKeywordResult: 'Tierische Zelle', + quickbarDistractor: 'zelle', + quickbarDistractorDontSee: 'Brennstoffzelle', + taxonomy1: 'Ökologie', + taxonomyEntry1: 'Populationsdynamik', + taxonomy2: 'Vielfalt der Lebewesen', + taxonomyEntry2: 'Wirbellose Tiere', + }, + { + iconSelector: 'svg.superspecial-chem', + headingText: 'In der Chemie ist nicht alles ätzend', + taxRootName: 'Chemie', + quickbarKeyword: 'chemie', + quickbarKeywordResult: 'Chemie Startseite', + quickbarDistractor: 'zelle', + quickbarDistractorDontSee: 'Tierische Zelle', + taxonomy1: 'Grundlagen', + taxonomyEntry1: 'Was ist Chemie?', + taxonomy2: 'Stoffmenge', + taxonomyEntry2: 'Stoffmenge und Mol', + }, + { + iconSelector: 'svg.superspecial-informatics', + headingText: 'Keine Angst vor Computern', + taxRootName: 'Informatik', + quickbarKeyword: 'bin', + quickbarKeywordResult: 'Binärsystem', + quickbarDistractor: 'zelle', + quickbarDistractorDontSee: 'Tierische Zelle', + taxonomy1: 'Daten & Informationen', + taxonomyEntry1: 'Verarbeitung von Informationen', + taxonomy2: 'Theoretische Informatik', + taxonomyEntry2: 'Formale Sprachen', + }, +] + +Scenario('Subject landing page', ({ I }) => { + testLandingPage( + I, + landingPages[Math.floor(Math.random() * landingPages.length)] + ) +}) + +Scenario('Interact with single choice', ({ I }) => { + // Feedback from content + I.amOnPage('/3383') + I.see('Klicke auf eine der Optionen') + I.click('15') + I.click("Stimmt's?") + I.see('Diese Antwort passt leider nicht') + I.click('120') + I.dontSee('Diese Antwort passt leider nicht') + I.click("Stimmt's?") + I.see('Diese Antwort passt leider nicht') + I.click('495') + I.click("Stimmt's?") + I.see('Super!') + + // Fallback feedback + I.amOnPage('/145139') + I.click('mit dem Graphen') + I.click("Stimmt's?") + I.see('Leider nicht richtig') + I.click('gestreckt') + I.click("Stimmt's?") + I.see('Richtig') + I.dontSee('Leider nicht') + I.click('gestaucht') + I.click("Stimmt's?") + I.see('Leider nicht richtig') +}) + +Scenario('Interact with multiple choice', ({ I }) => { + I.amOnPage('/131435') + I.see('Welche beiden Aufgaben') + I.click("Stimmt's") + I.see('Leider nicht richtig') + I.click('15% von 400€') + I.click("Stimmt's") + I.see('Fast! Dir fehlt noch mindestens eine richtige Antwort.') + + // Deselect + I.click('15% von 400€') + I.dontSee('Fast! Dir fehlt noch mindestens eine richtige Antwort.') + + I.click('30% von 200€') + I.click('15% von 400€') + I.click("Stimmt's") + I.see('Richtig') +}) + +Scenario('Geogebra', ({ I }) => { + I.amOnPage('/43563') + I.click('Applet laden von GeoGebra') + I.waitForElement('canvas[data-test="euclidianView"]', 10) + + I.amOnPage('/') + + I.amOnPage('/279849') + I.click('Applet laden von GeoGebra') + I.waitForElement('canvas[data-test="euclidianView"]', 10) +}) + +Scenario('Video + Injection', ({ I }) => { + I.amOnPage('/18524') + I.see('dass externe Inhalte von') + I.click('Video abspielen von YouTube') + I.switchTo('iframe') + I.see('Satz des Pythagoras für rechtwinklige Dreiecke') +}) + +Scenario('Toggle Solution', ({ I }) => { + I.amOnPage('/37779') + I.see('Die Klasse 8a') + I.dontSee('Für diese Aufgabe benötigst Du') + I.click('Lösung anzeigen') + I.see('Für diese Aufgabe benötigst Du') + I.click('Lösung ausblenden') + I.dontSee('Für diese Aufgabe benötigst Du') +}) + +Scenario('Taxonomy', ({ I }) => { + // Math all topics + I.amOnPage('/5') + I.see('Zahlen und Größen') + I.see('Bereiche') + I.see('Grundrechenarten') + + // Meta nav + I.click('Realschule') + + // Running around a bit more + I.see('Klasse 5') + I.see('Klasse 6') + I.click('Klasse 7') + I.see('Aufgaben') + I.click('Grundwissenstest 7. Klasse') + I.see('Aufgaben') + I.click('2021') + + // Takes a long time to load + I.waitForText('Berechne', 30) + + I.amOnPage('/24370') + I.see('Artikel') + I.see('Videos') + I.see('Applets') + I.see('Aufgaben') +}) + +Scenario('Breadcrumbs', ({ I }) => { + // Check entries + I.amOnPage('/247918') + I.see('Mathematik', 'a.hidden') + I.see('Realschule', 'a.hidden') + I.see('Klasse 7', 'a.hidden') + I.see('Grundwissenstest 7. Klasse', 'a.serlo-button') + + // Is short-circuit + I.dontSee('Deutschland') + + // Nav + I.click('Realschule') + I.see('Dieser Bereich orientiert sich') + + // Another test + I.amOnPage('/35149') + I.see('Angewandte Nachhaltigkeit', 'a.hidden') + I.see('Was bedeutet Nachhaltigkeit?', 'a.hidden') + I.see('Grundlagen der Nachhaltigkeit', 'a.serlo-button') + + // Check description + I.click('Grundlagen der Nachhaltigkeit') + I.seeElement('img.serlo-img') + + // Check if right taxonomy is selected + I.amOnPage('/1555') + I.see('Wichtige Grundkörper', 'a.serlo-button') + I.dontSee('Realschule') + I.dontSee('Gymnasium') +}) + +Scenario('Small subject', ({ I }) => { + I.amOnPage('/politik') + I.click('Alle Themen') + + // Meta mneu + I.see('Alle Themen', 'a.block') + + // Breadcrumbs + I.click('Politik') + I.see('Politik Startseite', 'h1') +}) + +// This is not a good way of accessing language versions because it's testing production +// Find another way if suitable +/* Scenario('Subject on language version', ({ I }) => { + I.amOnPage('/') + I.click('Serlo in anderen Sprachen') + I.click('Español') + I.click('Diásporas Africanas') + I.click('Todos los temas') + + // All topics + I.see('Construimos una plataforma') + + I.click('Estudios en Diásporas Africanas para la Escuela') + I.see('¡Bienvenidos a la') +})*/ + +Scenario('Exercise folder', ({ I }) => { + I.amOnPage('/23869') + + // Check numbering + for (let i = 1; i <= 20; i++) { + I.see(i.toString(), 'a.rounded-full') + } + + // Some random text + I.see('Berlin nach München') + + // License + I.see('Dieses Werk steht unter der freien Lizenz') + + // Guest invites + I.click('Aufgaben überarbeiten') + I.see('Erstelle mit uns Lerninhalte') + + // This line takes some time? + I.click('$modal-close-button') + + I.click('Aufgabe hinzufügen') + I.see('Erstelle mit uns Lerninhalte') +}) + +Scenario('Course', ({ I }) => { + I.amOnPage('/1327') + I.see('Kurse') + I.click('Einführung lineare Funktionen') + I.see('1', 'span.rounded-full') + I.see('Kursübersicht', 'h1') + I.click('Weiter') + I.see('2', 'span.rounded-full') + I.see('Aufstieg zur Zugspitze', 'h1') + I.click('Zurück') + I.see('Kursübersicht', 'h1') + I.click('Kursübersicht') + I.see('Zusammenfassung') + I.click('Weiterführende Übungen') + I.see('Lösung anzeigen') +}) + +Scenario('Comments', ({ I }) => { + // End of entity + I.amOnPage('/1537') + I.scrollTo('#comment-area-begin-scrollpoint') + I.see('Hast du eine Frage oder Feedback?') + I.see('Der Artikel Koordinatesystem ist nicht') + + // In exercise + I.amOnPage('/37296') + I.click('Lösung anzeigen') + I.scrollTo('#comment-area-begin-scrollpoint') + I.see('Ich weiß nicht, ob es vom Computer') +}) + +Scenario('Check picture in scmc exercise', ({ I }) => { + I.amOnPage('/mathe/54749/54749') + + I.see('Aufgaben zu Kreisen und Kreisteilen') + + I.seeInSource( + 'https://assets.serlo.org/legacy/56ebffb3bb393_1fe5b83b4ff8aae9bbc0026f127423c166e1ce93.png' + ) +}) diff --git a/e2e-tests/tests/200-login.ts b/e2e-tests/tests/200-login.ts new file mode 100644 index 0000000000..831c053aa7 --- /dev/null +++ b/e2e-tests/tests/200-login.ts @@ -0,0 +1,34 @@ +Feature('Login') + +Scenario('Login', ({ I }) => { + I.amOnPage('/') + I.see('Anmelden') + I.click('Anmelden') + + // Reduce flakiness + I.waitForText('Benutzername oder E-Mailadresse', 10) + + I.fillField('Benutzername oder E-Mailadresse', 'dal') + I.fillField('Passwort', '123456') + + // More robust selector + I.click('Anmelden', "button[value='password']") + + I.waitForText('Willkommen dal!', 10) + + // Wait as a fix for: https://github.com/microsoft/playwright/issues/20749 + I.wait(1) +}) + +Scenario('Logout', ({ I }) => { + I.amOnPage('/') + + // The asterix is mistaken as css selector sometimes, so remove it + I.click('Benutzer') + + I.click('Abmelden') + I.waitForText('Bis bald!', 10) + I.see('Anmelden') +}) + +// make sure user is logged out at the end of the tests diff --git a/e2e-tests/tests/300-authors.ts b/e2e-tests/tests/300-authors.ts new file mode 100644 index 0000000000..bd0109192a --- /dev/null +++ b/e2e-tests/tests/300-authors.ts @@ -0,0 +1,168 @@ +Feature('Authors') + +// expecting user to be logged out before start of tests + +Before(({ login }) => { + login('admin') // login as admin for now +}) + +// Articles only for now +Scenario('Saving without changes', ({ I }) => { + I.amOnPage('/entity/repository/add-revision/74888') + I.click('Speichern') + I.waitForText('Bisher hast du nichts geändert') + I.dontSee('Beschreibe deine Änderungen am Inhalt') +}) + +Scenario('Open Editor from article', async ({ I }) => { + I.amOnPage('/74888') + + // Make sure we see the latest version + I.refreshPage() + + // only works for 1 level + const hasRevisions = await tryTo(() => { + // Menu takes time to load + I.wait(3) + I.see('Zeige neue Bearbeitungen') + }) + if (hasRevisions) { + I.click('Zeige neue Bearbeitungen') + + // Select first new revision by title value + I.click('Diese Bearbeitung anzeigen') + + I.click('Nicht akzeptieren') + I.click('Bestätigen') + I.amOnPage('/74888') + } + + I.click('Überarbeiten') + I.waitForText('Speichern', 10) + I.see('Treibhausgase') +}) + +// This test fails regulary due to sychronization issues +// Especially bad: it will leave staging in a undetermined state +// and break subsequent test runs +// I will disable this test for now +// In the future, try to break to behaviour into parts +/* +Scenario('Add Revision and reject', async ({ I }) => { + I.amOnPage('/entity/repository/add-revision/74888') + I.click("input[placeholder='Titel']") + I.pressKey('-') + I.pressKey('T') + I.pressKey('e') + I.pressKey('s') + I.pressKey('t') + I.pressKey('Space') + + // Randomize script so that revisions are not ignored + I.type(Math.random().toString()) + + I.click('Speichern') + I.click('Speichern und reviewen lassen') + I.waitForText('Bitte alle Pflichtfelder ausfüllen', 10) + + // Use class instead of text because text is super long and not reliable + I.click('.license-wrapper') + I.click('Speichern und reviewen lassen') + I.waitForText('Bitte alle Pflichtfelder ausfüllen', 10) + + I.fillField('label textarea', 'automated-test') + I.click('Speichern und reviewen lassen') + I.dontSee('Bitte alle Pflichtfelder ausfüllen') + + I.waitForText('Danke für deine Bearbeitung', 60) + I.see('Bearbeitungsverlauf') + + // updates are sometimes not fast enough + I.refreshPage() + + // I can't predict if it's the one or the other string + const seeVersion1 = await tryTo(() => { + I.see('vor einer Weile') + }) + if (!seeVersion1) { + I.see('gerade eben') + } + + I.click('automated-test') + // For local testing, it's slow + I.waitForText('Treibhausgase-Test', 30) + + // Reject revision + I.click('Nicht akzeptieren') + I.click('Bestätigen') + I.waitForText('Bearbeitung wurde nicht akzeptiert', 15) +}) +*/ + +/*Scenario('Reject Revision @current', ({ I }) => { + // clean up revision + pause() +})*/ + +// LocalStorage tests + +// Logout in second Tab… + +Scenario('Sort taxonomy entities', async ({ I }) => { + I.amOnPage('/taxonomy/term/sort/entities/75211') + I.see('Artikel') + I.see('Codierungen') + + I.see('Kurse') + I.see('Webseite selbst erstellen') + + I.see('Bereiche') + I.see('Technische Informatik') +}) + +Scenario('Sort exercise folder', async ({ I }) => { + I.amOnPage('/taxonomy/term/sort/entities/23869') + + I.see('Aufgaben') + + const firstElement = locate('li').withText('(1) Aufgabe') + const secondElement = locate('li').withText('(2) Aufgabe') + + // initial order + I.seeElement(locate(firstElement).before(secondElement)) + + I.focus(firstElement) + I.pressKey('Space') + I.pressKey('ArrowDown') + I.pressKey('Space') + + //changed order + I.seeElement(locate(secondElement).before(firstElement)) + I.see('(20)') +}) + +// removed by https://github.com/serlo/frontend/pull/3044 +/*Scenario('Solution revision should be visible', async ({ I }) => { + I.amOnPage('/entity/repository/compare/279738/279739') + I.see('Der Zeiger ist alle 12 Stunden') +})*/ + +Scenario("Switching tabs shouldn't lose work", async ({ I }) => { + I.amOnPage('/entity/repository/add-revision/74888') + I.click("input[placeholder='Titel']") + I.pressKey('-') + I.pressKey('T') + I.pressKey('e') + I.pressKey('s') + I.pressKey('t') + + I.seeInField("input[placeholder='Titel']", 'Treibhausgase-Test') + + I.openNewTab() + I.wait(2) + I.closeCurrentTab() + + I.wait(2) + + I.seeInField("input[placeholder='Titel']", 'Treibhausgase-Test') +}) diff --git a/e2e-tests/tests/400-serlo-editor.ts b/e2e-tests/tests/400-serlo-editor.ts new file mode 100644 index 0000000000..1c0b10f327 --- /dev/null +++ b/e2e-tests/tests/400-serlo-editor.ts @@ -0,0 +1,182 @@ +import { popupWarningFix } from './helpers/popup-warning-fix' + +Feature('Serlo Editor') + +Before(popupWarningFix) + +Scenario('Basic text interactions', async ({ I }) => { + I.amOnPage('/entity/repository/add-revision/74888') + + I.click('$plugin-text-editor') + + const testString = 'TESTTESTTEST' + I.type(testString) + I.see(testString) + for (let i = 0; i < testString.length; i++) { + I.pressKey('Backspace') + } + I.dontSee(testString) +}) + +Scenario('Add new plugins', async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + I.click('$add-new-plugin-row-button') + I.pressKey('Enter') + + // Only one text plugin visible + I.see('Schreib etwas oder füge') + + // workaround: plugin toolbar is hiding add-new-plugin-row-button + // unfocus to make it visible + I.click('input[placeholder="Titel"]') + I.click('$add-new-plugin-row-button') + + for (let i = 0; i < 3; i++) { + I.pressKey('ArrowDown') + } + // Spoiler + I.pressKey('Enter') + + I.seeElement('input[placeholder="Titel eingeben"]') + + I.pressKey('/') + for (let i = 0; i < 4; i++) { + I.pressKey('ArrowDown') + } + // Box + I.pressKey('Enter') + + I.see('Art der Box') + I.click('Merke') + + I.see('(optionaler Titel)') +}) + +Scenario('Close plugin selection modal', async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + I.click('Füge ein Element hinzu') + const textPluginDescription = + 'Schreibe Text und Matheformeln, und formatiere sie.' + I.see(textPluginDescription) + + I.pressKey('Escape') + // Modal should be closed + I.dontSee(textPluginDescription) + + // Open modal again + I.type('/') + I.see(textPluginDescription) + + // focus something different by clicking outside of the modal, in this + // instance into the quickbar + I.click('$quickbar-input') + // Modal should now be closed + I.dontSee(textPluginDescription) +}) + +Scenario('Add plugin via slash command', async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + // ensure there is no table yet + I.dontSeeElement('.serlo-table') + I.click('$add-new-plugin-row-button') + I.type('Tabelle') + I.pressKey('Enter') + + I.seeElement('.serlo-table') +}) + +/** + * Most of the input of the editor happens within the editor contenteditable + * div. However, there are some input fields whose undo/redo behavior could + * function differently because we have one global undo/redo handler and the + * browser also natively handles it unless we specifically overwrite the behavior. + * Therefore, we want to ensure that we never do 2 undos when ctrl+z is pressed. + */ +Scenario( + 'Undo via keyboard in input field for article heading', + async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + const articleHeadingInput = 'input[placeholder="Titel"]' + I.click(articleHeadingInput) + + const firstWord = 'Some ' + I.type(firstWord) + I.wait(2) + + const secondWord = 'Text' + I.type(secondWord) + + I.seeInField(articleHeadingInput, `${firstWord}${secondWord}`) + + I.pressKey(['CommandOrControl', 'Z']) + I.dontSeeInField(articleHeadingInput, `${firstWord}${secondWord}`) + I.dontSeeInField(articleHeadingInput, `${secondWord}`) + I.seeInField(articleHeadingInput, firstWord) + + I.pressKey(['CommandOrControl', 'Z']) + I.dontSeeInField(articleHeadingInput, `${firstWord}${secondWord}`) + I.dontSeeInField(articleHeadingInput, firstWord) + } +) + +Scenario( + 'Undo via keyboard in input field of picture plugin', + async ({ I }) => { + // make sure autofocus logic after opening is done + I.wait(0.5) + // No need to create the image plugin first as the multimedia plugin at the + // beginning of each page already contains one. But, we do need to focus it, + // in order to make the src input visible + I.click('$plugin-image-editor') + const imagePluginUrlInput = + 'input[placeholder="https://example.com/image.png"]' + + I.click(imagePluginUrlInput) + + const firstWord = 'Some ' + I.type(firstWord) + I.wait(2) + + const secondWord = 'Text' + I.type(secondWord) + + I.seeInField(imagePluginUrlInput, `${firstWord}${secondWord}`) + + I.pressKey(['CommandOrControl', 'Z']) + I.dontSeeInField(imagePluginUrlInput, `${firstWord}${secondWord}`) + I.dontSeeInField(imagePluginUrlInput, `${secondWord}`) + I.seeInField(imagePluginUrlInput, firstWord) + + I.pressKey(['CommandOrControl', 'Z']) + I.dontSeeInField(imagePluginUrlInput, `${firstWord}${secondWord}`) + I.dontSeeInField(imagePluginUrlInput, firstWord) + } +) + +Scenario( + 'Redo in input field for article heading via keyboard', + async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + const articleHeadingInput = { xpath: '//input[@placeholder="Titel"]' } + I.click(articleHeadingInput) + + const firstWord = 'Some ' + I.type(firstWord) + I.wait(2) + + const secondWord = 'Text' + I.type(secondWord) + I.seeInField(articleHeadingInput, `${firstWord}${secondWord}`) + + I.pressKey(['CommandOrControl', 'Z']) + I.dontSeeInField(articleHeadingInput, `${firstWord}${secondWord}`) + I.dontSeeInField(articleHeadingInput, `${secondWord}`) + I.seeInField(articleHeadingInput, firstWord) + + I.pressKey(['CommandOrControl', 'Y']) + I.seeInField(articleHeadingInput, `${firstWord}${secondWord}`) + } +) diff --git a/e2e-tests/tests/410-plugin-toolbar.ts b/e2e-tests/tests/410-plugin-toolbar.ts new file mode 100644 index 0000000000..44f65c0ad1 --- /dev/null +++ b/e2e-tests/tests/410-plugin-toolbar.ts @@ -0,0 +1,50 @@ +import { popupWarningFix } from './helpers/popup-warning-fix' + +Feature('Serlo Editor - plugin toolbar') + +Before(popupWarningFix) + +// First Text plugin is the multimedia explanation, +// second is multimedia image caption, +// third is default empty text plugin +const initialTextPluginCount = 3 + +Scenario('Duplicate plugin', async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + I.seeNumberOfElements('$plugin-text-editor', initialTextPluginCount) + + I.click('$add-new-plugin-row-button') + I.pressKey('Backspace') + I.seeNumberOfElements('$plugin-text-editor', initialTextPluginCount + 1) + + I.moveCursorTo( + locate('[data-radix-collection-item]').inside('.plugin-toolbar') + ) + I.click('$duplicate-plugin-button') + + I.seeNumberOfElements('$plugin-text-editor', initialTextPluginCount + 2) +}) + +Scenario('Delete plugin', async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + I.seeNumberOfElements('$plugin-text-editor', initialTextPluginCount) + + I.click('$add-new-plugin-row-button') + I.pressKey('Backspace') + I.seeNumberOfElements('$plugin-text-editor', initialTextPluginCount + 1) + + I.moveCursorTo( + locate('[data-radix-collection-item]').inside('.plugin-toolbar') + ) + I.click('$remove-plugin-button') + + I.seeNumberOfElements('$plugin-text-editor', initialTextPluginCount) +}) + +// The anchor link copy tool is currently not rendered in Codecept. +// If this feature passes experimental stage, it's worth finding a way +// to render it in Codecept. Otherwise, this todo can be removed. +// (https://trello.com/c/W6ZXhNpv/95-anchor-sprungmarke) +Scenario.todo('Copy link to plugin') diff --git a/e2e-tests/tests/420-text-plugin.ts b/e2e-tests/tests/420-text-plugin.ts new file mode 100644 index 0000000000..d520642a5d --- /dev/null +++ b/e2e-tests/tests/420-text-plugin.ts @@ -0,0 +1,351 @@ +import { popupWarningFix } from './helpers/popup-warning-fix' + +Feature('Serlo Editor - Text plugin basic interactions') + +Before(popupWarningFix) + +// First Text plugin is the multimedia explanation, +// second is multimedia image caption, +// third is default empty text plugin +const initialTextPluginCount = 3 + +Scenario('Add a new line using Enter', async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + I.seeNumberOfElements('$plugin-text-editor', initialTextPluginCount) + + I.click('$add-new-plugin-row-button') + I.pressKey('Backspace') + I.seeNumberOfElements('$plugin-text-editor', initialTextPluginCount + 1) + + I.say('Press Enter to add a new line') + I.pressKey('Enter') + I.seeNumberOfElements('$plugin-text-editor', initialTextPluginCount + 1) +}) + +Scenario('Add new line in plugin using Enter', async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + I.seeNumberOfElements('$plugin-text-editor', initialTextPluginCount) + + I.click('$add-new-plugin-row-button') + I.pressKey('Backspace') + I.seeNumberOfElements('$plugin-text-editor', initialTextPluginCount + 1) + + const firstText = 'first' + const secondText = 'second' + + I.say('Type some text and move the cursor in the middle of it') + I.type(firstText + secondText) + I.see(firstText + secondText) + for (let i = 0; i < secondText.length; i++) { + I.pressKey('ArrowLeft') + } + + I.say('Add new line in plugin using Enter') + I.pressKey('Enter') + I.seeNumberOfElements('$plugin-text-editor', initialTextPluginCount + 1) + I.dontSee(firstText + secondText) + I.see(firstText) + I.see(secondText) +}) + +Scenario('Remove empty Text plugin using Backspace key', async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + I.seeNumberOfElements('$plugin-text-editor', initialTextPluginCount) + + I.say('Focus the default Text plugin') + I.pressKey('ArrowDown') + + I.say('Nothing happens when Backspace is pressed in the first plugin') + I.pressKey('Backspace') + I.seeNumberOfElements('$plugin-text-editor', initialTextPluginCount) + + I.say('Add a second Text plugin') + I.click('$add-new-plugin-row-button') + I.seeNumberOfElements('$plugin-text-editor', initialTextPluginCount + 1) + + I.say('Remove the forward slash') + I.pressKey('Backspace') + + I.say('Remove the plugin using Backspace') + I.pressKey('Backspace') + I.seeNumberOfElements('$plugin-text-editor', initialTextPluginCount) +}) + +Scenario('Remove empty Text plugin using Delete key', async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + I.seeNumberOfElements('$plugin-text-editor', initialTextPluginCount) + + I.say('Focus the default Text plugin') + I.pressKey('ArrowDown') + + I.say('Add a second Text plugin') + I.click('$add-new-plugin-row-button') + I.seeNumberOfElements('$plugin-text-editor', initialTextPluginCount + 1) + + I.say('Remove the forward slash') + I.pressKey('Backspace') + + I.say('Nothing happens when Delete is pressed in the last plugin') + I.pressKey('Delete') + I.seeNumberOfElements('$plugin-text-editor', initialTextPluginCount + 1) + + I.say('Focus the first plugin') + I.pressKey('ArrowUp') + + I.say('Remove the plugin using Delete') + I.pressKey('Delete') + I.seeNumberOfElements('$plugin-text-editor', initialTextPluginCount) +}) + +Scenario('Merge with previous plugin using Backspace key', async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + I.say('Create another text plugin') + I.click('$add-new-plugin-row-button') + I.seeNumberOfElements('$plugin-text-editor', initialTextPluginCount + 1) + I.pressKey('Backspace') + I.type('- Second text plugin') + I.see('Second text plugin') + + I.say('Focus the first text plugin') + I.pressKey('ArrowUp') + I.pressKey('ArrowUp') + + I.say('Write text into the first text plugin') + I.type('- First text plugin') + I.see('First text plugin') + + I.say('Focus the second text plugin') + I.pressKey('ArrowDown') + + I.say('Merge the 2 text plugins by pressing Backspace') + // We need to duplicate the 'Backspace' command since only once doesn't have the expected effect + I.pressKey('Backspace') + I.pressKey('Backspace') + I.seeNumberOfElements('$plugin-text-editor', initialTextPluginCount) +}) + +// Test related to issue: https://github.com/serlo/backlog/issues/158 +Scenario( + 'Merge with previous plugin containing list using Backspace key', + async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + I.say('Create a text plugin') + I.click('$add-new-plugin-row-button') + I.seeNumberOfElements('$plugin-text-editor', initialTextPluginCount + 1) + I.pressKey('Backspace') + I.type('- Plain text') + I.see('Plain text') + + I.say('Focus the first text plugin') + I.pressKey('ArrowUp') + I.pressKey('ArrowUp') + + I.say('Create an ordered list') + I.type('- Unordered list') + I.click('$plugin-toolbar-button-nummerierte-liste') + I.see('Unordered list', 'ol') + + I.say('Focus the second text plugin') + I.pressKey('ArrowDown') + + I.say('Merge the 2 text plugins by pressing Backspace') + // We need to duplicate the 'Backspace' command since only once doesn't have the expected effect + I.pressKey('Backspace') + I.pressKey('Backspace') + I.seeNumberOfElements('$plugin-text-editor', initialTextPluginCount) + } +) + +Scenario.todo('Merge with next plugin using Delete key') + +Scenario('Undo', async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + I.click('$add-new-plugin-row-button') + + I.pressKey('Backspace') + + I.type('Some text') + I.see('Some text') + + I.click('$editor-toolbar-undo') + + I.dontSee('Some text') +}) + +Scenario('Undo using keyboard', async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + I.click('$add-new-plugin-row-button') + + I.pressKey('Backspace') + + I.type('Some text') + I.see('Some text') + + I.pressKey(['CommandOrControl', 'Z']) + + I.dontSee('Some text') +}) + +Scenario('Redo', async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + I.click('$add-new-plugin-row-button') + + I.pressKey('Backspace') + + I.type('Some text') + + I.see('Some text') + + I.click('$editor-toolbar-undo') + + I.dontSee('Some text') + + I.click('$editor-toolbar-redo') + + I.see('Some text') +}) + +Scenario('Redo using keyboard', async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + I.click('$add-new-plugin-row-button') + + I.pressKey('Backspace') + + I.type('Some text') + + I.see('Some text') + + I.pressKey(['CommandOrControl', 'Z']) + + I.dontSee('Some text') + + // ! For some reason, the first redo does not work. The second one does. If + // one puts a pause() here and runs the command only once through the + // interactive shell , it works just as fine as clicking the button. + // Therefore, I thought the Ctrl+Y was maybe happening too quickly after the + // Ctrl+Z, but even with I.wait(1) inbetween, two executions were needed. + I.pressKey(['CommandOrControl', 'Y']) + I.pressKey(['CommandOrControl', 'Y']) + + I.see('Some text') +}) + +Scenario('Copy/cut/paste text', async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + I.click('$add-new-plugin-row-button') + + I.pressKey('Backspace') + + I.type('TESTTESTTEST') + + I.see('TESTTESTTEST') + + for (let i = 0; i < 12; i++) { + I.pressKey(['Shift', 'LeftArrow']) + } + + I.pressKey(['CommandOrControl', 'C']) + + I.pressKey('Backspace') + + I.dontSee('TESTTESTTEST') + + I.pressKey(['CommandOrControl', 'V']) + + I.see('TESTTESTTEST') + + for (let i = 0; i < 12; i++) { + I.pressKey('Backspace') + } + + I.type('CUTCUTCUT') + + I.see('CUTCUTCUT') + + for (let i = 0; i < 9; i++) { + I.pressKey(['Shift', 'LeftArrow']) + } + + I.pressKey(['CommandOrControl', 'X']) + + I.dontSee('CUTCUTCUT') + + I.pressKey(['CommandOrControl', 'V']) + + I.see('CUTCUTCUT') +}) + +Scenario('Empty line restrictions while typing', async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + I.click(locate('$plugin-text-editor').inside('.plugin-rows')) + I.type('First line') + I.seeNumberOfElements( + locate('$plugin-text-leaf-element').inside('.plugin-rows'), + 1 + ) + I.seeNumberOfElements( + locate('$plugin-text-leaf-element-with-placeholder').inside('.plugin-rows'), + 0 + ) + + I.say('First Enter key press adds a new line with a placeholder') + I.pressKey('Enter') + I.seeNumberOfElements( + locate('$plugin-text-leaf-element').inside('.plugin-rows'), + 2 + ) + I.seeNumberOfElements( + locate('$plugin-text-leaf-element-with-placeholder').inside('.plugin-rows'), + 1 + ) + + I.say('Second Enter key press adds another new line with a placeholder') + I.pressKey('Enter') + I.seeNumberOfElements( + locate('$plugin-text-leaf-element').inside('.plugin-rows'), + 3 + ) + I.seeNumberOfElements( + locate('$plugin-text-leaf-element-with-placeholder').inside('.plugin-rows'), + 1 + ) + + I.say('Third Enter key press does not add a new line') + I.pressKey('Enter') + I.seeNumberOfElements( + locate('$plugin-text-leaf-element').inside('.plugin-rows'), + 3 + ) + I.seeNumberOfElements( + locate('$plugin-text-leaf-element-with-placeholder').inside('.plugin-rows'), + 1 + ) + + I.say( + 'Text plugin blur removes one of the adjacent empty lines and hides the placeholder' + ) + I.click('$plugin-multimedia-wrapper') + I.seeNumberOfElements( + locate('$plugin-text-leaf-element').inside('.plugin-rows'), + 2 + ) + I.seeNumberOfElements( + locate('$plugin-text-leaf-element-with-placeholder').inside('.plugin-rows'), + 0 + ) +}) + +// Couldn't find any info on testing paste behavior with Codecept.js +Scenario.todo('Empty line restrictions when pasting text') diff --git a/e2e-tests/tests/421-text-plugin-formatting-options.ts b/e2e-tests/tests/421-text-plugin-formatting-options.ts new file mode 100644 index 0000000000..dd20a4e8ea --- /dev/null +++ b/e2e-tests/tests/421-text-plugin-formatting-options.ts @@ -0,0 +1,244 @@ +import { popupWarningFix } from './helpers/popup-warning-fix' + +Feature('Serlo Editor - Text plugin - formatting options') + +Before(popupWarningFix) + +Scenario( + 'Toggle text formatting options using keyboard shortcuts', + async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + I.click('$add-new-plugin-row-button') + I.pressKey('Backspace') + I.type('Some text') + I.see('Some text') + + I.pressKey(['CommandOrControl', 'A']) + + I.say('Toggle bold on') + I.pressKey(['CommandOrControl', 'B']) + I.seeElement({ css: 'b' }) + + I.say('Toggle bold off') + I.pressKey(['CommandOrControl', 'B']) + I.dontSeeElement({ css: 'b' }) + + I.say('Toggle italic on') + I.pressKey(['CommandOrControl', 'I']) + I.seeElement({ css: 'i' }) + + I.say('Toggle italic off') + I.pressKey(['CommandOrControl', 'I']) + I.dontSeeElement({ css: 'i' }) + + I.say('Toggle link on') + I.pressKey(['CommandOrControl', 'K']) + I.type('https://de.serlo.org/mathe/1541/hypotenuse') + I.click('$link-suggestion-0') + I.click('Some text') + I.see('Hypotenuse') + I.seeElement({ css: '.serlo-editor-hacks a' }) + + I.say('Toggle link off') + I.pressKey(['CommandOrControl', 'A']) + I.pressKey(['CommandOrControl', 'K']) + I.dontSeeElement({ css: '.serlo-editor-hacks a' }) + + // Clear link + I.pressKey(['CommandOrControl', 'A']) + I.pressKey('Backspace') + + I.say('Toggle math on') + I.pressKey(['CommandOrControl', 'M']) + I.seeElement('$plugin-math-latex-editor') + I.type('\\frac12 test42') + I.pressKey('ArrowRight') + I.dontSee('LaTeX') + I.seeElement('span.katex') + + I.say('Remove math element') + I.pressKey(['CommandOrControl', 'A']) + I.pressKey('Backspace') + I.dontSeeElement('span.katex') + + I.say('Toggle unordered list on') + I.type('- Some text') + I.see('Some text', 'ul') + + I.say('Toggle unordered list off by deleting hyphen') + for (let i = 0; i < 9; i++) { + I.pressKey('LeftArrow') + } + I.pressKey('Backspace') + I.dontSee('Some text', 'ul') + + // Clear remnants of the list + I.pressKey(['CommandOrControl', 'A']) + I.pressKey('Backspace') + + I.say('Toggle H1 on') + I.type('# Some text') + I.see('Some text', 'h1') + + I.say('Toggle H1 off') + for (let i = 0; i < 9; i++) { + I.pressKey('LeftArrow') + } + I.type('# ') + I.dontSee('Some text', 'h1') + + I.say('Toggle H2 on') + I.type('## ') + I.see('Some text', 'h2') + + I.say('Toggle H2 off') + for (let i = 0; i < 9; i++) { + I.pressKey('LeftArrow') + } + I.type('## ') + I.dontSee('Some text', 'h2') + + I.say('Toggle H3 on') + I.type('### ') + I.see('Some text', 'h3') + + I.say('Toggle H3 off') + for (let i = 0; i < 9; i++) { + I.pressKey('LeftArrow') + } + I.type('### ') + I.dontSee('Some text', 'h3') + } +) + +Scenario( + 'Toggle text formatting options using plugin toolbar', + async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + I.click('$add-new-plugin-row-button') + + I.pressKey('Backspace') + + I.type('Some text') + + I.say('Toggle bold on') + I.pressKey(['CommandOrControl', 'A']) + I.click('$plugin-toolbar-button-fett') + I.seeElement({ css: 'b' }) + + I.say('Toggle bold off') + I.click('$plugin-toolbar-button-fett') + I.dontSeeElement({ css: 'b' }) + + I.say('Toggle italic on') + I.click('$plugin-toolbar-button-kursiv') + I.seeElement({ css: 'i' }) + + I.say('Toggle italic off') + I.click('$plugin-toolbar-button-kursiv') + I.dontSeeElement({ css: 'i' }) + + I.say('Toggle code on') + I.click('$plugin-toolbar-button-code') + I.see('Some text', 'code') + I.seeElement({ css: '.serlo-editor-hacks code' }) + + I.say('Toggle code off') + I.click('$plugin-toolbar-button-code') + I.dontSeeElement({ css: '.serlo-editor-hacks code' }) + + I.say('Toggle link on') + I.click('$plugin-toolbar-button-link') + I.type('https://de.serlo.org/mathe/1541/hypotenuse') + // select the very first suggestion (index 0) + I.click('$link-suggestion-0') + I.seeElement({ css: '.serlo-editor-hacks a' }) + + I.say('Refocus link') + I.click('Some text') + I.see('Hypotenuse') + + I.say('Toggle link off via plugin bar') + I.click('Some text') + I.click('$plugin-toolbar-button-link') + I.dontSeeElement({ css: '.serlo-editor-hacks a' }) + + I.say('Toggle unordered list on') + I.pressKey(['CommandOrControl', 'A']) + I.click('$plugin-toolbar-button-aufzählung') + I.see('Some text', 'ul') + + I.say('Toggle unordered list off') + I.click('$plugin-toolbar-button-aufzählung') + I.dontSee('Some text', 'ul') + + I.say('Toggle ordered list on') + I.click('$plugin-toolbar-button-nummerierte-liste') + I.see('Some text', 'ol') + + I.say('Toggle ordered list off') + I.click('$plugin-toolbar-button-nummerierte-liste') + I.dontSeeElement({ css: '.serlo-editor-hacks ol' }) + + I.say('Toggle H1 on') + I.click('$plugin-toolbar-button-überschriften') + I.click('$plugin-toolbar-heading-1') + I.see('Some text', 'h1') + + I.say('Toggle H1 off') + I.click('$plugin-toolbar-button-überschriften') + I.click('$plugin-toolbar-heading-1') + I.dontSee('Some text', 'h1') + + I.say('Toggle H2 on') + I.click('$plugin-toolbar-button-überschriften') + I.click('$plugin-toolbar-heading-2') + I.see('Some text', 'h2') + + I.say('Toggle H2 off') + I.click('$plugin-toolbar-button-überschriften') + I.click('$plugin-toolbar-heading-2') + I.dontSee('Some text', 'h2') + + I.say('Toggle H3 on') + I.click('$plugin-toolbar-button-überschriften') + I.click('$plugin-toolbar-heading-3') + I.see('Some text', 'h3') + + I.say('Toggle H3 off') + I.click('$plugin-toolbar-button-überschriften') + I.click('$plugin-toolbar-heading-3') + I.dontSee('Some text', 'h3') + + I.say('Change text color to orange') + I.click('$plugin-toolbar-button-textfarben') + I.click('$plugin-toolbar-button-orange') + I.seeElement('span[style="color: rgb(255, 102, 0);"]') + + I.say('Reset color') + I.pressKey(['CommandOrControl', 'A']) + I.click('$plugin-toolbar-button-textfarben') + I.click('$plugin-toolbar-button-farbe-zurücksetzen') + I.dontSeeElement('span[style="color: rgb(255, 102, 0);"]') + + I.say('Toggle math on') + I.pressKey(['CommandOrControl', 'A']) + I.pressKey('Backspace') + I.click('$plugin-toolbar-button-matheformel') + I.seeElement('$plugin-math-latex-editor') + + I.type('\\frac12') + I.pressKey('ArrowRight') + I.dontSee('LaTeX') + I.seeElement('span.katex') + + I.say('Toggle math off') + // show LaTeX editor again to remove it upon clicking into the toolbar + I.pressKey('ArrowLeft') + I.see('LaTeX') + I.click('$plugin-toolbar-button-matheformel') + I.dontSeeElement('span.katex') + } +) diff --git a/e2e-tests/tests/422-text-plugin-math.ts b/e2e-tests/tests/422-text-plugin-math.ts new file mode 100644 index 0000000000..269cd0cdaa --- /dev/null +++ b/e2e-tests/tests/422-text-plugin-math.ts @@ -0,0 +1,78 @@ +import { popupWarningFix } from './helpers/popup-warning-fix' + +Feature('Serlo Editor - Text plugin - math formula') + +Before(popupWarningFix) + +Scenario('Add a math formula', async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + I.click('$add-new-plugin-row-button') + I.pressKey('Backspace') + + I.type('Some text ') + I.pressKey(['CommandOrControl', 'M']) + + I.seeElement('$plugin-math-latex-editor') + I.type('\\frac12') +}) + +Scenario('Close math formula using arrow keys', async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + I.click('$add-new-plugin-row-button') + I.pressKey('Backspace') + + I.type('Some text ') + I.pressKey(['CommandOrControl', 'M']) + I.type('\\frac12') + + I.say('Close math editor with cursor at the end and ArrowRight') + I.pressKey('ArrowRight') + I.dontSee('LaTeX') + I.seeElement('span.katex') + + I.say('Refocus math editor') + + // Codecept tries to scroll into view, but this causes sticky header to hide element + I.forceClick('span.katex') + I.seeElement('$plugin-math-latex-editor') + + I.say('Close math editor with cursor at the start and ArrowLeft') + I.pressKey('Home') + I.pressKey('ArrowLeft') + I.dontSee('LaTeX') + I.seeElement('span.katex') +}) + +Scenario('Close math formula using Escape', async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + I.click('$add-new-plugin-row-button') + I.pressKey('Backspace') + + I.type('Some text ') + I.pressKey(['CommandOrControl', 'M']) + I.type('\\frac12') + + I.say('Close math editor with ESC key') + I.pressKey('Escape') + I.dontSee('LaTeX') + I.seeElement('span.katex') +}) + +Scenario('Close math formula using close button', async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + I.click('$add-new-plugin-row-button') + I.pressKey('Backspace') + + I.type('Some text ') + I.pressKey(['CommandOrControl', 'M']) + I.type('\\frac12') + + I.say('Close math editor with close button') + I.click('$plugin-math-close-formula-editor') + I.dontSeeElement('$plugin-math-latex-editor') + I.seeElement('span.katex') +}) diff --git a/e2e-tests/tests/423-text-plugin-list.ts b/e2e-tests/tests/423-text-plugin-list.ts new file mode 100644 index 0000000000..fd1c2d6219 --- /dev/null +++ b/e2e-tests/tests/423-text-plugin-list.ts @@ -0,0 +1,96 @@ +import { popupWarningFix } from './helpers/popup-warning-fix' + +Feature('Serlo Editor - Text plugin - list') + +Before(popupWarningFix) + +Scenario('Unordered list shortcuts (indentation missing)', async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + I.say('Add a new text plugin and delete the backslash') + I.click('$add-new-plugin-row-button') + I.pressKey('Backspace') + + I.say('Create an unordered list') + I.type('- Some text') + I.see('Some text', 'ul') + + I.say('Add new list item on Enter') + I.pressKey('Enter') + I.type('Some more text') + I.see('Some more text', 'ul') + + I.say('Indent list item on Tab') + I.dontSee('ul > li > ul > li') + I.pressKey('Tab') + I.seeElement({ css: 'ul > li > ul > li' }) + + I.say('Unindent list item on Shift+Tab') + I.pressKey(['Shift', 'Tab']) + I.dontSeeElement({ css: 'ul > li > ul > li' }) + + I.say('Exit the list on double Enter') + I.pressKey('Enter') + I.pressKey('Enter') + I.type('Exit the list') + I.dontSee('Exit the list', 'ul') + + I.say('Clear Text in list') + I.pressKey(['CommandOrControl', 'A']) + I.pressKey('Backspace') + I.seeElement({ + css: '.serlo-editor-hacks div[data-slate-editor="true"] ul:not(.unstyled-list)', + }) + + I.say('Remove empty list item on backspace') + I.pressKey('Backspace') + I.dontSeeElement({ + css: '.serlo-editor-hacks div[data-slate-editor="true"] ul:not(.unstyled-list)', + }) +}) + +Scenario('Ordered list shortcuts', async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + I.say('Add a new text plugin and delete the backslash') + I.click('$add-new-plugin-row-button') + I.pressKey('Backspace') + + I.say('Create an ordered list') + I.type('First list item') + I.click('$plugin-toolbar-button-nummerierte-liste') + I.see('First list item', 'ol') + + I.say('Add new list item on Enter') + I.pressKey('Enter') + I.type('Second list item') + I.see('Second list item', 'ol') + + I.say('Indent list item on Tab') + I.dontSee('ol > li > ul > li') + I.pressKey('Tab') + I.seeElement({ css: 'ol > li > ul > li' }) + + I.say('Unindent list item on Shift+Tab') + I.pressKey(['Shift', 'Tab']) + I.dontSeeElement({ css: 'ol > li > ul > li' }) + + I.say('Exit the list on double Enter') + I.pressKey('Enter') + I.pressKey('Enter') + I.type('Exit the list') + I.dontSee('Exit the list', 'ol') + + I.say('Clear Text in list') + I.pressKey(['CommandOrControl', 'A']) + I.pressKey('Backspace') + I.seeElement({ + css: '.serlo-editor-hacks div[data-slate-editor="true"] ol:not(.unstyled-list)', + }) + + I.say('Remove empty list item on backspace') + I.pressKey('Backspace') + I.dontSeeElement({ + css: '.serlo-editor-hacks div[data-slate-editor="true"] ol:not(.unstyled-list)', + }) +}) diff --git a/e2e-tests/tests/424-text-plugin-link.ts b/e2e-tests/tests/424-text-plugin-link.ts new file mode 100644 index 0000000000..f05d491a65 --- /dev/null +++ b/e2e-tests/tests/424-text-plugin-link.ts @@ -0,0 +1,111 @@ +import { popupWarningFix } from './helpers/popup-warning-fix' + +Feature('Serlo Editor - Text plugin - link') + +Before(popupWarningFix) + +Scenario('Add a link using link suggestion menu', async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + I.click('$add-new-plugin-row-button') + I.pressKey('Backspace') + + I.say('Create text of link and select it') + I.type('Some text') + I.pressKey(['CommandOrControl', 'A']) + + I.say('Toggle link on') + I.click('$plugin-toolbar-button-link') + + // Should find a plentitude of link suggestions (most likely way more than 3) + I.say('Search for math articles') + I.type('Math') + I.seeElement('$link-suggestion-0') + I.seeElement('$link-suggestion-1') + I.seeElement('$link-suggestion-2') + + I.say('Navigate through the link suggestion menu and assert the a11y') + I.seeAttributesOnElements('$link-suggestion-0', { 'aria-selected': 'true' }) + I.seeAttributesOnElements('$link-suggestion-1', { 'aria-selected': 'false' }) + I.seeAttributesOnElements('$link-suggestion-2', { 'aria-selected': 'false' }) + + I.pressKey('ArrowDown') + I.seeAttributesOnElements('$link-suggestion-0', { 'aria-selected': 'false' }) + I.seeAttributesOnElements('$link-suggestion-1', { 'aria-selected': 'true' }) + I.seeAttributesOnElements('$link-suggestion-2', { 'aria-selected': 'false' }) + + I.pressKey('ArrowDown') + I.seeAttributesOnElements('$link-suggestion-0', { 'aria-selected': 'false' }) + I.seeAttributesOnElements('$link-suggestion-1', { 'aria-selected': 'false' }) + I.seeAttributesOnElements('$link-suggestion-2', { 'aria-selected': 'true' }) + + I.pressKey('ArrowUp') + I.seeAttributesOnElements('$link-suggestion-0', { 'aria-selected': 'false' }) + I.seeAttributesOnElements('$link-suggestion-1', { 'aria-selected': 'true' }) + I.seeAttributesOnElements('$link-suggestion-2', { 'aria-selected': 'false' }) + + I.say( + 'Hovering on a different suggestion than the selected one should not change aria-selected' + ) + I.moveCursorTo('$link-suggestion-0') + I.seeAttributesOnElements('$link-suggestion-0', { 'aria-selected': 'false' }) + I.seeAttributesOnElements('$link-suggestion-1', { 'aria-selected': 'true' }) + I.seeAttributesOnElements('$link-suggestion-2', { 'aria-selected': 'false' }) + + I.say('Select first suggestion') + I.click('$link-suggestion-0') + I.seeElement({ css: '.serlo-editor-hacks a' }) +}) + +Scenario('Edit existing link', async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + I.click('$add-new-plugin-row-button') + I.pressKey('Backspace') + + I.say('Create a link') + I.type('Some text') + I.pressKey(['CommandOrControl', 'A']) + I.click('$plugin-toolbar-button-link') + I.type('Math') + I.seeElement('$link-suggestion-1') + I.pressKey('ArrowDown') + I.pressKey('Enter') + I.seeElement( + locate({ css: '.serlo-editor-hacks a' }).withAttr({ href: '/83249' }) + ) + + I.say('Click edit button') + I.click('Some text') + I.click('$edit-link-button') + + I.say('Change the link href value') + I.pressKey(['CommandOrControl', 'A']) + I.type('Geo') + I.seeElement('$link-suggestion-1') + I.pressKey('ArrowDown') + I.pressKey('Enter') + I.seeElement( + locate({ css: '.serlo-editor-hacks a' }).withAttr({ href: '/274643' }) + ) +}) + +Scenario('Remove existing link', async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + I.click('$add-new-plugin-row-button') + I.pressKey('Backspace') + + I.say('Create a link') + I.type('Some text') + I.pressKey(['CommandOrControl', 'A']) + I.click('$plugin-toolbar-button-link') + I.type('Math') + I.click('$link-suggestion-0') + I.seeElement({ css: '.serlo-editor-hacks a' }) + + I.say('Remove link using the remove link button') + I.click('Some text') + I.click('$remove-link-button') + I.dontSeeElement({ css: '.serlo-editor-hacks a' }) +}) diff --git a/e2e-tests/tests/430-multimedia-plugin.ts b/e2e-tests/tests/430-multimedia-plugin.ts new file mode 100644 index 0000000000..c1c6cde353 --- /dev/null +++ b/e2e-tests/tests/430-multimedia-plugin.ts @@ -0,0 +1,61 @@ +import { popupWarningFix } from './helpers/popup-warning-fix' + +Feature('Serlo Editor - Multimedia plugin') + +Before(popupWarningFix) + +export async function addMultimediaPlugin(I: CodeceptJS.I) { + // Ensure that only the Multimedia plugin from article introduction is present + I.seeNumberOfElements('$plugin-multimedia-wrapper', 1) + + I.say('Replace default Text plugin with a Multimedia plugin') + I.click(locate('$plugin-text-editor').inside('.plugin-rows')) + I.type('/') + I.type('Multimedia') + I.pressKey('Enter') + I.seeNumberOfElements('$plugin-multimedia-wrapper', 2) +} + +Scenario('Multimedia plugin toolbar controls', async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + addMultimediaPlugin(I) + + // When adding a new Multimedia plugin, the caption of its Image plugin is focused. + // In order to focus the actual Multimedia plugin, click the parent indicator. + I.click('$plugin-multimedia-parent-button') + + I.say('Change the size of the multimedia content') + I.click('$plugin-multimedia-settings-button') + I.seeAttributesOnElements('$plugin-multimedia-size-button-50', { + 'aria-selected': 'true', + }) + I.seeAttributesOnElements('$plugin-multimedia-size-button-25', { + 'aria-selected': 'false', + }) + I.click('$plugin-multimedia-size-button-25') + I.seeAttributesOnElements('$plugin-multimedia-size-button-50', { + 'aria-selected': 'false', + }) + I.seeAttributesOnElements('$plugin-multimedia-size-button-25', { + 'aria-selected': 'true', + }) + I.click('$modal-close-button') + I.seeElement('.media-wrapper.mobile\\:w-1\\/4') + + I.say('Change the type of the multimedia content to video') + I.click('$plugin-multimedia-settings-button') + I.selectOption('$plugin-multimedia-type-select', 'Video') + I.click('$modal-close-button') + I.seeElement( + locate('$plugin-video-placeholder').inside('$plugin-multimedia-wrapper') + ) + + I.say('Change the type of the multimedia content to GeoGebra') + I.click('$plugin-multimedia-settings-button') + I.selectOption('$plugin-multimedia-type-select', 'GeoGebra Applet') + I.click('$modal-close-button') + I.seeElement( + locate('$plugin-geogebra-placeholder').inside('$plugin-multimedia-wrapper') + ) +}) diff --git a/e2e-tests/tests/431-multimedia-plugin-image.ts b/e2e-tests/tests/431-multimedia-plugin-image.ts new file mode 100644 index 0000000000..78c1763693 --- /dev/null +++ b/e2e-tests/tests/431-multimedia-plugin-image.ts @@ -0,0 +1,180 @@ +import { addMultimediaPlugin } from './430-multimedia-plugin' + +Feature('Serlo Editor - Multimedia plugin - image multimedia type') + +Before(({ login }) => { + login('admin') +}) + +// Currently, we're not displaying any messages when users try to upload image +// while not logged in. This scenario should be added when that is implemented. +Scenario.todo('Multimedia plugin unauthorized image upload') + +// To test this with the current approach, we would need to host a big image +// in this repo. Is it worth it? +Scenario.todo('Multimedia plugin too big image upload') + +Scenario('Multimedia plugin successful image upload', ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + addMultimediaPlugin(I) + + I.say('Focus multimedia Image plugin') + I.click(locate('$plugin-image-editor').inside('.plugin-rows')) + I.seeElement('$plugin-image-placeholder') + + I.say('Upload an image') + I.attachFile('$plugin-image-upload', 'assets/sample-image.png') + I.waitForElement('img.serlo-img', 10) + I.dontSeeElement(locate('$plugin-image-placeholder').inside('plugin-rows')) + + I.say('Edit image description') + const description = 'Simple sample image' + I.click('$plugin-image-settings') + I.fillField('Beschreibung (wird nicht angezeigt)', description) + I.click('$modal-close-button') + I.seeElement(locate('img.serlo-img').withAttr({ alt: description })) + + I.say('Edit image link') + const href = 'https://de.serlo.org/mathe/test' + I.click('$plugin-image-settings') + I.fillField('Link', href) + I.fillField('Maximale Breite', 200) + I.click('$modal-close-button') + I.seeElement(locate('$plugin-image-link').withAttr({ href })) + + I.say('Edit image max width') + const maxWidth = 200 + I.click('$plugin-image-settings') + I.fillField('Maximale Breite', maxWidth) + I.click('$modal-close-button') + I.seeElement( + locate('.mx-auto').withAttr({ style: `max-width: ${maxWidth}px;` }) + ) + + I.say( + 'Switch to video and back to image - uploaded image and settings should stay' + ) + I.click(locate('$plugin-image-editor').inside('.plugin-rows')) + I.click('$plugin-multimedia-parent-button') + I.click('$plugin-multimedia-settings-button') + I.selectOption('$plugin-multimedia-type-select', 'Video') + I.click('$modal-close-button') + I.seeElement( + locate('$plugin-video-placeholder').inside('$plugin-multimedia-wrapper') + ) + I.click('$plugin-multimedia-settings-button') + I.selectOption('$plugin-multimedia-type-select', 'Bild') + I.click('$modal-close-button') + I.seeElement(locate('img.serlo-img').withAttr({ alt: description })) + I.seeElement(locate('$plugin-image-link').withAttr({ href })) + I.seeElement( + locate('.mx-auto').withAttr({ style: `max-width: ${maxWidth}px;` }) + ) +}) + +Scenario('Multimedia plugin invalid image URL', ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + addMultimediaPlugin(I) + + I.say('Type in the image src') + // Focus the image plugin to make the src input visible + I.click(locate('$plugin-image-editor').inside('.plugin-rows')) + // Focus the src input + I.click(locate('$plugin-image-src').inside('.plugin-rows')) + I.type('https://de.serlo.org/_assets/img/serlo-logo') + // Unfortunately, our handling of invalid URLs is the same as handling of valid URLs, at the moment. + // I couldn't figure out how to test for default browser "broken image". + I.seeElement( + locate('img.serlo-img').withAttr({ + src: 'https://de.serlo.org/_assets/img/serlo-logo', + }) + ) + I.dontSeeElement(locate('$plugin-image-placeholder').inside('plugin-rows')) +}) + +Scenario('Multimedia plugin valid image URL', ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + addMultimediaPlugin(I) + + I.say('Type in the image src') + const src = 'https://de.serlo.org/_assets/img/serlo-logo.svg' + // Focus the image plugin to make the src input visible + I.click(locate('$plugin-image-editor').inside('.plugin-rows')) + // Focus the src input + I.click(locate('$plugin-image-src').inside('.plugin-rows')) + I.type(src) + I.seeElement(locate('img.serlo-img').withAttr({ src })) + I.dontSeeElement(locate('$plugin-image-placeholder').inside('plugin-rows')) + + I.say('Edit image description') + const description = 'Simple sample image' + I.click('$plugin-image-settings') + I.fillField('Beschreibung (wird nicht angezeigt)', description) + I.click('$modal-close-button') + I.seeElement(locate('img.serlo-img').withAttr({ alt: description })) + + I.say('Edit image link') + const link = 'https://de.serlo.org/mathe/test' + I.click('$plugin-image-settings') + I.fillField('Link', link) + I.fillField('Maximale Breite', 200) + I.click('$modal-close-button') + I.seeElement(locate('$plugin-image-link').withAttr({ href: link })) + + I.say('Edit image max width') + const maxWidth = 200 + I.click('$plugin-image-settings') + I.fillField('Maximale Breite', maxWidth) + I.click('$modal-close-button') + I.seeElement( + locate('.mx-auto').withAttr({ style: `max-width: ${maxWidth}px;` }) + ) + + I.say('Switch to video and back to image - image and settings should stay') + I.click(locate('$plugin-image-editor').inside('.plugin-rows')) + I.click('$plugin-multimedia-parent-button') + I.click('$plugin-multimedia-settings-button') + I.selectOption('$plugin-multimedia-type-select', 'Video') + I.click('$modal-close-button') + I.seeElement( + locate('$plugin-video-placeholder').inside('$plugin-multimedia-wrapper') + ) + I.click('$plugin-multimedia-settings-button') + I.selectOption('$plugin-multimedia-type-select', 'Bild') + I.click('$modal-close-button') + I.seeElement(locate('img.serlo-img').withAttr({ src })) + I.seeElement(locate('img.serlo-img').withAttr({ alt: description })) + I.seeElement(locate('$plugin-image-link').withAttr({ href: link })) + I.seeElement( + locate('.mx-auto').withAttr({ style: `max-width: ${maxWidth}px;` }) + ) +}) + +Scenario('Multimedia plugin fill in image caption', ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + addMultimediaPlugin(I) + + I.say('Type in the caption') + const caption = 'Pleasant image caption' + I.click(locate('$plugin-text-editor').inside('$plugin-image-editor')) + I.type(caption) + I.see(caption, locate('$plugin-text-editor').inside('$plugin-image-editor')) + + I.say('Switch to video and back to image - caption should stay') + I.click(locate('$plugin-image-editor').inside('.plugin-rows')) + I.click('$plugin-multimedia-parent-button') + I.click('$plugin-multimedia-settings-button') + I.selectOption('$plugin-multimedia-type-select', 'Video') + I.click('$modal-close-button') + I.seeElement( + locate('$plugin-video-placeholder').inside('$plugin-multimedia-wrapper') + ) + I.click('$plugin-multimedia-settings-button') + I.selectOption('$plugin-multimedia-type-select', 'Bild') + I.click('$modal-close-button') + I.see(caption, locate('$plugin-text-editor').inside('$plugin-image-editor')) +}) diff --git a/e2e-tests/tests/440-box-plugin.ts b/e2e-tests/tests/440-box-plugin.ts new file mode 100644 index 0000000000..278939ff2c --- /dev/null +++ b/e2e-tests/tests/440-box-plugin.ts @@ -0,0 +1,139 @@ +import { popupWarningFix } from './helpers/popup-warning-fix' + +Feature('Serlo Editor - Box plugin') + +Before(popupWarningFix) + +async function addBoxPlugin(I: CodeceptJS.I, type: string) { + I.say('Create box plugin and set type') + I.click('$plugin-text-editor', '$plugin-article-content') + I.type('/') + I.type('Box') + I.pressKey('Enter') + I.seeElement('$plugin-box-initial-type-chooser') + I.click(`$plugin-box-initial-type-chooser-option-${type}`) +} + +Scenario('Create box plugin and set initial type', async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + addBoxPlugin(I, 'attention') + + I.seeElement('$plugin-box') // Box plugin still there + I.dontSeeElement('$plugin-box-initial-type-chooser') // Box initial type chooser gone + I.see('Vorsicht') // Box type is Vorsicht + // TODO: Check if focused & toolbar visible +}) + +Scenario('Change box type in toolbar', async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + addBoxPlugin(I, 'blank') + + I.say('Change box type') + I.selectOption('$plugin-box-type-chooser', 'quote') + + I.seeElement('$plugin-box') + I.see('Zitat') +}) + +Scenario('Type inside box title', async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + addBoxPlugin(I, 'blank') + + I.say('Type inside box title.') + I.click('$plugin-text-editor', '$plugin-box-title') + I.type('Boxtitel') + + I.see('Boxtitel', '$plugin-box-title') +}) + +Scenario('Type inside box content', async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + addBoxPlugin(I, 'blank') + + I.say('Type inside box content') + I.click('$plugin-text-editor', '$plugin-box-content') + I.type('Boxinhalt') + + I.see('Boxinhalt', '$plugin-box-content') +}) + +Scenario( + 'Arrow keys can be used to switch between title and content', + async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + addBoxPlugin(I, 'blank') + + I.say('Switch between title and content') + I.click('$plugin-text-editor', '$plugin-box-title') + I.pressKey('ArrowDown') + I.type('Boxinhalt') + I.pressKey('ArrowUp') // Set cursor to start of content text + I.pressKey('ArrowUp') // Move cursor to box title + I.type('Boxtitel') + + I.see('Boxtitel', '$plugin-box-title') + I.see('Boxinhalt', '$plugin-box-content') + } +) + +Scenario( + 'Empty box warning message appears when box content is empty', + async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + addBoxPlugin(I, 'blank') + + I.say('Empty warning message visible after creating new box') + I.click('input[placeholder="Titel"]') // unfocus box plugin + I.seeElement('$plugin-box-empty-content-warning') + + I.say('Empty warning message visible even if title is not empty') + I.click('$plugin-text-editor', '$plugin-box-title') + I.type('Boxtitel') + I.click('input[placeholder="Titel"]') // unfocus box plugin + I.seeElement('$plugin-box-empty-content-warning') + + I.say('Empty warning message not visible if content not empty') + I.click('$plugin-text-editor', '$plugin-box-content') + I.type('Boxinhalt') + I.click('input[placeholder="Titel"]') // unfocus box plugin + I.dontSeeElement('$plugin-box-empty-content-warning') + } +) + +Scenario('Set box type using keyboard', async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + I.say('Create box plugin') + I.click('$plugin-text-editor', '$plugin-article-content') + I.type('/') + I.type('Box') + I.pressKey('Enter') + I.seeElement('$plugin-box-initial-type-chooser') + + I.say('Use the Tab key to select a box type') + I.pressKey('Tab') + I.pressKey('Tab') + I.pressKey('Enter') + I.see('Beispiel', locate('span.text-brand').inside('$plugin-box')) + I.dontSeeElement('$plugin-box-initial-type-chooser') +}) + +Scenario('Move between box title and content with Tab', async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + addBoxPlugin(I, 'blank') + + I.say('Select the box title') + I.click('$plugin-text-editor', '$plugin-box-title') + I.type('Boxtitel') + + I.say('Move to the box content with Tab') + // Selects the row drag button of the box content first + I.pressKey('Tab') + // Selects the box content + I.pressKey('Tab') + I.type('Boxinhalt') + + I.see('Boxtitel', '$plugin-box-title') + I.see('Boxinhalt', '$plugin-box-content') +}) diff --git a/e2e-tests/tests/490-save-changes.ts b/e2e-tests/tests/490-save-changes.ts new file mode 100644 index 0000000000..01e9b795fe --- /dev/null +++ b/e2e-tests/tests/490-save-changes.ts @@ -0,0 +1,32 @@ +import { popupWarningFix } from './helpers/popup-warning-fix' + +Feature('Serlo Editor - save changes') + +Before(popupWarningFix) + +Scenario('Save changes', async ({ I }) => { + I.amOnPage('/entity/create/Article/1377') + + I.click('h1') + + I.type('Test save changes') + + I.click('$add-new-plugin-row-button') + + I.pressKey('Backspace') + + I.type('Some text') + + I.see('Some text') + + I.click('button.serlo-button-green.ml-2') + + I.see('Beschreibe deine Änderungen am Inhalt') + + // Use class instead of text because text is super long and not reliable + I.click('.license-wrapper') + + I.fillField('label textarea', 'I wrote some Text') + I.click('button.serlo-button.ml-2.serlo-button-green') + I.dontSee('Bitte alle Pflichtfelder ausfüllen') +}) diff --git a/e2e-tests/tests/helpers/popup-warning-fix.ts b/e2e-tests/tests/helpers/popup-warning-fix.ts new file mode 100644 index 0000000000..18d81f828c --- /dev/null +++ b/e2e-tests/tests/helpers/popup-warning-fix.ts @@ -0,0 +1,8 @@ +// Fixes warning "Popup already exists and was not closed. Popups must always be +// closed by calling either I.acceptPopup() or I.cancelPopup()" +export const popupWarningFix = async ({ I }) => { + I.executeScript(() => { + window.onbeforeunload = null + }) + I.refreshPage() +} diff --git a/e2e-tests/tsconfig.json b/e2e-tests/tsconfig.json new file mode 100644 index 0000000000..a87ba62fe8 --- /dev/null +++ b/e2e-tests/tsconfig.json @@ -0,0 +1,16 @@ +{ + "ts-node": { + "files": true + }, + "compilerOptions": { + "target": "es2018", + "lib": ["es2018", "DOM"], + "esModuleInterop": true, + "module": "commonjs", + "strictNullChecks": false, + "types": ["codeceptjs", "node"], + "declaration": true, + "skipLibCheck": true + }, + "exclude": ["node_modules"] +} diff --git a/e2e-tests/yarn.lock b/e2e-tests/yarn.lock new file mode 100644 index 0000000000..1340824f1f --- /dev/null +++ b/e2e-tests/yarn.lock @@ -0,0 +1,2945 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 6 + cacheKey: 8 + +"@babel/helper-string-parser@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/helper-string-parser@npm:7.23.4" + checksum: c0641144cf1a7e7dc93f3d5f16d5327465b6cf5d036b48be61ecba41e1eece161b48f46b7f960951b67f8c3533ce506b16dece576baef4d8b3b49f8c65410f90 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-validator-identifier@npm:7.22.20" + checksum: 136412784d9428266bcdd4d91c32bcf9ff0e8d25534a9d94b044f77fe76bc50f941a90319b05aafd1ec04f7d127cd57a179a3716009ff7f3412ef835ada95bdc + languageName: node + linkType: hard + +"@babel/parser@npm:^7.8.3": + version: 7.23.6 + resolution: "@babel/parser@npm:7.23.6" + bin: + parser: ./bin/babel-parser.js + checksum: 140801c43731a6c41fd193f5c02bc71fd647a0360ca616b23d2db8be4b9739b9f951a03fc7c2db4f9b9214f4b27c1074db0f18bc3fa653783082d5af7c8860d5 + languageName: node + linkType: hard + +"@babel/types@npm:^7.8.3": + version: 7.23.6 + resolution: "@babel/types@npm:7.23.6" + dependencies: + "@babel/helper-string-parser": ^7.23.4 + "@babel/helper-validator-identifier": ^7.22.20 + to-fast-properties: ^2.0.0 + checksum: 68187dbec0d637f79bc96263ac95ec8b06d424396678e7e225492be866414ce28ebc918a75354d4c28659be6efe30020b4f0f6df81cc418a2d30645b690a8de0 + languageName: node + linkType: hard + +"@codeceptjs/configure@npm:^0.8.0": + version: 0.8.0 + resolution: "@codeceptjs/configure@npm:0.8.0" + dependencies: + lodash.merge: ^4.6.2 + lodash.mergewith: ^4.6.2 + checksum: ec530dcf16a04c9484ee65be88887ad46f4a4b700da7679abe9aa57581f2c43ce156361926f82c0d8c5b63e724e650ea9ea7e71c4af76af55e260a2ab0c8509d + languageName: node + linkType: hard + +"@codeceptjs/helper@npm:^1.0.2": + version: 1.0.2 + resolution: "@codeceptjs/helper@npm:1.0.2" + checksum: e1f9bdc76c2cf30ef46654c90db83a6cca9ff1e545a0b7a0f41e29fa15c9bfcf66058fd8b0c41d172f7d3ecca0bf07922f0c55db63365c803968e369108233c5 + languageName: node + linkType: hard + +"@cspotcode/source-map-support@npm:^0.8.0": + version: 0.8.1 + resolution: "@cspotcode/source-map-support@npm:0.8.1" + dependencies: + "@jridgewell/trace-mapping": 0.3.9 + checksum: 5718f267085ed8edb3e7ef210137241775e607ee18b77d95aa5bd7514f47f5019aa2d82d96b3bf342ef7aa890a346fa1044532ff7cc3009e7d24fce3ce6200fa + languageName: node + linkType: hard + +"@cucumber/cucumber-expressions@npm:^16": + version: 16.1.2 + resolution: "@cucumber/cucumber-expressions@npm:16.1.2" + dependencies: + regexp-match-indices: 1.0.2 + checksum: 636a903a748da18d256097f898eac848ec352943507a02808cff71de9a713d47f7c214f9df45ea9e673e7b8f29d5708cf17c196bc80651fbab5d97e93c930b08 + languageName: node + linkType: hard + +"@cucumber/gherkin@npm:^26": + version: 26.2.0 + resolution: "@cucumber/gherkin@npm:26.2.0" + dependencies: + "@cucumber/messages": ">=19.1.4 <=22" + checksum: d7bcc12fe50dd8dba6897f03ec41ae8e4a51d1582f72e55fa57137a449bd03e2ecab360ba9674fb00a17fc8482f784a45482e69e1df06f2786520e5e20e4083e + languageName: node + linkType: hard + +"@cucumber/messages@npm:>=19.1.4 <=22": + version: 22.0.0 + resolution: "@cucumber/messages@npm:22.0.0" + dependencies: + "@types/uuid": 9.0.1 + class-transformer: 0.5.1 + reflect-metadata: 0.1.13 + uuid: 9.0.0 + checksum: e9e8f3bda063ad87c23e2e5daed9e2965fb3e65c08ad5d27213d0f63d0e12574b27b2834d9360f958ad4418f7f5f22f5d78d63e45da52356ee8dfeaa3153e56c + languageName: node + linkType: hard + +"@cucumber/messages@npm:^21.0.1": + version: 21.0.1 + resolution: "@cucumber/messages@npm:21.0.1" + dependencies: + "@types/uuid": 8.3.4 + class-transformer: 0.5.1 + reflect-metadata: 0.1.13 + uuid: 9.0.0 + checksum: 01849f35bb38593a3833174e141b78b576e70128be015ebd2e61a86cf0c0e4e43a15ff38ce2a3c6404b5e99dc9cd6b269b8bcb4d014f2e023bf968fe70fdc867 + languageName: node + linkType: hard + +"@hapi/hoek@npm:^9.0.0": + version: 9.3.0 + resolution: "@hapi/hoek@npm:9.3.0" + checksum: 4771c7a776242c3c022b168046af4e324d116a9d2e1d60631ee64f474c6e38d1bb07092d898bf95c7bc5d334c5582798a1456321b2e53ca817d4e7c88bc25b43 + languageName: node + linkType: hard + +"@hapi/topo@npm:^5.0.0": + version: 5.1.0 + resolution: "@hapi/topo@npm:5.1.0" + dependencies: + "@hapi/hoek": ^9.0.0 + checksum: 604dfd5dde76d5c334bd03f9001fce69c7ce529883acf92da96f4fe7e51221bf5e5110e964caca287a6a616ba027c071748ab636ff178ad750547fba611d6014 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: ^5.1.2 + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: ^7.0.1 + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: ^8.1.0 + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.0.3": + version: 3.1.1 + resolution: "@jridgewell/resolve-uri@npm:3.1.1" + checksum: f5b441fe7900eab4f9155b3b93f9800a916257f4e8563afbcd3b5a5337b55e52bd8ae6735453b1b745457d9f6cdb16d74cd6220bbdd98cf153239e13f6cbb653 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10": + version: 1.4.15 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" + checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:0.3.9": + version: 0.3.9 + resolution: "@jridgewell/trace-mapping@npm:0.3.9" + dependencies: + "@jridgewell/resolve-uri": ^3.0.3 + "@jridgewell/sourcemap-codec": ^1.4.10 + checksum: d89597752fd88d3f3480845691a05a44bd21faac18e2185b6f436c3b0fd0c5a859fbbd9aaa92050c4052caf325ad3e10e2e1d1b64327517471b7d51babc0ddef + languageName: node + linkType: hard + +"@npmcli/agent@npm:^2.0.0": + version: 2.2.0 + resolution: "@npmcli/agent@npm:2.2.0" + dependencies: + agent-base: ^7.1.0 + http-proxy-agent: ^7.0.0 + https-proxy-agent: ^7.0.1 + lru-cache: ^10.0.1 + socks-proxy-agent: ^8.0.1 + checksum: 3b25312edbdfaa4089af28e2d423b6f19838b945e47765b0c8174c1395c79d43c3ad6d23cb364b43f59fd3acb02c93e3b493f72ddbe3dfea04c86843a7311fc4 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0": + version: 3.1.0 + resolution: "@npmcli/fs@npm:3.1.0" + dependencies: + semver: ^7.3.5 + checksum: a50a6818de5fc557d0b0e6f50ec780a7a02ab8ad07e5ac8b16bf519e0ad60a144ac64f97d05c443c3367235d337182e1d012bbac0eb8dbae8dc7b40b193efd0e + languageName: node + linkType: hard + +"@one-ini/wasm@npm:0.1.1": + version: 0.1.1 + resolution: "@one-ini/wasm@npm:0.1.1" + checksum: 11de17108eae57c797e552e36b259398aede999b4a689d78be6459652edc37f3428472410590a9d328011a8751b771063a5648dd5c4205631c55d1d58e313156 + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f + languageName: node + linkType: hard + +"@serlo/e2e-tests@workspace:.": + version: 0.0.0-use.local + resolution: "@serlo/e2e-tests@workspace:." + dependencies: + "@types/node": ^18.16.19 + codeceptjs: 3.5.2 + cross-env: ^7.0.3 + dotenv: ^16.3.1 + playwright: 1.36.0 + ts-node: ^10.9.1 + typescript: ^5.1.6 + languageName: unknown + linkType: soft + +"@sideway/address@npm:^4.1.3": + version: 4.1.4 + resolution: "@sideway/address@npm:4.1.4" + dependencies: + "@hapi/hoek": ^9.0.0 + checksum: b9fca2a93ac2c975ba12e0a6d97853832fb1f4fb02393015e012b47fa916a75ca95102d77214b2a29a2784740df2407951af8c5dde054824c65577fd293c4cdb + languageName: node + linkType: hard + +"@sideway/formula@npm:^3.0.1": + version: 3.0.1 + resolution: "@sideway/formula@npm:3.0.1" + checksum: e4beeebc9dbe2ff4ef0def15cec0165e00d1612e3d7cea0bc9ce5175c3263fc2c818b679bd558957f49400ee7be9d4e5ac90487e1625b4932e15c4aa7919c57a + languageName: node + linkType: hard + +"@sideway/pinpoint@npm:^2.0.0": + version: 2.0.0 + resolution: "@sideway/pinpoint@npm:2.0.0" + checksum: 0f4491e5897fcf5bf02c46f5c359c56a314e90ba243f42f0c100437935daa2488f20482f0f77186bd6bf43345095a95d8143ecf8b1f4d876a7bc0806aba9c3d2 + languageName: node + linkType: hard + +"@tsconfig/node10@npm:^1.0.7": + version: 1.0.9 + resolution: "@tsconfig/node10@npm:1.0.9" + checksum: a33ae4dc2a621c0678ac8ac4bceb8e512ae75dac65417a2ad9b022d9b5411e863c4c198b6ba9ef659e14b9fb609bbec680841a2e84c1172df7a5ffcf076539df + languageName: node + linkType: hard + +"@tsconfig/node12@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node12@npm:1.0.11" + checksum: 5ce29a41b13e7897a58b8e2df11269c5395999e588b9a467386f99d1d26f6c77d1af2719e407621412520ea30517d718d5192a32403b8dfcc163bf33e40a338a + languageName: node + linkType: hard + +"@tsconfig/node14@npm:^1.0.0": + version: 1.0.3 + resolution: "@tsconfig/node14@npm:1.0.3" + checksum: 19275fe80c4c8d0ad0abed6a96dbf00642e88b220b090418609c4376e1cef81bf16237bf170ad1b341452feddb8115d8dd2e5acdfdea1b27422071163dc9ba9d + languageName: node + linkType: hard + +"@tsconfig/node16@npm:^1.0.2": + version: 1.0.4 + resolution: "@tsconfig/node16@npm:1.0.4" + checksum: 202319785901f942a6e1e476b872d421baec20cf09f4b266a1854060efbf78cde16a4d256e8bc949d31e6cd9a90f1e8ef8fb06af96a65e98338a2b6b0de0a0ff + languageName: node + linkType: hard + +"@types/node@npm:^18.16.19": + version: 18.19.3 + resolution: "@types/node@npm:18.19.3" + dependencies: + undici-types: ~5.26.4 + checksum: 58c4fa45a78fcec75c78182a4b266395905957633654eb0311c5f9c30ac15c179ea2287ab1af034e46c2db7bb0589ef0000ee64c1de8f568a0aad29eaadb100c + languageName: node + linkType: hard + +"@types/uuid@npm:8.3.4": + version: 8.3.4 + resolution: "@types/uuid@npm:8.3.4" + checksum: 6f11f3ff70f30210edaa8071422d405e9c1d4e53abbe50fdce365150d3c698fe7bbff65c1e71ae080cbfb8fded860dbb5e174da96fdbbdfcaa3fb3daa474d20f + languageName: node + linkType: hard + +"@types/uuid@npm:9.0.1": + version: 9.0.1 + resolution: "@types/uuid@npm:9.0.1" + checksum: c472b8a77cbeded4bc529220b8611afa39bd64677f507838f8083d8aac8033b1f88cb9ddaa2f8589e0dcd2317291d0f6e1379f82d5ceebd6f74f3b4825288e00 + languageName: node + linkType: hard + +"@xmldom/xmldom@npm:^0.7.9": + version: 0.7.13 + resolution: "@xmldom/xmldom@npm:0.7.13" + checksum: b4054078530e5fa8ede9677425deff0fce6d965f4c477ca73f8490d8a089e60b8498a15560425a1335f5ff99ecb851ed2c734b0a9a879299a5694302f212f37a + languageName: node + linkType: hard + +"abbrev@npm:^2.0.0": + version: 2.0.0 + resolution: "abbrev@npm:2.0.0" + checksum: 0e994ad2aa6575f94670d8a2149afe94465de9cedaaaac364e7fb43a40c3691c980ff74899f682f4ca58fa96b4cbd7421a015d3a6defe43a442117d7821a2f36 + languageName: node + linkType: hard + +"acorn-walk@npm:^8.1.1": + version: 8.3.1 + resolution: "acorn-walk@npm:8.3.1" + checksum: 5c8926ddb5400bc825b6baca782931f9df4ace603ba1a517f5243290fd9cdb089d52877840687b5d5c939591ebc314e2e63721514feaa37c6829c828f2b940ce + languageName: node + linkType: hard + +"acorn@npm:^8.10.0, acorn@npm:^8.4.1": + version: 8.11.2 + resolution: "acorn@npm:8.11.2" + bin: + acorn: bin/acorn + checksum: 818450408684da89423e3daae24e4dc9b68692db8ab49ea4569c7c5abb7a3f23669438bf129cc81dfdada95e1c9b944ee1bfca2c57a05a4dc73834a612fbf6a7 + languageName: node + linkType: hard + +"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0": + version: 7.1.0 + resolution: "agent-base@npm:7.1.0" + dependencies: + debug: ^4.3.4 + checksum: f7828f991470a0cc22cb579c86a18cbae83d8a3cbed39992ab34fc7217c4d126017f1c74d0ab66be87f71455318a8ea3e757d6a37881b8d0f2a2c6aa55e5418f + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: ^2.0.0 + indent-string: ^4.0.0 + checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 + languageName: node + linkType: hard + +"ansi-colors@npm:4.1.1": + version: 4.1.1 + resolution: "ansi-colors@npm:4.1.1" + checksum: 138d04a51076cb085da0a7e2d000c5c0bb09f6e772ed5c65c53cb118d37f6c5f1637506d7155fb5f330f0abcf6f12fa2e489ac3f8cdab9da393bf1bb4f9a32b0 + languageName: node + linkType: hard + +"ansi-escapes@npm:^3.2.0": + version: 3.2.0 + resolution: "ansi-escapes@npm:3.2.0" + checksum: 0f94695b677ea742f7f1eed961f7fd8d05670f744c6ad1f8f635362f6681dcfbc1575cb05b43abc7bb6d67e25a75fb8c7ea8f2a57330eb2c76b33f18cb2cef0a + languageName: node + linkType: hard + +"ansi-regex@npm:^3.0.0": + version: 3.0.1 + resolution: "ansi-regex@npm:3.0.1" + checksum: 09daf180c5f59af9850c7ac1bd7fda85ba596cc8cbeb210826e90755f06c818af86d9fa1e6e8322fab2c3b9e9b03f56c537b42241139f824dd75066a1e7257cc + languageName: node + linkType: hard + +"ansi-regex@npm:^4.1.0": + version: 4.1.1 + resolution: "ansi-regex@npm:4.1.1" + checksum: b1a6ee44cb6ecdabaa770b2ed500542714d4395d71c7e5c25baa631f680fb2ad322eb9ba697548d498a6fd366949fc8b5bfcf48d49a32803611f648005b01888 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 + languageName: node + linkType: hard + +"ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: ^1.9.0 + checksum: d85ade01c10e5dd77b6c89f34ed7531da5830d2cb5882c645f330079975b716438cd7ebb81d0d6e6b4f9c577f19ae41ab55f07f19786b02f9dfd9e0377395665 + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: ^2.0.1 + checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 + languageName: node + linkType: hard + +"anymatch@npm:~3.1.2": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: ^3.0.0 + picomatch: ^2.0.4 + checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 + languageName: node + linkType: hard + +"arg@npm:^4.1.0": + version: 4.1.3 + resolution: "arg@npm:4.1.3" + checksum: 544af8dd3f60546d3e4aff084d451b96961d2267d668670199692f8d054f0415d86fc5497d0e641e91546f0aa920e7c29e5250e99fc89f5552a34b5d93b77f43 + languageName: node + linkType: hard + +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 83644b56493e89a254bae05702abf3a1101b4fa4d0ca31df1c9985275a5a5bd47b3c27b7fa0b71098d41114d8ca000e6ed90cad764b306f8a503665e4d517ced + languageName: node + linkType: hard + +"arrify@npm:^2.0.1": + version: 2.0.1 + resolution: "arrify@npm:2.0.1" + checksum: 067c4c1afd182806a82e4c1cb8acee16ab8b5284fbca1ce29408e6e91281c36bb5b612f6ddfbd40a0f7a7e0c75bf2696eb94c027f6e328d6e9c52465c98e4209 + languageName: node + linkType: hard + +"assertion-error@npm:^1.1.0": + version: 1.1.0 + resolution: "assertion-error@npm:1.1.0" + checksum: fd9429d3a3d4fd61782eb3962ae76b6d08aa7383123fca0596020013b3ebd6647891a85b05ce821c47d1471ed1271f00b0545cf6a4326cf2fc91efcc3b0fbecf + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be + languageName: node + linkType: hard + +"axios@npm:^0.26.0": + version: 0.26.1 + resolution: "axios@npm:0.26.1" + dependencies: + follow-redirects: ^1.14.8 + checksum: d9eb58ff4bc0b36a04783fc9ff760e9245c829a5a1052ee7ca6013410d427036b1d10d04e7380c02f3508c5eaf3485b1ae67bd2adbfec3683704745c8d7a6e1a + languageName: node + linkType: hard + +"axios@npm:^1.3.3": + version: 1.6.2 + resolution: "axios@npm:1.6.2" + dependencies: + follow-redirects: ^1.15.0 + form-data: ^4.0.0 + proxy-from-env: ^1.1.0 + checksum: 4a7429e2b784be0f2902ca2680964391eae7236faa3967715f30ea45464b98ae3f1c6f631303b13dfe721b17126b01f486c7644b9ef276bfc63112db9fd379f8 + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 + languageName: node + linkType: hard + +"base64-js@npm:^1.3.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 + languageName: node + linkType: hard + +"binary-extensions@npm:^2.0.0": + version: 2.2.0 + resolution: "binary-extensions@npm:2.2.0" + checksum: ccd267956c58d2315f5d3ea6757cf09863c5fc703e50fbeb13a7dc849b812ef76e3cf9ca8f35a0c48498776a7478d7b4a0418e1e2b8cb9cb9731f2922aaad7f8 + languageName: node + linkType: hard + +"bl@npm:^4.1.0": + version: 4.1.0 + resolution: "bl@npm:4.1.0" + dependencies: + buffer: ^5.5.0 + inherits: ^2.0.4 + readable-stream: ^3.4.0 + checksum: 9e8521fa7e83aa9427c6f8ccdcba6e8167ef30cc9a22df26effcc5ab682ef91d2cbc23a239f945d099289e4bbcfae7a192e9c28c84c6202e710a0dfec3722662 + languageName: node + linkType: hard + +"bo-selector@npm:0.0.10": + version: 0.0.10 + resolution: "bo-selector@npm:0.0.10" + checksum: b52e0e52679637051b2d62bb291642dec3e72147612e4316a7927a2cb55bd229df277fc049bb377b3d40b463f83781b5396cb8a0309306cbf5031748acc06ba3 + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: ^1.0.0 + concat-map: 0.0.1 + checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: ^1.0.0 + checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 + languageName: node + linkType: hard + +"braces@npm:~3.0.2": + version: 3.0.2 + resolution: "braces@npm:3.0.2" + dependencies: + fill-range: ^7.0.1 + checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459 + languageName: node + linkType: hard + +"browser-stdout@npm:1.3.1": + version: 1.3.1 + resolution: "browser-stdout@npm:1.3.1" + checksum: b717b19b25952dd6af483e368f9bcd6b14b87740c3d226c2977a65e84666ffd67000bddea7d911f111a9b6ddc822b234de42d52ab6507bce4119a4cc003ef7b3 + languageName: node + linkType: hard + +"buffer@npm:^5.5.0": + version: 5.7.1 + resolution: "buffer@npm:5.7.1" + dependencies: + base64-js: ^1.3.1 + ieee754: ^1.1.13 + checksum: e2cf8429e1c4c7b8cbd30834ac09bd61da46ce35f5c22a78e6c2f04497d6d25541b16881e30a019c6fd3154150650ccee27a308eff3e26229d788bbdeb08ab84 + languageName: node + linkType: hard + +"cacache@npm:^18.0.0": + version: 18.0.1 + resolution: "cacache@npm:18.0.1" + dependencies: + "@npmcli/fs": ^3.1.0 + fs-minipass: ^3.0.0 + glob: ^10.2.2 + lru-cache: ^10.0.1 + minipass: ^7.0.3 + minipass-collect: ^2.0.1 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + p-map: ^4.0.0 + ssri: ^10.0.0 + tar: ^6.1.11 + unique-filename: ^3.0.0 + checksum: 5a0b3b2ea451a0379814dc1d3c81af48c7c6db15cd8f7d72e028501ae0036a599a99bbac9687bfec307afb2760808d1c7708e9477c8c70d2b166e7d80b162a23 + languageName: node + linkType: hard + +"camel-case@npm:^3.0.0": + version: 3.0.0 + resolution: "camel-case@npm:3.0.0" + dependencies: + no-case: ^2.2.0 + upper-case: ^1.1.1 + checksum: 4190ed6ab8acf4f3f6e1a78ad4d0f3f15ce717b6bfa1b5686d58e4bcd29960f6e312dd746b5fa259c6d452f1413caef25aee2e10c9b9a580ac83e516533a961a + languageName: node + linkType: hard + +"camelcase@npm:^6.0.0": + version: 6.3.0 + resolution: "camelcase@npm:6.3.0" + checksum: 8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d + languageName: node + linkType: hard + +"chai-deep-match@npm:^1.2.1": + version: 1.2.1 + resolution: "chai-deep-match@npm:1.2.1" + dependencies: + deep-keys: ^0.5.0 + lodash: ^4.17.10 + lodash-pickdeep: ^1.0.2 + peerDependencies: + chai: ">=2.1.2" + checksum: fb8500cab7dc2227a5da7dee7d24ed04d5e0d0cabad8c34f0c55ac1109cc812905370af0f71aa2663c7b672896e3e8dbfc40d069559db7b61c909bc9a206206d + languageName: node + linkType: hard + +"chai@npm:^4.3.6": + version: 4.3.10 + resolution: "chai@npm:4.3.10" + dependencies: + assertion-error: ^1.1.0 + check-error: ^1.0.3 + deep-eql: ^4.1.3 + get-func-name: ^2.0.2 + loupe: ^2.3.6 + pathval: ^1.1.1 + type-detect: ^4.0.8 + checksum: 536668c60a0d985a0fbd94418028e388d243a925d7c5e858c7443e334753511614a3b6a124bac9ca077dfc4c37acc367d62f8c294960f440749536dc181dfc6d + languageName: node + linkType: hard + +"chalk@npm:^2.4.2": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: ^3.2.1 + escape-string-regexp: ^1.0.5 + supports-color: ^5.3.0 + checksum: ec3661d38fe77f681200f878edbd9448821924e0f93a9cefc0e26a33b145f1027a2084bf19967160d11e1f03bfe4eaffcabf5493b89098b2782c3fe0b03d80c2 + languageName: node + linkType: hard + +"chalk@npm:^4.1.0, chalk@npm:^4.1.2": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc + languageName: node + linkType: hard + +"chardet@npm:^0.7.0": + version: 0.7.0 + resolution: "chardet@npm:0.7.0" + checksum: 6fd5da1f5d18ff5712c1e0aed41da200d7c51c28f11b36ee3c7b483f3696dabc08927fc6b227735eb8f0e1215c9a8abd8154637f3eff8cada5959df7f58b024d + languageName: node + linkType: hard + +"check-error@npm:^1.0.3": + version: 1.0.3 + resolution: "check-error@npm:1.0.3" + dependencies: + get-func-name: ^2.0.2 + checksum: e2131025cf059b21080f4813e55b3c480419256914601750b0fee3bd9b2b8315b531e551ef12560419b8b6d92a3636511322752b1ce905703239e7cc451b6399 + languageName: node + linkType: hard + +"chokidar@npm:3.5.3": + version: 3.5.3 + resolution: "chokidar@npm:3.5.3" + dependencies: + anymatch: ~3.1.2 + braces: ~3.0.2 + fsevents: ~2.3.2 + glob-parent: ~5.1.2 + is-binary-path: ~2.1.0 + is-glob: ~4.0.1 + normalize-path: ~3.0.0 + readdirp: ~3.6.0 + dependenciesMeta: + fsevents: + optional: true + checksum: b49fcde40176ba007ff361b198a2d35df60d9bb2a5aab228279eb810feae9294a6b4649ab15981304447afe1e6ffbf4788ad5db77235dc770ab777c6e771980c + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f + languageName: node + linkType: hard + +"class-transformer@npm:0.5.1": + version: 0.5.1 + resolution: "class-transformer@npm:0.5.1" + checksum: f191c8b4cc4239990f5efdd790cabdd852c243ed66248e39f6616a349c910c6eed2d9fd1fbf7ee6ea89f69b4f1d0b493b27347fe0cd0ae26b47c3745a805b6d3 + languageName: node + linkType: hard + +"clean-css@npm:^4.2.1": + version: 4.2.4 + resolution: "clean-css@npm:4.2.4" + dependencies: + source-map: ~0.6.0 + checksum: 045ff6fcf4b5c76a084b24e1633e0c78a13b24080338fc8544565a9751559aa32ff4ee5886d9e52c18a644a6ff119bd8e37bc58e574377c05382a1fb7dbe39f8 + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 + languageName: node + linkType: hard + +"cli-cursor@npm:^2.1.0": + version: 2.1.0 + resolution: "cli-cursor@npm:2.1.0" + dependencies: + restore-cursor: ^2.0.0 + checksum: d88e97bfdac01046a3ffe7d49f06757b3126559d7e44aa2122637eb179284dc6cd49fca2fac4f67c19faaf7e6dab716b6fe1dfcd309977407d8c7578ec2d044d + languageName: node + linkType: hard + +"cli-cursor@npm:^3.1.0": + version: 3.1.0 + resolution: "cli-cursor@npm:3.1.0" + dependencies: + restore-cursor: ^3.1.0 + checksum: 2692784c6cd2fd85cfdbd11f53aea73a463a6d64a77c3e098b2b4697a20443f430c220629e1ca3b195ea5ac4a97a74c2ee411f3807abf6df2b66211fec0c0a29 + languageName: node + linkType: hard + +"cli-spinners@npm:^2.5.0": + version: 2.9.2 + resolution: "cli-spinners@npm:2.9.2" + checksum: 1bd588289b28432e4676cb5d40505cfe3e53f2e4e10fbe05c8a710a154d6fe0ce7836844b00d6858f740f2ffe67cdc36e0fce9c7b6a8430e80e6388d5aa4956c + languageName: node + linkType: hard + +"cli-width@npm:^2.0.0": + version: 2.2.1 + resolution: "cli-width@npm:2.2.1" + checksum: 3c21b897a2ff551ae5b3c3ab32c866ed2965dcf7fb442f81adf0e27f4a397925c8f84619af7bcc6354821303f6ee9b2aa31d248306174f32c287986158cf4eed + languageName: node + linkType: hard + +"cliui@npm:^7.0.2": + version: 7.0.4 + resolution: "cliui@npm:7.0.4" + dependencies: + string-width: ^4.2.0 + strip-ansi: ^6.0.0 + wrap-ansi: ^7.0.0 + checksum: ce2e8f578a4813806788ac399b9e866297740eecd4ad1823c27fd344d78b22c5f8597d548adbcc46f0573e43e21e751f39446c5a5e804a12aace402b7a315d7f + languageName: node + linkType: hard + +"clone@npm:^1.0.2": + version: 1.0.4 + resolution: "clone@npm:1.0.4" + checksum: d06418b7335897209e77bdd430d04f882189582e67bd1f75a04565f3f07f5b3f119a9d670c943b6697d0afb100f03b866b3b8a1f91d4d02d72c4ecf2bb64b5dd + languageName: node + linkType: hard + +"codeceptjs@npm:3.5.2": + version: 3.5.2 + resolution: "codeceptjs@npm:3.5.2" + dependencies: + "@codeceptjs/configure": ^0.8.0 + "@codeceptjs/helper": ^1.0.2 + "@cucumber/cucumber-expressions": ^16 + "@cucumber/gherkin": ^26 + "@cucumber/messages": ^21.0.1 + "@xmldom/xmldom": ^0.7.9 + acorn: ^8.10.0 + arrify: ^2.0.1 + axios: ^1.3.3 + chai: ^4.3.6 + chai-deep-match: ^1.2.1 + chalk: ^4.1.2 + commander: ^11.0.0 + cross-spawn: ^7.0.3 + css-to-xpath: ^0.1.0 + envinfo: ^7.8.1 + escape-string-regexp: ^4.0.0 + figures: ^3.2.0 + fn-args: ^4.0.0 + fs-extra: ^8.1.0 + glob: ^6.0.1 + html-minifier: ^4.0.0 + inquirer: ^6.5.2 + joi: ^17.6.0 + js-beautify: ^1.14.0 + lodash.clonedeep: ^4.5.0 + lodash.merge: ^4.6.2 + mkdirp: ^1.0.4 + mocha: ^10.2.0 + ms: ^2.1.3 + openai: ^3.2.1 + ora-classic: ^5.4.2 + parse-function: ^5.6.4 + parse5: ^7.1.2 + promise-retry: ^1.1.1 + resq: ^1.10.2 + sprintf-js: ^1.1.1 + uuid: ^9.0 + bin: + codeceptjs: bin/codecept.js + checksum: b1b3f19d62419e42685598789639051f81a74b7ce8e618d05c986011b99ad06e9ea016bbfa51216897e8a662f87123cb206d17d9ac923ab00524b7c16b431000 + languageName: node + linkType: hard + +"color-convert@npm:^1.9.0": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: 1.1.3 + checksum: fd7a64a17cde98fb923b1dd05c5f2e6f7aefda1b60d67e8d449f9328b4e53b228a428fd38bfeaeb2db2ff6b6503a776a996150b80cdf224062af08a5c8a3a203 + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: ~1.1.4 + checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: ~1.0.0 + checksum: 49fa4aeb4916567e33ea81d088f6584749fc90c7abec76fd516bf1c5aa5c79f3584b5ba3de6b86d26ddd64bae5329c4c7479343250cfe71c75bb366eae53bb7c + languageName: node + linkType: hard + +"commander@npm:^10.0.0": + version: 10.0.1 + resolution: "commander@npm:10.0.1" + checksum: 436901d64a818295803c1996cd856621a74f30b9f9e28a588e726b2b1670665bccd7c1a77007ebf328729f0139838a88a19265858a0fa7a8728c4656796db948 + languageName: node + linkType: hard + +"commander@npm:^11.0.0": + version: 11.1.0 + resolution: "commander@npm:11.1.0" + checksum: fd1a8557c6b5b622c89ecdfde703242ab7db3b628ea5d1755784c79b8e7cb0d74d65b4a262289b533359cd58e1bfc0bf50245dfbcd2954682a6f367c828b79ef + languageName: node + linkType: hard + +"commander@npm:^2.19.0": + version: 2.20.3 + resolution: "commander@npm:2.20.3" + checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af + languageName: node + linkType: hard + +"config-chain@npm:^1.1.13": + version: 1.1.13 + resolution: "config-chain@npm:1.1.13" + dependencies: + ini: ^1.3.4 + proto-list: ~1.2.1 + checksum: 828137a28e7c2fc4b7fb229bd0cd6c1397bcf83434de54347e608154008f411749041ee392cbe42fab6307e02de4c12480260bf769b7d44b778fdea3839eafab + languageName: node + linkType: hard + +"create-require@npm:^1.1.0": + version: 1.1.1 + resolution: "create-require@npm:1.1.1" + checksum: a9a1503d4390d8b59ad86f4607de7870b39cad43d929813599a23714831e81c520bddf61bcdd1f8e30f05fd3a2b71ae8538e946eb2786dc65c2bbc520f692eff + languageName: node + linkType: hard + +"cross-env@npm:^7.0.3": + version: 7.0.3 + resolution: "cross-env@npm:7.0.3" + dependencies: + cross-spawn: ^7.0.1 + bin: + cross-env: src/bin/cross-env.js + cross-env-shell: src/bin/cross-env-shell.js + checksum: 26f2f3ea2ab32617f57effb70d329c2070d2f5630adc800985d8b30b56e8bf7f5f439dd3a0358b79cee6f930afc23cf8e23515f17ccfb30092c6b62c6b630a79 + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.1, cross-spawn@npm:^7.0.3": + version: 7.0.3 + resolution: "cross-spawn@npm:7.0.3" + dependencies: + path-key: ^3.1.0 + shebang-command: ^2.0.0 + which: ^2.0.1 + checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 + languageName: node + linkType: hard + +"css-to-xpath@npm:^0.1.0": + version: 0.1.0 + resolution: "css-to-xpath@npm:0.1.0" + dependencies: + bo-selector: 0.0.10 + xpath-builder: 0.0.7 + checksum: 48e7150d8c7bcef3946cecd4b2e3ec0d7a0cf8bef25eb20fdb016c76ad524b9db726c9fc9f82e0919a4c8cbbccb96e47bf497bd67da7fb85d53c47c3fd846225 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:4.3.4, debug@npm:^4.3.4": + version: 4.3.4 + resolution: "debug@npm:4.3.4" + dependencies: + ms: 2.1.2 + peerDependenciesMeta: + supports-color: + optional: true + checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 + languageName: node + linkType: hard + +"decamelize@npm:^4.0.0": + version: 4.0.0 + resolution: "decamelize@npm:4.0.0" + checksum: b7d09b82652c39eead4d6678bb578e3bebd848add894b76d0f6b395bc45b2d692fb88d977e7cfb93c4ed6c119b05a1347cef261174916c2e75c0a8ca57da1809 + languageName: node + linkType: hard + +"deep-eql@npm:^4.1.3": + version: 4.1.3 + resolution: "deep-eql@npm:4.1.3" + dependencies: + type-detect: ^4.0.0 + checksum: 7f6d30cb41c713973dc07eaadded848b2ab0b835e518a88b91bea72f34e08c4c71d167a722a6f302d3a6108f05afd8e6d7650689a84d5d29ec7fe6220420397f + languageName: node + linkType: hard + +"deep-keys@npm:^0.5.0": + version: 0.5.0 + resolution: "deep-keys@npm:0.5.0" + checksum: 0f8a9b4042f37067e7bb573a5e4d1250fa6a872012dbbfc1db533874207348ae88140765b04301105ef926bcf95ee849eaa05a535f76ed6702cff9de7724c51b + languageName: node + linkType: hard + +"defaults@npm:^1.0.3": + version: 1.0.4 + resolution: "defaults@npm:1.0.4" + dependencies: + clone: ^1.0.2 + checksum: 3a88b7a587fc076b84e60affad8b85245c01f60f38fc1d259e7ac1d89eb9ce6abb19e27215de46b98568dd5bc48471730b327637e6f20b0f1bc85cf00440c80a + languageName: node + linkType: hard + +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 + languageName: node + linkType: hard + +"diff@npm:5.0.0": + version: 5.0.0 + resolution: "diff@npm:5.0.0" + checksum: f19fe29284b633afdb2725c2a8bb7d25761ea54d321d8e67987ac851c5294be4afeab532bd84531e02583a3fe7f4014aa314a3eda84f5590e7a9e6b371ef3b46 + languageName: node + linkType: hard + +"diff@npm:^4.0.1": + version: 4.0.2 + resolution: "diff@npm:4.0.2" + checksum: f2c09b0ce4e6b301c221addd83bf3f454c0bc00caa3dd837cf6c127d6edf7223aa2bbe3b688feea110b7f262adbfc845b757c44c8a9f8c0c5b15d8fa9ce9d20d + languageName: node + linkType: hard + +"dotenv@npm:^16.3.1": + version: 16.3.1 + resolution: "dotenv@npm:16.3.1" + checksum: 15d75e7279018f4bafd0ee9706593dd14455ddb71b3bcba9c52574460b7ccaf67d5cf8b2c08a5af1a9da6db36c956a04a1192b101ee102a3e0cf8817bbcf3dfd + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed + languageName: node + linkType: hard + +"editorconfig@npm:^1.0.3": + version: 1.0.4 + resolution: "editorconfig@npm:1.0.4" + dependencies: + "@one-ini/wasm": 0.1.1 + commander: ^10.0.0 + minimatch: 9.0.1 + semver: ^7.5.3 + bin: + editorconfig: bin/editorconfig + checksum: 09904f19381b3ddf132cea0762971aba887236f387be3540909e96b8eb9337e1793834e10f06890cd8e8e7bb1ba80cb13e7d50a863f227806c9ca74def4165fb + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: ^0.6.2 + checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f + languageName: node + linkType: hard + +"entities@npm:^4.4.0": + version: 4.5.0 + resolution: "entities@npm:4.5.0" + checksum: 853f8ebd5b425d350bffa97dd6958143179a5938352ccae092c62d1267c4e392a039be1bae7d51b6e4ffad25f51f9617531fedf5237f15df302ccfb452cbf2d7 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e + languageName: node + linkType: hard + +"envinfo@npm:^7.8.1": + version: 7.11.0 + resolution: "envinfo@npm:7.11.0" + bin: + envinfo: dist/cli.js + checksum: c45a7d20409d5f4cda72483b150d3816b15b434f2944d72c1495d8838bd7c4e7b2f32c12128ffb9b92b5f66f436237b8a525eb3a9a5da2d20013bc4effa28aef + languageName: node + linkType: hard + +"err-code@npm:^1.0.0": + version: 1.1.2 + resolution: "err-code@npm:1.1.2" + checksum: a1c6a194d21084241c09e0ea78db4c503030042098048903f2d940ef48c1484bbf97e99d32d6b35e5f8871dd6b292fabf904f115914f5792a591157ac6584e31 + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 + languageName: node + linkType: hard + +"escalade@npm:^3.1.1": + version: 3.1.1 + resolution: "escalade@npm:3.1.1" + checksum: a3e2a99f07acb74b3ad4989c48ca0c3140f69f923e56d0cba0526240ee470b91010f9d39001f2a4a313841d237ede70a729e92125191ba5d21e74b106800b133 + languageName: node + linkType: hard + +"escape-string-regexp@npm:4.0.0, escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 + languageName: node + linkType: hard + +"external-editor@npm:^3.0.3": + version: 3.1.0 + resolution: "external-editor@npm:3.1.0" + dependencies: + chardet: ^0.7.0 + iconv-lite: ^0.4.24 + tmp: ^0.0.33 + checksum: 1c2a616a73f1b3435ce04030261bed0e22d4737e14b090bb48e58865da92529c9f2b05b893de650738d55e692d071819b45e1669259b2b354bc3154d27a698c7 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^2.0.1": + version: 2.0.1 + resolution: "fast-deep-equal@npm:2.0.1" + checksum: b701835a87985e0ec4925bdf1f0c1e7eb56309b5d12d534d5b4b69d95a54d65bb16861c081781ead55f73f12d6c60ba668713391ee7fbf6b0567026f579b7b0b + languageName: node + linkType: hard + +"figures@npm:^2.0.0": + version: 2.0.0 + resolution: "figures@npm:2.0.0" + dependencies: + escape-string-regexp: ^1.0.5 + checksum: 081beb16ea57d1716f8447c694f637668322398b57017b20929376aaf5def9823b35245b734cdd87e4832dc96e9c6f46274833cada77bfe15e5f980fea1fd21f + languageName: node + linkType: hard + +"figures@npm:^3.2.0": + version: 3.2.0 + resolution: "figures@npm:3.2.0" + dependencies: + escape-string-regexp: ^1.0.5 + checksum: 85a6ad29e9aca80b49b817e7c89ecc4716ff14e3779d9835af554db91bac41c0f289c418923519392a1e582b4d10482ad282021330cd045bb7b80c84152f2a2b + languageName: node + linkType: hard + +"fill-range@npm:^7.0.1": + version: 7.0.1 + resolution: "fill-range@npm:7.0.1" + dependencies: + to-regex-range: ^5.0.1 + checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917 + languageName: node + linkType: hard + +"find-up@npm:5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: ^6.0.0 + path-exists: ^4.0.0 + checksum: 07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095 + languageName: node + linkType: hard + +"flat@npm:^5.0.2": + version: 5.0.2 + resolution: "flat@npm:5.0.2" + bin: + flat: cli.js + checksum: 12a1536ac746db74881316a181499a78ef953632ddd28050b7a3a43c62ef5462e3357c8c29d76072bb635f147f7a9a1f0c02efef6b4be28f8db62ceb3d5c7f5d + languageName: node + linkType: hard + +"fn-args@npm:^4.0.0": + version: 4.0.0 + resolution: "fn-args@npm:4.0.0" + checksum: 22cc41e5de4e1feb27ab6848197c01cf59daac40cdd6976dd5de6c57d7d5a3a861c6eec58f037709e0fe8e63e8b783e744b15b4076059c8effeca3c472e90a2e + languageName: node + linkType: hard + +"follow-redirects@npm:^1.14.8, follow-redirects@npm:^1.15.0": + version: 1.15.3 + resolution: "follow-redirects@npm:1.15.3" + peerDependenciesMeta: + debug: + optional: true + checksum: 584da22ec5420c837bd096559ebfb8fe69d82512d5585004e36a3b4a6ef6d5905780e0c74508c7b72f907d1fa2b7bd339e613859e9c304d0dc96af2027fd0231 + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.1.1 + resolution: "foreground-child@npm:3.1.1" + dependencies: + cross-spawn: ^7.0.0 + signal-exit: ^4.0.1 + checksum: 139d270bc82dc9e6f8bc045fe2aae4001dc2472157044fdfad376d0a3457f77857fa883c1c8b21b491c6caade9a926a4bed3d3d2e8d3c9202b151a4cbbd0bcd5 + languageName: node + linkType: hard + +"form-data@npm:^4.0.0": + version: 4.0.0 + resolution: "form-data@npm:4.0.0" + dependencies: + asynckit: ^0.4.0 + combined-stream: ^1.0.8 + mime-types: ^2.1.12 + checksum: 01135bf8675f9d5c61ff18e2e2932f719ca4de964e3be90ef4c36aacfc7b9cb2fceb5eca0b7e0190e3383fe51c5b37f4cb80b62ca06a99aaabfcfd6ac7c9328c + languageName: node + linkType: hard + +"fs-extra@npm:^8.1.0": + version: 8.1.0 + resolution: "fs-extra@npm:8.1.0" + dependencies: + graceful-fs: ^4.2.0 + jsonfile: ^4.0.0 + universalify: ^0.1.0 + checksum: bf44f0e6cea59d5ce071bba4c43ca76d216f89e402dc6285c128abc0902e9b8525135aa808adad72c9d5d218e9f4bcc63962815529ff2f684ad532172a284880 + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: ^3.0.0 + checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: ^7.0.3 + checksum: 8722a41109130851d979222d3ec88aabaceeaaf8f57b2a8f744ef8bd2d1ce95453b04a61daa0078822bc5cd21e008814f06fe6586f56fef511e71b8d2394d802 + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 + languageName: node + linkType: hard + +"fsevents@npm:~2.3.2": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: latest + checksum: 11e6ea6fea15e42461fc55b4b0e4a0a3c654faa567f1877dbd353f39156f69def97a69936d1746619d656c4b93de2238bf731f6085a03a50cabf287c9d024317 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@~2.3.2#~builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: latest + conditions: os=darwin + languageName: node + linkType: hard + +"get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 + languageName: node + linkType: hard + +"get-func-name@npm:^2.0.1, get-func-name@npm:^2.0.2": + version: 2.0.2 + resolution: "get-func-name@npm:2.0.2" + checksum: 3f62f4c23647de9d46e6f76d2b3eafe58933a9b3830c60669e4180d6c601ce1b4aa310ba8366143f55e52b139f992087a9f0647274e8745621fa2af7e0acf13b + languageName: node + linkType: hard + +"glob-parent@npm:~5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: ^4.0.1 + checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e + languageName: node + linkType: hard + +"glob@npm:7.2.0": + version: 7.2.0 + resolution: "glob@npm:7.2.0" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^3.0.4 + once: ^1.3.0 + path-is-absolute: ^1.0.0 + checksum: 78a8ea942331f08ed2e055cb5b9e40fe6f46f579d7fd3d694f3412fe5db23223d29b7fee1575440202e9a7ff9a72ab106a39fee39934c7bedafe5e5f8ae20134 + languageName: node + linkType: hard + +"glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.3": + version: 10.3.10 + resolution: "glob@npm:10.3.10" + dependencies: + foreground-child: ^3.1.0 + jackspeak: ^2.3.5 + minimatch: ^9.0.1 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + path-scurry: ^1.10.1 + bin: + glob: dist/esm/bin.mjs + checksum: 4f2fe2511e157b5a3f525a54092169a5f92405f24d2aed3142f4411df328baca13059f4182f1db1bf933e2c69c0bd89e57ae87edd8950cba8c7ccbe84f721cf3 + languageName: node + linkType: hard + +"glob@npm:^6.0.1": + version: 6.0.4 + resolution: "glob@npm:6.0.4" + dependencies: + inflight: ^1.0.4 + inherits: 2 + minimatch: 2 || 3 + once: ^1.3.0 + path-is-absolute: ^1.0.0 + checksum: c4946c3d015ac81f704d185f2b3a55eb670100693c2cf7bc833d0efd970ec727d860d4839a5178e46a7e594b34a34661bae2f4c3405727c9fd189f84954ca3c0 + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad + languageName: node + linkType: hard + +"he@npm:1.2.0, he@npm:^1.2.0": + version: 1.2.0 + resolution: "he@npm:1.2.0" + bin: + he: bin/he + checksum: 3d4d6babccccd79c5c5a3f929a68af33360d6445587d628087f39a965079d84f18ce9c3d3f917ee1e3978916fc833bb8b29377c3b403f919426f91bc6965e7a7 + languageName: node + linkType: hard + +"html-minifier@npm:^4.0.0": + version: 4.0.0 + resolution: "html-minifier@npm:4.0.0" + dependencies: + camel-case: ^3.0.0 + clean-css: ^4.2.1 + commander: ^2.19.0 + he: ^1.2.0 + param-case: ^2.1.1 + relateurl: ^0.2.7 + uglify-js: ^3.5.1 + bin: + html-minifier: ./cli.js + checksum: b426aee771d9da104c1c9554e3ebd3a4f483d2ce01f4dcc4156ba33a5959044acf6bea192d5ae63b290cdb92c30a9d07fd6924c65609aa82382ce411328f94ca + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0": + version: 7.0.0 + resolution: "http-proxy-agent@npm:7.0.0" + dependencies: + agent-base: ^7.1.0 + debug: ^4.3.4 + checksum: 48d4fac997917e15f45094852b63b62a46d0c8a4f0b9c6c23ca26d27b8df8d178bed88389e604745e748bd9a01f5023e25093722777f0593c3f052009ff438b6 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^7.0.1": + version: 7.0.2 + resolution: "https-proxy-agent@npm:7.0.2" + dependencies: + agent-base: ^7.0.2 + debug: 4 + checksum: 088969a0dd476ea7a0ed0a2cf1283013682b08f874c3bc6696c83fa061d2c157d29ef0ad3eb70a2046010bb7665573b2388d10fdcb3e410a66995e5248444292 + languageName: node + linkType: hard + +"iconv-lite@npm:^0.4.24": + version: 0.4.24 + resolution: "iconv-lite@npm:0.4.24" + dependencies: + safer-buffer: ">= 2.1.2 < 3" + checksum: bd9f120f5a5b306f0bc0b9ae1edeb1577161503f5f8252a20f1a9e56ef8775c9959fd01c55f2d3a39d9a8abaf3e30c1abeb1895f367dcbbe0a8fd1c9ca01c4f6 + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: ">= 2.1.2 < 3.0.0" + checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf + languageName: node + linkType: hard + +"ieee754@npm:^1.1.13": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: ^1.3.0 + wrappy: 1 + checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd + languageName: node + linkType: hard + +"inherits@npm:2, inherits@npm:^2.0.3, inherits@npm:^2.0.4": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 + languageName: node + linkType: hard + +"ini@npm:^1.3.4": + version: 1.3.8 + resolution: "ini@npm:1.3.8" + checksum: dfd98b0ca3a4fc1e323e38a6c8eb8936e31a97a918d3b377649ea15bdb15d481207a0dda1021efbd86b464cae29a0d33c1d7dcaf6c5672bee17fa849bc50a1b3 + languageName: node + linkType: hard + +"inquirer@npm:^6.5.2": + version: 6.5.2 + resolution: "inquirer@npm:6.5.2" + dependencies: + ansi-escapes: ^3.2.0 + chalk: ^2.4.2 + cli-cursor: ^2.1.0 + cli-width: ^2.0.0 + external-editor: ^3.0.3 + figures: ^2.0.0 + lodash: ^4.17.12 + mute-stream: 0.0.7 + run-async: ^2.2.0 + rxjs: ^6.4.0 + string-width: ^2.1.0 + strip-ansi: ^5.1.0 + through: ^2.3.6 + checksum: 175ad4cd1ebed493b231b240185f1da5afeace5f4e8811dfa83cf55dcae59c3255eaed990aa71871b0fd31aa9dc212f43c44c50ed04fb529364405e72f484d28 + languageName: node + linkType: hard + +"ip@npm:^2.0.0": + version: 2.0.0 + resolution: "ip@npm:2.0.0" + checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 + languageName: node + linkType: hard + +"is-binary-path@npm:~2.1.0": + version: 2.1.0 + resolution: "is-binary-path@npm:2.1.0" + dependencies: + binary-extensions: ^2.0.0 + checksum: 84192eb88cff70d320426f35ecd63c3d6d495da9d805b19bc65b518984b7c0760280e57dbf119b7e9be6b161784a5a673ab2c6abe83abb5198a432232ad5b35c + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^2.0.0": + version: 2.0.0 + resolution: "is-fullwidth-code-point@npm:2.0.0" + checksum: eef9c6e15f68085fec19ff6a978a6f1b8f48018fd1265035552078ee945573594933b09bbd6f562553e2a241561439f1ef5339276eba68d272001343084cfab8 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 + languageName: node + linkType: hard + +"is-glob@npm:^4.0.1, is-glob@npm:~4.0.1": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: ^2.1.1 + checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 + languageName: node + linkType: hard + +"is-interactive@npm:^1.0.0": + version: 1.0.0 + resolution: "is-interactive@npm:1.0.0" + checksum: 824808776e2d468b2916cdd6c16acacebce060d844c35ca6d82267da692e92c3a16fdba624c50b54a63f38bdc4016055b6f443ce57d7147240de4f8cdabaf6f9 + languageName: node + linkType: hard + +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a + languageName: node + linkType: hard + +"is-plain-obj@npm:^2.1.0": + version: 2.1.0 + resolution: "is-plain-obj@npm:2.1.0" + checksum: cec9100678b0a9fe0248a81743041ed990c2d4c99f893d935545cfbc42876cbe86d207f3b895700c690ad2fa520e568c44afc1605044b535a7820c1d40e38daa + languageName: node + linkType: hard + +"is-unicode-supported@npm:^0.1.0": + version: 0.1.0 + resolution: "is-unicode-supported@npm:0.1.0" + checksum: a2aab86ee7712f5c2f999180daaba5f361bdad1efadc9610ff5b8ab5495b86e4f627839d085c6530363c6d6d4ecbde340fb8e54bdb83da4ba8e0865ed5513c52 + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 + languageName: node + linkType: hard + +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 7fe1931ee4e88eb5aa524cd3ceb8c882537bc3a81b02e438b240e47012eef49c86904d0f0e593ea7c3a9996d18d0f1f3be8d3eaa92333977b0c3a9d353d5563e + languageName: node + linkType: hard + +"jackspeak@npm:^2.3.5": + version: 2.3.6 + resolution: "jackspeak@npm:2.3.6" + dependencies: + "@isaacs/cliui": ^8.0.2 + "@pkgjs/parseargs": ^0.11.0 + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 57d43ad11eadc98cdfe7496612f6bbb5255ea69fe51ea431162db302c2a11011642f50cfad57288bd0aea78384a0612b16e131944ad8ecd09d619041c8531b54 + languageName: node + linkType: hard + +"joi@npm:^17.6.0": + version: 17.11.0 + resolution: "joi@npm:17.11.0" + dependencies: + "@hapi/hoek": ^9.0.0 + "@hapi/topo": ^5.0.0 + "@sideway/address": ^4.1.3 + "@sideway/formula": ^3.0.1 + "@sideway/pinpoint": ^2.0.0 + checksum: 3a4e9ecba345cdafe585e7ed8270a44b39718e11dff3749aa27e0001a63d578b75100c062be28e6f48f960b594864034e7a13833f33fbd7ad56d5ce6b617f9bf + languageName: node + linkType: hard + +"js-beautify@npm:^1.14.0": + version: 1.14.11 + resolution: "js-beautify@npm:1.14.11" + dependencies: + config-chain: ^1.1.13 + editorconfig: ^1.0.3 + glob: ^10.3.3 + nopt: ^7.2.0 + bin: + css-beautify: js/bin/css-beautify.js + html-beautify: js/bin/html-beautify.js + js-beautify: js/bin/js-beautify.js + checksum: 92512b8dcc54330fe075569fd0226a1960da3fbb68f91e35dbfb110cc2b85e53e3ef17878c8be88b0888277bc5d51b1a692d72a00142d653ce7a8cbd48c66ee0 + languageName: node + linkType: hard + +"js-yaml@npm:4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: ^2.0.1 + bin: + js-yaml: bin/js-yaml.js + checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a + languageName: node + linkType: hard + +"jsonfile@npm:^4.0.0": + version: 4.0.0 + resolution: "jsonfile@npm:4.0.0" + dependencies: + graceful-fs: ^4.1.6 + dependenciesMeta: + graceful-fs: + optional: true + checksum: 6447d6224f0d31623eef9b51185af03ac328a7553efcee30fa423d98a9e276ca08db87d71e17f2310b0263fd3ffa6c2a90a6308367f661dc21580f9469897c9e + languageName: node + linkType: hard + +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: ^5.0.0 + checksum: 72eb661788a0368c099a184c59d2fee760b3831c9c1c33955e8a19ae4a21b4116e53fa736dc086cdeb9fce9f7cc508f2f92d2d3aae516f133e16a2bb59a39f5a + languageName: node + linkType: hard + +"lodash-pickdeep@npm:^1.0.2": + version: 1.0.2 + resolution: "lodash-pickdeep@npm:1.0.2" + dependencies: + lodash: ">= 3.7.0" + checksum: ba9aeb592969e895e7c29eb6fa657c8667165c391d28317a3fd92e9d60a06f35102c22800b545bdd68a71f9428865c8359e38467e560dc1959e3dee5ad72bd6b + languageName: node + linkType: hard + +"lodash.clonedeep@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.clonedeep@npm:4.5.0" + checksum: 92c46f094b064e876a23c97f57f81fbffd5d760bf2d8a1c61d85db6d1e488c66b0384c943abee4f6af7debf5ad4e4282e74ff83177c9e63d8ff081a4837c3489 + languageName: node + linkType: hard + +"lodash.merge@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.merge@npm:4.6.2" + checksum: ad580b4bdbb7ca1f7abf7e1bce63a9a0b98e370cf40194b03380a46b4ed799c9573029599caebc1b14e3f24b111aef72b96674a56cfa105e0f5ac70546cdc005 + languageName: node + linkType: hard + +"lodash.mergewith@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.mergewith@npm:4.6.2" + checksum: a6db2a9339752411f21b956908c404ec1e088e783a65c8b29e30ae5b3b6384f82517662d6f425cc97c2070b546cc2c7daaa8d33f78db7b6e9be06cd834abdeb8 + languageName: node + linkType: hard + +"lodash@npm:>= 3.7.0, lodash@npm:^4.17.10, lodash@npm:^4.17.12": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 + languageName: node + linkType: hard + +"log-symbols@npm:4.1.0, log-symbols@npm:^4.1.0": + version: 4.1.0 + resolution: "log-symbols@npm:4.1.0" + dependencies: + chalk: ^4.1.0 + is-unicode-supported: ^0.1.0 + checksum: fce1497b3135a0198803f9f07464165e9eb83ed02ceb2273930a6f8a508951178d8cf4f0378e9d28300a2ed2bc49050995d2bd5f53ab716bb15ac84d58c6ef74 + languageName: node + linkType: hard + +"loupe@npm:^2.3.6": + version: 2.3.7 + resolution: "loupe@npm:2.3.7" + dependencies: + get-func-name: ^2.0.1 + checksum: 96c058ec7167598e238bb7fb9def2f9339215e97d6685d9c1e3e4bdb33d14600e11fe7a812cf0c003dfb73ca2df374f146280b2287cae9e8d989e9d7a69a203b + languageName: node + linkType: hard + +"lower-case@npm:^1.1.1": + version: 1.1.4 + resolution: "lower-case@npm:1.1.4" + checksum: 1ca9393b5eaef94a64e3f89e38b63d15bc7182a91171e6ad1550f51d710ec941540a065b274188f2e6b4576110cc2d11b50bc4bb7c603a040ddeb1db4ca95197 + languageName: node + linkType: hard + +"lru-cache@npm:^10.0.1, lru-cache@npm:^9.1.1 || ^10.0.0": + version: 10.1.0 + resolution: "lru-cache@npm:10.1.0" + checksum: 58056d33e2500fbedce92f8c542e7c11b50d7d086578f14b7074d8c241422004af0718e08a6eaae8705cee09c77e39a61c1c79e9370ba689b7010c152e6a76ab + languageName: node + linkType: hard + +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: ^4.0.0 + checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 + languageName: node + linkType: hard + +"make-error@npm:^1.1.1": + version: 1.3.6 + resolution: "make-error@npm:1.3.6" + checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 + languageName: node + linkType: hard + +"make-fetch-happen@npm:^13.0.0": + version: 13.0.0 + resolution: "make-fetch-happen@npm:13.0.0" + dependencies: + "@npmcli/agent": ^2.0.0 + cacache: ^18.0.0 + http-cache-semantics: ^4.1.1 + is-lambda: ^1.0.1 + minipass: ^7.0.2 + minipass-fetch: ^3.0.0 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + negotiator: ^0.6.3 + promise-retry: ^2.0.1 + ssri: ^10.0.0 + checksum: 7c7a6d381ce919dd83af398b66459a10e2fe8f4504f340d1d090d3fa3d1b0c93750220e1d898114c64467223504bd258612ba83efbc16f31b075cd56de24b4af + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: 1.52.0 + checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 + languageName: node + linkType: hard + +"mimic-fn@npm:^1.0.0": + version: 1.2.0 + resolution: "mimic-fn@npm:1.2.0" + checksum: 69c08205156a1f4906d9c46f9b4dc08d18a50176352e77fdeb645cedfe9f20c0b19865d465bd2dec27a5c432347f24dc07fc3695e11159d193f892834233e939 + languageName: node + linkType: hard + +"mimic-fn@npm:^2.1.0": + version: 2.1.0 + resolution: "mimic-fn@npm:2.1.0" + checksum: d2421a3444848ce7f84bd49115ddacff29c15745db73f54041edc906c14b131a38d05298dae3081667627a59b2eb1ca4b436ff2e1b80f69679522410418b478a + languageName: node + linkType: hard + +"minimatch@npm:2 || 3, minimatch@npm:^3.0.4": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: ^1.1.7 + checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a + languageName: node + linkType: hard + +"minimatch@npm:5.0.1": + version: 5.0.1 + resolution: "minimatch@npm:5.0.1" + dependencies: + brace-expansion: ^2.0.1 + checksum: b34b98463da4754bc526b244d680c69d4d6089451ebe512edaf6dd9eeed0279399cfa3edb19233513b8f830bf4bfcad911dddcdf125e75074100d52f724774f0 + languageName: node + linkType: hard + +"minimatch@npm:9.0.1": + version: 9.0.1 + resolution: "minimatch@npm:9.0.1" + dependencies: + brace-expansion: ^2.0.1 + checksum: 97f5f5284bb57dc65b9415dec7f17a0f6531a33572193991c60ff18450dcfad5c2dad24ffeaf60b5261dccd63aae58cc3306e2209d57e7f88c51295a532d8ec3 + languageName: node + linkType: hard + +"minimatch@npm:^9.0.1": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" + dependencies: + brace-expansion: ^2.0.1 + checksum: 253487976bf485b612f16bf57463520a14f512662e592e95c571afdab1442a6a6864b6c88f248ce6fc4ff0b6de04ac7aa6c8bb51e868e99d1d65eb0658a708b5 + languageName: node + linkType: hard + +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: ^7.0.3 + checksum: b251bceea62090f67a6cced7a446a36f4cd61ee2d5cea9aee7fff79ba8030e416327a1c5aa2908dc22629d06214b46d88fdab8c51ac76bacbf5703851b5ad342 + languageName: node + linkType: hard + +"minipass-fetch@npm:^3.0.0": + version: 3.0.4 + resolution: "minipass-fetch@npm:3.0.4" + dependencies: + encoding: ^0.1.13 + minipass: ^7.0.3 + minipass-sized: ^1.0.3 + minizlib: ^2.1.2 + dependenciesMeta: + encoding: + optional: true + checksum: af7aad15d5c128ab1ebe52e043bdf7d62c3c6f0cecb9285b40d7b395e1375b45dcdfd40e63e93d26a0e8249c9efd5c325c65575aceee192883970ff8cb11364a + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: ^3.0.0 + checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: ^3.0.0 + checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: ^3.0.0 + checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: ^4.0.0 + checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3": + version: 7.0.4 + resolution: "minipass@npm:7.0.4" + checksum: 87585e258b9488caf2e7acea242fd7856bbe9a2c84a7807643513a338d66f368c7d518200ad7b70a508664d408aa000517647b2930c259a8b1f9f0984f344a21 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: ^3.0.0 + yallist: ^4.0.0 + checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f + languageName: node + linkType: hard + +"mocha@npm:^10.2.0": + version: 10.2.0 + resolution: "mocha@npm:10.2.0" + dependencies: + ansi-colors: 4.1.1 + browser-stdout: 1.3.1 + chokidar: 3.5.3 + debug: 4.3.4 + diff: 5.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 7.2.0 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 5.0.1 + ms: 2.1.3 + nanoid: 3.3.3 + serialize-javascript: 6.0.0 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + workerpool: 6.2.1 + yargs: 16.2.0 + yargs-parser: 20.2.4 + yargs-unparser: 2.0.0 + bin: + _mocha: bin/_mocha + mocha: bin/mocha.js + checksum: 406c45eab122ffd6ea2003c2f108b2bc35ba036225eee78e0c784b6fa2c7f34e2b13f1dbacef55a4fdf523255d76e4f22d1b5aacda2394bd11666febec17c719 + languageName: node + linkType: hard + +"ms@npm:2.1.2": + version: 2.1.2 + resolution: "ms@npm:2.1.2" + checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f + languageName: node + linkType: hard + +"ms@npm:2.1.3, ms@npm:^2.1.3": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d + languageName: node + linkType: hard + +"mute-stream@npm:0.0.7": + version: 0.0.7 + resolution: "mute-stream@npm:0.0.7" + checksum: a9d4772c1c84206aa37c218ed4751cd060239bf1d678893124f51e037f6f22f4a159b2918c030236c93252638a74beb29c9b1fd3267c9f24d4b3253cf1eaa86f + languageName: node + linkType: hard + +"nanoid@npm:3.3.3": + version: 3.3.3 + resolution: "nanoid@npm:3.3.3" + bin: + nanoid: bin/nanoid.cjs + checksum: ada019402a07464a694553c61d2dca8a4353645a7d92f2830f0d487fedff403678a0bee5323a46522752b2eab95a0bc3da98b6cccaa7c0c55cd9975130e6d6f0 + languageName: node + linkType: hard + +"negotiator@npm:^0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 + languageName: node + linkType: hard + +"no-case@npm:^2.2.0": + version: 2.3.2 + resolution: "no-case@npm:2.3.2" + dependencies: + lower-case: ^1.1.1 + checksum: 856487731936fef44377ca74fdc5076464aba2e0734b56a4aa2b2a23d5b154806b591b9b2465faa59bb982e2b5c9391e3685400957fb4eeb38f480525adcf3dd + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 10.0.1 + resolution: "node-gyp@npm:10.0.1" + dependencies: + env-paths: ^2.2.0 + exponential-backoff: ^3.1.1 + glob: ^10.3.10 + graceful-fs: ^4.2.6 + make-fetch-happen: ^13.0.0 + nopt: ^7.0.0 + proc-log: ^3.0.0 + semver: ^7.3.5 + tar: ^6.1.2 + which: ^4.0.0 + bin: + node-gyp: bin/node-gyp.js + checksum: 60a74e66d364903ce02049966303a57f898521d139860ac82744a5fdd9f7b7b3b61f75f284f3bfe6e6add3b8f1871ce305a1d41f775c7482de837b50c792223f + languageName: node + linkType: hard + +"nopt@npm:^7.0.0, nopt@npm:^7.2.0": + version: 7.2.0 + resolution: "nopt@npm:7.2.0" + dependencies: + abbrev: ^2.0.0 + bin: + nopt: bin/nopt.js + checksum: a9c0f57fb8cb9cc82ae47192ca2b7ef00e199b9480eed202482c962d61b59a7fbe7541920b2a5839a97b42ee39e288c0aed770e38057a608d7f579389dfde410 + languageName: node + linkType: hard + +"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 + languageName: node + linkType: hard + +"once@npm:^1.3.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: 1 + checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 + languageName: node + linkType: hard + +"onetime@npm:^2.0.0": + version: 2.0.1 + resolution: "onetime@npm:2.0.1" + dependencies: + mimic-fn: ^1.0.0 + checksum: bb44015ac7a525d0fb43b029a583d4ad359834632b4424ca209b438aacf6d669dda81b5edfbdb42c22636e607b276ba5589f46694a729e3bc27948ce26f4cc1a + languageName: node + linkType: hard + +"onetime@npm:^5.1.0": + version: 5.1.2 + resolution: "onetime@npm:5.1.2" + dependencies: + mimic-fn: ^2.1.0 + checksum: 2478859ef817fc5d4e9c2f9e5728512ddd1dbc9fb7829ad263765bb6d3b91ce699d6e2332eef6b7dff183c2f490bd3349f1666427eaba4469fba0ac38dfd0d34 + languageName: node + linkType: hard + +"openai@npm:^3.2.1": + version: 3.3.0 + resolution: "openai@npm:3.3.0" + dependencies: + axios: ^0.26.0 + form-data: ^4.0.0 + checksum: 28ccff8c09b6f47828c9583bb3bafc38a8459c76ea10eb9e08ca880f65523c5a9cc6c5f3c7669dded6f4c93e7cf49dd5c4dbfd12732a0f958c923117740d677b + languageName: node + linkType: hard + +"ora-classic@npm:^5.4.2": + version: 5.4.2 + resolution: "ora-classic@npm:5.4.2" + dependencies: + bl: ^4.1.0 + chalk: ^4.1.0 + cli-cursor: ^3.1.0 + cli-spinners: ^2.5.0 + is-interactive: ^1.0.0 + is-unicode-supported: ^0.1.0 + log-symbols: ^4.1.0 + strip-ansi: ^6.0.0 + wcwidth: ^1.0.1 + checksum: f52ec97c8fbb051dd883d6bbb75a0b658a173f8230aba0d39b2cf5957b79dcaf7da53dda72d744d726ac8cb7e693fe6d7eb0c27a59298aa35f0ec06651c4626f + languageName: node + linkType: hard + +"os-tmpdir@npm:~1.0.2": + version: 1.0.2 + resolution: "os-tmpdir@npm:1.0.2" + checksum: 5666560f7b9f10182548bf7013883265be33620b1c1b4a4d405c25be2636f970c5488ff3e6c48de75b55d02bde037249fe5dbfbb4c0fb7714953d56aed062e6d + languageName: node + linkType: hard + +"p-limit@npm:^3.0.2": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: ^0.1.0 + checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 + languageName: node + linkType: hard + +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: ^3.0.2 + checksum: 1623088f36cf1cbca58e9b61c4e62bf0c60a07af5ae1ca99a720837356b5b6c5ba3eb1b2127e47a06865fee59dd0453cad7cc844cda9d5a62ac1a5a51b7c86d3 + languageName: node + linkType: hard + +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: ^3.0.0 + checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c + languageName: node + linkType: hard + +"param-case@npm:^2.1.1": + version: 2.1.1 + resolution: "param-case@npm:2.1.1" + dependencies: + no-case: ^2.2.0 + checksum: 3a63dcb8d8dc7995a612de061afdc7bb6fe7bd0e6db994db8d4cae999ed879859fd24389090e1a0d93f4c9207ebf8c048c870f468a3f4767161753e03cb9ab58 + languageName: node + linkType: hard + +"parse-function@npm:^5.6.4": + version: 5.6.10 + resolution: "parse-function@npm:5.6.10" + dependencies: + "@babel/parser": ^7.8.3 + arrify: ^2.0.1 + checksum: 84a8c54e9bf7da1f8856d2008957643dfe821e422bee70d71cefa513788f5489d2fa67ca208a38fac54b911d8e424f42c0b1e761c6cefba6003321303a9d6cfd + languageName: node + linkType: hard + +"parse5@npm:^7.1.2": + version: 7.1.2 + resolution: "parse5@npm:7.1.2" + dependencies: + entities: ^4.4.0 + checksum: 59465dd05eb4c5ec87b76173d1c596e152a10e290b7abcda1aecf0f33be49646ea74840c69af975d7887543ea45564801736356c568d6b5e71792fd0f4055713 + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 + languageName: node + linkType: hard + +"path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 + languageName: node + linkType: hard + +"path-scurry@npm:^1.10.1": + version: 1.10.1 + resolution: "path-scurry@npm:1.10.1" + dependencies: + lru-cache: ^9.1.1 || ^10.0.0 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + checksum: e2557cff3a8fb8bc07afdd6ab163a92587884f9969b05bbbaf6fe7379348bfb09af9ed292af12ed32398b15fb443e81692047b786d1eeb6d898a51eb17ed7d90 + languageName: node + linkType: hard + +"pathval@npm:^1.1.1": + version: 1.1.1 + resolution: "pathval@npm:1.1.1" + checksum: 090e3147716647fb7fb5b4b8c8e5b55e5d0a6086d085b6cd23f3d3c01fcf0ff56fd3cc22f2f4a033bd2e46ed55d61ed8379e123b42afe7d531a2a5fc8bb556d6 + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf + languageName: node + linkType: hard + +"playwright-core@npm:1.36.0": + version: 1.36.0 + resolution: "playwright-core@npm:1.36.0" + bin: + playwright-core: cli.js + checksum: d6b5fed5ae95238dc36a1be3e2cfd250221810e6a2d20592c29d7044a2d1f96e8e6cfff83d937605b6e26d7c3058231d16784e17979fbb11208880829e406e85 + languageName: node + linkType: hard + +"playwright@npm:1.36.0": + version: 1.36.0 + resolution: "playwright@npm:1.36.0" + dependencies: + playwright-core: 1.36.0 + bin: + playwright: cli.js + checksum: c49ed1666b28f8b9177f4682b51e0bc77a83d32265725bc29a8210c0fe83a92e1f1b7051e315a7299fa39c6e952eebe0fe80a22c174569636a27a5a737b3aef4 + languageName: node + linkType: hard + +"proc-log@npm:^3.0.0": + version: 3.0.0 + resolution: "proc-log@npm:3.0.0" + checksum: 02b64e1b3919e63df06f836b98d3af002b5cd92655cab18b5746e37374bfb73e03b84fe305454614b34c25b485cc687a9eebdccf0242cda8fda2475dd2c97e02 + languageName: node + linkType: hard + +"promise-retry@npm:^1.1.1": + version: 1.1.1 + resolution: "promise-retry@npm:1.1.1" + dependencies: + err-code: ^1.0.0 + retry: ^0.10.0 + checksum: 18180b4cf8e383768ebffccc55df51385d82bb0241e4506af607e8459b80bd8db01bf5d2bc257549c67a2cc506955750389d1dafb7862216d596ee1bf349cc27 + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: ^2.0.2 + retry: ^0.12.0 + checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 + languageName: node + linkType: hard + +"proto-list@npm:~1.2.1": + version: 1.2.4 + resolution: "proto-list@npm:1.2.4" + checksum: 4d4826e1713cbfa0f15124ab0ae494c91b597a3c458670c9714c36e8baddf5a6aad22842776f2f5b137f259c8533e741771445eb8df82e861eea37a6eaba03f7 + languageName: node + linkType: hard + +"proxy-from-env@npm:^1.1.0": + version: 1.1.0 + resolution: "proxy-from-env@npm:1.1.0" + checksum: ed7fcc2ba0a33404958e34d95d18638249a68c430e30fcb6c478497d72739ba64ce9810a24f53a7d921d0c065e5b78e3822759800698167256b04659366ca4d4 + languageName: node + linkType: hard + +"randombytes@npm:^2.1.0": + version: 2.1.0 + resolution: "randombytes@npm:2.1.0" + dependencies: + safe-buffer: ^5.1.0 + checksum: d779499376bd4cbb435ef3ab9a957006c8682f343f14089ed5f27764e4645114196e75b7f6abf1cbd84fd247c0cb0651698444df8c9bf30e62120fbbc52269d6 + languageName: node + linkType: hard + +"readable-stream@npm:^3.4.0": + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" + dependencies: + inherits: ^2.0.3 + string_decoder: ^1.1.1 + util-deprecate: ^1.0.1 + checksum: bdcbe6c22e846b6af075e32cf8f4751c2576238c5043169a1c221c92ee2878458a816a4ea33f4c67623c0b6827c8a400409bfb3cf0bf3381392d0b1dfb52ac8d + languageName: node + linkType: hard + +"readdirp@npm:~3.6.0": + version: 3.6.0 + resolution: "readdirp@npm:3.6.0" + dependencies: + picomatch: ^2.2.1 + checksum: 1ced032e6e45670b6d7352d71d21ce7edf7b9b928494dcaba6f11fba63180d9da6cd7061ebc34175ffda6ff529f481818c962952004d273178acd70f7059b320 + languageName: node + linkType: hard + +"reflect-metadata@npm:0.1.13": + version: 0.1.13 + resolution: "reflect-metadata@npm:0.1.13" + checksum: 798d379a7b6f6455501145419505c97dd11cbc23857a386add2b9ef15963ccf15a48d9d15507afe01d4cd74116df8a213247200bac00320bd7c11ddeaa5e8fb4 + languageName: node + linkType: hard + +"regexp-match-indices@npm:1.0.2": + version: 1.0.2 + resolution: "regexp-match-indices@npm:1.0.2" + dependencies: + regexp-tree: ^0.1.11 + checksum: 8cc779f6cf8f404ead828d09970a7d4bd66bd78d43ab9eb2b5e65f2ef2ba1ed53536f5b5fa839fb90b350365fb44b6a851c7f16289afc3f37789c113ab2a7916 + languageName: node + linkType: hard + +"regexp-tree@npm:^0.1.11": + version: 0.1.27 + resolution: "regexp-tree@npm:0.1.27" + bin: + regexp-tree: bin/regexp-tree + checksum: 129aebb34dae22d6694ab2ac328be3f99105143737528ab072ef624d599afecbcfae1f5c96a166fa9e5f64fa1ecf30b411c4691e7924c3e11bbaf1712c260c54 + languageName: node + linkType: hard + +"relateurl@npm:^0.2.7": + version: 0.2.7 + resolution: "relateurl@npm:0.2.7" + checksum: 5891e792eae1dfc3da91c6fda76d6c3de0333a60aa5ad848982ebb6dccaa06e86385fb1235a1582c680a3d445d31be01c6bfc0804ebbcab5aaf53fa856fde6b6 + languageName: node + linkType: hard + +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: fb47e70bf0001fdeabdc0429d431863e9475e7e43ea5f94ad86503d918423c1543361cc5166d713eaa7029dd7a3d34775af04764bebff99ef413111a5af18c80 + languageName: node + linkType: hard + +"resq@npm:^1.10.2": + version: 1.11.0 + resolution: "resq@npm:1.11.0" + dependencies: + fast-deep-equal: ^2.0.1 + checksum: a596c0125883246946cf6b9172557265d00334019327c09b84c9016b1e7e876e15c35c81d2f8ed315adf6b93ac035f3d993f9a8b323dcd80ffd6cf8f3eb5cc7e + languageName: node + linkType: hard + +"restore-cursor@npm:^2.0.0": + version: 2.0.0 + resolution: "restore-cursor@npm:2.0.0" + dependencies: + onetime: ^2.0.0 + signal-exit: ^3.0.2 + checksum: 482e13d02d834b6e5e3aa90304a8b5e840775d6f06916cc92a50038adf9f098dcc72405b567da8a37e137ae40ad3e31896fa3136ae62f7a426c2fbf53d036536 + languageName: node + linkType: hard + +"restore-cursor@npm:^3.1.0": + version: 3.1.0 + resolution: "restore-cursor@npm:3.1.0" + dependencies: + onetime: ^5.1.0 + signal-exit: ^3.0.2 + checksum: f877dd8741796b909f2a82454ec111afb84eb45890eb49ac947d87991379406b3b83ff9673a46012fca0d7844bb989f45cc5b788254cf1a39b6b5a9659de0630 + languageName: node + linkType: hard + +"retry@npm:^0.10.0": + version: 0.10.1 + resolution: "retry@npm:0.10.1" + checksum: 133ef7c2028bcb09544a6fb9bed9f8266fffeaf72c855f73c2918ace9ef2abd7ccba03744564bcd1a8e948ed70518f8970852f46e649f9e3db6fefb0148cda35 + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c + languageName: node + linkType: hard + +"run-async@npm:^2.2.0": + version: 2.4.1 + resolution: "run-async@npm:2.4.1" + checksum: a2c88aa15df176f091a2878eb840e68d0bdee319d8d97bbb89112223259cebecb94bc0defd735662b83c2f7a30bed8cddb7d1674eb48ae7322dc602b22d03797 + languageName: node + linkType: hard + +"rxjs@npm:^6.4.0": + version: 6.6.7 + resolution: "rxjs@npm:6.6.7" + dependencies: + tslib: ^1.9.0 + checksum: bc334edef1bb8bbf56590b0b25734ba0deaf8825b703256a93714308ea36dff8a11d25533671adf8e104e5e8f256aa6fdfe39b2e248cdbd7a5f90c260acbbd1b + languageName: node + linkType: hard + +"safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 + languageName: node + linkType: hard + +"semver@npm:^7.3.5, semver@npm:^7.5.3": + version: 7.5.4 + resolution: "semver@npm:7.5.4" + dependencies: + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 + languageName: node + linkType: hard + +"serialize-javascript@npm:6.0.0": + version: 6.0.0 + resolution: "serialize-javascript@npm:6.0.0" + dependencies: + randombytes: ^2.1.0 + checksum: 56f90b562a1bdc92e55afb3e657c6397c01a902c588c0fe3d4c490efdcc97dcd2a3074ba12df9e94630f33a5ce5b76a74784a7041294628a6f4306e0ec84bf93 + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: ^3.0.0 + checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.2": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 64c757b498cb8629ffa5f75485340594d2f8189e9b08700e69199069c8e3070fb3e255f7ab873c05dc0b3cec412aea7402e10a5990cb6a050bd33ba062a6c549 + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.1": + version: 8.0.2 + resolution: "socks-proxy-agent@npm:8.0.2" + dependencies: + agent-base: ^7.0.2 + debug: ^4.3.4 + socks: ^2.7.1 + checksum: 4fb165df08f1f380881dcd887b3cdfdc1aba3797c76c1e9f51d29048be6e494c5b06d68e7aea2e23df4572428f27a3ec22b3d7c75c570c5346507433899a4b6d + languageName: node + linkType: hard + +"socks@npm:^2.7.1": + version: 2.7.1 + resolution: "socks@npm:2.7.1" + dependencies: + ip: ^2.0.0 + smart-buffer: ^4.2.0 + checksum: 259d9e3e8e1c9809a7f5c32238c3d4d2a36b39b83851d0f573bfde5f21c4b1288417ce1af06af1452569cd1eb0841169afd4998f0e04ba04656f6b7f0e46d748 + languageName: node + linkType: hard + +"source-map@npm:~0.6.0": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 + languageName: node + linkType: hard + +"sprintf-js@npm:^1.1.1": + version: 1.1.3 + resolution: "sprintf-js@npm:1.1.3" + checksum: a3fdac7b49643875b70864a9d9b469d87a40dfeaf5d34d9d0c5b1cda5fd7d065531fcb43c76357d62254c57184a7b151954156563a4d6a747015cfb41021cad0 + languageName: node + linkType: hard + +"ssri@npm:^10.0.0": + version: 10.0.5 + resolution: "ssri@npm:10.0.5" + dependencies: + minipass: ^7.0.3 + checksum: 0a31b65f21872dea1ed3f7c200d7bc1c1b91c15e419deca14f282508ba917cbb342c08a6814c7f68ca4ca4116dd1a85da2bbf39227480e50125a1ceffeecb750 + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: ^8.0.0 + is-fullwidth-code-point: ^3.0.0 + strip-ansi: ^6.0.1 + checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb + languageName: node + linkType: hard + +"string-width@npm:^2.1.0": + version: 2.1.1 + resolution: "string-width@npm:2.1.1" + dependencies: + is-fullwidth-code-point: ^2.0.0 + strip-ansi: ^4.0.0 + checksum: d6173abe088c615c8dffaf3861dc5d5906ed3dc2d6fd67ff2bd2e2b5dce7fd683c5240699cf0b1b8aa679a3b3bd6b28b5053c824cb89b813d7f6541d8f89064a + languageName: node + linkType: hard + +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: ^0.2.0 + emoji-regex: ^9.2.2 + strip-ansi: ^7.0.1 + checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 + languageName: node + linkType: hard + +"string_decoder@npm:^1.1.1": + version: 1.3.0 + resolution: "string_decoder@npm:1.3.0" + dependencies: + safe-buffer: ~5.2.0 + checksum: 8417646695a66e73aefc4420eb3b84cc9ffd89572861fe004e6aeb13c7bc00e2f616247505d2dbbef24247c372f70268f594af7126f43548565c68c117bdeb56 + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: ^5.0.1 + checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c + languageName: node + linkType: hard + +"strip-ansi@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-ansi@npm:4.0.0" + dependencies: + ansi-regex: ^3.0.0 + checksum: d9186e6c0cf78f25274f6750ee5e4a5725fb91b70fdd79aa5fe648eab092a0ec5b9621b22d69d4534a56319f75d8944efbd84e3afa8d4ad1b9a9491f12c84eca + languageName: node + linkType: hard + +"strip-ansi@npm:^5.1.0": + version: 5.2.0 + resolution: "strip-ansi@npm:5.2.0" + dependencies: + ansi-regex: ^4.1.0 + checksum: bdb5f76ade97062bd88e7723aa019adbfacdcba42223b19ccb528ffb9fb0b89a5be442c663c4a3fb25268eaa3f6ea19c7c3fbae830bd1562d55adccae1fcec46 + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: ^6.0.1 + checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d + languageName: node + linkType: hard + +"strip-json-comments@npm:3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 + languageName: node + linkType: hard + +"supports-color@npm:8.1.1": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" + dependencies: + has-flag: ^4.0.0 + checksum: c052193a7e43c6cdc741eb7f378df605636e01ad434badf7324f17fb60c69a880d8d8fcdcb562cf94c2350e57b937d7425ab5b8326c67c2adc48f7c87c1db406 + languageName: node + linkType: hard + +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: ^3.0.0 + checksum: 95f6f4ba5afdf92f495b5a912d4abee8dcba766ae719b975c56c084f5004845f6f5a5f7769f52d53f40e21952a6d87411bafe34af4a01e65f9926002e38e1dac + languageName: node + linkType: hard + +"supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: ^4.0.0 + checksum: 3dda818de06ebbe5b9653e07842d9479f3555ebc77e9a0280caf5a14fb877ffee9ed57007c3b78f5a6324b8dbeec648d9e97a24e2ed9fdb81ddc69ea07100f4a + languageName: node + linkType: hard + +"tar@npm:^6.1.11, tar@npm:^6.1.2": + version: 6.2.0 + resolution: "tar@npm:6.2.0" + dependencies: + chownr: ^2.0.0 + fs-minipass: ^2.0.0 + minipass: ^5.0.0 + minizlib: ^2.1.1 + mkdirp: ^1.0.3 + yallist: ^4.0.0 + checksum: db4d9fe74a2082c3a5016630092c54c8375ff3b280186938cfd104f2e089c4fd9bad58688ef6be9cf186a889671bf355c7cda38f09bbf60604b281715ca57f5c + languageName: node + linkType: hard + +"through@npm:^2.3.6": + version: 2.3.8 + resolution: "through@npm:2.3.8" + checksum: a38c3e059853c494af95d50c072b83f8b676a9ba2818dcc5b108ef252230735c54e0185437618596c790bbba8fcdaef5b290405981ffa09dce67b1f1bf190cbd + languageName: node + linkType: hard + +"tmp@npm:^0.0.33": + version: 0.0.33 + resolution: "tmp@npm:0.0.33" + dependencies: + os-tmpdir: ~1.0.2 + checksum: 902d7aceb74453ea02abbf58c203f4a8fc1cead89b60b31e354f74ed5b3fb09ea817f94fb310f884a5d16987dd9fa5a735412a7c2dd088dd3d415aa819ae3a28 + languageName: node + linkType: hard + +"to-fast-properties@npm:^2.0.0": + version: 2.0.0 + resolution: "to-fast-properties@npm:2.0.0" + checksum: be2de62fe58ead94e3e592680052683b1ec986c72d589e7b21e5697f8744cdbf48c266fa72f6c15932894c10187b5f54573a3bcf7da0bfd964d5caf23d436168 + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: ^7.0.0 + checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed + languageName: node + linkType: hard + +"ts-node@npm:^10.9.1": + version: 10.9.2 + resolution: "ts-node@npm:10.9.2" + dependencies: + "@cspotcode/source-map-support": ^0.8.0 + "@tsconfig/node10": ^1.0.7 + "@tsconfig/node12": ^1.0.7 + "@tsconfig/node14": ^1.0.0 + "@tsconfig/node16": ^1.0.2 + acorn: ^8.4.1 + acorn-walk: ^8.1.1 + arg: ^4.1.0 + create-require: ^1.1.0 + diff: ^4.0.1 + make-error: ^1.1.1 + v8-compile-cache-lib: ^3.0.1 + yn: 3.1.1 + peerDependencies: + "@swc/core": ">=1.2.50" + "@swc/wasm": ">=1.2.50" + "@types/node": "*" + typescript: ">=2.7" + peerDependenciesMeta: + "@swc/core": + optional: true + "@swc/wasm": + optional: true + bin: + ts-node: dist/bin.js + ts-node-cwd: dist/bin-cwd.js + ts-node-esm: dist/bin-esm.js + ts-node-script: dist/bin-script.js + ts-node-transpile-only: dist/bin-transpile.js + ts-script: dist/bin-script-deprecated.js + checksum: fde256c9073969e234526e2cfead42591b9a2aec5222bac154b0de2fa9e4ceb30efcd717ee8bc785a56f3a119bdd5aa27b333d9dbec94ed254bd26f8944c67ac + languageName: node + linkType: hard + +"tslib@npm:^1.9.0": + version: 1.14.1 + resolution: "tslib@npm:1.14.1" + checksum: dbe628ef87f66691d5d2959b3e41b9ca0045c3ee3c7c7b906cc1e328b39f199bb1ad9e671c39025bd56122ac57dfbf7385a94843b1cc07c60a4db74795829acd + languageName: node + linkType: hard + +"type-detect@npm:^4.0.0, type-detect@npm:^4.0.8": + version: 4.0.8 + resolution: "type-detect@npm:4.0.8" + checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 + languageName: node + linkType: hard + +"typescript@npm:^5.1.6": + version: 5.3.3 + resolution: "typescript@npm:5.3.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 2007ccb6e51bbbf6fde0a78099efe04dc1c3dfbdff04ca3b6a8bc717991862b39fd6126c0c3ebf2d2d98ac5e960bcaa873826bb2bb241f14277034148f41f6a2 + languageName: node + linkType: hard + +"typescript@patch:typescript@^5.1.6#~builtin": + version: 5.3.3 + resolution: "typescript@patch:typescript@npm%3A5.3.3#~builtin::version=5.3.3&hash=14eedb" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: f61375590b3162599f0f0d5b8737877ac0a7bc52761dbb585d67e7b8753a3a4c42d9a554c4cc929f591ffcf3a2b0602f65ae3ce74714fd5652623a816862b610 + languageName: node + linkType: hard + +"uglify-js@npm:^3.5.1": + version: 3.17.4 + resolution: "uglify-js@npm:3.17.4" + bin: + uglifyjs: bin/uglifyjs + checksum: 7b3897df38b6fc7d7d9f4dcd658599d81aa2b1fb0d074829dd4e5290f7318dbca1f4af2f45acb833b95b1fe0ed4698662ab61b87e94328eb4c0a0d3435baf924 + languageName: node + linkType: hard + +"undici-types@npm:~5.26.4": + version: 5.26.5 + resolution: "undici-types@npm:5.26.5" + checksum: 3192ef6f3fd5df652f2dc1cd782b49d6ff14dc98e5dced492aa8a8c65425227da5da6aafe22523c67f035a272c599bb89cfe803c1db6311e44bed3042fc25487 + languageName: node + linkType: hard + +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: ^4.0.0 + checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: ^0.1.4 + checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15 + languageName: node + linkType: hard + +"universalify@npm:^0.1.0": + version: 0.1.2 + resolution: "universalify@npm:0.1.2" + checksum: 40cdc60f6e61070fe658ca36016a8f4ec216b29bf04a55dce14e3710cc84c7448538ef4dad3728d0bfe29975ccd7bfb5f414c45e7b78883567fb31b246f02dff + languageName: node + linkType: hard + +"upper-case@npm:^1.1.1": + version: 1.1.3 + resolution: "upper-case@npm:1.1.3" + checksum: 991c845de75fa56e5ad983f15e58494dd77b77cadd79d273cc11e8da400067e9881ae1a52b312aed79b3d754496e2e0712e08d22eae799e35c7f9ba6f3d8a85d + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 + languageName: node + linkType: hard + +"uuid@npm:9.0.0": + version: 9.0.0 + resolution: "uuid@npm:9.0.0" + bin: + uuid: dist/bin/uuid + checksum: 8dd2c83c43ddc7e1c71e36b60aea40030a6505139af6bee0f382ebcd1a56f6cd3028f7f06ffb07f8cf6ced320b76aea275284b224b002b289f89fe89c389b028 + languageName: node + linkType: hard + +"uuid@npm:^9.0": + version: 9.0.1 + resolution: "uuid@npm:9.0.1" + bin: + uuid: dist/bin/uuid + checksum: 39931f6da74e307f51c0fb463dc2462807531dc80760a9bff1e35af4316131b4fc3203d16da60ae33f07fdca5b56f3f1dd662da0c99fea9aaeab2004780cc5f4 + languageName: node + linkType: hard + +"v8-compile-cache-lib@npm:^3.0.1": + version: 3.0.1 + resolution: "v8-compile-cache-lib@npm:3.0.1" + checksum: 78089ad549e21bcdbfca10c08850022b22024cdcc2da9b168bcf5a73a6ed7bf01a9cebb9eac28e03cd23a684d81e0502797e88f3ccd27a32aeab1cfc44c39da0 + languageName: node + linkType: hard + +"wcwidth@npm:^1.0.1": + version: 1.0.1 + resolution: "wcwidth@npm:1.0.1" + dependencies: + defaults: ^1.0.3 + checksum: 814e9d1ddcc9798f7377ffa448a5a3892232b9275ebb30a41b529607691c0491de47cba426e917a4d08ded3ee7e9ba2f3fe32e62ee3cd9c7d3bafb7754bd553c + languageName: node + linkType: hard + +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: ^2.0.0 + bin: + node-which: ./bin/node-which + checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 + languageName: node + linkType: hard + +"which@npm:^4.0.0": + version: 4.0.0 + resolution: "which@npm:4.0.0" + dependencies: + isexe: ^3.1.1 + bin: + node-which: bin/which.js + checksum: f17e84c042592c21e23c8195108cff18c64050b9efb8459589116999ea9da6dd1509e6a1bac3aeebefd137be00fabbb61b5c2bc0aa0f8526f32b58ee2f545651 + languageName: node + linkType: hard + +"workerpool@npm:6.2.1": + version: 6.2.1 + resolution: "workerpool@npm:6.2.1" + checksum: c2c6eebbc5225f10f758d599a5c016fa04798bcc44e4c1dffb34050cd361d7be2e97891aa44419e7afe647b1f767b1dc0b85a5e046c409d890163f655028b09d + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: ^4.0.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: ^6.1.0 + string-width: ^5.0.1 + strip-ansi: ^7.0.1 + checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238 + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 + languageName: node + linkType: hard + +"xpath-builder@npm:0.0.7": + version: 0.0.7 + resolution: "xpath-builder@npm:0.0.7" + checksum: 00df6ba4a06000685678bd458a3cd2394a83779c1f316c08146406ec0289620d3d2616885503b064359d37ea9e2cbdc3cbef3ef0c00be3c0d4b247dda90526fa + languageName: node + linkType: hard + +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 54f0fb95621ee60898a38c572c515659e51cc9d9f787fb109cef6fde4befbe1c4602dc999d30110feee37456ad0f1660fa2edcfde6a9a740f86a290999550d30 + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 + languageName: node + linkType: hard + +"yargs-parser@npm:20.2.4": + version: 20.2.4 + resolution: "yargs-parser@npm:20.2.4" + checksum: d251998a374b2743a20271c2fd752b9fbef24eb881d53a3b99a7caa5e8227fcafd9abf1f345ac5de46435821be25ec12189a11030c12ee6481fef6863ed8b924 + languageName: node + linkType: hard + +"yargs-parser@npm:^20.2.2": + version: 20.2.9 + resolution: "yargs-parser@npm:20.2.9" + checksum: 8bb69015f2b0ff9e17b2c8e6bfe224ab463dd00ca211eece72a4cd8a906224d2703fb8a326d36fdd0e68701e201b2a60ed7cf81ce0fd9b3799f9fe7745977ae3 + languageName: node + linkType: hard + +"yargs-unparser@npm:2.0.0": + version: 2.0.0 + resolution: "yargs-unparser@npm:2.0.0" + dependencies: + camelcase: ^6.0.0 + decamelize: ^4.0.0 + flat: ^5.0.2 + is-plain-obj: ^2.1.0 + checksum: 68f9a542c6927c3768c2f16c28f71b19008710abd6b8f8efbac6dcce26bbb68ab6503bed1d5994bdbc2df9a5c87c161110c1dfe04c6a3fe5c6ad1b0e15d9a8a3 + languageName: node + linkType: hard + +"yargs@npm:16.2.0": + version: 16.2.0 + resolution: "yargs@npm:16.2.0" + dependencies: + cliui: ^7.0.2 + escalade: ^3.1.1 + get-caller-file: ^2.0.5 + require-directory: ^2.1.1 + string-width: ^4.2.0 + y18n: ^5.0.5 + yargs-parser: ^20.2.2 + checksum: b14afbb51e3251a204d81937c86a7e9d4bdbf9a2bcee38226c900d00f522969ab675703bee2a6f99f8e20103f608382936034e64d921b74df82b63c07c5e8f59 + languageName: node + linkType: hard + +"yn@npm:3.1.1": + version: 3.1.1 + resolution: "yn@npm:3.1.1" + checksum: 2c487b0e149e746ef48cda9f8bad10fc83693cd69d7f9dcd8be4214e985de33a29c9e24f3c0d6bcf2288427040a8947406ab27f7af67ee9456e6b84854f02dd6 + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 + languageName: node + linkType: hard diff --git a/package.json b/package.json index dc30394eea..f87812fa16 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,12 @@ "check:tailwind": "yarn workspace @serlo/frontend check:tailwind", "codegen": "yarn workspace @serlo/frontend codegen", "dev": "yarn workspace @serlo/frontend dev", + "e2e": "cd e2e-tests && yarn e2e", + "e2e-firefox": "cd e2e-tests && yarn e2e-firefox", + "e2e-firefox-localhost": "cd e2e-tests && yarn e2e-firefox-localhost", + "e2e-localapi": "cd e2e-tests && yarn e2e-localapi", + "e2e-localhost": "cd e2e-tests && yarn e2e-localhost", + "e2e-workers": "cd e2e-tests && yarn e2e-workers", "format": "yarn workspace @serlo/frontend format", "format:eslint": "yarn workspace @serlo/frontend format:eslint", "format:prettier": "yarn workspace @serlo/frontend format:prettier",