From 9955186b372abb49e461ffe6a21a78685fb82140 Mon Sep 17 00:00:00 2001 From: Omri Levy Date: Wed, 28 Jun 2023 00:11:10 +0300 Subject: [PATCH] test(headless-example): added an e2e smoke test - catches instances of blank white page in response to cases where there are logs in devtools and the app still runs --- examples/headless-example/.gitignore | 3 + examples/headless-example/e2e/smoke.spec.ts | 29 ++ examples/headless-example/package.json | 5 +- .../headless-example/playwright.config.ts | 77 +++ .../src/components/SignUp.svelte | 2 +- examples/headless-example/tsconfig.json | 2 +- pnpm-lock.yaml | 446 +++++++++++------- 7 files changed, 382 insertions(+), 182 deletions(-) create mode 100644 examples/headless-example/e2e/smoke.spec.ts create mode 100644 examples/headless-example/playwright.config.ts diff --git a/examples/headless-example/.gitignore b/examples/headless-example/.gitignore index 7ceb59f89a..91c473a3ff 100644 --- a/examples/headless-example/.gitignore +++ b/examples/headless-example/.gitignore @@ -23,3 +23,6 @@ dist-ssr *.sln *.sw? .env +/test-results/ +/playwright-report/ +/playwright/.cache/ diff --git a/examples/headless-example/e2e/smoke.spec.ts b/examples/headless-example/e2e/smoke.spec.ts new file mode 100644 index 0000000000..47e9f755b9 --- /dev/null +++ b/examples/headless-example/e2e/smoke.spec.ts @@ -0,0 +1,29 @@ +import { expect, test } from '@playwright/test'; + +test.describe('should keep basic functionality #e2e #smoke', async () => { + test('when navigating to the root page the sign up form renders', async ({ page }) => { + await page.goto('/'); + + const welcome = page.getByText(/welcome/i); + + const firstInput = page.getByLabel(/first\sname|business\sname/i); + const secondInput = page.getByLabel(/last\sname|registration\snumber/i); + + const signUpBtn = page.getByRole('button', { name: /sign\sup/i }); + + await expect(welcome).toBeVisible(); + + await expect(firstInput).toBeVisible(); + await expect(secondInput).toBeVisible(); + + await expect(signUpBtn).toBeVisible(); + }); + + test('when navigating to the root page clear user button renders', async ({ page }) => { + await page.goto('/'); + + const clearUserBtn = page.getByRole('button', { name: /clear\suser/i }); + + await expect(clearUserBtn).toBeVisible(); + }); +}); diff --git a/examples/headless-example/package.json b/examples/headless-example/package.json index 3db0cbaf99..55253ca78d 100644 --- a/examples/headless-example/package.json +++ b/examples/headless-example/package.json @@ -9,12 +9,15 @@ "dev": "vite", "build": "vite build", "preview": "vite preview", - "check": "svelte-check --tsconfig ./tsconfig.json" + "check": "svelte-check --tsconfig ./tsconfig.json", + "test:e2e": "playwright test" }, "devDependencies": { "@felte/core": "^1.3.7", + "@playwright/test": "^1.35.1", "@sveltejs/vite-plugin-svelte": "^2.0.2", "@tsconfig/svelte": "^3.0.0", + "@types/node": "^20.3.2", "@xstate/inspect": "^0.7.1", "autoprefixer": "^10.4.7", "postcss": "^8.4.21", diff --git a/examples/headless-example/playwright.config.ts b/examples/headless-example/playwright.config.ts new file mode 100644 index 0000000000..90aff329e4 --- /dev/null +++ b/examples/headless-example/playwright.config.ts @@ -0,0 +1,77 @@ +import { defineConfig, devices } from '@playwright/test'; + +/** + * Read environment variables from file. + * https://github.com/motdotla/dotenv + */ +// require('dotenv').config(); + +/** + * See https://playwright.dev/docs/test-configuration. + */ +export default defineConfig({ + testDir: './e2e', + /* Run tests in files in parallel */ + fullyParallel: true, + /* Fail the build on CI if you accidentally left test.only in the source code. */ + forbidOnly: !!process.env.CI, + /* Retry on CI only */ + retries: process.env.CI ? 2 : 0, + /* Opt out of parallel tests on CI. */ + workers: process.env.CI ? 1 : undefined, + /* Reporter to use. See https://playwright.dev/docs/test-reporters */ + reporter: 'html', + /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ + use: { + /* Base URL to use in actions like `await page.goto('/')`. */ + baseURL: 'http://127.0.0.1:5173', + + /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ + trace: 'on-first-retry', + }, + + /* Configure projects for major browsers */ + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + + { + name: 'firefox', + use: { ...devices['Desktop Firefox'] }, + }, + + { + name: 'webkit', + use: { ...devices['Desktop Safari'] }, + }, + + /* Test against mobile viewports. */ + // { + // name: 'Mobile Chrome', + // use: { ...devices['Pixel 5'] }, + // }, + // { + // name: 'Mobile Safari', + // use: { ...devices['iPhone 12'] }, + // }, + + /* Test against branded browsers. */ + // { + // name: 'Microsoft Edge', + // use: { ...devices['Desktop Edge'], channel: 'msedge' }, + // }, + // { + // name: 'Google Chrome', + // use: { ...devices['Desktop Chrome'], channel: 'chrome' }, + // }, + ], + + /* Run your local dev server before starting the tests */ + // webServer: { + // command: 'npm run start', + // url: 'http://127.0.0.1:3000', + // reuseExistingServer: !process.env.CI, + // }, +}); diff --git a/examples/headless-example/src/components/SignUp.svelte b/examples/headless-example/src/components/SignUp.svelte index 89a81d3c5f..ff10003352 100644 --- a/examples/headless-example/src/components/SignUp.svelte +++ b/examples/headless-example/src/components/SignUp.svelte @@ -47,7 +47,7 @@
- +
{/if} diff --git a/examples/headless-example/tsconfig.json b/examples/headless-example/tsconfig.json index 33d7df7c2f..dfee8df293 100644 --- a/examples/headless-example/tsconfig.json +++ b/examples/headless-example/tsconfig.json @@ -25,6 +25,6 @@ "@/*": ["src/*"] } }, - "include": ["src", "public"], + "include": ["src", "public", "e2e"], "references": [{ "path": "./tsconfig.node.json" }] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 538ade4c18..dafa848d1b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,9 +1,5 @@ lockfileVersion: '6.0' -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - importers: .: @@ -273,7 +269,7 @@ importers: version: 8.8.0(eslint@8.22.0) eslint-plugin-import: specifier: ^2.26.0 - version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint@8.22.0) + version: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) eslint-plugin-react: specifier: ^7.30.1 version: 7.32.2(eslint@8.22.0) @@ -501,12 +497,18 @@ importers: '@felte/core': specifier: ^1.3.7 version: 1.3.7 + '@playwright/test': + specifier: ^1.35.1 + version: 1.35.1 '@sveltejs/vite-plugin-svelte': specifier: ^2.0.2 version: 2.0.3(svelte@3.57.0)(vite@4.2.1) '@tsconfig/svelte': specifier: ^3.0.0 version: 3.0.0 + '@types/node': + specifier: ^20.3.2 + version: 20.3.2 '@xstate/inspect': specifier: ^0.7.1 version: 0.7.1(ws@8.13.0)(xstate@4.37.1) @@ -527,10 +529,10 @@ importers: version: 3.57.0 svelte-check: specifier: ^2.10.3 - version: 2.10.3(@babel/core@7.21.3)(postcss@8.4.21)(svelte@3.57.0) + version: 2.10.3(postcss@8.4.21)(svelte@3.57.0) tailwindcss: specifier: ^3.2.4 - version: 3.2.7(postcss@8.4.21)(ts-node@10.9.1) + version: 3.2.7(postcss@8.4.21) tslib: specifier: ^2.5.0 version: 2.5.0 @@ -539,7 +541,7 @@ importers: version: 4.9.5 vite: specifier: ^4.1.0 - version: 4.2.1(@types/node@18.15.10) + version: 4.2.1(@types/node@20.3.2) packages/common: dependencies: @@ -4872,13 +4874,13 @@ packages: dependencies: '@babel/core': 7.21.3 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.21.3) - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-function-name': 7.22.5 + '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.21.3) + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-replace-supers': 7.20.7 - '@babel/helper-split-export-declaration': 7.22.5 + '@babel/helper-split-export-declaration': 7.18.6 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -4892,13 +4894,13 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-function-name': 7.22.5 + '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.22.5) + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.21.0 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-plugin-utils': 7.20.2 '@babel/helper-replace-supers': 7.20.7 - '@babel/helper-split-export-declaration': 7.22.5 + '@babel/helper-split-export-declaration': 7.18.6 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -8840,6 +8842,17 @@ packages: fsevents: 2.3.2 dev: true + /@playwright/test@1.35.1: + resolution: {integrity: sha512-b5YoFe6J9exsMYg0pQAobNDR85T1nLumUYgUTtKm4d21iX2L7WqKq9dW8NGJ+2vX0etZd+Y7UeuqsxDXm9+5ZA==} + engines: {node: '>=16'} + hasBin: true + dependencies: + '@types/node': 18.15.10 + playwright-core: 1.35.1 + optionalDependencies: + fsevents: 2.3.2 + dev: true + /@polka/url@1.0.0-next.21: resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} dev: false @@ -11098,11 +11111,11 @@ packages: telejson: 7.1.0 dev: true - /@storybook/channel-postmessage@7.1.0-alpha.39: - resolution: {integrity: sha512-hio7NEmRJds9AX+4uqt9r/sFDZyCvgCL404coKN6QnkP43JmyreowJG4NzicvB+mvJNLUAviVey6auiPoWlY7A==} + /@storybook/channel-postmessage@7.1.0-alpha.40: + resolution: {integrity: sha512-BzktCTkfAHjPM3pXF+9gqqV9yd95o0q6Yo502n+tnyvQl+LvsGEzVb1UXyaF2Vve0lfcqXz5Ge3W18zcm7x12g==} dependencies: - '@storybook/channels': 7.1.0-alpha.39 - '@storybook/client-logger': 7.1.0-alpha.39 + '@storybook/channels': 7.1.0-alpha.40 + '@storybook/client-logger': 7.1.0-alpha.40 dev: true /@storybook/channel-websocket@7.0.0-rc.10: @@ -11126,11 +11139,11 @@ packages: resolution: {integrity: sha512-LNjI2etxaK5hbBHziNbDzK5VajGU0BLcD04CO3LbGRC14hJvDfVnvymJeDbbgT1b7RPUwl/vv/azO1kVHDax/A==} dev: true - /@storybook/channels@7.1.0-alpha.39: - resolution: {integrity: sha512-VHJ+WXd4YAkuNiE5wpQhVDVsnqHKajGB2bAVfjtBwLF/VixDhTK/O/+FWGClJuU7btocnYlgOg7R2d/mRZdbHQ==} + /@storybook/channels@7.1.0-alpha.40: + resolution: {integrity: sha512-GMbuR8M/idzCjwWVpBu6yCtkolFhfJDX7/61Y/RAfj8yToJ1BvfaO66Ur8pjfm6Y3q1gxJxvRNyFGAixUCqULw==} dependencies: - '@storybook/client-logger': 7.1.0-alpha.39 - '@storybook/core-events': 7.1.0-alpha.39 + '@storybook/client-logger': 7.1.0-alpha.40 + '@storybook/core-events': 7.1.0-alpha.40 '@storybook/global': 5.0.0 qs: 6.11.2 telejson: 7.1.0 @@ -11199,8 +11212,8 @@ packages: '@storybook/global': 5.0.0 dev: true - /@storybook/client-logger@7.1.0-alpha.39: - resolution: {integrity: sha512-x9QpVsCAlFuvzQzblIWV5E+ThB53cIBcyKFu2A9s9LiEO55hYz9G9FF9yGnwBMjQ0iZeqKuAtPy8TLj2wiugdQ==} + /@storybook/client-logger@7.1.0-alpha.40: + resolution: {integrity: sha512-j6nPSGAZM88nC5bKMhQfZW3jeK2XoizAZO9zbojb3znDMqbjPeOWqtc1JPOgsTS8bYEMgYfc727k75rqnaywGA==} dependencies: '@storybook/global': 5.0.0 dev: true @@ -11304,8 +11317,8 @@ packages: resolution: {integrity: sha512-Z4S6H1E5FuG7eiVozqcqNBSADt0kCDZeXlpR/gIOYLmTd/BDIQ2QhLt+G41BbEvck8nRnC7lZ9DXuref8V3pDA==} dev: true - /@storybook/core-events@7.1.0-alpha.39: - resolution: {integrity: sha512-LVYHbCq6tlzYKSb+k9/iI5B6EoZ10W0oGFAo/YCxHVyRQJ3fOQNmgYvLmnVjZ1V87AULCFMDyzDBuMGpqqwd0w==} + /@storybook/core-events@7.1.0-alpha.40: + resolution: {integrity: sha512-mP8OfPtHILDTrKrDv7u1V0qWjXwwRrh4ZYY5TOzOox5UmOy9/u02Yv7K8iDhmCYjMXmKOyzEKI9Wb/3URzAZBg==} dev: true /@storybook/core-server@7.0.0-rc.10: @@ -11441,14 +11454,14 @@ packages: '@storybook/preview-api': 7.0.0-rc.10 dev: true - /@storybook/instrumenter@7.1.0-alpha.39: - resolution: {integrity: sha512-zLOxqmt+oE4y8/K56zJdaDJmIzblqnylgTZfEVOZss0eW1A6vnTAv7C9mwsN4ZvHA0Q/tevLFcAET66GaoLGiQ==} + /@storybook/instrumenter@7.1.0-alpha.40: + resolution: {integrity: sha512-Pnl/r1d/Lgmp5nLLhQiYSjJVYJAJO2yuO20z7LpjkekgkdzLN8cMQvQyeHYQpamqpa+rd965kBfZ8mstCwfo2Q==} dependencies: - '@storybook/channels': 7.1.0-alpha.39 - '@storybook/client-logger': 7.1.0-alpha.39 - '@storybook/core-events': 7.1.0-alpha.39 + '@storybook/channels': 7.1.0-alpha.40 + '@storybook/client-logger': 7.1.0-alpha.40 + '@storybook/core-events': 7.1.0-alpha.40 '@storybook/global': 5.0.0 - '@storybook/preview-api': 7.1.0-alpha.39 + '@storybook/preview-api': 7.1.0-alpha.40 dev: true /@storybook/manager-api@7.0.0-rc.10(react-dom@18.2.0)(react@18.2.0): @@ -11517,16 +11530,16 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/preview-api@7.1.0-alpha.39: - resolution: {integrity: sha512-lhTSV2s2AzqewjqRhcynMlHWf7ua2TgohXPy8eJ+l11HKV6ddISASEAGr0umK10OXpJweHPSR+VtyCMZG8tVpA==} + /@storybook/preview-api@7.1.0-alpha.40: + resolution: {integrity: sha512-dE+j+2hwg0GO43BctZGvkkJvDjLwUWJd0PSG07l26iAmNvDjMD9Npa3lii2mqDjrtdZWNSGNz7hhqt9WpWAYBQ==} dependencies: - '@storybook/channel-postmessage': 7.1.0-alpha.39 - '@storybook/channels': 7.1.0-alpha.39 - '@storybook/client-logger': 7.1.0-alpha.39 - '@storybook/core-events': 7.1.0-alpha.39 + '@storybook/channel-postmessage': 7.1.0-alpha.40 + '@storybook/channels': 7.1.0-alpha.40 + '@storybook/client-logger': 7.1.0-alpha.40 + '@storybook/core-events': 7.1.0-alpha.40 '@storybook/csf': 0.1.0 '@storybook/global': 5.0.0 - '@storybook/types': 7.1.0-alpha.39 + '@storybook/types': 7.1.0-alpha.40 '@types/qs': 6.9.7 dequal: 2.0.3 lodash: 4.17.21 @@ -11674,8 +11687,8 @@ packages: /@storybook/testing-library@0.0.14-next.1: resolution: {integrity: sha512-1CAl40IKIhcPaCC4pYCG0b9IiYNymktfV/jTrX7ctquRY3akaN7f4A1SippVHosksft0M+rQTFE0ccfWW581fw==} dependencies: - '@storybook/client-logger': 7.1.0-alpha.39 - '@storybook/instrumenter': 7.1.0-alpha.39 + '@storybook/client-logger': 7.1.0-alpha.40 + '@storybook/instrumenter': 7.1.0-alpha.40 '@testing-library/dom': 8.20.0 '@testing-library/user-event': 13.5.0(@testing-library/dom@8.20.0) ts-dedent: 2.2.0 @@ -11718,13 +11731,13 @@ packages: file-system-cache: 2.1.1 dev: true - /@storybook/types@7.1.0-alpha.39: - resolution: {integrity: sha512-OgWFn62Affl+tJDCcg5o+DB0PG6EQOwk0NsvwYjbLdw9+PEMRs4HCHRaBuwRbeEx6R6++v8fT4XI9QT5Zo0xzg==} + /@storybook/types@7.1.0-alpha.40: + resolution: {integrity: sha512-+q0COxGmoLFCYfULp2rTY3W5FVmbHxyxLM62uD2Jpf+PZ+gdNjvxj0KcvimfGLZkbCeqSYidsJl2hmMoQi+5Gg==} dependencies: - '@storybook/channels': 7.1.0-alpha.39 + '@storybook/channels': 7.1.0-alpha.40 '@types/babel__core': 7.20.0 '@types/express': 4.17.9 - file-system-cache: 2.1.1 + file-system-cache: 2.3.0 dev: true /@sveltejs/vite-plugin-svelte@1.0.8(svelte@3.57.0)(vite@4.0.3): @@ -11757,13 +11770,13 @@ packages: svelte: ^3.54.0 vite: ^4.0.0 dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.29.0 svelte: 3.57.0 svelte-hmr: 0.15.1(svelte@3.57.0) - vite: 4.2.1(@types/node@18.15.10) + vite: 4.2.1(@types/node@20.3.2) vitefu: 0.2.4(vite@4.2.1) transitivePeerDependencies: - supports-color @@ -12517,6 +12530,9 @@ packages: resolution: {integrity: sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==} dev: true + /@types/node@20.3.2: + resolution: {integrity: sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw==} + /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true @@ -15978,6 +15994,17 @@ packages: dependencies: ms: 2.1.3 + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + /debug@4.3.4(supports-color@8.1.1): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -17002,7 +17029,7 @@ packages: '@typescript-eslint/parser': 5.59.0(eslint@8.36.0)(typescript@4.9.5) eslint: 8.36.0 eslint-config-standard: 17.0.0(eslint-plugin-import@2.27.5)(eslint-plugin-n@15.6.1)(eslint-plugin-promise@6.1.1)(eslint@8.36.0) - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.0)(eslint@8.36.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) eslint-plugin-n: 15.6.1(eslint@8.36.0) eslint-plugin-promise: 6.1.1(eslint@8.36.0) typescript: 4.9.5 @@ -17019,7 +17046,7 @@ packages: eslint-plugin-promise: ^6.0.0 dependencies: eslint: 8.36.0 - eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.59.0)(eslint@8.36.0) + eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.36.0) eslint-plugin-n: 15.6.1(eslint@8.36.0) eslint-plugin-promise: 6.1.1(eslint@8.36.0) dev: true @@ -17084,64 +17111,6 @@ packages: - supports-color dev: true - /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-node@0.3.7)(eslint@8.22.0): - resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 5.56.0(eslint@8.22.0)(typescript@4.9.5) - debug: 3.2.7 - eslint: 8.22.0 - eslint-import-resolver-node: 0.3.7 - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.59.0)(eslint-import-resolver-node@0.3.7)(eslint@8.36.0): - resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - '@typescript-eslint/parser': 5.59.0(eslint@8.36.0)(typescript@4.9.5) - debug: 3.2.7 - eslint: 8.36.0 - eslint-import-resolver-node: 0.3.7 - transitivePeerDependencies: - - supports-color - dev: true - /eslint-plugin-astro@0.21.1(eslint@8.36.0): resolution: {integrity: sha512-gzT9R0b/Hl5sks8/WSMTlzu2VC7vdd99MnBYkq61Mk1zBWQ+C9MAuHeTcU72sFmR5XJX56NNURY6H+cN2StRcA==} engines: {node: ^14.18.0 || >=16.0.0} @@ -17238,72 +17207,6 @@ packages: - supports-color dev: true - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.56.0)(eslint@8.22.0): - resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - '@typescript-eslint/parser': 5.56.0(eslint@8.22.0)(typescript@4.9.5) - array-includes: 3.1.6 - array.prototype.flat: 1.3.1 - array.prototype.flatmap: 1.3.1 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.22.0 - eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.56.0)(eslint-import-resolver-node@0.3.7)(eslint@8.22.0) - has: 1.0.3 - is-core-module: 2.11.0 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.values: 1.1.6 - resolve: 1.22.1 - semver: 6.3.0 - tsconfig-paths: 3.14.2 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: true - - /eslint-plugin-import@2.27.5(@typescript-eslint/parser@5.59.0)(eslint@8.36.0): - resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - '@typescript-eslint/parser': 5.59.0(eslint@8.36.0)(typescript@4.9.5) - array-includes: 3.1.6 - array.prototype.flat: 1.3.1 - array.prototype.flatmap: 1.3.1 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.36.0 - eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.59.0)(eslint-import-resolver-node@0.3.7)(eslint@8.36.0) - has: 1.0.3 - is-core-module: 2.11.0 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.values: 1.1.6 - resolve: 1.22.1 - semver: 6.3.0 - tsconfig-paths: 3.14.2 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: true - /eslint-plugin-n@15.6.1(eslint@8.36.0): resolution: {integrity: sha512-R9xw9OtCRxxaxaszTQmQAlPgM+RdGjaL1akWuY/Fv9fRAi8Wj4CUKc6iYVG8QNRjRuo8/BqVYIpfqberJUEacA==} engines: {node: '>=12.22.0'} @@ -18130,6 +18033,13 @@ packages: ramda: 0.28.0 dev: true + /file-system-cache@2.3.0: + resolution: {integrity: sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==} + dependencies: + fs-extra: 11.1.1 + ramda: 0.29.0 + dev: true + /file-type@12.4.2: resolution: {integrity: sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==} engines: {node: '>=8'} @@ -23370,6 +23280,12 @@ packages: hasBin: true dev: true + /playwright-core@1.35.1: + resolution: {integrity: sha512-pNXb6CQ7OqmGDRspEjlxE49w+4YtR6a3X6mT1hZXeJHWmsEz7SunmvZeiG/+y1yyMZdHnnn73WKYdtV1er0Xyg==} + engines: {node: '>=16'} + hasBin: true + dev: true + /please-upgrade-node@3.2.0: resolution: {integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==} dependencies: @@ -23428,6 +23344,23 @@ packages: camelcase-css: 2.0.1 postcss: 8.4.24 + /postcss-load-config@3.1.4(postcss@8.4.21): + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} + engines: {node: '>= 10'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.1.0 + postcss: 8.4.21 + yaml: 1.10.2 + dev: true + /postcss-load-config@3.1.4(postcss@8.4.21)(ts-node@10.9.1): resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} @@ -23859,6 +23792,10 @@ packages: resolution: {integrity: sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==} dev: true + /ramda@0.29.0: + resolution: {integrity: sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==} + dev: true + /randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: @@ -25863,6 +25800,34 @@ packages: - sugarss dev: true + /svelte-check@2.10.3(postcss@8.4.21)(svelte@3.57.0): + resolution: {integrity: sha512-Nt1aWHTOKFReBpmJ1vPug0aGysqPwJh2seM1OvICfM2oeyaA62mOiy5EvkXhltGfhCcIQcq2LoE0l1CwcWPjlw==} + hasBin: true + peerDependencies: + svelte: ^3.24.0 + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + chokidar: 3.5.3 + fast-glob: 3.2.12 + import-fresh: 3.3.0 + picocolors: 1.0.0 + sade: 1.8.1 + svelte: 3.57.0 + svelte-preprocess: 4.10.7(postcss@8.4.21)(svelte@3.57.0)(typescript@4.9.5) + typescript: 4.9.5 + transitivePeerDependencies: + - '@babel/core' + - coffeescript + - less + - node-sass + - postcss + - postcss-load-config + - pug + - sass + - stylus + - sugarss + dev: true + /svelte-hmr@0.15.1(svelte@3.57.0): resolution: {integrity: sha512-BiKB4RZ8YSwRKCNVdNxK/GfY+r4Kjgp9jCLEy0DuqAKfmQtpL38cQK3afdpjw4sqSs4PLi3jIPJIFp259NkZtA==} engines: {node: ^12.20 || ^14.13.1 || >= 16} @@ -25925,6 +25890,58 @@ packages: typescript: 4.9.5 dev: true + /svelte-preprocess@4.10.7(postcss@8.4.21)(svelte@3.57.0)(typescript@4.9.5): + resolution: {integrity: sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==} + engines: {node: '>= 9.11.2'} + requiresBuild: true + peerDependencies: + '@babel/core': ^7.10.2 + coffeescript: ^2.5.1 + less: ^3.11.3 || ^4.0.0 + node-sass: '*' + postcss: ^7 || ^8 + postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 + pug: ^3.0.0 + sass: ^1.26.8 + stylus: ^0.55.0 + sugarss: ^2.0.0 + svelte: ^3.23.0 + typescript: ^3.9.5 || ^4.0.0 + peerDependenciesMeta: + '@babel/core': + optional: true + coffeescript: + optional: true + less: + optional: true + node-sass: + optional: true + postcss: + optional: true + postcss-load-config: + optional: true + pug: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + typescript: + optional: true + dependencies: + '@types/pug': 2.0.6 + '@types/sass': 1.45.0 + detect-indent: 6.1.0 + magic-string: 0.25.9 + postcss: 8.4.21 + sorcery: 0.10.0 + strip-indent: 3.0.0 + svelte: 3.57.0 + typescript: 4.9.5 + dev: true + /svelte@3.57.0: resolution: {integrity: sha512-WMXEvF+RtAaclw0t3bPDTUe19pplMlfyKDsixbHQYgCWi9+O9VN0kXU1OppzrB9gPAvz4NALuoca2LfW2bOjTQ==} engines: {node: '>= 8'} @@ -25985,9 +26002,43 @@ packages: peerDependencies: tailwindcss: '>=3.0.0 || insiders' dependencies: - tailwindcss: 3.2.7(postcss@8.4.24)(ts-node@10.9.1) + tailwindcss: 3.2.7(postcss@8.4.21)(ts-node@10.9.1) dev: false + /tailwindcss@3.2.7(postcss@8.4.21): + resolution: {integrity: sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ==} + engines: {node: '>=12.13.0'} + hasBin: true + peerDependencies: + postcss: ^8.0.9 + dependencies: + arg: 5.0.2 + chokidar: 3.5.3 + color-name: 1.1.4 + detective: 5.2.1 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.2.12 + glob-parent: 6.0.2 + is-glob: 4.0.3 + lilconfig: 2.1.0 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.0.0 + postcss: 8.4.21 + postcss-import: 14.1.0(postcss@8.4.21) + postcss-js: 4.0.1(postcss@8.4.21) + postcss-load-config: 3.1.4(postcss@8.4.21) + postcss-nested: 6.0.0(postcss@8.4.21) + postcss-selector-parser: 6.0.11 + postcss-value-parser: 4.2.0 + quick-lru: 5.1.1 + resolve: 1.22.1 + transitivePeerDependencies: + - ts-node + dev: true + /tailwindcss@3.2.7(postcss@8.4.21)(ts-node@10.9.1): resolution: {integrity: sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ==} engines: {node: '>=12.13.0'} @@ -27479,10 +27530,10 @@ packages: vite: optional: true dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 globrex: 0.1.2 tsconfck: 2.1.1(typescript@4.9.5) - vite: 4.2.1(@types/node@18.15.10) + vite: 4.2.1(@types/node@20.3.2) transitivePeerDependencies: - supports-color - typescript @@ -27588,6 +27639,39 @@ packages: optionalDependencies: fsevents: 2.3.2 + /vite@4.2.1(@types/node@20.3.2): + resolution: {integrity: sha512-7MKhqdy0ISo4wnvwtqZkjke6XN4taqQ2TBaTccLIpOKv7Vp2h4Y+NpmWCnGDeSvvn45KxvWgGyb0MkHvY1vgbg==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 20.3.2 + esbuild: 0.17.14 + postcss: 8.4.24 + resolve: 1.22.1 + rollup: 3.20.2 + optionalDependencies: + fsevents: 2.3.2 + /vite@4.3.9(@types/node@18.15.10): resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} engines: {node: ^14.18.0 || >=16.0.0} @@ -27672,7 +27756,7 @@ packages: vite: optional: true dependencies: - vite: 4.2.1(@types/node@18.15.10) + vite: 4.2.1(@types/node@20.3.2) dev: true /vitefu@0.2.4(vite@4.3.9): @@ -28529,3 +28613,7 @@ packages: /zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} dev: false + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false