diff --git a/.github/workflows/lighthouse-ci-cd.yml b/.github/workflows/lighthouse-ci-cd.yml
new file mode 100644
index 000000000..cc80c463e
--- /dev/null
+++ b/.github/workflows/lighthouse-ci-cd.yml
@@ -0,0 +1,125 @@
+name: Lighthouse CI
+
+on:
+ pull_request:
+ branches:
+ - main
+ types:
+ - opened
+ - synchronize
+ paths:
+ - "client/**"
+ - "core/**"
+ - ".github/workflows/lighthouse-*.yml"
+
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ lighthouse-ci:
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ pull-requests: write
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Setup pnpm
+ uses: pnpm/action-setup@v3
+ with:
+ version: 9
+ run_install: false
+
+ - name: Setup Node
+ uses: actions/setup-node@v4
+ with:
+ node-version: 20
+ cache: "pnpm"
+ cache-dependency-path: "**/pnpm-lock.yaml"
+
+ - name: Install all dependencies
+ run: pnpm install --frozen-lockfile
+
+ - name: Build core package
+ run: |
+ echo "Building core package..."
+ pnpm --filter @troublepainter/core build
+ echo "Core build output:"
+ ls -la core/dist/
+
+ - name: Verify core build
+ run: |
+ if [ ! -f "core/dist/index.mjs" ]; then
+ echo "Core build failed - index.mjs not found"
+ exit 1
+ fi
+
+ - name: Install Playwright browsers
+ working-directory: ./client
+ run: npx playwright install
+
+ - name: Run Lighthouse audit
+ working-directory: ./client
+ id: lighthouse
+ env:
+ VITE_API_URL: ${{ secrets.VITE_API_URL }}
+ VITE_SOCKET_URL: ${{ secrets.VITE_SOCKET_URL }}
+ run: |
+ pnpm build
+ pnpm lighthouse
+
+ - uses: actions/upload-artifact@v4
+ if: ${{ !cancelled() }}
+ with:
+ name: lighthouse-report
+ path: |
+ client/.lighthouse/MainPage.html
+ client/.lighthouse/LobbyPage.html
+ retention-days: 30
+
+ - name: Create PR Comment
+ uses: actions/github-script@v6
+ with:
+ script: |
+ const fs = require('fs')
+ const results = JSON.parse(fs.readFileSync('client/.lighthouse/results.json', 'utf8'))
+
+ const getEmoji = (score) => {
+ if (score >= 90) return 'π’'
+ else if (score >= 50) return 'π‘';
+ else return 'π΄'
+ }
+
+ let comment = '### π¦ Lighthouse Audit Results\n\n';
+
+ results.forEach(result => {
+ comment += `\n${result.pageName}
\n\n`
+
+ //Categories
+ comment += '#### Category Scores\n\n';
+ comment += '| Category | Score |\n|----------|-------|\n';
+ Object.entries(result.categories).forEach(([key, value]) => {
+ const emoji = getEmoji(value.score);
+ comment += `| ${key} | ${emoji} ${value.score} |\n`
+ })
+
+ // Metrics
+ comment += '\n#### Core Web Vitals & Metrics\n\n';
+ comment += '| Metric | Value | Score |\n|---------|--------|-------|\n';
+ Object.entries(result.metrics).forEach(([key, value]) => {
+ const emoji = getEmoji(value.score);
+ comment += `| ${key} | ${value.displayValue} | ${emoji} ${value.score} |\n`;
+ })
+
+ comment += ' \n\n\n';
+ })
+
+ github.rest.issues.createComment({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ issue_number: context.issue.number,
+ body: comment
+ })
diff --git a/.gitignore b/.gitignore
index 2db5c8809..1c90768a9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -52,6 +52,8 @@ lerna-debug.log*
# Tests
/coverage
/.nyc_output
+.lighthouse
+test-results
# IDEs and editors
/.idea
diff --git a/client/package.json b/client/package.json
index 24405d8e2..7ce66e667 100644
--- a/client/package.json
+++ b/client/package.json
@@ -15,7 +15,8 @@
"check": "pnpm format:check && pnpm lint:strict",
"fix": "pnpm format && pnpm lint:fix",
"storybook": "storybook dev -p 6006",
- "build-storybook": "storybook build"
+ "build-storybook": "storybook build",
+ "lighthouse": "playwright test --project=lighthouse"
},
"dependencies": {
"@lottiefiles/dotlottie-react": "^0.10.1",
@@ -32,6 +33,7 @@
"devDependencies": {
"@chromatic-com/storybook": "^3.2.2",
"@eslint/js": "^9.13.0",
+ "@playwright/test": "^1.49.1",
"@storybook/addon-essentials": "^8.4.1",
"@storybook/addon-interactions": "^8.4.1",
"@storybook/addon-onboarding": "^8.4.1",
@@ -60,6 +62,7 @@
"eslint-plugin-react-refresh": "^0.4.14",
"eslint-plugin-storybook": "^0.10.2",
"globals": "^15.11.0",
+ "playwright-lighthouse": "^4.0.0",
"postcss": "^8.4.47",
"prettier": "^3.3.3",
"prettier-plugin-tailwindcss": "^0.6.8",
diff --git a/client/playwright.config.ts b/client/playwright.config.ts
new file mode 100644
index 000000000..8d5b8d2f7
--- /dev/null
+++ b/client/playwright.config.ts
@@ -0,0 +1,22 @@
+import { defineConfig } from '@playwright/test';
+
+export default defineConfig({
+ reporter: 'list',
+ use: {
+ launchOptions: {
+ args: ['--remote-debugging-port=9222'],
+ headless: true,
+ },
+ },
+ projects: [
+ {
+ name: 'lighthouse',
+ testMatch: 'lighthouse/lighthouse.test.ts',
+ },
+ ],
+ webServer: {
+ command: 'pnpm start',
+ port: 4173,
+ reuseExistingServer: !process.env.CI,
+ },
+});
diff --git a/client/src/tests/lighthouse/lighthouse.config.ts b/client/src/tests/lighthouse/lighthouse.config.ts
new file mode 100644
index 000000000..b839c69ae
--- /dev/null
+++ b/client/src/tests/lighthouse/lighthouse.config.ts
@@ -0,0 +1,14 @@
+export const BASE_URL = 'http://localhost:4173';
+export const LIGHTHOUSE_CONFIG = {
+ port: 9222,
+ thresholds: {
+ performance: 0,
+ accessibility: 0,
+ 'best-practices': 0,
+ seo: 0,
+ },
+ reports: {
+ formats: { html: true },
+ directory: './.lighthouse',
+ },
+};
diff --git a/client/src/tests/lighthouse/lighthouse.test.ts b/client/src/tests/lighthouse/lighthouse.test.ts
new file mode 100644
index 000000000..993f05553
--- /dev/null
+++ b/client/src/tests/lighthouse/lighthouse.test.ts
@@ -0,0 +1,28 @@
+import test from '@playwright/test';
+import { Page } from '@playwright/test';
+import { BASE_URL } from './lighthouse.config';
+import { TestCase } from './lighthouse.type';
+import { runPerformanceTest } from './lighthouse.util';
+
+export const testCases: TestCase[] = [
+ {
+ url: BASE_URL,
+ pageName: 'MainPage',
+ },
+ {
+ url: BASE_URL,
+ pageName: 'LobbyPage',
+ setup: async (page: Page) => {
+ await page.getByRole('button', { name: 'λ°© λ§λ€κΈ°' }).click();
+ await page.waitForURL(`${BASE_URL}/lobby/*`);
+ },
+ },
+];
+
+test.describe('Lighthouse Performance Tests', () => {
+ for (const testCase of testCases) {
+ test(`${testCase.pageName} Performance Check`, async () => {
+ await runPerformanceTest(testCase);
+ });
+ }
+});
diff --git a/client/src/tests/lighthouse/lighthouse.type.ts b/client/src/tests/lighthouse/lighthouse.type.ts
new file mode 100644
index 000000000..7b1b00fcf
--- /dev/null
+++ b/client/src/tests/lighthouse/lighthouse.type.ts
@@ -0,0 +1,36 @@
+import { Page } from '@playwright/test';
+
+type CategoryName = 'performance' | 'accessibility' | 'best-practices' | 'seo';
+
+export type MetricName =
+ | 'first-contentful-paint'
+ | 'largest-contentful-paint'
+ | 'total-blocking-time'
+ | 'cumulative-layout-shift'
+ | 'speed-index';
+
+export type MetricNickname = 'FCP' | 'LCP' | 'TBT' | 'CLS' | 'SI';
+
+export interface MetricValue {
+ displayValue: string;
+ score: number;
+}
+
+export interface CategoryValue {
+ score: number;
+}
+
+export type Categories = Record;
+export type Metrics = Record;
+
+export interface LighthouseResult {
+ pageName: string;
+ categories: Categories;
+ metrics: Metrics;
+}
+
+export interface TestCase {
+ url: string;
+ pageName: string;
+ setup?: (page: Page) => Promise;
+}
diff --git a/client/src/tests/lighthouse/lighthouse.util.ts b/client/src/tests/lighthouse/lighthouse.util.ts
new file mode 100644
index 000000000..c7ce029cf
--- /dev/null
+++ b/client/src/tests/lighthouse/lighthouse.util.ts
@@ -0,0 +1,100 @@
+import { existsSync, mkdirSync, writeFileSync } from 'fs';
+import { join } from 'path';
+import { Page, chromium } from '@playwright/test';
+import { playAudit, playwrightLighthouseResult } from 'playwright-lighthouse';
+import { LIGHTHOUSE_CONFIG } from './lighthouse.config';
+import { Categories, LighthouseResult, MetricName, Metrics, TestCase } from './lighthouse.type';
+
+const RESULTS_DIR = './.lighthouse';
+const results: LighthouseResult[] = [];
+
+export const runAudit = async (page: Page, pageName: string): Promise => {
+ return playAudit({
+ page,
+ ...LIGHTHOUSE_CONFIG,
+ reports: {
+ ...LIGHTHOUSE_CONFIG.reports,
+ name: pageName,
+ },
+ });
+};
+
+export const getMetricScore = (result: playwrightLighthouseResult, metricName: MetricName) => {
+ const audit = result.lhr.audits[metricName];
+ return {
+ displayValue: audit.displayValue || '',
+ score: (audit.score || 0) * 100,
+ };
+};
+
+export const extractResults = (result: playwrightLighthouseResult) => {
+ const categories: Categories = {
+ performance: { score: (result.lhr.categories.performance?.score || 0) * 100 },
+ accessibility: { score: (result.lhr.categories.accessibility?.score || 0) * 100 },
+ 'best-practices': { score: (result.lhr.categories['best-practices']?.score || 0) * 100 },
+ seo: { score: (result.lhr.categories.seo?.score || 0) * 100 },
+ };
+
+ const metrics: Metrics = {
+ FCP: getMetricScore(result, 'first-contentful-paint'),
+ LCP: getMetricScore(result, 'largest-contentful-paint'),
+ TBT: getMetricScore(result, 'total-blocking-time'),
+ CLS: getMetricScore(result, 'cumulative-layout-shift'),
+ SI: getMetricScore(result, 'speed-index'),
+ };
+
+ return { categories, metrics };
+};
+
+export const saveResult = (result: LighthouseResult) => {
+ results.push(result);
+ persistResults();
+};
+
+export const persistResults = () => {
+ if (!existsSync(RESULTS_DIR)) {
+ mkdirSync(RESULTS_DIR, { recursive: true });
+ }
+ writeFileSync(join(RESULTS_DIR, 'results.json'), JSON.stringify(results, null, 2));
+};
+
+export const printScores = (result: LighthouseResult) => {
+ console.log(`\n-----${result.pageName}-----`);
+ console.table(result.categories);
+ console.table(result.metrics);
+};
+
+export const initBrowser = async () => {
+ const browser = await chromium.launch();
+ const context = await browser.newContext();
+ const page = await context.newPage();
+ return { browser, context, page };
+};
+
+export const navigateToPage = async (page: Page, { url, setup }: TestCase) => {
+ await page.goto(url);
+ if (setup) {
+ await setup(page);
+ }
+};
+
+export const collectMetrics = async (page: Page, pageName: string) => {
+ const rawResults = await runAudit(page, pageName);
+ return {
+ pageName,
+ ...extractResults(rawResults),
+ };
+};
+
+export const runPerformanceTest = async (config: TestCase) => {
+ const { browser, page } = await initBrowser();
+
+ try {
+ await navigateToPage(page, config);
+ const testResults = await collectMetrics(page, config.pageName);
+ printScores(testResults);
+ saveResult(testResults);
+ } finally {
+ await browser.close();
+ }
+};
diff --git a/client/tsconfig.app.json b/client/tsconfig.app.json
index b7a997ac5..0bae4ec6a 100644
--- a/client/tsconfig.app.json
+++ b/client/tsconfig.app.json
@@ -29,6 +29,6 @@
"@/*": ["./src/*"]
}
},
- "include": ["src/**/*.ts", "src/**/*.tsx", ".storybook/**/*", "vite.config.ts"],
+ "include": ["src/**/*.ts", "src/**/*.tsx", ".storybook/**/*", "vite.config.ts", "playwright.config.ts"],
"exclude": ["node_modules", "dist"]
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 94be3fffc..45719c619 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -58,6 +58,9 @@ importers:
'@eslint/js':
specifier: ^9.13.0
version: 9.15.0
+ '@playwright/test':
+ specifier: ^1.49.1
+ version: 1.49.1
'@storybook/addon-essentials':
specifier: ^8.4.1
version: 8.4.4(@types/react@18.3.12)(storybook@8.4.4(prettier@3.3.3))
@@ -142,6 +145,9 @@ importers:
globals:
specifier: ^15.11.0
version: 15.12.0
+ playwright-lighthouse:
+ specifier: ^4.0.0
+ version: 4.0.0(lighthouse@12.3.0)(playwright-core@1.49.1)
postcss:
specifier: ^8.4.47
version: 8.4.49
@@ -228,7 +234,7 @@ importers:
version: 5.4.1
openai:
specifier: ^4.82.0
- version: 4.82.0(ws@8.18.0)
+ version: 4.82.0(ws@8.18.0)(zod@3.23.8)
reflect-metadata:
specifier: ^0.2.0
version: 0.2.2
@@ -861,6 +867,21 @@ packages:
resolution: {integrity: sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@formatjs/ecma402-abstract@2.3.2':
+ resolution: {integrity: sha512-6sE5nyvDloULiyOMbOTJEEgWL32w+VHkZQs8S02Lnn8Y/O5aQhjOEXwWzvR7SsBE/exxlSpY2EsWZgqHbtLatg==}
+
+ '@formatjs/fast-memoize@2.2.6':
+ resolution: {integrity: sha512-luIXeE2LJbQnnzotY1f2U2m7xuQNj2DA8Vq4ce1BY9ebRZaoPB1+8eZ6nXpLzsxuW5spQxr7LdCg+CApZwkqkw==}
+
+ '@formatjs/icu-messageformat-parser@2.11.0':
+ resolution: {integrity: sha512-Hp81uTjjdTk3FLh/dggU5NK7EIsVWc5/ZDWrIldmf2rBuPejuZ13CZ/wpVE2SToyi4EiroPTQ1XJcJuZFIxTtw==}
+
+ '@formatjs/icu-skeleton-parser@1.8.12':
+ resolution: {integrity: sha512-QRAY2jC1BomFQHYDMcZtClqHR55EEnB96V7Xbk/UiBodsuFc5kujybzt87+qj1KqmJozFhk6n4KiT1HKwAkcfg==}
+
+ '@formatjs/intl-localematcher@0.5.10':
+ resolution: {integrity: sha512-af3qATX+m4Rnd9+wHcjJ4w2ijq+rAVP3CCinJQvFv1kgSu1W6jypUmvleJxcewdxmutM8dmIRZFxO/IQBZmP2Q==}
+
'@humanfs/core@0.19.1':
resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
engines: {node: '>=18.18.0'}
@@ -1139,6 +1160,9 @@ packages:
engines: {node: '>=8.0.0', npm: '>=5.0.0'}
hasBin: true
+ '@paulirish/trace_engine@0.0.39':
+ resolution: {integrity: sha512-2Y/ejHX5DDi5bjfWY/0c/BLVSfQ61Jw1Hy60Hnh0hfEO632D3FVctkzT4Q/lVAdvIPR0bUaok9JDTr1pu/OziA==}
+
'@pkgjs/parseargs@0.11.0':
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
@@ -1152,6 +1176,16 @@ packages:
engines: {node: '>=18'}
hasBin: true
+ '@playwright/test@1.49.1':
+ resolution: {integrity: sha512-Ky+BVzPz8pL6PQxHqNRW1k3mIyv933LML7HktS8uik0bUXNCdPhoS/kLihiO1tMf/egaJb4IutXd7UywvXEW+g==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ '@puppeteer/browsers@2.6.1':
+ resolution: {integrity: sha512-aBSREisdsGH890S2rQqK82qmQYU3uFpSH8wcZWHgHzl3LfzsxAKbLNiAG9mO8v1Y0UICBeClICxPJvyr0rcuxg==}
+ engines: {node: '>=18'}
+ hasBin: true
+
'@remix-run/router@1.21.0':
resolution: {integrity: sha512-xfSkCAchbdG5PnbrKqFWwia4Bi61nH+wm8wLEqfHDyp7Y3dZzgqS2itV8i4gAq9pC2HsTpwyBC6Ds8VHZ96JlA==}
engines: {node: '>=14.0.0'}
@@ -1258,6 +1292,30 @@ packages:
'@rtsao/scc@1.1.0':
resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
+ '@sentry-internal/tracing@7.120.3':
+ resolution: {integrity: sha512-Ausx+Jw1pAMbIBHStoQ6ZqDZR60PsCByvHdw/jdH9AqPrNE9xlBSf9EwcycvmrzwyKspSLaB52grlje2cRIUMg==}
+ engines: {node: '>=8'}
+
+ '@sentry/core@7.120.3':
+ resolution: {integrity: sha512-vyy11fCGpkGK3qI5DSXOjgIboBZTriw0YDx/0KyX5CjIjDDNgp5AGgpgFkfZyiYiaU2Ww3iFuKo4wHmBusz1uA==}
+ engines: {node: '>=8'}
+
+ '@sentry/integrations@7.120.3':
+ resolution: {integrity: sha512-6i/lYp0BubHPDTg91/uxHvNui427df9r17SsIEXa2eKDwQ9gW2qRx5IWgvnxs2GV/GfSbwcx4swUB3RfEWrXrQ==}
+ engines: {node: '>=8'}
+
+ '@sentry/node@7.120.3':
+ resolution: {integrity: sha512-t+QtekZedEfiZjbkRAk1QWJPnJlFBH/ti96tQhEq7wmlk3VszDXraZvLWZA0P2vXyglKzbWRGkT31aD3/kX+5Q==}
+ engines: {node: '>=8'}
+
+ '@sentry/types@7.120.3':
+ resolution: {integrity: sha512-C4z+3kGWNFJ303FC+FxAd4KkHvxpNFYAFN8iMIgBwJdpIl25KZ8Q/VdGn0MLLUEHNLvjob0+wvwlcRBBNLXOow==}
+ engines: {node: '>=8'}
+
+ '@sentry/utils@7.120.3':
+ resolution: {integrity: sha512-UDAOQJtJDxZHQ5Nm1olycBIsz2wdGX8SdzyGVHmD8EOQYAeDZQyIlQYohDe9nazdIOQLZCIc3fU0G9gqVLkaGQ==}
+ engines: {node: '>=8'}
+
'@shikijs/core@1.23.1':
resolution: {integrity: sha512-NuOVgwcHgVC6jBVH5V7iblziw6iQbWWHrj5IlZI3Fqu2yx9awH7OIQkXIcsHsUmY19ckwSgUMgrqExEyP5A0TA==}
@@ -1470,6 +1528,9 @@ packages:
peerDependencies:
'@testing-library/dom': '>=7.21.4'
+ '@tootallnate/quickjs-emscripten@0.23.0':
+ resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==}
+
'@tsconfig/node10@1.0.11':
resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==}
@@ -1650,6 +1711,9 @@ packages:
'@types/yargs@17.0.33':
resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==}
+ '@types/yauzl@2.10.3':
+ resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
+
'@typescript-eslint/eslint-plugin@8.15.0':
resolution: {integrity: sha512-+zkm9AR1Ds9uLWN3fkoeXgFppaQ+uEVtfOV62dDmsy9QCNqlRHWNEck4yarvRNrvRcHQLGfqBNui3cimoz8XAg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -1835,6 +1899,10 @@ packages:
engines: {node: '>=0.4.0'}
hasBin: true
+ agent-base@7.1.3:
+ resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==}
+ engines: {node: '>= 14'}
+
agentkeepalive@4.6.0:
resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==}
engines: {node: '>= 8.0.0'}
@@ -1963,6 +2031,10 @@ packages:
ast-types-flow@0.0.8:
resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==}
+ ast-types@0.13.4:
+ resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==}
+ engines: {node: '>=4'}
+
ast-types@0.16.1:
resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==}
engines: {node: '>=4'}
@@ -1995,6 +2067,9 @@ packages:
resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
engines: {node: '>= 0.4'}
+ b4a@1.6.7:
+ resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==}
+
babel-jest@29.7.0:
resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -2023,6 +2098,31 @@ packages:
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+ bare-events@2.5.4:
+ resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==}
+
+ bare-fs@4.0.1:
+ resolution: {integrity: sha512-ilQs4fm/l9eMfWY2dY0WCIUplSUp7U0CT1vrqMg1MUdeZl4fypu5UP0XcDBK5WBQPJAKP1b7XEodISmekH/CEg==}
+ engines: {bare: '>=1.7.0'}
+
+ bare-os@3.4.0:
+ resolution: {integrity: sha512-9Ous7UlnKbe3fMi7Y+qh0DwAup6A1JkYgPnjvMDNOlmnxNRQvQ/7Nst+OnUQKzk0iAT0m9BisbDVp9gCv8+ETA==}
+ engines: {bare: '>=1.6.0'}
+
+ bare-path@3.0.0:
+ resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==}
+
+ bare-stream@2.6.4:
+ resolution: {integrity: sha512-G6i3A74FjNq4nVrrSTUz5h3vgXzBJnjmWAVlBWaZETkgu+LgKd7AiyOml3EDJY1AHlIbBHKDXE+TUT53Ff8OaA==}
+ peerDependencies:
+ bare-buffer: '*'
+ bare-events: '*'
+ peerDependenciesMeta:
+ bare-buffer:
+ optional: true
+ bare-events:
+ optional: true
+
base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
@@ -2030,6 +2130,10 @@ packages:
resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==}
engines: {node: ^4.5.0 || >= 5.9}
+ basic-ftp@5.0.5:
+ resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==}
+ engines: {node: '>=10.0.0'}
+
better-opn@3.0.2:
resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==}
engines: {node: '>=12.0.0'}
@@ -2070,6 +2174,9 @@ packages:
bser@2.1.1:
resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==}
+ buffer-crc32@0.2.13:
+ resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
+
buffer-from@1.1.2:
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
@@ -2173,10 +2280,20 @@ packages:
'@chromatic-com/playwright':
optional: true
+ chrome-launcher@1.1.2:
+ resolution: {integrity: sha512-YclTJey34KUm5jB1aEJCq807bSievi7Nb/TU4Gu504fUYi3jw3KCIaH6L7nFWQhdEgH3V+wCh+kKD1P5cXnfxw==}
+ engines: {node: '>=12.13.0'}
+ hasBin: true
+
chrome-trace-event@1.0.4:
resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==}
engines: {node: '>=6.0'}
+ chromium-bidi@0.11.0:
+ resolution: {integrity: sha512-6CJWHkNRoyZyjV9Rwv2lYONZf1Xm0IuDyNq97nwSsxxP3wf5Bwy15K5rOvVKMtJ127jJBmxFUanSAOjgFRxgrA==}
+ peerDependencies:
+ devtools-protocol: '*'
+
ci-info@3.9.0:
resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
engines: {node: '>=8'}
@@ -2269,6 +2386,10 @@ packages:
resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==}
engines: {'0': node >= 0.8}
+ configstore@5.0.1:
+ resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==}
+ engines: {node: '>=8'}
+
confusing-browser-globals@1.0.11:
resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==}
@@ -2332,6 +2453,13 @@ packages:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'}
+ crypto-random-string@2.0.0:
+ resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==}
+ engines: {node: '>=8'}
+
+ csp_evaluator@1.1.1:
+ resolution: {integrity: sha512-N3ASg0C4kNPUaNxt1XAvzHIVuzdtr8KLgfk1O8WDyimp1GisPAHESupArO2ieHk9QWbrJ/WkQODyh21Ps/xhxw==}
+
css.escape@1.5.1:
resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==}
@@ -2346,6 +2474,10 @@ packages:
damerau-levenshtein@1.0.8:
resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
+ data-uri-to-buffer@6.0.2:
+ resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==}
+ engines: {node: '>= 14'}
+
data-view-buffer@1.0.1:
resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==}
engines: {node: '>= 0.4'}
@@ -2383,6 +2515,18 @@ packages:
supports-color:
optional: true
+ debug@4.4.0:
+ resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decimal.js@10.4.3:
+ resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==}
+
dedent@1.5.3:
resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==}
peerDependencies:
@@ -2417,6 +2561,10 @@ packages:
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
engines: {node: '>= 0.4'}
+ degenerator@5.0.1:
+ resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==}
+ engines: {node: '>= 14'}
+
delayed-stream@1.0.0:
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
engines: {node: '>=0.4.0'}
@@ -2444,6 +2592,12 @@ packages:
devlop@1.1.0:
resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
+ devtools-protocol@0.0.1312386:
+ resolution: {integrity: sha512-DPnhUXvmvKT2dFA/j7B+riVLUt9Q6RKJlcppojL5CoRywJJKLDYnRlw0gTFKfgDPHP5E04UoB71SxoJlVZy8FA==}
+
+ devtools-protocol@0.0.1367902:
+ resolution: {integrity: sha512-XxtPuC3PGakY6PD7dG66/o8KwJ/LkH2/EKe19Dcw58w53dv4/vSQEkn/SzuyhHE2q4zPgCkxQBxus3VV4ql+Pg==}
+
dezalgo@1.0.4:
resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==}
@@ -2475,6 +2629,10 @@ packages:
dom-accessibility-api@0.6.3:
resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==}
+ dot-prop@5.3.0:
+ resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==}
+ engines: {node: '>=8'}
+
dotenv-expand@10.0.0:
resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==}
engines: {node: '>=12'}
@@ -2518,6 +2676,9 @@ packages:
resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
engines: {node: '>= 0.8'}
+ end-of-stream@1.4.4:
+ resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
+
engine.io-client@6.6.2:
resolution: {integrity: sha512-TAr+NKeoVTjEVW8P3iHguO1LO6RlUz9O5Y8o7EY0fU+gY1NYqas7NN3slpFtbXEsLMHk0h90fJMfKjRkQ0qUIw==}
@@ -2533,6 +2694,10 @@ packages:
resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==}
engines: {node: '>=10.13.0'}
+ enquirer@2.4.1:
+ resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==}
+ engines: {node: '>=8.6'}
+
entities@4.5.0:
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
engines: {node: '>=0.12'}
@@ -2608,6 +2773,11 @@ packages:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
+ escodegen@2.1.0:
+ resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==}
+ engines: {node: '>=6.0'}
+ hasBin: true
+
eslint-config-airbnb-base@15.0.0:
resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==}
engines: {node: ^10.12.0 || >=12.0.0}
@@ -2826,12 +2996,20 @@ packages:
resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
engines: {node: '>=4'}
+ extract-zip@2.0.1:
+ resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==}
+ engines: {node: '>= 10.17.0'}
+ hasBin: true
+
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
fast-diff@1.3.0:
resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==}
+ fast-fifo@1.3.2:
+ resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==}
+
fast-glob@3.3.2:
resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
engines: {node: '>=8.6.0'}
@@ -2851,6 +3029,9 @@ packages:
fb-watchman@2.0.2:
resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==}
+ fd-slicer@1.1.0:
+ resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==}
+
fdir@6.4.2:
resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==}
peerDependencies:
@@ -3007,6 +3188,10 @@ packages:
resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==}
engines: {node: '>=8.0.0'}
+ get-stream@5.2.0:
+ resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==}
+ engines: {node: '>=8'}
+
get-stream@6.0.1:
resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
engines: {node: '>=10'}
@@ -3015,6 +3200,10 @@ packages:
resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==}
engines: {node: '>= 0.4'}
+ get-uri@6.0.4:
+ resolution: {integrity: sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==}
+ engines: {node: '>= 14'}
+
glob-parent@5.1.2:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
engines: {node: '>= 6'}
@@ -3124,6 +3313,18 @@ packages:
resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
engines: {node: '>= 0.8'}
+ http-link-header@1.1.3:
+ resolution: {integrity: sha512-3cZ0SRL8fb9MUlU3mKM61FcQvPfXx2dBrZW3Vbg5CXa8jFlK8OaEpePenLe1oEXQduhz8b0QjsqfS59QP4AJDQ==}
+ engines: {node: '>=6.0.0'}
+
+ http-proxy-agent@7.0.2:
+ resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
+ engines: {node: '>= 14'}
+
+ https-proxy-agent@7.0.6:
+ resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}
+ engines: {node: '>= 14'}
+
human-signals@2.1.0:
resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
engines: {node: '>=10.17.0'}
@@ -3142,6 +3343,12 @@ packages:
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
engines: {node: '>= 4'}
+ image-ssim@0.2.0:
+ resolution: {integrity: sha512-W7+sO6/yhxy83L0G7xR8YAc5Z5QFtYEXXRV6EaE8tuYBZJnA3gVgp3q7X7muhLZVodeb9UfvjSbwt9VJwjIYAg==}
+
+ immediate@3.0.6:
+ resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==}
+
import-fresh@3.3.0:
resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
engines: {node: '>=6'}
@@ -3178,6 +3385,9 @@ packages:
resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==}
engines: {node: '>= 0.4'}
+ intl-messageformat@10.7.14:
+ resolution: {integrity: sha512-mMGnE4E1otdEutV5vLUdCxRJygHB5ozUBxsPB5qhitewssrS/qGruq9bmvIRkkGsNeK5ZWLfYRld18UHGTIifQ==}
+
ioredis-mock@8.9.0:
resolution: {integrity: sha512-yIglcCkI1lvhwJVoMsR51fotZVsPsSk07ecTCgRTRlicG0Vq3lke6aAaHklyjmRNRsdYAgswqC2A0bPtQK4LSw==}
engines: {node: '>=12.22'}
@@ -3189,6 +3399,10 @@ packages:
resolution: {integrity: sha512-2YZsvl7jopIa1gaePkeMtd9rAcSjOOjPtpcLlOeusyO+XH2SK5ZcT+UCrElPP+WVIInh2TzeI4XW9ENaSLVVHA==}
engines: {node: '>=12.22.0'}
+ ip-address@9.0.5:
+ resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==}
+ engines: {node: '>= 12'}
+
ipaddr.js@1.9.1:
resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
engines: {node: '>= 0.10'}
@@ -3283,6 +3497,10 @@ packages:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
+ is-obj@2.0.0:
+ resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==}
+ engines: {node: '>=8'}
+
is-path-inside@3.0.3:
resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
engines: {node: '>=8'}
@@ -3315,6 +3533,9 @@ packages:
resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==}
engines: {node: '>= 0.4'}
+ is-typedarray@1.0.0:
+ resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==}
+
is-unicode-supported@0.1.0:
resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
engines: {node: '>=10'}
@@ -3524,6 +3745,13 @@ packages:
resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==}
engines: {node: '>=10'}
+ jpeg-js@0.4.4:
+ resolution: {integrity: sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==}
+
+ js-library-detector@6.7.0:
+ resolution: {integrity: sha512-c80Qupofp43y4cJ7+8TTDN/AsDwLi5oOm/plBrWI+iQt485vKXCco+yVmOwEgdo9VOdsYTuV0UlTeetVPTriXA==}
+ engines: {node: '>=12'}
+
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
@@ -3535,6 +3763,9 @@ packages:
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
hasBin: true
+ jsbn@1.1.0:
+ resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==}
+
jsdoc-type-pratt-parser@4.1.0:
resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==}
engines: {node: '>=12.0.0'}
@@ -3603,6 +3834,20 @@ packages:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
+ lie@3.1.1:
+ resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==}
+
+ lighthouse-logger@2.0.1:
+ resolution: {integrity: sha512-ioBrW3s2i97noEmnXxmUq7cjIcVRjT5HBpAYy8zE11CxU9HqlWHHeRxfeN1tn8F7OEMVPIC9x1f8t3Z7US9ehQ==}
+
+ lighthouse-stack-packs@1.12.2:
+ resolution: {integrity: sha512-Ug8feS/A+92TMTCK6yHYLwaFMuelK/hAKRMdldYkMNwv+d9PtWxjXEg6rwKtsUXTADajhdrhXyuNCJ5/sfmPFw==}
+
+ lighthouse@12.3.0:
+ resolution: {integrity: sha512-OaLE8DasnwQkn2CBo2lKtD+IQv42mNP3T+Vaw29I++rAh0Zpgc6SM15usdIYyzhRMR5EWFxze5Fyb+HENJSh2A==}
+ engines: {node: '>=18.16'}
+ hasBin: true
+
lilconfig@2.1.0:
resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
engines: {node: '>=10'}
@@ -3625,6 +3870,9 @@ packages:
resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==}
engines: {node: '>=6.11.5'}
+ localforage@1.10.0:
+ resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==}
+
locate-path@5.0.0:
resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
engines: {node: '>=8'}
@@ -3633,6 +3881,9 @@ packages:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'}
+ lodash-es@4.17.21:
+ resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
+
lodash.defaults@4.2.0:
resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==}
@@ -3655,6 +3906,9 @@ packages:
resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
engines: {node: '>=10'}
+ lookup-closest-locale@6.2.0:
+ resolution: {integrity: sha512-/c2kL+Vnp1jnV6K6RpDTHK3dgg0Tu2VVp+elEiJpjfS1UyY7AjOYHohRug6wT0OpoX2qFgNORndE9RqesfVxWQ==}
+
loose-envify@1.4.0:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
@@ -3668,6 +3922,10 @@ packages:
lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+ lru-cache@7.18.3:
+ resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==}
+ engines: {node: '>=12'}
+
lunr@2.3.9:
resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==}
@@ -3686,6 +3944,10 @@ packages:
resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==}
engines: {node: '>=12'}
+ make-dir@3.1.0:
+ resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
+ engines: {node: '>=8'}
+
make-dir@4.0.0:
resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
engines: {node: '>=10'}
@@ -3703,6 +3965,9 @@ packages:
resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==}
hasBin: true
+ marky@1.2.5:
+ resolution: {integrity: sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==}
+
mdast-util-to-hast@13.2.0:
resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==}
@@ -3730,6 +3995,9 @@ packages:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
+ metaviewport-parser@0.3.0:
+ resolution: {integrity: sha512-EoYJ8xfjQ6kpe9VbVHvZTZHiOl4HL1Z18CrZ+qahvLXT7ZO4YTC2JMyt5FaUp9JJp6J4Ybb/z7IsCXZt86/QkQ==}
+
methods@1.1.2:
resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
engines: {node: '>= 0.6'}
@@ -3797,6 +4065,9 @@ packages:
resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
engines: {node: '>=16 || 14 >=14.17'}
+ mitt@3.0.1:
+ resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
+
mkdirp@0.5.6:
resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
hasBin: true
@@ -3836,6 +4107,10 @@ packages:
neo-async@2.6.2:
resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
+ netmask@2.0.2:
+ resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==}
+ engines: {node: '>= 0.4.0'}
+
node-abort-controller@3.1.1:
resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==}
@@ -3974,6 +4249,14 @@ packages:
resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
engines: {node: '>=6'}
+ pac-proxy-agent@7.1.0:
+ resolution: {integrity: sha512-Z5FnLVVZSnX7WjBg0mhDtydeRZ1xMcATZThjySQUHqr+0ksP8kqaw23fNKkaaN/Z8gwLUs/W7xdl0I75eP2Xyw==}
+ engines: {node: '>= 14'}
+
+ pac-resolver@7.0.1:
+ resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==}
+ engines: {node: '>= 14'}
+
package-json-from-dist@1.0.1:
resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
@@ -3981,6 +4264,9 @@ packages:
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
engines: {node: '>=6'}
+ parse-cache-control@1.0.1:
+ resolution: {integrity: sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==}
+
parse-json@5.2.0:
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
engines: {node: '>=8'}
@@ -4025,6 +4311,9 @@ packages:
resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==}
engines: {node: '>= 14.16'}
+ pend@1.2.0:
+ resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==}
+
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
@@ -4057,11 +4346,31 @@ packages:
engines: {node: '>=18'}
hasBin: true
+ playwright-core@1.49.1:
+ resolution: {integrity: sha512-BzmpVcs4kE2CH15rWfzpjzVGhWERJfmnXmniSyKeRZUs9Ws65m+RGIi7mjJK/euCegfn3i7jvqWeWyHe9y3Vgg==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ playwright-lighthouse@4.0.0:
+ resolution: {integrity: sha512-8sLhKLYD9k08UjKMSPzYBCZZ6Ct+wZPUe+K58hZEHIdyyXHg+jniWgd+C2W57B+MDstHiYSbyBiN9S8mzUH82w==}
+ engines: {node: '>=16.x'}
+ peerDependencies:
+ lighthouse: '>= 10.0.0'
+ playwright-core: ^1.19.2
+ peerDependenciesMeta:
+ playwright-core:
+ optional: true
+
playwright@1.49.0:
resolution: {integrity: sha512-eKpmys0UFDnfNb3vfsf8Vx2LEOtflgRebl0Im2eQQnYMA4Aqd+Zw8bEOB+7ZKvN76901mRnqdsiOGKxzVTbi7A==}
engines: {node: '>=18'}
hasBin: true
+ playwright@1.49.1:
+ resolution: {integrity: sha512-VYL8zLoNTBxVOrJBbDuRgDWa3i+mfQgDTrL8Ah9QXZ7ax4Dsj0MSq5bYgytRnDVVe+njoKnfsYkH3HzqVj5UZA==}
+ engines: {node: '>=18'}
+ hasBin: true
+
pluralize@8.0.0:
resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
engines: {node: '>=4'}
@@ -4220,6 +4529,10 @@ packages:
resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
engines: {node: '>= 0.6.0'}
+ progress@2.0.3:
+ resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
+ engines: {node: '>=0.4.0'}
+
prompts@2.4.2:
resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
engines: {node: '>= 6'}
@@ -4234,9 +4547,16 @@ packages:
resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
engines: {node: '>= 0.10'}
+ proxy-agent@6.5.0:
+ resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==}
+ engines: {node: '>= 14'}
+
proxy-from-env@1.1.0:
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
+ pump@3.0.2:
+ resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==}
+
punycode.js@2.3.1:
resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==}
engines: {node: '>=6'}
@@ -4245,6 +4565,10 @@ packages:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
+ puppeteer-core@23.11.1:
+ resolution: {integrity: sha512-3HZ2/7hdDKZvZQ7dhhITOUg4/wOrDRjyK2ZBllRB0ZCOi9u0cwq1ACHDjBB+nX+7+kltHjQvBRdeY7+W0T+7Gg==}
+ engines: {node: '>=18'}
+
pure-rand@6.1.0:
resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==}
@@ -4259,6 +4583,9 @@ packages:
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+ queue-tick@1.0.1:
+ resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==}
+
randombytes@2.1.0:
resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
@@ -4430,6 +4757,10 @@ packages:
deprecated: Rimraf versions prior to v4 are no longer supported
hasBin: true
+ robots-parser@3.0.1:
+ resolution: {integrity: sha512-s+pyvQeIKIZ0dx5iJiQk1tPLJAWln39+MI5jtM8wnyws+G5azk+dMnMX0qfbqNetKKNgcWWOdi0sfm+FbQbgdQ==}
+ engines: {node: '>=10.0.0'}
+
rollup-plugin-visualizer@5.14.0:
resolution: {integrity: sha512-VlDXneTDaKsHIw8yzJAFWtrzguoJ/LnQ+lMpoVfYJ3jJF4Ihe5oYLAqLklIK/35lgUY+1yEzCkHyZ1j4A5w5fA==}
engines: {node: '>=18'}
@@ -4486,6 +4817,10 @@ packages:
resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==}
engines: {node: '>= 10.13.0'}
+ semver@5.7.2:
+ resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
+ hasBin: true
+
semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
@@ -4549,6 +4884,10 @@ packages:
resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
engines: {node: '>=8'}
+ smart-buffer@4.2.0:
+ resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
+ engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
+
socket.io-adapter@2.5.5:
resolution: {integrity: sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==}
@@ -4568,6 +4907,14 @@ packages:
resolution: {integrity: sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==}
engines: {node: '>=10.2.0'}
+ socks-proxy-agent@8.0.5:
+ resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==}
+ engines: {node: '>= 14'}
+
+ socks@2.8.3:
+ resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==}
+ engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
+
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
@@ -4593,6 +4940,10 @@ packages:
space-separated-tokens@2.0.2:
resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
+ speedline-core@1.4.3:
+ resolution: {integrity: sha512-DI7/OuAUD+GMpR6dmu8lliO2Wg5zfeh+/xsdyJZCzd8o5JgFUjCeLsBDuZjIQJdwXS3J0L/uZYrELKYqx+PXog==}
+ engines: {node: '>=8.0'}
+
sprintf-js@1.0.3:
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
@@ -4629,6 +4980,9 @@ packages:
resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
engines: {node: '>=10.0.0'}
+ streamx@2.21.1:
+ resolution: {integrity: sha512-PhP9wUnFLa+91CPy3N6tiQsK+gnYyUNuk15S3YG/zjYE7RuPeCjJngqnzpC31ow0lzBHQ+QGO4cNJnd0djYUsw==}
+
string-length@4.0.2:
resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==}
engines: {node: '>=10'}
@@ -4754,6 +5108,12 @@ packages:
resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
engines: {node: '>=6'}
+ tar-fs@3.0.8:
+ resolution: {integrity: sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg==}
+
+ tar-stream@3.1.7:
+ resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==}
+
terser-webpack-plugin@5.3.10:
resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==}
engines: {node: '>= 10.13.0'}
@@ -4779,6 +5139,9 @@ packages:
resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==}
engines: {node: '>=8'}
+ text-decoder@1.2.3:
+ resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==}
+
text-table@0.2.0:
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
@@ -4789,6 +5152,12 @@ packages:
thenify@3.3.1:
resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
+ third-party-web@0.26.2:
+ resolution: {integrity: sha512-taJ0Us0lKoYBqcbccMuDElSUPOxmBfwlHe1OkHQ3KFf+RwovvBHdXhbFk9XJVQE2vHzxbTwvwg5GFsT9hbDokQ==}
+
+ third-party-web@0.26.3:
+ resolution: {integrity: sha512-iXh4wFZdR6JaC67UTAaslS/x7WPw2KsVd2IX3/ujvnx+e/+kByau8Ap5JYzDQH8+HIXPDv+Uc1KvisuUSlfggg==}
+
through@2.3.8:
resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
@@ -4817,6 +5186,12 @@ packages:
resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==}
engines: {node: '>=14.0.0'}
+ tldts-core@6.1.74:
+ resolution: {integrity: sha512-gTwtY6L2GfuxiL4CWpLknv9JDYYqBvKCk/BT5uAaAvCA0s6pzX7lr2IrkQZSUlnSjRHIjTl8ZwKCVXJ7XNRWYw==}
+
+ tldts-icann@6.1.74:
+ resolution: {integrity: sha512-v8pT30geByIeKzU8rbAGEhMx/mJQIJhkt1mE286IyEAvZNzqcyQIumW96syfHVio/L7Eq6y8Q5YVQRw0uVyqaQ==}
+
tmp@0.0.33:
resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
engines: {node: '>=0.6.0'}
@@ -4982,6 +5357,12 @@ packages:
resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==}
engines: {node: '>= 0.4'}
+ typed-query-selector@2.12.0:
+ resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==}
+
+ typedarray-to-buffer@3.1.5:
+ resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==}
+
typedarray@0.0.6:
resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
@@ -5012,6 +5393,10 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
+ ua-parser-js@1.0.40:
+ resolution: {integrity: sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew==}
+ hasBin: true
+
uc.micro@2.1.0:
resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==}
@@ -5026,12 +5411,19 @@ packages:
unbox-primitive@1.0.2:
resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
+ unbzip2-stream@1.4.3:
+ resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==}
+
undici-types@5.26.5:
resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
undici-types@6.19.8:
resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
+ unique-string@2.0.0:
+ resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==}
+ engines: {node: '>=8'}
+
unist-util-is@6.0.0:
resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==}
@@ -5255,10 +5647,25 @@ packages:
wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+ write-file-atomic@3.0.3:
+ resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==}
+
write-file-atomic@4.0.2:
resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+ ws@7.5.10:
+ resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==}
+ engines: {node: '>=8.3.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
ws@8.17.1:
resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==}
engines: {node: '>=10.0.0'}
@@ -5283,6 +5690,10 @@ packages:
utf-8-validate:
optional: true
+ xdg-basedir@4.0.0:
+ resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==}
+ engines: {node: '>=8'}
+
xmlhttprequest-ssl@2.1.2:
resolution: {integrity: sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==}
engines: {node: '>=0.4.0'}
@@ -5311,6 +5722,9 @@ packages:
resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
engines: {node: '>=12'}
+ yauzl@2.10.0:
+ resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==}
+
yn@3.1.1:
resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
engines: {node: '>=6'}
@@ -5319,6 +5733,9 @@ packages:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
+ zod@3.23.8:
+ resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==}
+
zustand@5.0.1:
resolution: {integrity: sha512-pRET7Lao2z+n5R/HduXMio35TncTlSW68WsYBq2Lg1ASspsNGjpwLAsij3RpouyV6+kHMwwwzP0bZPD70/Jx/w==}
engines: {node: '>=12.20.0'}
@@ -5805,6 +6222,32 @@ snapshots:
dependencies:
levn: 0.4.1
+ '@formatjs/ecma402-abstract@2.3.2':
+ dependencies:
+ '@formatjs/fast-memoize': 2.2.6
+ '@formatjs/intl-localematcher': 0.5.10
+ decimal.js: 10.4.3
+ tslib: 2.8.1
+
+ '@formatjs/fast-memoize@2.2.6':
+ dependencies:
+ tslib: 2.8.1
+
+ '@formatjs/icu-messageformat-parser@2.11.0':
+ dependencies:
+ '@formatjs/ecma402-abstract': 2.3.2
+ '@formatjs/icu-skeleton-parser': 1.8.12
+ tslib: 2.8.1
+
+ '@formatjs/icu-skeleton-parser@1.8.12':
+ dependencies:
+ '@formatjs/ecma402-abstract': 2.3.2
+ tslib: 2.8.1
+
+ '@formatjs/intl-localematcher@0.5.10':
+ dependencies:
+ tslib: 2.8.1
+
'@humanfs/core@0.19.1': {}
'@humanfs/node@0.16.6':
@@ -6204,6 +6647,10 @@ snapshots:
transitivePeerDependencies:
- encoding
+ '@paulirish/trace_engine@0.0.39':
+ dependencies:
+ third-party-web: 0.26.3
+
'@pkgjs/parseargs@0.11.0':
optional: true
@@ -6213,6 +6660,24 @@ snapshots:
dependencies:
playwright: 1.49.0
+ '@playwright/test@1.49.1':
+ dependencies:
+ playwright: 1.49.1
+
+ '@puppeteer/browsers@2.6.1':
+ dependencies:
+ debug: 4.4.0
+ extract-zip: 2.0.1
+ progress: 2.0.3
+ proxy-agent: 6.5.0
+ semver: 7.6.3
+ tar-fs: 3.0.8
+ unbzip2-stream: 1.4.3
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - bare-buffer
+ - supports-color
+
'@remix-run/router@1.21.0': {}
'@rollup/pluginutils@5.1.3(rollup@4.27.3)':
@@ -6279,6 +6744,38 @@ snapshots:
'@rtsao/scc@1.1.0': {}
+ '@sentry-internal/tracing@7.120.3':
+ dependencies:
+ '@sentry/core': 7.120.3
+ '@sentry/types': 7.120.3
+ '@sentry/utils': 7.120.3
+
+ '@sentry/core@7.120.3':
+ dependencies:
+ '@sentry/types': 7.120.3
+ '@sentry/utils': 7.120.3
+
+ '@sentry/integrations@7.120.3':
+ dependencies:
+ '@sentry/core': 7.120.3
+ '@sentry/types': 7.120.3
+ '@sentry/utils': 7.120.3
+ localforage: 1.10.0
+
+ '@sentry/node@7.120.3':
+ dependencies:
+ '@sentry-internal/tracing': 7.120.3
+ '@sentry/core': 7.120.3
+ '@sentry/integrations': 7.120.3
+ '@sentry/types': 7.120.3
+ '@sentry/utils': 7.120.3
+
+ '@sentry/types@7.120.3': {}
+
+ '@sentry/utils@7.120.3':
+ dependencies:
+ '@sentry/types': 7.120.3
+
'@shikijs/core@1.23.1':
dependencies:
'@shikijs/engine-javascript': 1.23.1
@@ -6576,6 +7073,8 @@ snapshots:
dependencies:
'@testing-library/dom': 10.4.0
+ '@tootallnate/quickjs-emscripten@0.23.0': {}
+
'@tsconfig/node10@1.0.11': {}
'@tsconfig/node12@1.0.11': {}
@@ -6800,6 +7299,11 @@ snapshots:
dependencies:
'@types/yargs-parser': 21.0.3
+ '@types/yauzl@2.10.3':
+ dependencies:
+ '@types/node': 22.9.1
+ optional: true
+
'@typescript-eslint/eslint-plugin@8.15.0(@typescript-eslint/parser@8.15.0(eslint@8.57.1)(typescript@5.6.3))(eslint@8.57.1)(typescript@5.6.3)':
dependencies:
'@eslint-community/regexpp': 4.12.1
@@ -7111,6 +7615,8 @@ snapshots:
acorn@8.14.0: {}
+ agent-base@7.1.3: {}
+
agentkeepalive@4.6.0:
dependencies:
humanize-ms: 1.2.1
@@ -7255,6 +7761,10 @@ snapshots:
ast-types-flow@0.0.8: {}
+ ast-types@0.13.4:
+ dependencies:
+ tslib: 2.8.1
+
ast-types@0.16.1:
dependencies:
tslib: 2.8.1
@@ -7289,6 +7799,8 @@ snapshots:
axobject-query@4.1.0: {}
+ b4a@1.6.7: {}
+
babel-jest@29.7.0(@babel/core@7.26.0):
dependencies:
'@babel/core': 7.26.0
@@ -7346,10 +7858,39 @@ snapshots:
balanced-match@1.0.2: {}
+ bare-events@2.5.4:
+ optional: true
+
+ bare-fs@4.0.1:
+ dependencies:
+ bare-events: 2.5.4
+ bare-path: 3.0.0
+ bare-stream: 2.6.4(bare-events@2.5.4)
+ transitivePeerDependencies:
+ - bare-buffer
+ optional: true
+
+ bare-os@3.4.0:
+ optional: true
+
+ bare-path@3.0.0:
+ dependencies:
+ bare-os: 3.4.0
+ optional: true
+
+ bare-stream@2.6.4(bare-events@2.5.4):
+ dependencies:
+ streamx: 2.21.1
+ optionalDependencies:
+ bare-events: 2.5.4
+ optional: true
+
base64-js@1.5.1: {}
base64id@2.0.0: {}
+ basic-ftp@5.0.5: {}
+
better-opn@3.0.2:
dependencies:
open: 8.4.2
@@ -7409,6 +7950,8 @@ snapshots:
dependencies:
node-int64: 0.4.0
+ buffer-crc32@0.2.13: {}
+
buffer-from@1.1.2: {}
buffer@5.7.1:
@@ -7497,8 +8040,23 @@ snapshots:
chromatic@11.18.1: {}
+ chrome-launcher@1.1.2:
+ dependencies:
+ '@types/node': 22.9.1
+ escape-string-regexp: 4.0.0
+ is-wsl: 2.2.0
+ lighthouse-logger: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
chrome-trace-event@1.0.4: {}
+ chromium-bidi@0.11.0(devtools-protocol@0.0.1367902):
+ dependencies:
+ devtools-protocol: 0.0.1367902
+ mitt: 3.0.1
+ zod: 3.23.8
+
ci-info@3.9.0: {}
cjs-module-lexer@1.4.1: {}
@@ -7576,6 +8134,15 @@ snapshots:
readable-stream: 2.3.8
typedarray: 0.0.6
+ configstore@5.0.1:
+ dependencies:
+ dot-prop: 5.3.0
+ graceful-fs: 4.2.11
+ make-dir: 3.1.0
+ unique-string: 2.0.0
+ write-file-atomic: 3.0.3
+ xdg-basedir: 4.0.0
+
confusing-browser-globals@1.0.11: {}
consola@2.15.3: {}
@@ -7637,6 +8204,10 @@ snapshots:
shebang-command: 2.0.0
which: 2.0.2
+ crypto-random-string@2.0.0: {}
+
+ csp_evaluator@1.1.1: {}
+
css.escape@1.5.1: {}
cssesc@3.0.0: {}
@@ -7645,6 +8216,8 @@ snapshots:
damerau-levenshtein@1.0.8: {}
+ data-uri-to-buffer@6.0.2: {}
+
data-view-buffer@1.0.1:
dependencies:
call-bind: 1.0.7
@@ -7675,6 +8248,12 @@ snapshots:
dependencies:
ms: 2.1.3
+ debug@4.4.0:
+ dependencies:
+ ms: 2.1.3
+
+ decimal.js@10.4.3: {}
+
dedent@1.5.3: {}
deep-eql@5.0.2: {}
@@ -7701,6 +8280,12 @@ snapshots:
has-property-descriptors: 1.0.2
object-keys: 1.1.1
+ degenerator@5.0.1:
+ dependencies:
+ ast-types: 0.13.4
+ escodegen: 2.1.0
+ esprima: 4.0.1
+
delayed-stream@1.0.0: {}
denque@2.1.0: {}
@@ -7717,6 +8302,10 @@ snapshots:
dependencies:
dequal: 2.0.3
+ devtools-protocol@0.0.1312386: {}
+
+ devtools-protocol@0.0.1367902: {}
+
dezalgo@1.0.4:
dependencies:
asap: 2.0.6
@@ -7742,6 +8331,10 @@ snapshots:
dom-accessibility-api@0.6.3: {}
+ dot-prop@5.3.0:
+ dependencies:
+ is-obj: 2.0.0
+
dotenv-expand@10.0.0: {}
dotenv@16.4.5: {}
@@ -7768,6 +8361,10 @@ snapshots:
encodeurl@2.0.0: {}
+ end-of-stream@1.4.4:
+ dependencies:
+ once: 1.4.0
+
engine.io-client@6.6.2:
dependencies:
'@socket.io/component-emitter': 3.1.2
@@ -7804,6 +8401,11 @@ snapshots:
graceful-fs: 4.2.11
tapable: 2.2.1
+ enquirer@2.4.1:
+ dependencies:
+ ansi-colors: 4.1.3
+ strip-ansi: 6.0.1
+
entities@4.5.0: {}
error-ex@1.3.2:
@@ -7975,6 +8577,14 @@ snapshots:
escape-string-regexp@4.0.0: {}
+ escodegen@2.1.0:
+ dependencies:
+ esprima: 4.0.1
+ estraverse: 5.3.0
+ esutils: 2.0.3
+ optionalDependencies:
+ source-map: 0.6.1
+
eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.15.0(eslint@9.15.0(jiti@1.21.6))(typescript@5.6.3))(eslint@9.15.0(jiti@1.21.6)))(eslint@9.15.0(jiti@1.21.6)):
dependencies:
confusing-browser-globals: 1.0.11
@@ -8347,10 +8957,22 @@ snapshots:
iconv-lite: 0.4.24
tmp: 0.0.33
+ extract-zip@2.0.1:
+ dependencies:
+ debug: 4.4.0
+ get-stream: 5.2.0
+ yauzl: 2.10.0
+ optionalDependencies:
+ '@types/yauzl': 2.10.3
+ transitivePeerDependencies:
+ - supports-color
+
fast-deep-equal@3.1.3: {}
fast-diff@1.3.0: {}
+ fast-fifo@1.3.2: {}
+
fast-glob@3.3.2:
dependencies:
'@nodelib/fs.stat': 2.0.5
@@ -8373,6 +8995,10 @@ snapshots:
dependencies:
bser: 2.1.1
+ fd-slicer@1.1.0:
+ dependencies:
+ pend: 1.2.0
+
fdir@6.4.2(picomatch@4.0.2):
optionalDependencies:
picomatch: 4.0.2
@@ -8538,6 +9164,10 @@ snapshots:
get-package-type@0.1.0: {}
+ get-stream@5.2.0:
+ dependencies:
+ pump: 3.0.2
+
get-stream@6.0.1: {}
get-symbol-description@1.0.2:
@@ -8546,6 +9176,14 @@ snapshots:
es-errors: 1.3.0
get-intrinsic: 1.2.4
+ get-uri@6.0.4:
+ dependencies:
+ basic-ftp: 5.0.5
+ data-uri-to-buffer: 6.0.2
+ debug: 4.4.0
+ transitivePeerDependencies:
+ - supports-color
+
glob-parent@5.1.2:
dependencies:
is-glob: 4.0.3
@@ -8665,6 +9303,22 @@ snapshots:
statuses: 2.0.1
toidentifier: 1.0.1
+ http-link-header@1.1.3: {}
+
+ http-proxy-agent@7.0.2:
+ dependencies:
+ agent-base: 7.1.3
+ debug: 4.4.0
+ transitivePeerDependencies:
+ - supports-color
+
+ https-proxy-agent@7.0.6:
+ dependencies:
+ agent-base: 7.1.3
+ debug: 4.4.0
+ transitivePeerDependencies:
+ - supports-color
+
human-signals@2.1.0: {}
humanize-ms@1.2.1:
@@ -8679,6 +9333,10 @@ snapshots:
ignore@5.3.2: {}
+ image-ssim@0.2.0: {}
+
+ immediate@3.0.6: {}
+
import-fresh@3.3.0:
dependencies:
parent-module: 1.0.1
@@ -8742,6 +9400,13 @@ snapshots:
hasown: 2.0.2
side-channel: 1.0.6
+ intl-messageformat@10.7.14:
+ dependencies:
+ '@formatjs/ecma402-abstract': 2.3.2
+ '@formatjs/fast-memoize': 2.2.6
+ '@formatjs/icu-messageformat-parser': 2.11.0
+ tslib: 2.8.1
+
ioredis-mock@8.9.0(@types/ioredis-mock@8.2.5)(ioredis@5.4.1):
dependencies:
'@ioredis/as-callback': 3.0.0
@@ -8766,6 +9431,11 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ ip-address@9.0.5:
+ dependencies:
+ jsbn: 1.1.0
+ sprintf-js: 1.1.3
+
ipaddr.js@1.9.1: {}
is-arguments@1.1.1:
@@ -8843,6 +9513,8 @@ snapshots:
is-number@7.0.0: {}
+ is-obj@2.0.0: {}
+
is-path-inside@3.0.3: {}
is-regex@1.1.4:
@@ -8870,6 +9542,8 @@ snapshots:
dependencies:
which-typed-array: 1.1.15
+ is-typedarray@1.0.0: {}
+
is-unicode-supported@0.1.0: {}
is-weakmap@2.0.2: {}
@@ -9276,6 +9950,10 @@ snapshots:
joycon@3.1.1: {}
+ jpeg-js@0.4.4: {}
+
+ js-library-detector@6.7.0: {}
+
js-tokens@4.0.0: {}
js-yaml@3.14.1:
@@ -9287,6 +9965,8 @@ snapshots:
dependencies:
argparse: 2.0.1
+ jsbn@1.1.0: {}
+
jsdoc-type-pratt-parser@4.1.0: {}
jsesc@3.0.2: {}
@@ -9343,6 +10023,55 @@ snapshots:
prelude-ls: 1.2.1
type-check: 0.4.0
+ lie@3.1.1:
+ dependencies:
+ immediate: 3.0.6
+
+ lighthouse-logger@2.0.1:
+ dependencies:
+ debug: 2.6.9
+ marky: 1.2.5
+ transitivePeerDependencies:
+ - supports-color
+
+ lighthouse-stack-packs@1.12.2: {}
+
+ lighthouse@12.3.0:
+ dependencies:
+ '@paulirish/trace_engine': 0.0.39
+ '@sentry/node': 7.120.3
+ axe-core: 4.10.2
+ chrome-launcher: 1.1.2
+ configstore: 5.0.1
+ csp_evaluator: 1.1.1
+ devtools-protocol: 0.0.1312386
+ enquirer: 2.4.1
+ http-link-header: 1.1.3
+ intl-messageformat: 10.7.14
+ jpeg-js: 0.4.4
+ js-library-detector: 6.7.0
+ lighthouse-logger: 2.0.1
+ lighthouse-stack-packs: 1.12.2
+ lodash-es: 4.17.21
+ lookup-closest-locale: 6.2.0
+ metaviewport-parser: 0.3.0
+ open: 8.4.2
+ parse-cache-control: 1.0.1
+ puppeteer-core: 23.11.1
+ robots-parser: 3.0.1
+ semver: 5.7.2
+ speedline-core: 1.4.3
+ third-party-web: 0.26.2
+ tldts-icann: 6.1.74
+ ws: 7.5.10
+ yargs: 17.7.2
+ yargs-parser: 21.1.1
+ transitivePeerDependencies:
+ - bare-buffer
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
lilconfig@2.1.0: {}
lilconfig@3.1.2: {}
@@ -9357,6 +10086,10 @@ snapshots:
loader-runner@4.3.0: {}
+ localforage@1.10.0:
+ dependencies:
+ lie: 3.1.1
+
locate-path@5.0.0:
dependencies:
p-locate: 4.1.0
@@ -9365,6 +10098,8 @@ snapshots:
dependencies:
p-locate: 5.0.0
+ lodash-es@4.17.21: {}
+
lodash.defaults@4.2.0: {}
lodash.isarguments@3.1.0: {}
@@ -9382,6 +10117,8 @@ snapshots:
chalk: 4.1.2
is-unicode-supported: 0.1.0
+ lookup-closest-locale@6.2.0: {}
+
loose-envify@1.4.0:
dependencies:
js-tokens: 4.0.0
@@ -9394,6 +10131,8 @@ snapshots:
dependencies:
yallist: 3.1.1
+ lru-cache@7.18.3: {}
+
lunr@2.3.9: {}
lz-string@1.5.0: {}
@@ -9410,6 +10149,10 @@ snapshots:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.0
+ make-dir@3.1.0:
+ dependencies:
+ semver: 6.3.1
+
make-dir@4.0.0:
dependencies:
semver: 7.6.3
@@ -9431,6 +10174,8 @@ snapshots:
punycode.js: 2.3.1
uc.micro: 2.1.0
+ marky@1.2.5: {}
+
mdast-util-to-hast@13.2.0:
dependencies:
'@types/hast': 3.0.4
@@ -9461,6 +10206,8 @@ snapshots:
merge2@1.4.1: {}
+ metaviewport-parser@0.3.0: {}
+
methods@1.1.2: {}
micromark-util-character@2.1.1:
@@ -9515,6 +10262,8 @@ snapshots:
minipass@7.1.2: {}
+ mitt@3.0.1: {}
+
mkdirp@0.5.6:
dependencies:
minimist: 1.2.8
@@ -9551,6 +10300,8 @@ snapshots:
neo-async@2.6.2: {}
+ netmask@2.0.2: {}
+
node-abort-controller@3.1.1: {}
node-domexception@1.0.0: {}
@@ -9641,7 +10392,7 @@ snapshots:
is-docker: 2.2.1
is-wsl: 2.2.0
- openai@4.82.0(ws@8.18.0):
+ openai@4.82.0(ws@8.18.0)(zod@3.23.8):
dependencies:
'@types/node': 18.19.75
'@types/node-fetch': 2.6.12
@@ -9652,6 +10403,7 @@ snapshots:
node-fetch: 2.7.0
optionalDependencies:
ws: 8.18.0
+ zod: 3.23.8
transitivePeerDependencies:
- encoding
@@ -9696,12 +10448,32 @@ snapshots:
p-try@2.2.0: {}
+ pac-proxy-agent@7.1.0:
+ dependencies:
+ '@tootallnate/quickjs-emscripten': 0.23.0
+ agent-base: 7.1.3
+ debug: 4.4.0
+ get-uri: 6.0.4
+ http-proxy-agent: 7.0.2
+ https-proxy-agent: 7.0.6
+ pac-resolver: 7.0.1
+ socks-proxy-agent: 8.0.5
+ transitivePeerDependencies:
+ - supports-color
+
+ pac-resolver@7.0.1:
+ dependencies:
+ degenerator: 5.0.1
+ netmask: 2.0.2
+
package-json-from-dist@1.0.1: {}
parent-module@1.0.1:
dependencies:
callsites: 3.1.0
+ parse-cache-control@1.0.1: {}
+
parse-json@5.2.0:
dependencies:
'@babel/code-frame': 7.26.2
@@ -9734,6 +10506,8 @@ snapshots:
pathval@2.0.0: {}
+ pend@1.2.0: {}
+
picocolors@1.1.1: {}
picomatch@2.3.1: {}
@@ -9752,12 +10526,28 @@ snapshots:
playwright-core@1.49.0: {}
+ playwright-core@1.49.1: {}
+
+ playwright-lighthouse@4.0.0(lighthouse@12.3.0)(playwright-core@1.49.1):
+ dependencies:
+ chalk: 4.1.2
+ lighthouse: 12.3.0
+ ua-parser-js: 1.0.40
+ optionalDependencies:
+ playwright-core: 1.49.1
+
playwright@1.49.0:
dependencies:
playwright-core: 1.49.0
optionalDependencies:
fsevents: 2.3.2
+ playwright@1.49.1:
+ dependencies:
+ playwright-core: 1.49.1
+ optionalDependencies:
+ fsevents: 2.3.2
+
pluralize@8.0.0: {}
pngjs@7.0.0: {}
@@ -9842,6 +10632,8 @@ snapshots:
process@0.11.10: {}
+ progress@2.0.3: {}
+
prompts@2.4.2:
dependencies:
kleur: 3.0.3
@@ -9860,12 +10652,44 @@ snapshots:
forwarded: 0.2.0
ipaddr.js: 1.9.1
+ proxy-agent@6.5.0:
+ dependencies:
+ agent-base: 7.1.3
+ debug: 4.4.0
+ http-proxy-agent: 7.0.2
+ https-proxy-agent: 7.0.6
+ lru-cache: 7.18.3
+ pac-proxy-agent: 7.1.0
+ proxy-from-env: 1.1.0
+ socks-proxy-agent: 8.0.5
+ transitivePeerDependencies:
+ - supports-color
+
proxy-from-env@1.1.0: {}
+ pump@3.0.2:
+ dependencies:
+ end-of-stream: 1.4.4
+ once: 1.4.0
+
punycode.js@2.3.1: {}
punycode@2.3.1: {}
+ puppeteer-core@23.11.1:
+ dependencies:
+ '@puppeteer/browsers': 2.6.1
+ chromium-bidi: 0.11.0(devtools-protocol@0.0.1367902)
+ debug: 4.4.0
+ devtools-protocol: 0.0.1367902
+ typed-query-selector: 2.12.0
+ ws: 8.18.0
+ transitivePeerDependencies:
+ - bare-buffer
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+
pure-rand@6.1.0: {}
qs@6.13.0:
@@ -9878,6 +10702,8 @@ snapshots:
queue-microtask@1.2.3: {}
+ queue-tick@1.0.1: {}
+
randombytes@2.1.0:
dependencies:
safe-buffer: 5.2.1
@@ -10062,6 +10888,8 @@ snapshots:
dependencies:
glob: 7.2.3
+ robots-parser@3.0.1: {}
+
rollup-plugin-visualizer@5.14.0(rollup@4.27.3):
dependencies:
open: 8.4.2
@@ -10136,6 +10964,8 @@ snapshots:
ajv: 6.12.6
ajv-keywords: 3.5.2(ajv@6.12.6)
+ semver@5.7.2: {}
+
semver@6.3.1: {}
semver@7.6.3: {}
@@ -10221,6 +11051,8 @@ snapshots:
slash@3.0.0: {}
+ smart-buffer@4.2.0: {}
+
socket.io-adapter@2.5.5:
dependencies:
debug: 4.3.7
@@ -10276,6 +11108,19 @@ snapshots:
- supports-color
- utf-8-validate
+ socks-proxy-agent@8.0.5:
+ dependencies:
+ agent-base: 7.1.3
+ debug: 4.4.0
+ socks: 2.8.3
+ transitivePeerDependencies:
+ - supports-color
+
+ socks@2.8.3:
+ dependencies:
+ ip-address: 9.0.5
+ smart-buffer: 4.2.0
+
source-map-js@1.2.1: {}
source-map-support@0.5.13:
@@ -10298,6 +11143,12 @@ snapshots:
space-separated-tokens@2.0.2: {}
+ speedline-core@1.4.3:
+ dependencies:
+ '@types/node': 22.9.1
+ image-ssim: 0.2.0
+ jpeg-js: 0.4.4
+
sprintf-js@1.0.3: {}
sprintf-js@1.1.3: {}
@@ -10326,6 +11177,14 @@ snapshots:
streamsearch@1.1.0: {}
+ streamx@2.21.1:
+ dependencies:
+ fast-fifo: 1.3.2
+ queue-tick: 1.0.1
+ text-decoder: 1.2.3
+ optionalDependencies:
+ bare-events: 2.5.4
+
string-length@4.0.2:
dependencies:
char-regex: 1.0.2
@@ -10508,6 +11367,22 @@ snapshots:
tapable@2.2.1: {}
+ tar-fs@3.0.8:
+ dependencies:
+ pump: 3.0.2
+ tar-stream: 3.1.7
+ optionalDependencies:
+ bare-fs: 4.0.1
+ bare-path: 3.0.0
+ transitivePeerDependencies:
+ - bare-buffer
+
+ tar-stream@3.1.7:
+ dependencies:
+ b4a: 1.6.7
+ fast-fifo: 1.3.2
+ streamx: 2.21.1
+
terser-webpack-plugin@5.3.10(webpack@5.96.1):
dependencies:
'@jridgewell/trace-mapping': 0.3.25
@@ -10530,6 +11405,10 @@ snapshots:
glob: 7.2.3
minimatch: 3.1.2
+ text-decoder@1.2.3:
+ dependencies:
+ b4a: 1.6.7
+
text-table@0.2.0: {}
thenify-all@1.6.0:
@@ -10540,6 +11419,10 @@ snapshots:
dependencies:
any-promise: 1.3.0
+ third-party-web@0.26.2: {}
+
+ third-party-web@0.26.3: {}
+
through@2.3.8: {}
tiny-invariant@1.3.3: {}
@@ -10559,6 +11442,12 @@ snapshots:
tinyspy@3.0.2: {}
+ tldts-core@6.1.74: {}
+
+ tldts-icann@6.1.74:
+ dependencies:
+ tldts-core: 6.1.74
+
tmp@0.0.33:
dependencies:
os-tmpdir: 1.0.2
@@ -10756,6 +11645,12 @@ snapshots:
is-typed-array: 1.1.13
possible-typed-array-names: 1.0.0
+ typed-query-selector@2.12.0: {}
+
+ typedarray-to-buffer@3.1.5:
+ dependencies:
+ is-typedarray: 1.0.0
+
typedarray@0.0.6: {}
typedoc-plugin-extras@3.1.0(typedoc@0.26.11(typescript@5.6.3)):
@@ -10784,6 +11679,8 @@ snapshots:
typescript@5.6.3: {}
+ ua-parser-js@1.0.40: {}
+
uc.micro@2.1.0: {}
uid2@1.0.0: {}
@@ -10799,10 +11696,19 @@ snapshots:
has-symbols: 1.0.3
which-boxed-primitive: 1.0.2
+ unbzip2-stream@1.4.3:
+ dependencies:
+ buffer: 5.7.1
+ through: 2.3.8
+
undici-types@5.26.5: {}
undici-types@6.19.8: {}
+ unique-string@2.0.0:
+ dependencies:
+ crypto-random-string: 2.0.0
+
unist-util-is@6.0.0:
dependencies:
'@types/unist': 3.0.3
@@ -11079,15 +11985,26 @@ snapshots:
wrappy@1.0.2: {}
+ write-file-atomic@3.0.3:
+ dependencies:
+ imurmurhash: 0.1.4
+ is-typedarray: 1.0.0
+ signal-exit: 3.0.7
+ typedarray-to-buffer: 3.1.5
+
write-file-atomic@4.0.2:
dependencies:
imurmurhash: 0.1.4
signal-exit: 3.0.7
+ ws@7.5.10: {}
+
ws@8.17.1: {}
ws@8.18.0: {}
+ xdg-basedir@4.0.0: {}
+
xmlhttprequest-ssl@2.1.2: {}
xtend@4.0.2: {}
@@ -11110,10 +12027,17 @@ snapshots:
y18n: 5.0.8
yargs-parser: 21.1.1
+ yauzl@2.10.0:
+ dependencies:
+ buffer-crc32: 0.2.13
+ fd-slicer: 1.1.0
+
yn@3.1.1: {}
yocto-queue@0.1.0: {}
+ zod@3.23.8: {}
+
zustand@5.0.1(@types/react@18.3.12)(react@18.3.1):
optionalDependencies:
'@types/react': 18.3.12