diff --git a/.buildkite/commands/build-for-windows.ps1 b/.buildkite/commands/build-for-windows.ps1 index 1bede06d4b..44f7a264b1 100644 --- a/.buildkite/commands/build-for-windows.ps1 +++ b/.buildkite/commands/build-for-windows.ps1 @@ -54,7 +54,7 @@ if ($BuildType -eq $BUILD_TYPE_DEV) { $env:FILE_ARCHITECTURE=$Architecture Write-Host "Building for architecture: $Architecture" -npm run "make:windows-$Architecture" +npm -w studio-app run "make:windows-$Architecture" If ($LastExitCode -ne 0) { Exit $LastExitCode } # Rename NuGet package files with generic name diff --git a/.buildkite/commands/install-node-dependencies.sh b/.buildkite/commands/install-node-dependencies.sh index 0359e4617f..f14b99eb6f 100755 --- a/.buildkite/commands/install-node-dependencies.sh +++ b/.buildkite/commands/install-node-dependencies.sh @@ -7,10 +7,11 @@ ARCHITECTURE=$(uname -m) NODE_VERSION=$(node --version) PACKAGE_HASH=$(hash_file package-lock.json) -if [ -d patches ]; then - PATCHES_HASH=$(hash_directory patches/) -else - PATCHES_HASH=nopatch +PATCHES_HASH=nopatch +if [ -d apps/cli/patches ] || [ -d apps/studio/patches ]; then + CLI_PATCHES_HASH=$( [ -d apps/cli/patches ] && hash_directory apps/cli/patches || echo none ) + STUDIO_PATCHES_HASH=$( [ -d apps/studio/patches ] && hash_directory apps/studio/patches || echo none ) + PATCHES_HASH="${CLI_PATCHES_HASH}-${STUDIO_PATCHES_HASH}" fi CACHEKEY="$BUILDKITE_PIPELINE_SLUG-npm-$PLATFORM-$ARCHITECTURE-node-$NODE_VERSION-$PACKAGE_HASH-$PATCHES_HASH" @@ -44,14 +45,6 @@ npm ci \ --maxsockets "$MAX_SOCKETS" \ "$@" -cd cli -npm ci \ - --prefer-offline \ - --no-audit \ - --no-progress \ - --maxsockets "$MAX_SOCKETS" -cd - - echo "--- :npm: Save cache if necessary" # Notice that we don't cache the local node_modules. # Those get regenerated by npm ci as per Node reccomendations. diff --git a/.buildkite/commands/run-e2e-tests.sh b/.buildkite/commands/run-e2e-tests.sh index 5355662ece..38b626683e 100644 --- a/.buildkite/commands/run-e2e-tests.sh +++ b/.buildkite/commands/run-e2e-tests.sh @@ -31,8 +31,7 @@ esac # `make` creates signed distributables (installers), which requires code signing setup. # `package` creates an unsigned app bundle, sufficient for E2E testing. echo "--- :package: Package app for testing ($PLATFORM-$ARCH)" -npx electron-vite build --outDir=dist -npx electron-forge package --arch="$ARCH" --platform="$FORGE_PLATFORM" +npm -w studio-app run package -- --arch="$ARCH" --platform="$FORGE_PLATFORM" echo '--- :playwright: Run End To End Tests' diff --git a/.buildkite/commands/run-metrics-tests.sh b/.buildkite/commands/run-metrics-tests.sh index 72dae7c6c1..f11eec8641 100755 --- a/.buildkite/commands/run-metrics-tests.sh +++ b/.buildkite/commands/run-metrics-tests.sh @@ -9,38 +9,32 @@ echo '--- :package: Install main dependencies' bash .buildkite/commands/install-node-dependencies.sh echo '--- :package: Install compare-perf dependencies' -cd scripts/compare-perf -npm ci -cd - +npm -w compare-perf install export IS_DEV_BUILD=true -export ARTIFACTS_PATH=${PWD}/artifacts +export ARTIFACTS_PATH=${PWD}/tools/metrics/artifacts export SKIP_WORKER_THREAD_BUILD='true' # Detect if this is a PR or trunk push if [ "${BUILDKITE_PULL_REQUEST}" != "false" ]; then # PR context - compare against trunk echo "--- :chart_with_upwards_trend: Running performance comparison against trunk" - cd scripts/compare-perf - npm run compare -- perf $BUILDKITE_COMMIT trunk --tests-branch $BUILDKITE_COMMIT --rounds 3 + npm -w compare-perf run compare -- perf $BUILDKITE_COMMIT trunk --tests-branch $BUILDKITE_COMMIT --rounds 3 echo "--- :github: Posting results to PR" # Parse repo from git@github.com:owner/repo.git or https://github.com/owner/repo.git format REPO_PATH=$(echo $BUILDKITE_REPO | sed 's|^git@github\.com:||' | sed 's|^https://github\.com/||' | sed 's|\.git$||') - npm run post-to-github -- $GITHUB_TOKEN $REPO_PATH $BUILDKITE_PULL_REQUEST trunk $BUILDKITE_COMMIT - cd - + npm -w compare-perf run post-to-github -- $GITHUB_TOKEN $REPO_PATH $BUILDKITE_PULL_REQUEST trunk $BUILDKITE_COMMIT elif [ "${BUILDKITE_BRANCH}" == "trunk" ]; then # Trunk push context - compare against baseline BASELINE_COMMIT="58c52bfee7e585614ced202f43f217a01f94f029" echo "--- :chart_with_upwards_trend: Running performance comparison against baseline" - cd scripts/compare-perf - npm run compare -- perf $BUILDKITE_COMMIT $BASELINE_COMMIT --tests-branch $BUILDKITE_COMMIT --rounds 3 + npm -w compare-perf run compare -- perf $BUILDKITE_COMMIT $BASELINE_COMMIT --tests-branch $BUILDKITE_COMMIT --rounds 3 echo "--- :bar_chart: Logging metrics to CodeVitals" COMMITTED_AT=$(git show -s $BUILDKITE_COMMIT --format="%cI") - npm run log-to-codevitals -- $CODEVITALS_AUTH_TOKEN trunk $BUILDKITE_COMMIT $BASELINE_COMMIT $COMMITTED_AT - cd - + npm -w compare-perf run log-to-codevitals -- $CODEVITALS_AUTH_TOKEN trunk $BUILDKITE_COMMIT $BASELINE_COMMIT $COMMITTED_AT else # Other branches - skip metrics echo "--- :information_source: Skipping metrics for non-trunk branch" diff --git a/.buildkite/commands/should-skip-job.sh b/.buildkite/commands/should-skip-job.sh index a81a09d50a..c2fcb47a4e 100755 --- a/.buildkite/commands/should-skip-job.sh +++ b/.buildkite/commands/should-skip-job.sh @@ -10,7 +10,7 @@ set -eu # Job types: # - validation: Skip if changes are limited to documentation, config, localization, and non-code files. # Used for lint, unit tests, and e2e tests. -# - metrics: Same as validation, but also skips on test-only changes (e2e/**, *.test.ts). +# - metrics: Same as validation, but also skips on test-only changes (apps/studio/e2e/**, *.test.ts). # Since metrics measure app performance, test file changes don't affect them. # - build: Skip if changes are limited to documentation and config files. # Does NOT skip on localization changes since builds should include translation updates. @@ -53,7 +53,7 @@ COMMON_NON_CODE_PATTERNS=( # Installer assets and configuration "installers/**" - "assets/appx/**" + "apps/studio/assets/appx/**" # Claude AI configuration ".claude/**" @@ -62,17 +62,17 @@ COMMON_NON_CODE_PATTERNS=( # Localization files - changes here don't affect runtime behavior or performance LOCALIZATION_PATTERNS=( - "common/translations/**" + "tools/common/translations/**" ) # Test files - changes here don't affect app performance (for metrics) TEST_PATTERNS=( - "e2e/**" - "src/tests/**" - "src/**/*.test.ts" - "src/**/*.test.tsx" - "cli/**/*.test.ts" - "common/**/*.test.ts" + "apps/studio/e2e/**" + "apps/studio/src/tests/**" + "apps/studio/src/**/*.test.ts" + "apps/studio/src/**/*.test.tsx" + "apps/cli/**/*.test.ts" + "tools/common/**/*.test.ts" "metrics/**" ) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index a5db4c4dce..74d2daa33d 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -121,8 +121,8 @@ steps: bundle exec fastlane notarize_binary plugins: [$CI_TOOLKIT_PLUGIN, $NVM_PLUGIN] artifact_paths: - - out/**/*.app.zip - - out/*.dmg + - apps/studio/out/**/*.app.zip + - apps/studio/out/*.dmg matrix: - x64 - arm64 @@ -220,8 +220,8 @@ steps: bundle exec fastlane notarize_binary plugins: [$CI_TOOLKIT_PLUGIN, $NVM_PLUGIN] artifact_paths: - - out/**/*.app.zip - - out/*.dmg + - apps/studio/out/**/*.app.zip + - apps/studio/out/*.dmg matrix: - x64 - arm64 diff --git a/.gitignore b/.gitignore index dba5886ead..410796ef76 100644 --- a/.gitignore +++ b/.gitignore @@ -112,9 +112,9 @@ dist test-results # E2E test import files (not versioned) -e2e/imports/*.tar.gz -e2e/imports/*.zip -e2e/imports/*.wpress +apps/studio/e2e/imports/*.tar.gz +apps/studio/e2e/imports/*.zip +apps/studio/e2e/imports/*.wpress # Metrics traces artifacts @@ -126,8 +126,8 @@ artifacts CLAUDE.md # Bundled Node binary (downloaded during build) -bin/node -bin/node.exe +apps/studio/bin/node +apps/studio/bin/node.exe # CLI launcher executable (built during packaging via @yao-pkg/pkg) bin/studio-cli.exe diff --git a/.prettierignore b/.prettierignore index b0f142ae26..f1b06af7b4 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,2 +1 @@ -src/translations -common/translations +tools/common/translations diff --git a/AGENTS.md b/AGENTS.md index ed585457d7..b2647b5518 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -16,50 +16,50 @@ WordPress Studio - Electron desktop app for managing local WordPress sites. Buil **MUST** build CLI before testing: `npm run cli:build && node dist/cli/main.js ` - **Auth**: `auth login|logout|status` - WordPress.com OAuth (tokens valid 2 weeks) -- **Preview Sites**: See `cli/commands/preview/` -- **Local Sites**: See `cli/commands/site/` +- **Preview Sites**: See `apps/cli/commands/preview/` +- **Local Sites**: See `apps/cli/commands/site/` ## Architecture **Electron 3-Process**: Main (Node.js) → Preload (IPC bridge) → Renderer (React) -**Main Process** (`src/`): IPC handlers, site servers, storage, OAuth, sync, migrations -**Renderer** (`src/components`, `src/hooks`): React UI, Redux stores, TailwindCSS -**CLI** (`cli/`): WordPress Playground (PHP WASM), yargs commands, child process of desktop app +**Main Process** (`apps/studio/src/`): IPC handlers, site servers, storage, OAuth, sync, migrations +**Renderer** (`apps/studio/src/components`, `apps/studio/src/hooks`): React UI, Redux stores, TailwindCSS +**CLI** (`apps/cli/`): WordPress Playground (PHP WASM), yargs commands, child process of desktop app ## Directory Structure -**`/src`**: Main (index.ts, ipc-handlers.ts, site-server.ts, storage/, lib/) | Renderer (components/, hooks/, stores/) | modules/ (sync, cli, user-settings, preview-site) -**`/cli`**: index.ts, commands/ (auth, preview, site), lib/ (appdata, i18n, browser) -**`/common`**: Shared lib/ (fs-utils, port-finder, oauth), types/, translations/ -**`/packages`**: eslint-plugin-studio +**`/apps/studio/src`**: Main (index.ts, ipc-handlers.ts, site-server.ts, storage/, lib/) | Renderer (components/, hooks/, stores/) | modules/ (sync, cli, user-settings, preview-site) +**`/apps/cli`**: index.ts, commands/ (auth, preview, site), lib/ (appdata, i18n, browser) +**`/tools/common`**: Shared lib/ (fs-utils, port-finder, oauth), types/, translations/ +**`/tools/eslint-plugin-studio`**: eslint-plugin-studio ## Key Patterns **IPC**: Renderer → `window.ipcApi.*` → Preload (contextBridge) → Main `ipc-handlers.ts` → Business logic -**CliServerProcess**: Desktop spawns CLI as child process (`src/modules/cli/lib/cli-server-process.ts`) +**CliServerProcess**: Desktop spawns CLI as child process (`apps/studio/src/modules/cli/lib/cli-server-process.ts`) **Redux Stores**: chat, sync, connectedSites, snapshot, onboarding | RTK Query APIs: wpcomApi, installedAppsApi, wordpressVersionsApi -**SiteServer** (`src/site-server.ts`): Manages site instances, server start/stop, SSL certs, ports +**SiteServer** (`apps/studio/src/site-server.ts`): Manages site instances, server start/stop, SSL certs, ports ## Tech Stack **Frontend**: React 18, Redux Toolkit + RTK Query, @wordpress/components, TailwindCSS, TypeScript, Vite -**Main**: Electron 38, express +**Main**: Electron, express **CLI**: @wp-playground/cli, @php-wasm/node, @wp-playground/blueprints **Dev**: electron-vite, electron-forge, Vitest, Playwright **Other**: Sentry, wpcom, zod, yargs ## Build & Distribution -**Build**: CLI (`vite build --config vite.cli.config.ts`) → Electron (`electron-vite build`) → Package (`electron-forge make`) +**Build**: CLI (`vite build --config apps/cli/vite.config.ts`) → Electron (`electron-vite build --config apps/studio/electron.vite.config.ts`) → Package (`electron-forge make --config apps/studio/forge.config.ts`) **Platforms**: macOS (x64/ARM64 DMG), Windows (x64/ARM64 MSIX), Linux (DEB) **Bundling**: Rollup (main), Vite (renderer with code splitting), ASAR (resources) ## Conventions **Files**: React components (PascalCase), utils (camelCase), tests (.test.ts/.tsx) -**IPC Handlers** (`src/ipc-handlers.ts`): **MUST** `export async function handlerName(event, ...args): Promise` | Handler names in `src/constants.ts` | All handlers MUST be async and return Promises +**IPC Handlers** (`apps/studio/src/ipc-handlers.ts`): **MUST** `export async function handlerName(event, ...args): Promise` | Handler names in `apps/studio/src/constants.ts` | All handlers MUST be async and return Promises **Storage**: **CRITICAL** - Always use file locking: `lockAppdata()` / `unlockAppdata()` to prevent data corruption -**i18n**: `@wordpress/i18n` (`__()` function), `common/translations/`, `` (renderer), `loadTranslations()` (CLI) +**i18n**: `@wordpress/i18n` (`__()` function), `tools/common/translations/`, `` (renderer), `loadTranslations()` (CLI) ## WordPress Studio Paths @@ -109,7 +109,7 @@ For in-depth information, see these docs: ## Quick Reference **WP Playground**: CLI runs WordPress via PHP WASM, Blueprints for config, `filterUnsupportedBlueprintFeatures()` for compatibility -**Sync**: OAuth via `common/lib/oauth.ts`, Redux `sync` slice, pull/push WordPress.com sites +**Sync**: OAuth via `tools/common/lib/oauth.ts`, Redux `sync` slice, pull/push WordPress.com sites **Security**: Renderer sandboxed, IPC validation, strict CSP, no Node integration, self-signed HTTPS certs --- diff --git a/cli/__mocks__/cli-table3.ts b/apps/cli/__mocks__/cli-table3.ts similarity index 100% rename from cli/__mocks__/cli-table3.ts rename to apps/cli/__mocks__/cli-table3.ts diff --git a/__mocks__/cli/lib/pm2-manager.ts b/apps/cli/__mocks__/lib/pm2-manager.ts similarity index 100% rename from __mocks__/cli/lib/pm2-manager.ts rename to apps/cli/__mocks__/lib/pm2-manager.ts diff --git a/cli/__mocks__/pm2-axon.ts b/apps/cli/__mocks__/pm2-axon.ts similarity index 100% rename from cli/__mocks__/pm2-axon.ts rename to apps/cli/__mocks__/pm2-axon.ts diff --git a/__mocks__/pm2.ts b/apps/cli/__mocks__/pm2.ts similarity index 83% rename from __mocks__/pm2.ts rename to apps/cli/__mocks__/pm2.ts index 5c39290358..bb02149803 100644 --- a/__mocks__/pm2.ts +++ b/apps/cli/__mocks__/pm2.ts @@ -12,8 +12,8 @@ export class custom { launchBus = vi.fn( ( callback: ( error?: Error, bus?: any ) => void ) => callback( undefined, {} ) ); - sendDataToProcessId = vi.fn( ( processId: number, data: any, callback: ( error?: Error ) => void ) => - callback() + sendDataToProcessId = vi.fn( + ( processId: number, data: any, callback: ( error?: Error ) => void ) => callback() ); } diff --git a/cli/commands/_events.ts b/apps/cli/commands/_events.ts similarity index 95% rename from cli/commands/_events.ts rename to apps/cli/commands/_events.ts index c9a060c081..5b144352dc 100644 --- a/cli/commands/_events.ts +++ b/apps/cli/commands/_events.ts @@ -7,10 +7,10 @@ * */ import fs from 'fs'; +import { sequential } from '@studio/common/lib/sequential'; +import { SITE_EVENTS, siteDetailsSchema, SiteEvent } from '@studio/common/lib/site-events'; +import { SiteCommandLoggerAction as LoggerAction } from '@studio/common/logger-actions'; import { __ } from '@wordpress/i18n'; -import { sequential } from 'common/lib/sequential'; -import { SITE_EVENTS, siteDetailsSchema, SiteEvent } from 'common/lib/site-events'; -import { SiteCommandLoggerAction as LoggerAction } from 'common/logger-actions'; import axon from 'pm2-axon'; import { z } from 'zod'; import { getSiteUrl, readAppdata, SiteData } from 'cli/lib/appdata'; diff --git a/cli/commands/auth/login.ts b/apps/cli/commands/auth/login.ts similarity index 92% rename from cli/commands/auth/login.ts rename to apps/cli/commands/auth/login.ts index e94f84f0c6..2dfe80b41e 100644 --- a/cli/commands/auth/login.ts +++ b/apps/cli/commands/auth/login.ts @@ -1,8 +1,8 @@ import { input } from '@inquirer/prompts'; +import { DEFAULT_TOKEN_LIFETIME_MS } from '@studio/common/constants'; +import { getAuthenticationUrl } from '@studio/common/lib/oauth'; +import { AuthCommandLoggerAction as LoggerAction } from '@studio/common/logger-actions'; import { __, sprintf } from '@wordpress/i18n'; -import { DEFAULT_TOKEN_LIFETIME_MS } from 'common/constants'; -import { getAuthenticationUrl } from 'common/lib/oauth'; -import { AuthCommandLoggerAction as LoggerAction } from 'common/logger-actions'; import { getUserInfo } from 'cli/lib/api'; import { getAuthToken, diff --git a/cli/commands/auth/logout.ts b/apps/cli/commands/auth/logout.ts similarity index 94% rename from cli/commands/auth/logout.ts rename to apps/cli/commands/auth/logout.ts index 2659b04f66..a3d50613a1 100644 --- a/cli/commands/auth/logout.ts +++ b/apps/cli/commands/auth/logout.ts @@ -1,5 +1,5 @@ +import { AuthCommandLoggerAction as LoggerAction } from '@studio/common/logger-actions'; import { __ } from '@wordpress/i18n'; -import { AuthCommandLoggerAction as LoggerAction } from 'common/logger-actions'; import { revokeAuthToken } from 'cli/lib/api'; import { readAppdata, diff --git a/cli/commands/auth/status.ts b/apps/cli/commands/auth/status.ts similarity index 93% rename from cli/commands/auth/status.ts rename to apps/cli/commands/auth/status.ts index f108f85cb0..f15227de8a 100644 --- a/cli/commands/auth/status.ts +++ b/apps/cli/commands/auth/status.ts @@ -1,5 +1,5 @@ +import { AuthCommandLoggerAction as LoggerAction } from '@studio/common/logger-actions'; import { __, sprintf } from '@wordpress/i18n'; -import { AuthCommandLoggerAction as LoggerAction } from 'common/logger-actions'; import { getUserInfo } from 'cli/lib/api'; import { getAuthToken } from 'cli/lib/appdata'; import { Logger, LoggerError } from 'cli/logger'; diff --git a/cli/commands/auth/tests/login.test.ts b/apps/cli/commands/auth/tests/login.test.ts similarity index 98% rename from cli/commands/auth/tests/login.test.ts rename to apps/cli/commands/auth/tests/login.test.ts index a6aa886b23..e5da0948f3 100644 --- a/cli/commands/auth/tests/login.test.ts +++ b/apps/cli/commands/auth/tests/login.test.ts @@ -1,5 +1,5 @@ import { input } from '@inquirer/prompts'; -import { getAuthenticationUrl } from 'common/lib/oauth'; +import { getAuthenticationUrl } from '@studio/common/lib/oauth'; import { vi } from 'vitest'; import { getUserInfo } from 'cli/lib/api'; import { @@ -23,7 +23,7 @@ import { import { runCommand } from '../login'; vi.mock( '@inquirer/prompts' ); -vi.mock( 'common/lib/oauth' ); +vi.mock( '@studio/common/lib/oauth' ); vi.mock( 'cli/lib/api' ); vi.mock( 'cli/lib/appdata' ); vi.mock( 'cli/lib/browser' ); diff --git a/cli/commands/auth/tests/logout.test.ts b/apps/cli/commands/auth/tests/logout.test.ts similarity index 100% rename from cli/commands/auth/tests/logout.test.ts rename to apps/cli/commands/auth/tests/logout.test.ts diff --git a/cli/commands/auth/tests/status.test.ts b/apps/cli/commands/auth/tests/status.test.ts similarity index 100% rename from cli/commands/auth/tests/status.test.ts rename to apps/cli/commands/auth/tests/status.test.ts diff --git a/cli/commands/preview/create.ts b/apps/cli/commands/preview/create.ts similarity index 93% rename from cli/commands/preview/create.ts rename to apps/cli/commands/preview/create.ts index 201db946b2..de350dd12c 100644 --- a/cli/commands/preview/create.ts +++ b/apps/cli/commands/preview/create.ts @@ -1,8 +1,8 @@ import os from 'os'; import path from 'path'; +import { getWordPressVersion } from '@studio/common/lib/get-wordpress-version'; +import { PreviewCommandLoggerAction as LoggerAction } from '@studio/common/logger-actions'; import { __, sprintf } from '@wordpress/i18n'; -import { getWordPressVersion } from 'common/lib/get-wordpress-version'; -import { PreviewCommandLoggerAction as LoggerAction } from 'common/logger-actions'; import { uploadArchive, waitForSiteReady } from 'cli/lib/api'; import { getAuthToken, getSiteByFolder } from 'cli/lib/appdata'; import { archiveSiteContent, cleanup } from 'cli/lib/archive'; diff --git a/cli/commands/preview/delete.ts b/apps/cli/commands/preview/delete.ts similarity index 95% rename from cli/commands/preview/delete.ts rename to apps/cli/commands/preview/delete.ts index 529da34f6b..5fd43dd21e 100644 --- a/cli/commands/preview/delete.ts +++ b/apps/cli/commands/preview/delete.ts @@ -1,5 +1,5 @@ +import { PreviewCommandLoggerAction as LoggerAction } from '@studio/common/logger-actions'; import { __ } from '@wordpress/i18n'; -import { PreviewCommandLoggerAction as LoggerAction } from 'common/logger-actions'; import { deleteSnapshot } from 'cli/lib/api'; import { getAuthToken } from 'cli/lib/appdata'; import { deleteSnapshotFromAppdata, getSnapshotsFromAppdata } from 'cli/lib/snapshots'; diff --git a/cli/commands/preview/list.ts b/apps/cli/commands/preview/list.ts similarity index 97% rename from cli/commands/preview/list.ts rename to apps/cli/commands/preview/list.ts index 57bd9b1760..ae14e691ca 100644 --- a/cli/commands/preview/list.ts +++ b/apps/cli/commands/preview/list.ts @@ -1,6 +1,6 @@ +import { PreviewCommandLoggerAction as LoggerAction } from '@studio/common/logger-actions'; import { __, _n, sprintf } from '@wordpress/i18n'; import Table from 'cli-table3'; -import { PreviewCommandLoggerAction as LoggerAction } from 'common/logger-actions'; import { format } from 'date-fns'; import { getAuthToken, getSiteByFolder } from 'cli/lib/appdata'; import { diff --git a/cli/commands/preview/tests/create.test.ts b/apps/cli/commands/preview/tests/create.test.ts similarity index 98% rename from cli/commands/preview/tests/create.test.ts rename to apps/cli/commands/preview/tests/create.test.ts index c2e7932ed6..311ac1a1d9 100644 --- a/cli/commands/preview/tests/create.test.ts +++ b/apps/cli/commands/preview/tests/create.test.ts @@ -1,6 +1,6 @@ import os from 'os'; import path from 'path'; -import { getWordPressVersion } from 'common/lib/get-wordpress-version'; +import { getWordPressVersion } from '@studio/common/lib/get-wordpress-version'; import { vi } from 'vitest'; import { uploadArchive, waitForSiteReady } from 'cli/lib/api'; import { getAuthToken, getSiteByFolder } from 'cli/lib/appdata'; @@ -17,7 +17,7 @@ const mockReportProgress = vi.fn(); const mockReportWarning = vi.fn(); const mockReportKeyValuePair = vi.fn(); -vi.mock( 'common/lib/get-wordpress-version' ); +vi.mock( '@studio/common/lib/get-wordpress-version' ); vi.mock( 'cli/lib/appdata', async () => ( { ...( await vi.importActual( 'cli/lib/appdata' ) ), getAppdataDirectory: vi.fn().mockReturnValue( '/test/appdata' ), diff --git a/cli/commands/preview/tests/delete.test.ts b/apps/cli/commands/preview/tests/delete.test.ts similarity index 100% rename from cli/commands/preview/tests/delete.test.ts rename to apps/cli/commands/preview/tests/delete.test.ts diff --git a/cli/commands/preview/tests/list.test.ts b/apps/cli/commands/preview/tests/list.test.ts similarity index 100% rename from cli/commands/preview/tests/list.test.ts rename to apps/cli/commands/preview/tests/list.test.ts diff --git a/cli/commands/preview/tests/update.test.ts b/apps/cli/commands/preview/tests/update.test.ts similarity index 97% rename from cli/commands/preview/tests/update.test.ts rename to apps/cli/commands/preview/tests/update.test.ts index 1dcb1cf406..4818dacb07 100644 --- a/cli/commands/preview/tests/update.test.ts +++ b/apps/cli/commands/preview/tests/update.test.ts @@ -1,8 +1,8 @@ import os from 'os'; import path from 'path'; +import { DEMO_SITE_EXPIRATION_DAYS } from '@studio/common/constants'; +import { getWordPressVersion } from '@studio/common/lib/get-wordpress-version'; import { Archiver } from 'archiver'; -import { DEMO_SITE_EXPIRATION_DAYS } from 'common/constants'; -import { getWordPressVersion } from 'common/lib/get-wordpress-version'; import { vi } from 'vitest'; import { uploadArchive, waitForSiteReady } from 'cli/lib/api'; import { getAuthToken, getSiteByFolder } from 'cli/lib/appdata'; @@ -12,7 +12,7 @@ import { LoggerError } from 'cli/logger'; import { mockReportStart, mockReportSuccess, mockReportError } from 'cli/tests/test-utils'; import { runCommand } from '../update'; -vi.mock( 'common/lib/get-wordpress-version' ); +vi.mock( '@studio/common/lib/get-wordpress-version' ); vi.mock( 'cli/lib/appdata', async () => { const actual = await vi.importActual( 'cli/lib/appdata' ); return { diff --git a/cli/commands/preview/update.ts b/apps/cli/commands/preview/update.ts similarity index 93% rename from cli/commands/preview/update.ts rename to apps/cli/commands/preview/update.ts index 0005429a6c..146db4e4d7 100644 --- a/cli/commands/preview/update.ts +++ b/apps/cli/commands/preview/update.ts @@ -1,10 +1,10 @@ import os from 'node:os'; import path from 'node:path'; +import { DEMO_SITE_EXPIRATION_DAYS } from '@studio/common/constants'; +import { getWordPressVersion } from '@studio/common/lib/get-wordpress-version'; +import { PreviewCommandLoggerAction as LoggerAction } from '@studio/common/logger-actions'; +import { Snapshot } from '@studio/common/types/snapshot'; import { __, _n, sprintf } from '@wordpress/i18n'; -import { DEMO_SITE_EXPIRATION_DAYS } from 'common/constants'; -import { getWordPressVersion } from 'common/lib/get-wordpress-version'; -import { PreviewCommandLoggerAction as LoggerAction } from 'common/logger-actions'; -import { Snapshot } from 'common/types/snapshot'; import { addDays } from 'date-fns'; import { uploadArchive, waitForSiteReady } from 'cli/lib/api'; import { getAuthToken, getSiteByFolder } from 'cli/lib/appdata'; diff --git a/cli/commands/site/create.ts b/apps/cli/commands/site/create.ts similarity index 95% rename from cli/commands/site/create.ts rename to apps/cli/commands/site/create.ts index 77afa93196..a7152d290f 100644 --- a/cli/commands/site/create.ts +++ b/apps/cli/commands/site/create.ts @@ -3,37 +3,40 @@ import fs from 'fs'; import os from 'os'; import path from 'path'; import { SupportedPHPVersions } from '@php-wasm/universal'; -import { __, sprintf } from '@wordpress/i18n'; -import { Blueprint, StepDefinition } from '@wp-playground/blueprints'; import { DEFAULT_PHP_VERSION, DEFAULT_WORDPRESS_VERSION, MINIMUM_WORDPRESS_VERSION, -} from 'common/constants'; +} from '@studio/common/constants'; import { filterUnsupportedBlueprintFeatures, validateBlueprintData, -} from 'common/lib/blueprint-validation'; -import { getDomainNameValidationError } from 'common/lib/domains'; +} from '@studio/common/lib/blueprint-validation'; +import { getDomainNameValidationError } from '@studio/common/lib/domains'; import { arePathsEqual, isEmptyDir, isWordPressDirectory, pathExists, recursiveCopyDirectory, -} from 'common/lib/fs-utils'; -import { DEFAULT_LOCALE } from 'common/lib/locale'; -import { isOnline } from 'common/lib/network-utils'; -import { createPassword } from 'common/lib/passwords'; -import { portFinder } from 'common/lib/port-finder'; -import { SITE_EVENTS } from 'common/lib/site-events'; -import { sortSites } from 'common/lib/sort-sites'; +} from '@studio/common/lib/fs-utils'; +import { DEFAULT_LOCALE } from '@studio/common/lib/locale'; +import { isOnline } from '@studio/common/lib/network-utils'; +import { createPassword } from '@studio/common/lib/passwords'; +import { portFinder } from '@studio/common/lib/port-finder'; +import { + hasDefaultDbBlock, + removeDbConstants, +} from '@studio/common/lib/remove-default-db-constants'; +import { SITE_EVENTS } from '@studio/common/lib/site-events'; +import { sortSites } from '@studio/common/lib/sort-sites'; import { isValidWordPressVersion, isWordPressVersionAtLeast, -} from 'common/lib/wordpress-version-utils'; -import { SiteCommandLoggerAction as LoggerAction } from 'common/logger-actions'; -import { hasDefaultDbBlock, removeDbConstants } from 'src/migrations/remove-default-db-constants'; +} from '@studio/common/lib/wordpress-version-utils'; +import { SiteCommandLoggerAction as LoggerAction } from '@studio/common/logger-actions'; +import { __, sprintf } from '@wordpress/i18n'; +import { Blueprint, StepDefinition } from '@wp-playground/blueprints'; import { lockAppdata, readAppdata, diff --git a/cli/commands/site/delete.ts b/apps/cli/commands/site/delete.ts similarity index 95% rename from cli/commands/site/delete.ts rename to apps/cli/commands/site/delete.ts index 1aadca62ec..0849ef1928 100644 --- a/cli/commands/site/delete.ts +++ b/apps/cli/commands/site/delete.ts @@ -1,7 +1,7 @@ +import { arePathsEqual } from '@studio/common/lib/fs-utils'; +import { SITE_EVENTS } from '@studio/common/lib/site-events'; +import { SiteCommandLoggerAction as LoggerAction } from '@studio/common/logger-actions'; import { __, _n, sprintf } from '@wordpress/i18n'; -import { arePathsEqual } from 'common/lib/fs-utils'; -import { SITE_EVENTS } from 'common/lib/site-events'; -import { SiteCommandLoggerAction as LoggerAction } from 'common/logger-actions'; import { deleteSnapshot } from 'cli/lib/api'; import { getSiteByFolder, diff --git a/cli/commands/site/list.ts b/apps/cli/commands/site/list.ts similarity index 97% rename from cli/commands/site/list.ts rename to apps/cli/commands/site/list.ts index bc2facccdc..e343ad3f81 100644 --- a/cli/commands/site/list.ts +++ b/apps/cli/commands/site/list.ts @@ -1,6 +1,6 @@ +import { SiteCommandLoggerAction as LoggerAction } from '@studio/common/logger-actions'; import { __, _n, sprintf } from '@wordpress/i18n'; import Table from 'cli-table3'; -import { SiteCommandLoggerAction as LoggerAction } from 'common/logger-actions'; import { getSiteUrl, readAppdata, type SiteData } from 'cli/lib/appdata'; import { connect, disconnect } from 'cli/lib/pm2-manager'; import { isSiteRunning } from 'cli/lib/site-utils'; diff --git a/cli/commands/site/set.ts b/apps/cli/commands/site/set.ts similarity index 95% rename from cli/commands/site/set.ts rename to apps/cli/commands/site/set.ts index 79fcd1a24d..f466f683e1 100644 --- a/cli/commands/site/set.ts +++ b/apps/cli/commands/site/set.ts @@ -1,16 +1,16 @@ import { SupportedPHPVersions } from '@php-wasm/universal'; -import { __, sprintf } from '@wordpress/i18n'; -import { DEFAULT_WORDPRESS_VERSION, MINIMUM_WORDPRESS_VERSION } from 'common/constants'; -import { getDomainNameValidationError } from 'common/lib/domains'; -import { arePathsEqual } from 'common/lib/fs-utils'; -import { SITE_EVENTS } from 'common/lib/site-events'; -import { siteNeedsRestart } from 'common/lib/site-needs-restart'; +import { DEFAULT_WORDPRESS_VERSION, MINIMUM_WORDPRESS_VERSION } from '@studio/common/constants'; +import { getDomainNameValidationError } from '@studio/common/lib/domains'; +import { arePathsEqual } from '@studio/common/lib/fs-utils'; +import { SITE_EVENTS } from '@studio/common/lib/site-events'; +import { siteNeedsRestart } from '@studio/common/lib/site-needs-restart'; import { getWordPressVersionUrl, isValidWordPressVersion, isWordPressVersionAtLeast, -} from 'common/lib/wordpress-version-utils'; -import { SiteCommandLoggerAction as LoggerAction } from 'common/logger-actions'; +} from '@studio/common/lib/wordpress-version-utils'; +import { SiteCommandLoggerAction as LoggerAction } from '@studio/common/logger-actions'; +import { __, sprintf } from '@wordpress/i18n'; import { getSiteByFolder, lockAppdata, diff --git a/cli/commands/site/start.ts b/apps/cli/commands/site/start.ts similarity index 97% rename from cli/commands/site/start.ts rename to apps/cli/commands/site/start.ts index bdc785b0b4..ac7e114cd0 100644 --- a/cli/commands/site/start.ts +++ b/apps/cli/commands/site/start.ts @@ -1,5 +1,5 @@ +import { SiteCommandLoggerAction as LoggerAction } from '@studio/common/logger-actions'; import { __ } from '@wordpress/i18n'; -import { SiteCommandLoggerAction as LoggerAction } from 'common/logger-actions'; import { getSiteByFolder, updateSiteAutoStart, updateSiteLatestCliPid } from 'cli/lib/appdata'; import { connect, disconnect } from 'cli/lib/pm2-manager'; import { logSiteDetails, openSiteInBrowser, setupCustomDomain } from 'cli/lib/site-utils'; diff --git a/cli/commands/site/status.ts b/apps/cli/commands/site/status.ts similarity index 94% rename from cli/commands/site/status.ts rename to apps/cli/commands/site/status.ts index 739ae65629..0711e1671c 100644 --- a/cli/commands/site/status.ts +++ b/apps/cli/commands/site/status.ts @@ -1,8 +1,8 @@ +import { getWordPressVersion } from '@studio/common/lib/get-wordpress-version'; +import { decodePassword } from '@studio/common/lib/passwords'; +import { SiteCommandLoggerAction as LoggerAction } from '@studio/common/logger-actions'; import { __, _n } from '@wordpress/i18n'; import CliTable3 from 'cli-table3'; -import { getWordPressVersion } from 'common/lib/get-wordpress-version'; -import { decodePassword } from 'common/lib/passwords'; -import { SiteCommandLoggerAction as LoggerAction } from 'common/logger-actions'; import { getSiteByFolder, getSiteUrl } from 'cli/lib/appdata'; import { connect, disconnect } from 'cli/lib/pm2-manager'; import { getPrettyPath } from 'cli/lib/utils'; diff --git a/cli/commands/site/stop.ts b/apps/cli/commands/site/stop.ts similarity index 97% rename from cli/commands/site/stop.ts rename to apps/cli/commands/site/stop.ts index 106e6b2ae4..dcab8a32be 100644 --- a/cli/commands/site/stop.ts +++ b/apps/cli/commands/site/stop.ts @@ -1,5 +1,5 @@ +import { SiteCommandLoggerAction as LoggerAction } from '@studio/common/logger-actions'; import { __, _n, sprintf } from '@wordpress/i18n'; -import { SiteCommandLoggerAction as LoggerAction } from 'common/logger-actions'; import { clearSiteLatestCliPid, getSiteByFolder, diff --git a/cli/commands/site/tests/create.test.ts b/apps/cli/commands/site/tests/create.test.ts similarity index 98% rename from cli/commands/site/tests/create.test.ts rename to apps/cli/commands/site/tests/create.test.ts index 47a668818a..c3748845ee 100644 --- a/cli/commands/site/tests/create.test.ts +++ b/apps/cli/commands/site/tests/create.test.ts @@ -1,19 +1,19 @@ import fs from 'fs'; -import { Blueprint, StepDefinition } from '@wp-playground/blueprints'; import { filterUnsupportedBlueprintFeatures, validateBlueprintData, -} from 'common/lib/blueprint-validation'; +} from '@studio/common/lib/blueprint-validation'; import { isEmptyDir, isWordPressDirectory, pathExists, arePathsEqual, recursiveCopyDirectory, -} from 'common/lib/fs-utils'; -import { isOnline } from 'common/lib/network-utils'; -import { portFinder } from 'common/lib/port-finder'; -import { normalizeLineEndings } from 'src/migrations/remove-default-db-constants'; +} from '@studio/common/lib/fs-utils'; +import { isOnline } from '@studio/common/lib/network-utils'; +import { portFinder } from '@studio/common/lib/port-finder'; +import { normalizeLineEndings } from '@studio/common/lib/remove-default-db-constants'; +import { Blueprint, StepDefinition } from '@wp-playground/blueprints'; import { vi, type MockInstance } from 'vitest'; import { lockAppdata, @@ -34,18 +34,18 @@ import { runBlueprint, startWordPressServer } from 'cli/lib/wordpress-server-man import { Logger } from 'cli/logger'; import { runCommand } from '../create'; -vi.mock( 'common/lib/fs-utils' ); -vi.mock( 'common/lib/network-utils' ); -vi.mock( 'common/lib/port-finder', () => ( { +vi.mock( '@studio/common/lib/fs-utils' ); +vi.mock( '@studio/common/lib/network-utils' ); +vi.mock( '@studio/common/lib/port-finder', () => ( { portFinder: { addUnavailablePort: vi.fn(), getOpenPort: vi.fn(), }, } ) ); -vi.mock( 'common/lib/passwords', () => ( { +vi.mock( '@studio/common/lib/passwords', () => ( { createPassword: vi.fn().mockReturnValue( 'generated-password-123' ), } ) ); -vi.mock( 'common/lib/blueprint-validation' ); +vi.mock( '@studio/common/lib/blueprint-validation' ); vi.mock( 'cli/lib/appdata', async () => { const actual = await vi.importActual( 'cli/lib/appdata' ); return { diff --git a/cli/commands/site/tests/delete.test.ts b/apps/cli/commands/site/tests/delete.test.ts similarity index 99% rename from cli/commands/site/tests/delete.test.ts rename to apps/cli/commands/site/tests/delete.test.ts index f6a60ffa8c..d49d0cbbdb 100644 --- a/cli/commands/site/tests/delete.test.ts +++ b/apps/cli/commands/site/tests/delete.test.ts @@ -1,4 +1,4 @@ -import { arePathsEqual } from 'common/lib/fs-utils'; +import { arePathsEqual } from '@studio/common/lib/fs-utils'; import trash from 'trash'; import { vi } from 'vitest'; import { deleteSnapshot } from 'cli/lib/api'; @@ -39,7 +39,7 @@ vi.mock( 'cli/lib/pm2-manager' ); vi.mock( 'cli/lib/site-utils' ); vi.mock( 'cli/lib/snapshots' ); vi.mock( 'cli/lib/wordpress-server-manager' ); -vi.mock( 'common/lib/fs-utils' ); +vi.mock( '@studio/common/lib/fs-utils' ); vi.mock( 'trash' ); describe( 'CLI: studio site delete', () => { diff --git a/cli/commands/site/tests/list.test.ts b/apps/cli/commands/site/tests/list.test.ts similarity index 100% rename from cli/commands/site/tests/list.test.ts rename to apps/cli/commands/site/tests/list.test.ts diff --git a/cli/commands/site/tests/set.test.ts b/apps/cli/commands/site/tests/set.test.ts similarity index 98% rename from cli/commands/site/tests/set.test.ts rename to apps/cli/commands/site/tests/set.test.ts index c764c87f33..7cabcf1701 100644 --- a/cli/commands/site/tests/set.test.ts +++ b/apps/cli/commands/site/tests/set.test.ts @@ -1,6 +1,6 @@ import { StreamedPHPResponse } from '@php-wasm/universal'; -import { getDomainNameValidationError } from 'common/lib/domains'; -import { arePathsEqual } from 'common/lib/fs-utils'; +import { getDomainNameValidationError } from '@studio/common/lib/domains'; +import { arePathsEqual } from '@studio/common/lib/fs-utils'; import { vi } from 'vitest'; import { getSiteByFolder, @@ -20,9 +20,9 @@ import { } from 'cli/lib/wordpress-server-manager'; import { runCommand } from '../set'; -vi.mock( 'common/lib/domains' ); -vi.mock( 'common/lib/fs-utils', async () => { - const actual = await vi.importActual( 'common/lib/fs-utils' ); +vi.mock( '@studio/common/lib/domains' ); +vi.mock( '@studio/common/lib/fs-utils', async () => { + const actual = await vi.importActual( '@studio/common/lib/fs-utils' ); return { ...actual, arePathsEqual: vi.fn(), diff --git a/cli/commands/site/tests/start.test.ts b/apps/cli/commands/site/tests/start.test.ts similarity index 100% rename from cli/commands/site/tests/start.test.ts rename to apps/cli/commands/site/tests/start.test.ts diff --git a/cli/commands/site/tests/status.test.ts b/apps/cli/commands/site/tests/status.test.ts similarity index 97% rename from cli/commands/site/tests/status.test.ts rename to apps/cli/commands/site/tests/status.test.ts index 4c8448ea49..f54dcb745a 100644 --- a/cli/commands/site/tests/status.test.ts +++ b/apps/cli/commands/site/tests/status.test.ts @@ -1,4 +1,4 @@ -import { getWordPressVersion } from 'common/lib/get-wordpress-version'; +import { getWordPressVersion } from '@studio/common/lib/get-wordpress-version'; import { vi } from 'vitest'; import { getSiteByFolder, getSiteUrl } from 'cli/lib/appdata'; import { connect, disconnect } from 'cli/lib/pm2-manager'; @@ -15,7 +15,7 @@ vi.mock( 'cli/lib/appdata', async () => { } ); vi.mock( 'cli/lib/pm2-manager' ); vi.mock( 'cli/lib/wordpress-server-manager' ); -vi.mock( 'common/lib/get-wordpress-version' ); +vi.mock( '@studio/common/lib/get-wordpress-version' ); describe( 'CLI: studio site status', () => { // Simple test data diff --git a/cli/commands/site/tests/stop.test.ts b/apps/cli/commands/site/tests/stop.test.ts similarity index 100% rename from cli/commands/site/tests/stop.test.ts rename to apps/cli/commands/site/tests/stop.test.ts diff --git a/cli/commands/wp.ts b/apps/cli/commands/wp.ts similarity index 100% rename from cli/commands/wp.ts rename to apps/cli/commands/wp.ts diff --git a/cli/index.ts b/apps/cli/index.ts similarity index 93% rename from cli/index.ts rename to apps/cli/index.ts index c601df5b06..36273a003e 100644 --- a/cli/index.ts +++ b/apps/cli/index.ts @@ -1,8 +1,12 @@ import path from 'node:path'; +import { + bumpAggregatedUniqueStat, + AppdataProvider, + LastBumpStatsData, +} from '@studio/common/lib/bump-stat'; +import { suppressPunycodeWarning } from '@studio/common/lib/suppress-punycode-warning'; +import { StatsGroup, StatsMetric } from '@studio/common/types/stats'; import { __ } from '@wordpress/i18n'; -import { bumpAggregatedUniqueStat, AppdataProvider, LastBumpStatsData } from 'common/lib/bump-stat'; -import { suppressPunycodeWarning } from 'common/lib/suppress-punycode-warning'; -import { StatsGroup, StatsMetric } from 'common/types/stats'; import yargs from 'yargs'; import { commandHandler as eventsCommandHandler } from 'cli/commands/_events'; import { registerCommand as registerAuthLoginCommand } from 'cli/commands/auth/login'; @@ -24,7 +28,7 @@ import { readAppdata, lockAppdata, unlockAppdata, saveAppdata } from 'cli/lib/ap import { loadTranslations } from 'cli/lib/i18n'; import { untildify } from 'cli/lib/utils'; import { StudioArgv } from 'cli/types'; -import { version } from '../package.json'; +const version = __STUDIO_CLI_VERSION__; suppressPunycodeWarning(); @@ -34,7 +38,7 @@ const cliAppdataProvider: AppdataProvider< LastBumpStatsData > = { unlock: unlockAppdata, save: async ( data ) => { // Cast is safe: data comes from readAppdata() which returns the full UserData type. - // The lock/unlock is already handled by the caller (updateLastBump in common/lib/bump-stat.ts) + // The lock/unlock is already handled by the caller (updateLastBump in /common/lib/bump-stat.ts) // eslint-disable-next-line studio/require-lock-before-save await saveAppdata( data as never ); }, diff --git a/cli/lib/api.ts b/apps/cli/lib/api.ts similarity index 97% rename from cli/lib/api.ts rename to apps/cli/lib/api.ts index 403db832cf..8ff4357d94 100644 --- a/cli/lib/api.ts +++ b/apps/cli/lib/api.ts @@ -1,7 +1,7 @@ import fs from 'fs'; +import wpcomFactory from '@studio/common/lib/wpcom-factory'; +import wpcomXhrRequest from '@studio/common/lib/wpcom-xhr-request-factory'; import { __ } from '@wordpress/i18n'; -import wpcomFactory from 'src/lib/wpcom-factory'; -import wpcomXhrRequest from 'src/lib/wpcom-xhr-request-factory'; import { z } from 'zod'; import { LoggerError } from 'cli/logger'; diff --git a/cli/lib/appdata.ts b/apps/cli/lib/appdata.ts similarity index 93% rename from cli/lib/appdata.ts rename to apps/cli/lib/appdata.ts index f5e213997c..202482af65 100644 --- a/cli/lib/appdata.ts +++ b/apps/cli/lib/appdata.ts @@ -1,15 +1,15 @@ import fs from 'fs'; import os from 'os'; import path from 'path'; +import { LOCKFILE_NAME, LOCKFILE_STALE_TIME, LOCKFILE_WAIT_TIME } from '@studio/common/constants'; +import { arePathsEqual, isWordPressDirectory } from '@studio/common/lib/fs-utils'; +import { lockFileAsync, unlockFileAsync } from '@studio/common/lib/lockfile'; +import { getAuthenticationUrl } from '@studio/common/lib/oauth'; +import { siteDetailsSchema } from '@studio/common/lib/site-events'; +import { snapshotSchema } from '@studio/common/types/snapshot'; +import { StatsMetric } from '@studio/common/types/stats'; import { __, sprintf } from '@wordpress/i18n'; import { readFile, writeFile } from 'atomically'; -import { LOCKFILE_NAME, LOCKFILE_STALE_TIME, LOCKFILE_WAIT_TIME } from 'common/constants'; -import { arePathsEqual, isWordPressDirectory } from 'common/lib/fs-utils'; -import { lockFileAsync, unlockFileAsync } from 'common/lib/lockfile'; -import { getAuthenticationUrl } from 'common/lib/oauth'; -import { siteDetailsSchema } from 'common/lib/site-events'; -import { snapshotSchema } from 'common/types/snapshot'; -import { StatsMetric } from 'common/types/stats'; import { z } from 'zod'; import { validateAccessToken } from 'cli/lib/api'; import { LoggerError } from 'cli/logger'; diff --git a/cli/lib/archive.ts b/apps/cli/lib/archive.ts similarity index 95% rename from cli/lib/archive.ts rename to apps/cli/lib/archive.ts index 178a409685..eaaacc3e7a 100644 --- a/cli/lib/archive.ts +++ b/apps/cli/lib/archive.ts @@ -1,8 +1,8 @@ import fs from 'fs'; import path from 'path'; +import { isExcludedFromArchive } from '@studio/common/lib/fs-utils'; import { __ } from '@wordpress/i18n'; import archiver, { EntryData } from 'archiver'; -import { isExcludedFromArchive } from 'common/lib/fs-utils'; import { LoggerError } from 'cli/logger'; const ZIP_COMPRESSION_LEVEL = 9; diff --git a/cli/lib/browser.ts b/apps/cli/lib/browser.ts similarity index 100% rename from cli/lib/browser.ts rename to apps/cli/lib/browser.ts diff --git a/cli/lib/certificate-manager.ts b/apps/cli/lib/certificate-manager.ts similarity index 100% rename from cli/lib/certificate-manager.ts rename to apps/cli/lib/certificate-manager.ts diff --git a/cli/lib/cli-args-sanitizer.ts b/apps/cli/lib/cli-args-sanitizer.ts similarity index 100% rename from cli/lib/cli-args-sanitizer.ts rename to apps/cli/lib/cli-args-sanitizer.ts diff --git a/cli/lib/hosts-file.ts b/apps/cli/lib/hosts-file.ts similarity index 99% rename from cli/lib/hosts-file.ts rename to apps/cli/lib/hosts-file.ts index 233a0ee4de..ebc9e68ceb 100644 --- a/cli/lib/hosts-file.ts +++ b/apps/cli/lib/hosts-file.ts @@ -3,7 +3,7 @@ import { domainToASCII } from 'node:url'; import { platform, tmpdir } from 'os'; import path from 'path'; import { promisify } from 'util'; -import { escapeRegex } from 'common/lib/escape-regex'; +import { escapeRegex } from '@studio/common/lib/escape-regex'; import { sudoExec } from 'cli/lib/sudo-exec'; const readFile = promisify( fs.readFile ); diff --git a/cli/lib/i18n.ts b/apps/cli/lib/i18n.ts similarity index 65% rename from cli/lib/i18n.ts rename to apps/cli/lib/i18n.ts index 096410185a..fda1d1918d 100644 --- a/cli/lib/i18n.ts +++ b/apps/cli/lib/i18n.ts @@ -1,31 +1,31 @@ -import { defaultI18n } from '@wordpress/i18n'; import { SupportedLocale, getLocaleData, DEFAULT_LOCALE, isSupportedLocale, -} from 'common/lib/locale'; +} from '@studio/common/lib/locale'; +import { defaultI18n } from '@wordpress/i18n'; import { readAppdata } from 'cli/lib/appdata'; // Yargs locale files imported directly so they're inlined in the bundle. // y18n's file-based locale resolution breaks after Vite bundling because the // resolved directory path no longer matches the actual location of locale files. -import yargsLocaleDe from '../../node_modules/yargs/locales/de.json'; -import yargsLocaleEs from '../../node_modules/yargs/locales/es.json'; -import yargsLocaleFr from '../../node_modules/yargs/locales/fr.json'; -import yargsLocaleHe from '../../node_modules/yargs/locales/he.json'; -import yargsLocaleHu from '../../node_modules/yargs/locales/hu.json'; -import yargsLocaleId from '../../node_modules/yargs/locales/id.json'; -import yargsLocaleIt from '../../node_modules/yargs/locales/it.json'; -import yargsLocaleJa from '../../node_modules/yargs/locales/ja.json'; -import yargsLocaleKo from '../../node_modules/yargs/locales/ko.json'; -import yargsLocaleNl from '../../node_modules/yargs/locales/nl.json'; -import yargsLocalePl from '../../node_modules/yargs/locales/pl.json'; -import yargsLocalePtBR from '../../node_modules/yargs/locales/pt_BR.json'; -import yargsLocaleRu from '../../node_modules/yargs/locales/ru.json'; -import yargsLocaleTr from '../../node_modules/yargs/locales/tr.json'; -import yargsLocaleUkUA from '../../node_modules/yargs/locales/uk_UA.json'; -import yargsLocaleZhCN from '../../node_modules/yargs/locales/zh_CN.json'; -import yargsLocaleZhTW from '../../node_modules/yargs/locales/zh_TW.json'; +import yargsLocaleDe from '../../../node_modules/yargs/locales/de.json'; +import yargsLocaleEs from '../../../node_modules/yargs/locales/es.json'; +import yargsLocaleFr from '../../../node_modules/yargs/locales/fr.json'; +import yargsLocaleHe from '../../../node_modules/yargs/locales/he.json'; +import yargsLocaleHu from '../../../node_modules/yargs/locales/hu.json'; +import yargsLocaleId from '../../../node_modules/yargs/locales/id.json'; +import yargsLocaleIt from '../../../node_modules/yargs/locales/it.json'; +import yargsLocaleJa from '../../../node_modules/yargs/locales/ja.json'; +import yargsLocaleKo from '../../../node_modules/yargs/locales/ko.json'; +import yargsLocaleNl from '../../../node_modules/yargs/locales/nl.json'; +import yargsLocalePl from '../../../node_modules/yargs/locales/pl.json'; +import yargsLocalePtBR from '../../../node_modules/yargs/locales/pt_BR.json'; +import yargsLocaleRu from '../../../node_modules/yargs/locales/ru.json'; +import yargsLocaleTr from '../../../node_modules/yargs/locales/tr.json'; +import yargsLocaleUkUA from '../../../node_modules/yargs/locales/uk_UA.json'; +import yargsLocaleZhCN from '../../../node_modules/yargs/locales/zh_CN.json'; +import yargsLocaleZhTW from '../../../node_modules/yargs/locales/zh_TW.json'; const yargsLocaleDataMap: Partial< Record< SupportedLocale, Record< string, unknown > > > = { de: yargsLocaleDe, diff --git a/cli/lib/language-packs.ts b/apps/cli/lib/language-packs.ts similarity index 97% rename from cli/lib/language-packs.ts rename to apps/cli/lib/language-packs.ts index dae1037f97..7e6b2df56e 100644 --- a/cli/lib/language-packs.ts +++ b/apps/cli/lib/language-packs.ts @@ -1,6 +1,6 @@ import fs from 'fs'; import path from 'path'; -import { pathExists } from 'common/lib/fs-utils'; +import { pathExists } from '@studio/common/lib/fs-utils'; import { getLanguagePacksPath } from 'cli/lib/server-files'; /** diff --git a/cli/lib/pm2-manager.ts b/apps/cli/lib/pm2-manager.ts similarity index 97% rename from cli/lib/pm2-manager.ts rename to apps/cli/lib/pm2-manager.ts index 4e7a8d2b2e..b369003414 100644 --- a/cli/lib/pm2-manager.ts +++ b/apps/cli/lib/pm2-manager.ts @@ -1,10 +1,10 @@ import fs from 'fs'; import os from 'os'; import path from 'path'; -import { LOCKFILE_STALE_TIME, LOCKFILE_WAIT_TIME } from 'common/constants'; -import { cacheFunctionTTL } from 'common/lib/cache-function-ttl'; -import { lockFileAsync, unlockFileAsync } from 'common/lib/lockfile'; -import { SITE_EVENTS } from 'common/lib/site-events'; +import { LOCKFILE_STALE_TIME, LOCKFILE_WAIT_TIME } from '@studio/common/constants'; +import { cacheFunctionTTL } from '@studio/common/lib/cache-function-ttl'; +import { lockFileAsync, unlockFileAsync } from '@studio/common/lib/lockfile'; +import { SITE_EVENTS } from '@studio/common/lib/site-events'; import { custom as PM2, StartOptions } from 'pm2'; import axon from 'pm2-axon'; import { getAppdataPath } from 'cli/lib/appdata'; diff --git a/cli/lib/proxy-server.ts b/apps/cli/lib/proxy-server.ts similarity index 100% rename from cli/lib/proxy-server.ts rename to apps/cli/lib/proxy-server.ts diff --git a/cli/lib/run-wp-cli-command.ts b/apps/cli/lib/run-wp-cli-command.ts similarity index 96% rename from cli/lib/run-wp-cli-command.ts rename to apps/cli/lib/run-wp-cli-command.ts index cf2f09d54b..8ccd7bd8de 100644 --- a/cli/lib/run-wp-cli-command.ts +++ b/apps/cli/lib/run-wp-cli-command.ts @@ -7,10 +7,10 @@ import { setPhpIniEntries, } from '@php-wasm/universal'; import { createSpawnHandler } from '@php-wasm/util'; +import { getMuPlugins } from '@studio/common/lib/mu-plugins'; +import { LatestSupportedPHPVersion } from '@studio/common/types/php-versions'; import { __ } from '@wordpress/i18n'; import { setupPlatformLevelMuPlugins } from '@wp-playground/wordpress'; -import { getMuPlugins } from 'common/lib/mu-plugins'; -import { LatestSupportedPHPVersion } from 'common/types/php-versions'; import { getSqliteCommandPath, getWpCliPharPath } from 'cli/lib/server-files'; const PLAYGROUND_INTERNAL_SHARED_FOLDER = '/internal/shared'; diff --git a/cli/lib/server-files.ts b/apps/cli/lib/server-files.ts similarity index 100% rename from cli/lib/server-files.ts rename to apps/cli/lib/server-files.ts diff --git a/cli/lib/site-language.ts b/apps/cli/lib/site-language.ts similarity index 98% rename from cli/lib/site-language.ts rename to apps/cli/lib/site-language.ts index 72717e27e9..add7b591f7 100644 --- a/cli/lib/site-language.ts +++ b/apps/cli/lib/site-language.ts @@ -2,7 +2,7 @@ import fs from 'fs'; import path from 'path'; import { Locale } from '@formatjs/intl-locale'; import { match } from '@formatjs/intl-localematcher'; -import { DEFAULT_LOCALE } from 'common/lib/locale'; +import { DEFAULT_LOCALE } from '@studio/common/lib/locale'; import { getAppLocale } from 'cli/lib/i18n'; import { getServerFilesPath } from 'cli/lib/server-files'; diff --git a/cli/lib/site-utils.ts b/apps/cli/lib/site-utils.ts similarity index 96% rename from cli/lib/site-utils.ts rename to apps/cli/lib/site-utils.ts index 6991d396ac..a6fcd8e42c 100644 --- a/cli/lib/site-utils.ts +++ b/apps/cli/lib/site-utils.ts @@ -1,6 +1,6 @@ +import { decodePassword } from '@studio/common/lib/passwords'; +import { SiteCommandLoggerAction as LoggerAction } from '@studio/common/logger-actions'; import { __ } from '@wordpress/i18n'; -import { decodePassword } from 'common/lib/passwords'; -import { SiteCommandLoggerAction as LoggerAction } from 'common/logger-actions'; import { getSiteUrl, readAppdata, SiteData } from 'cli/lib/appdata'; import { openBrowser } from 'cli/lib/browser'; import { generateSiteCertificate } from 'cli/lib/certificate-manager'; diff --git a/cli/lib/snapshots.ts b/apps/cli/lib/snapshots.ts similarity index 96% rename from cli/lib/snapshots.ts rename to apps/cli/lib/snapshots.ts index 374e29646d..9205ab9b08 100644 --- a/cli/lib/snapshots.ts +++ b/apps/cli/lib/snapshots.ts @@ -1,6 +1,6 @@ +import { HOUR_MS, DAY_MS, DEMO_SITE_EXPIRATION_DAYS } from '@studio/common/constants'; +import { Snapshot } from '@studio/common/types/snapshot'; import { __, sprintf } from '@wordpress/i18n'; -import { HOUR_MS, DAY_MS, DEMO_SITE_EXPIRATION_DAYS } from 'common/constants'; -import { Snapshot } from 'common/types/snapshot'; import { addDays, addHours, DurationUnit, formatDuration, intervalToDuration } from 'date-fns'; import { getAuthToken, diff --git a/cli/lib/sqlite-integration.ts b/apps/cli/lib/sqlite-integration.ts similarity index 79% rename from cli/lib/sqlite-integration.ts rename to apps/cli/lib/sqlite-integration.ts index 1c69aa248e..2fc32ba61b 100644 --- a/cli/lib/sqlite-integration.ts +++ b/apps/cli/lib/sqlite-integration.ts @@ -1,4 +1,4 @@ -import { SqliteIntegrationProvider } from 'common/lib/sqlite-integration'; +import { SqliteIntegrationProvider } from '@studio/common/lib/sqlite-integration'; import { getServerFilesPath } from 'cli/lib/server-files'; const SQLITE_FILENAME = 'sqlite-database-integration'; @@ -30,3 +30,7 @@ export async function installSqliteIntegration( sitePath: string ) { export async function keepSqliteIntegrationUpdated( sitePath: string ) { return provider.keepSqliteIntegrationUpdated( sitePath ); } + +export async function isSqliteIntegrationInstalled( sitePath: string ) { + return provider.isSqliteInstalled( sitePath ); +} diff --git a/cli/lib/sudo-exec.ts b/apps/cli/lib/sudo-exec.ts similarity index 100% rename from cli/lib/sudo-exec.ts rename to apps/cli/lib/sudo-exec.ts diff --git a/cli/lib/tests/api.test.ts b/apps/cli/lib/tests/api.test.ts similarity index 67% rename from cli/lib/tests/api.test.ts rename to apps/cli/lib/tests/api.test.ts index fb9e780f1a..867ed6ebec 100644 --- a/cli/lib/tests/api.test.ts +++ b/apps/cli/lib/tests/api.test.ts @@ -1,6 +1,5 @@ import fs from 'fs'; -import { createMock } from 'src/lib/test-utils'; -import wpcomFactory from 'src/lib/wpcom-factory'; +import wpcomFactory from '@studio/common/lib/wpcom-factory'; import { vi } from 'vitest'; import { uploadArchive, waitForSiteReady, SnapshotStatus } from 'cli/lib/api'; import { LoggerError } from 'cli/logger'; @@ -12,11 +11,16 @@ vi.mock( 'fs', () => ( { } ) ); vi.mock( 'wpcom' ); vi.mock( 'wpcom-xhr-request' ); -vi.mock( 'src/lib/wpcom-factory', () => ( { +vi.mock( '@studio/common/lib/wpcom-factory', () => ( { __esModule: true, default: vi.fn(), } ) ); +type WpcomReqMethods = Pick< ReturnType< typeof wpcomFactory >[ 'req' ], 'post' | 'get' >; +type WpcomFactory = ReturnType< typeof wpcomFactory >; +const createWpcomMock = ( req: Partial< WpcomReqMethods > ): WpcomFactory => + ( { req: req } ) as WpcomFactory; + describe( 'API Module', () => { const mockArchivePath = '/mock/archive.zip'; const mockToken = 'mock-token-123'; @@ -37,14 +41,10 @@ describe( 'API Module', () => { atomic_site_id: mockSiteId, }; - const mockWpcom = { - req: createMock< ReturnType< typeof wpcomFactory >[ 'req' ] >( { - post: vi.fn().mockResolvedValue( mockResponse ), - } ), - }; - vi.mocked( wpcomFactory ).mockReturnValue( - mockWpcom as unknown as ReturnType< typeof wpcomFactory > - ); + const mockWpcom = createWpcomMock( { + post: vi.fn().mockResolvedValue( mockResponse ), + } ); + vi.mocked( wpcomFactory ).mockReturnValue( mockWpcom ); const result = await uploadArchive( mockArchivePath, mockToken, mockWordPressVersion ); @@ -71,17 +71,13 @@ describe( 'API Module', () => { } ); it( 'should successfully send wordpress_version to create new site from zip', async () => { - const mockWpcom = { - req: createMock< ReturnType< typeof wpcomFactory >[ 'req' ] >( { - post: vi.fn().mockResolvedValue( { - domain_name: mockSiteUrl, - atomic_site_id: mockSiteId, - } ), + const mockWpcom = createWpcomMock( { + post: vi.fn().mockResolvedValue( { + domain_name: mockSiteUrl, + atomic_site_id: mockSiteId, } ), - }; - vi.mocked( wpcomFactory ).mockReturnValue( - mockWpcom as unknown as ReturnType< typeof wpcomFactory > - ); + } ); + vi.mocked( wpcomFactory ).mockReturnValue( mockWpcom ); await uploadArchive( mockArchivePath, mockToken, mockWordPressVersion ); expect( mockWpcom.req.post ).toHaveBeenCalledWith( { @@ -103,14 +99,10 @@ describe( 'API Module', () => { it( 'should throw LoggerError for API errors', async () => { const mockError = new Error( 'API error' ); - const mockWpcom = { - req: createMock< ReturnType< typeof wpcomFactory >[ 'req' ] >( { - post: vi.fn().mockRejectedValue( mockError ), - } ), - }; - vi.mocked( wpcomFactory ).mockReturnValue( - mockWpcom as unknown as ReturnType< typeof wpcomFactory > - ); + const mockWpcom = createWpcomMock( { + post: vi.fn().mockRejectedValue( mockError ), + } ); + vi.mocked( wpcomFactory ).mockReturnValue( mockWpcom ); await expect( uploadArchive( mockArchivePath, mockToken, mockWordPressVersion ) @@ -123,14 +115,10 @@ describe( 'API Module', () => { some_field: 'value', }; - const mockWpcom = { - req: createMock< ReturnType< typeof wpcomFactory >[ 'req' ] >( { - post: vi.fn().mockResolvedValue( invalidResponse ), - } ), - }; - vi.mocked( wpcomFactory ).mockReturnValue( - mockWpcom as unknown as ReturnType< typeof wpcomFactory > - ); + const mockWpcom = createWpcomMock( { + post: vi.fn().mockResolvedValue( invalidResponse ), + } ); + vi.mocked( wpcomFactory ).mockReturnValue( mockWpcom ); await expect( uploadArchive( mockArchivePath, mockToken, mockWordPressVersion ) @@ -166,17 +154,13 @@ describe( 'API Module', () => { is_deleted: 'false', }; - const mockWpcom = { - req: createMock< ReturnType< typeof wpcomFactory >[ 'req' ] >( { - get: vi - .fn() - .mockResolvedValueOnce( pendingResponse ) - .mockResolvedValueOnce( activeResponse ), - } ), - }; - vi.mocked( wpcomFactory ).mockReturnValue( - mockWpcom as unknown as ReturnType< typeof wpcomFactory > - ); + const mockWpcom = createWpcomMock( { + get: vi + .fn() + .mockResolvedValueOnce( pendingResponse ) + .mockResolvedValueOnce( activeResponse ), + } ); + vi.mocked( wpcomFactory ).mockReturnValue( mockWpcom ); const result = await waitForSiteReady( mockSiteId, mockToken ); expect( mockWpcom.req.get ).toHaveBeenCalledTimes( 2 ); @@ -191,14 +175,10 @@ describe( 'API Module', () => { is_deleted: 'false', }; - const mockWpcom = { - req: createMock< ReturnType< typeof wpcomFactory >[ 'req' ] >( { - get: vi.fn().mockResolvedValue( pendingResponse ), - } ), - }; - vi.mocked( wpcomFactory ).mockReturnValue( - mockWpcom as unknown as ReturnType< typeof wpcomFactory > - ); + const mockWpcom = createWpcomMock( { + get: vi.fn().mockResolvedValue( pendingResponse ), + } ); + vi.mocked( wpcomFactory ).mockReturnValue( mockWpcom ); try { await waitForSiteReady( mockSiteId, mockToken ); @@ -221,17 +201,13 @@ describe( 'API Module', () => { is_deleted: 'false', }; - const mockWpcom = { - req: createMock< ReturnType< typeof wpcomFactory >[ 'req' ] >( { - get: vi - .fn() - .mockResolvedValueOnce( invalidResponse ) - .mockResolvedValueOnce( validResponse ), - } ), - }; - vi.mocked( wpcomFactory ).mockReturnValue( - mockWpcom as unknown as ReturnType< typeof wpcomFactory > - ); + const mockWpcom = createWpcomMock( { + get: vi + .fn() + .mockResolvedValueOnce( invalidResponse ) + .mockResolvedValueOnce( validResponse ), + } ); + vi.mocked( wpcomFactory ).mockReturnValue( mockWpcom ); const result = await waitForSiteReady( mockSiteId, mockToken ); expect( mockWpcom.req.get ).toHaveBeenCalledTimes( 2 ); diff --git a/cli/lib/tests/appdata.test.ts b/apps/cli/lib/tests/appdata.test.ts similarity index 97% rename from cli/lib/tests/appdata.test.ts rename to apps/cli/lib/tests/appdata.test.ts index 325a453609..6565af2c67 100644 --- a/cli/lib/tests/appdata.test.ts +++ b/apps/cli/lib/tests/appdata.test.ts @@ -1,9 +1,9 @@ import fs from 'fs'; import os from 'os'; import path from 'path'; +import { arePathsEqual } from '@studio/common/lib/fs-utils'; +import { StatsMetric } from '@studio/common/types/stats'; import { readFile, writeFile } from 'atomically'; -import { arePathsEqual } from 'common/lib/fs-utils'; -import { StatsMetric } from 'common/types/stats'; import { vi } from 'vitest'; import { readAppdata, @@ -35,7 +35,7 @@ vi.mock( 'atomically', () => ( { writeFile: vi.fn(), } ) ); -vi.mock( 'common/lib/fs-utils', () => ( { +vi.mock( '@studio/common/lib/fs-utils', () => ( { arePathsEqual: vi.fn(), } ) ); vi.mock( 'cli/lib/api', () => ( { diff --git a/cli/lib/tests/archive.test.ts b/apps/cli/lib/tests/archive.test.ts similarity index 100% rename from cli/lib/tests/archive.test.ts rename to apps/cli/lib/tests/archive.test.ts diff --git a/cli/lib/tests/pm2-manager.test.ts b/apps/cli/lib/tests/pm2-manager.test.ts similarity index 99% rename from cli/lib/tests/pm2-manager.test.ts rename to apps/cli/lib/tests/pm2-manager.test.ts index a14a6770cd..d3783448b3 100644 --- a/cli/lib/tests/pm2-manager.test.ts +++ b/apps/cli/lib/tests/pm2-manager.test.ts @@ -1,5 +1,5 @@ import os from 'os'; -import { clearCache } from 'common/lib/cache-function-ttl'; +import { clearCache } from '@studio/common/lib/cache-function-ttl'; import { vi } from 'vitest'; import { getAppdataPath } from 'cli/lib/appdata'; import { ManagerMessage } from '../types/wordpress-server-ipc'; diff --git a/cli/lib/tests/site-utils.test.ts b/apps/cli/lib/tests/site-utils.test.ts similarity index 98% rename from cli/lib/tests/site-utils.test.ts rename to apps/cli/lib/tests/site-utils.test.ts index 47ec3c3885..2cfee4dca3 100644 --- a/cli/lib/tests/site-utils.test.ts +++ b/apps/cli/lib/tests/site-utils.test.ts @@ -1,4 +1,4 @@ -import { SiteCommandLoggerAction as LoggerAction } from 'common/logger-actions'; +import { SiteCommandLoggerAction as LoggerAction } from '@studio/common/logger-actions'; import { vi, type Mock } from 'vitest'; import { SiteData, readAppdata } from 'cli/lib/appdata'; import { isProxyProcessRunning, stopProxyProcess } from 'cli/lib/pm2-manager'; diff --git a/cli/lib/tests/snapshots.test.ts b/apps/cli/lib/tests/snapshots.test.ts similarity index 99% rename from cli/lib/tests/snapshots.test.ts rename to apps/cli/lib/tests/snapshots.test.ts index feb3f9e704..7c824d090b 100644 --- a/cli/lib/tests/snapshots.test.ts +++ b/apps/cli/lib/tests/snapshots.test.ts @@ -42,7 +42,7 @@ vi.mock( 'lockfile', () => ( { lock: mocks.lockfileLock, unlock: mocks.lockfileUnlock, } ) ); -vi.mock( 'common/lib/fs-utils', () => ( { +vi.mock( '@studio/common/lib/fs-utils', () => ( { arePathsEqual: mocks.arePathsEqual, isWordPressDirectory: mocks.isWordPressDirectory, } ) ); diff --git a/cli/lib/tests/utils.test.ts b/apps/cli/lib/tests/utils.test.ts similarity index 100% rename from cli/lib/tests/utils.test.ts rename to apps/cli/lib/tests/utils.test.ts diff --git a/cli/lib/tests/validation.test.ts b/apps/cli/lib/tests/validation.test.ts similarity index 92% rename from cli/lib/tests/validation.test.ts rename to apps/cli/lib/tests/validation.test.ts index 5318c44542..c49beeb75b 100644 --- a/cli/lib/tests/validation.test.ts +++ b/apps/cli/lib/tests/validation.test.ts @@ -1,6 +1,9 @@ import fs from 'fs'; import path from 'path'; -import { calculateDirectorySizeForArchive, isWordPressDirectory } from 'common/lib/fs-utils'; +import { + calculateDirectorySizeForArchive, + isWordPressDirectory, +} from '@studio/common/lib/fs-utils'; import { vi } from 'vitest'; import { validateSiteSize } from 'cli/lib/validation'; import { LoggerError } from 'cli/logger'; @@ -15,7 +18,7 @@ vi.mock( 'path', () => ( { join: vi.fn(), }, } ) ); -vi.mock( 'common/lib/fs-utils', () => ( { +vi.mock( '@studio/common/lib/fs-utils', () => ( { calculateDirectorySizeForArchive: vi.fn(), isWordPressDirectory: vi.fn(), } ) ); diff --git a/cli/lib/tests/wordpress-server-manager.test.ts b/apps/cli/lib/tests/wordpress-server-manager.test.ts similarity index 96% rename from cli/lib/tests/wordpress-server-manager.test.ts rename to apps/cli/lib/tests/wordpress-server-manager.test.ts index 65b9f8da7d..b9635aa091 100644 --- a/cli/lib/tests/wordpress-server-manager.test.ts +++ b/apps/cli/lib/tests/wordpress-server-manager.test.ts @@ -52,22 +52,24 @@ describe( 'WordPress Server Manager', () => { } ); function setupIpcMocks(): void { - // Send ready message after a tick (simulating async bus initialization) - process.nextTick( () => { + // Emit "ready" repeatedly to avoid races where the listener is attached after one-shot emission. + const readyInterval = setInterval( () => { mockBus.emit( 'process:msg', { process: { name: mockProcessDescription.name, pm_id: mockProcessDescription.pmId }, raw: { topic: 'ready' }, } ); - } ); + }, 1 ); vi.mocked( pm2Manager.sendMessageToProcess ).mockImplementation( ( pmId, message ) => { + clearInterval( readyInterval ); // Send result message only after sendMessageToProcess is called - process.nextTick( () => { + setImmediate( () => { mockBus.emit( 'process:msg', { process: { name: mockProcessDescription.name, pm_id: mockProcessDescription.pmId }, raw: { topic: 'result', originalMessageId: message.messageId, + result: {}, }, } ); } ); diff --git a/cli/lib/types/pm2.ts b/apps/cli/lib/types/pm2.ts similarity index 100% rename from cli/lib/types/pm2.ts rename to apps/cli/lib/types/pm2.ts diff --git a/cli/lib/types/wordpress-server-ipc.ts b/apps/cli/lib/types/wordpress-server-ipc.ts similarity index 100% rename from cli/lib/types/wordpress-server-ipc.ts rename to apps/cli/lib/types/wordpress-server-ipc.ts diff --git a/cli/lib/utils.ts b/apps/cli/lib/utils.ts similarity index 100% rename from cli/lib/utils.ts rename to apps/cli/lib/utils.ts diff --git a/cli/lib/validation-error.ts b/apps/cli/lib/validation-error.ts similarity index 100% rename from cli/lib/validation-error.ts rename to apps/cli/lib/validation-error.ts diff --git a/cli/lib/validation.ts b/apps/cli/lib/validation.ts similarity index 86% rename from cli/lib/validation.ts rename to apps/cli/lib/validation.ts index d5bcda6b27..590aa952c3 100644 --- a/cli/lib/validation.ts +++ b/apps/cli/lib/validation.ts @@ -1,7 +1,7 @@ import path from 'path'; +import { DEMO_SITE_SIZE_LIMIT_BYTES, DEMO_SITE_SIZE_LIMIT_GB } from '@studio/common/constants'; +import { calculateDirectorySizeForArchive } from '@studio/common/lib/fs-utils'; import { __, sprintf } from '@wordpress/i18n'; -import { DEMO_SITE_SIZE_LIMIT_BYTES, DEMO_SITE_SIZE_LIMIT_GB } from 'common/constants'; -import { calculateDirectorySizeForArchive } from 'common/lib/fs-utils'; import { LoggerError } from 'cli/logger'; export async function validateSiteSize( siteFolder: string ): Promise< true > { diff --git a/cli/lib/wordpress-server-manager.ts b/apps/cli/lib/wordpress-server-manager.ts similarity index 99% rename from cli/lib/wordpress-server-manager.ts rename to apps/cli/lib/wordpress-server-manager.ts index 28b5ebbcfc..3609082a22 100644 --- a/cli/lib/wordpress-server-manager.ts +++ b/apps/cli/lib/wordpress-server-manager.ts @@ -9,8 +9,8 @@ import { PLAYGROUND_CLI_ACTIVITY_CHECK_INTERVAL, PLAYGROUND_CLI_INACTIVITY_TIMEOUT, PLAYGROUND_CLI_MAX_TIMEOUT, -} from 'common/constants'; -import { SITE_EVENTS } from 'common/lib/site-events'; +} from '@studio/common/constants'; +import { SITE_EVENTS } from '@studio/common/lib/site-events'; import { z } from 'zod'; import { SiteData } from 'cli/lib/appdata'; import { diff --git a/cli/logger.ts b/apps/cli/logger.ts similarity index 100% rename from cli/logger.ts rename to apps/cli/logger.ts diff --git a/apps/cli/package.json b/apps/cli/package.json new file mode 100644 index 0000000000..21ff95728b --- /dev/null +++ b/apps/cli/package.json @@ -0,0 +1,41 @@ +{ + "name": "studio-cli", + "author": "Automattic Inc.", + "private": true, + "productName": "Studio CLI", + "description": "WordPress Studio CLI", + "license": "GPL-2.0-or-later", + "main": "index.js", + "dependencies": { + "@php-wasm/universal": "3.1.1", + "@studio/common": "file:../../tools/common", + "@vscode/sudo-prompt": "^9.3.2", + "@wp-playground/blueprints": "3.1.1", + "@wp-playground/cli": "3.1.1", + "@wp-playground/common": "3.1.1", + "@wp-playground/storage": "3.1.1", + "cli-table3": "^0.6.5", + "http-proxy": "^1.18.1", + "node-forge": "^1.3.3", + "pm2": "^6.0.14", + "pm2-axon": "^4.0.1", + "trash": "^10.0.1", + "yargs": "^18.0.0", + "yargs-parser": "^22.0.0" + }, + "scripts": { + "build": "vite build --config ./vite.config.ts", + "install:bundle": "npm install --omit=dev --no-package-lock --no-progress --install-links --no-workspaces && patch-package", + "package": "npm run install:bundle && npm run build", + "watch": "vite build --config ./vite.config.ts --watch" + }, + "devDependencies": { + "@types/archiver": "^6.0.4", + "@types/http-proxy": "^1.17.17", + "@types/node-forge": "^1.3.14", + "@types/yargs": "^17.0.35", + "patch-package": "^8.0.1", + "vite": "^7.3.1", + "vite-plugin-static-copy": "^3.1.5" + } +} diff --git a/patches/@wp-playground+wordpress+3.1.1.patch b/apps/cli/patches/@wp-playground+wordpress+3.1.1.patch similarity index 100% rename from patches/@wp-playground+wordpress+3.1.1.patch rename to apps/cli/patches/@wp-playground+wordpress+3.1.1.patch diff --git a/cli/patches/pm2+6.0.14.patch b/apps/cli/patches/pm2+6.0.14.patch similarity index 100% rename from cli/patches/pm2+6.0.14.patch rename to apps/cli/patches/pm2+6.0.14.patch diff --git a/cli/patches/pm2-axon+4.0.1.patch b/apps/cli/patches/pm2-axon+4.0.1.patch similarity index 100% rename from cli/patches/pm2-axon+4.0.1.patch rename to apps/cli/patches/pm2-axon+4.0.1.patch diff --git a/cli/patches/ps-man+1.1.8.patch b/apps/cli/patches/ps-man+1.1.8.patch similarity index 100% rename from cli/patches/ps-man+1.1.8.patch rename to apps/cli/patches/ps-man+1.1.8.patch diff --git a/cli/proxy-daemon.ts b/apps/cli/proxy-daemon.ts similarity index 100% rename from cli/proxy-daemon.ts rename to apps/cli/proxy-daemon.ts diff --git a/cli/tests/test-utils.ts b/apps/cli/tests/test-utils.ts similarity index 100% rename from cli/tests/test-utils.ts rename to apps/cli/tests/test-utils.ts diff --git a/apps/cli/tsconfig.json b/apps/cli/tsconfig.json new file mode 100644 index 0000000000..992b90670d --- /dev/null +++ b/apps/cli/tsconfig.json @@ -0,0 +1,17 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "composite": true, + "baseUrl": "../..", + "paths": { + "*": [ "node_modules/*" ], + "cli/*": [ "apps/cli/*" ], + "src/*": [ "apps/studio/src/*" ], + "vendor/*": [ "vendor/*" ], + "@studio/common/*": [ "tools/common/*" ] + } + }, + "include": [ "**/*" ], + "exclude": [ "**/__mocks__/**/*", "**/node_modules/**/*", "**/dist/**/*", "**/out/**/*" ], + "references": [ { "path": "../../tools/common" } ] +} diff --git a/cli/types.ts b/apps/cli/types.ts similarity index 100% rename from cli/types.ts rename to apps/cli/types.ts diff --git a/vite.cli.config.ts b/apps/cli/vite.config.ts similarity index 56% rename from vite.cli.config.ts rename to apps/cli/vite.config.ts index 03f1e66973..330afec297 100644 --- a/vite.cli.config.ts +++ b/apps/cli/vite.config.ts @@ -1,31 +1,31 @@ -import { resolve } from 'path'; -import { defineConfig } from 'vite'; +import { existsSync, readFileSync } from 'fs'; +import { dirname, join, resolve } from 'path'; +import { defineConfig, normalizePath } from 'vite'; import { viteStaticCopy } from 'vite-plugin-static-copy'; -import { existsSync } from 'fs'; -const yargsLocalesPath = resolve( __dirname, 'node_modules/yargs/locales' ); -const cliNodeModulesPath = resolve( __dirname, 'cli/node_modules' ); +const yargsPath = dirname( require.resolve( 'yargs' ) ); +const yargsLocalesPath = join( yargsPath, 'locales' ); +const cliNodeModulesPath = resolve( __dirname, 'node_modules' ); +const packageVersion = JSON.parse( + readFileSync( resolve( __dirname, '..', 'studio', 'package.json' ), 'utf-8' ) +).version; export default defineConfig( { plugins: [ - ...( existsSync( yargsLocalesPath ) - ? [ - viteStaticCopy( { - targets: [ - { - src: 'node_modules/yargs/locales/*', - dest: '../locales', - }, - ], - } ), - ] - : [] ), + viteStaticCopy( { + targets: [ + { + src: normalizePath( join( yargsLocalesPath, '*' ) ), + dest: '../locales', + }, + ], + } ), ...( existsSync( cliNodeModulesPath ) ? [ viteStaticCopy( { targets: [ { - src: 'cli/node_modules', + src: 'node_modules', dest: '.', }, ], @@ -36,9 +36,9 @@ export default defineConfig( { build: { lib: { entry: { - main: resolve( __dirname, 'cli/index.ts' ), - 'proxy-daemon': resolve( __dirname, 'cli/proxy-daemon.ts' ), - 'wordpress-server-child': resolve( __dirname, 'cli/wordpress-server-child.ts' ), + main: resolve( __dirname, 'index.ts' ), + 'proxy-daemon': resolve( __dirname, 'proxy-daemon.ts' ), + 'wordpress-server-child': resolve( __dirname, 'wordpress-server-child.ts' ), }, name: 'StudioCLI', formats: [ 'cjs' ], @@ -77,16 +77,17 @@ export default defineConfig( { }, resolve: { alias: { - cli: resolve( __dirname, 'cli' ), - src: resolve( __dirname, 'src' ), - vendor: resolve( __dirname, 'vendor' ), - common: resolve( __dirname, 'common' ), + cli: resolve( __dirname, '.' ), + '@studio/common': resolve( __dirname, '../../tools/common' ), '@wp-playground/blueprints/blueprint-schema-validator': resolve( __dirname, - 'node_modules/@wp-playground/blueprints/blueprint-schema-validator.js' + '../../node_modules/@wp-playground/blueprints/blueprint-schema-validator.js' ), }, conditions: [ 'node' ], mainFields: [ 'main' ], }, + define: { + __STUDIO_CLI_VERSION__: JSON.stringify( packageVersion ), + }, } ); diff --git a/apps/cli/vitest.config.ts b/apps/cli/vitest.config.ts new file mode 100644 index 0000000000..a35774baa7 --- /dev/null +++ b/apps/cli/vitest.config.ts @@ -0,0 +1,24 @@ +import path from 'path'; +import { defineProject, mergeConfig } from 'vitest/config'; +import sharedConfig from '../../vitest.shared'; + +export default mergeConfig( + sharedConfig, + defineProject( { + test: { + name: 'cli', + include: [ '**/*.test.{ts,tsx}' ], + setupFiles: [ path.resolve( __dirname, './vitest.setup.ts' ) ], + }, + resolve: { + alias: { + cli: path.resolve( __dirname, '.' ), + '@studio/common': path.resolve( __dirname, '../../tools/common' ), + '@wp-playground/blueprints/blueprint-schema-validator': path.resolve( + __dirname, + '../../node_modules/@wp-playground/blueprints/blueprint-schema-validator.js' + ), + }, + }, + } ) +); diff --git a/apps/cli/vitest.setup.ts b/apps/cli/vitest.setup.ts new file mode 100644 index 0000000000..fc3bdd655d --- /dev/null +++ b/apps/cli/vitest.setup.ts @@ -0,0 +1,58 @@ +import nock from 'nock'; +import { vi, beforeEach, afterEach, afterAll } from 'vitest'; + +( global as typeof global & { COMMIT_HASH: string } ).COMMIT_HASH = 'mock-hash'; + +const originalConsoleLog = console.log; + +beforeEach( () => { + console.log = vi.fn(); +} ); + +nock.disableNetConnect(); +nock.enableNetConnect( 'raw.githubusercontent.com' ); + +afterEach( () => { + console.log = originalConsoleLog; + nock.cleanAll(); + try { + vi.useRealTimers(); + } catch { + // Ignore if real timers are already in use + } + vi.clearAllMocks(); +} ); + +afterAll( () => { + nock.enableNetConnect(); + nock.restore(); +} ); + +vi.mock( 'lockfile', () => { + const lock = vi.fn( ( file, options, callback ) => callback( null ) ); + const unlock = vi.fn( ( file, callback ) => callback( null ) ); + return { + default: { + lock, + unlock, + }, + lock, + unlock, + }; +} ); + +vi.mock( 'ora', () => { + const mockOra = () => ( { + start: vi.fn().mockReturnThis(), + stop: vi.fn().mockReturnThis(), + succeed: vi.fn().mockReturnThis(), + fail: vi.fn().mockReturnThis(), + warn: vi.fn().mockReturnThis(), + info: vi.fn().mockReturnThis(), + text: '', + isSpinning: false, + } ); + return { + default: mockOra, + }; +} ); diff --git a/cli/wordpress-server-child.ts b/apps/cli/wordpress-server-child.ts similarity index 95% rename from cli/wordpress-server-child.ts rename to apps/cli/wordpress-server-child.ts index d6ac3fc440..9e16284b8f 100644 --- a/cli/wordpress-server-child.ts +++ b/apps/cli/wordpress-server-child.ts @@ -11,6 +11,13 @@ * - Sends activity heartbeats to prevent timeout during long operations */ import { dirname } from 'path'; +import { DEFAULT_PHP_VERSION } from '@studio/common/constants'; +import { isWordPressDirectory } from '@studio/common/lib/fs-utils'; +import { getMuPlugins } from '@studio/common/lib/mu-plugins'; +import { decodePassword } from '@studio/common/lib/passwords'; +import { formatPlaygroundCliMessage } from '@studio/common/lib/playground-cli-messages'; +import { sequential } from '@studio/common/lib/sequential'; +import { isWordPressDevVersion } from '@studio/common/lib/wordpress-version-utils'; import { BlueprintBundle } from '@wp-playground/blueprints'; import { runCLI, RunCLIArgs, RunCLIServer } from '@wp-playground/cli'; import { @@ -20,17 +27,10 @@ import { InMemoryFilesystem, } from '@wp-playground/storage'; import { WordPressInstallMode } from '@wp-playground/wordpress'; -import { DEFAULT_PHP_VERSION } from 'common/constants'; -import { isWordPressDirectory } from 'common/lib/fs-utils'; -import { getMuPlugins } from 'common/lib/mu-plugins'; -import { decodePassword } from 'common/lib/passwords'; -import { formatPlaygroundCliMessage } from 'common/lib/playground-cli-messages'; -import { sequential } from 'common/lib/sequential'; -import { isWordPressDevVersion } from 'common/lib/wordpress-version-utils'; -import { isSqliteInstalled } from 'src/lib/sqlite-versions'; import { z } from 'zod'; import { sanitizeRunCLIArgs } from 'cli/lib/cli-args-sanitizer'; import { getSqliteCommandPath, getWpCliPharPath } from 'cli/lib/server-files'; +import { isSqliteIntegrationInstalled } from 'cli/lib/sqlite-integration'; import { ServerConfig, managerMessageSchema, @@ -111,7 +111,7 @@ async function setAdminPassword( server: RunCLIServer, adminPassword: string ): */ async function getWordPressInstallMode( sitePath: string ): Promise< WordPressInstallMode > { const hasWordPress = isWordPressDirectory( sitePath ); - const hasSqlite = await isSqliteInstalled( sitePath ); + const hasSqlite = await isSqliteIntegrationInstalled( sitePath ); if ( ! hasWordPress ) { return 'download-and-install'; diff --git a/assets/ai-icon.riv b/apps/studio/assets/ai-icon.riv similarity index 100% rename from assets/ai-icon.riv rename to apps/studio/assets/ai-icon.riv diff --git a/assets/appx/AppList.png b/apps/studio/assets/appx/AppList.png similarity index 100% rename from assets/appx/AppList.png rename to apps/studio/assets/appx/AppList.png diff --git a/assets/appx/AppList.scale-125.png b/apps/studio/assets/appx/AppList.scale-125.png similarity index 100% rename from assets/appx/AppList.scale-125.png rename to apps/studio/assets/appx/AppList.scale-125.png diff --git a/assets/appx/AppList.scale-150.png b/apps/studio/assets/appx/AppList.scale-150.png similarity index 100% rename from assets/appx/AppList.scale-150.png rename to apps/studio/assets/appx/AppList.scale-150.png diff --git a/assets/appx/AppList.scale-200.png b/apps/studio/assets/appx/AppList.scale-200.png similarity index 100% rename from assets/appx/AppList.scale-200.png rename to apps/studio/assets/appx/AppList.scale-200.png diff --git a/assets/appx/AppList.scale-400.png b/apps/studio/assets/appx/AppList.scale-400.png similarity index 100% rename from assets/appx/AppList.scale-400.png rename to apps/studio/assets/appx/AppList.scale-400.png diff --git a/assets/appx/AppList.targetsize-16.png b/apps/studio/assets/appx/AppList.targetsize-16.png similarity index 100% rename from assets/appx/AppList.targetsize-16.png rename to apps/studio/assets/appx/AppList.targetsize-16.png diff --git a/assets/appx/AppList.targetsize-16_altform-lightunplated.png b/apps/studio/assets/appx/AppList.targetsize-16_altform-lightunplated.png similarity index 100% rename from assets/appx/AppList.targetsize-16_altform-lightunplated.png rename to apps/studio/assets/appx/AppList.targetsize-16_altform-lightunplated.png diff --git a/assets/appx/AppList.targetsize-16_altform-unplated.png b/apps/studio/assets/appx/AppList.targetsize-16_altform-unplated.png similarity index 100% rename from assets/appx/AppList.targetsize-16_altform-unplated.png rename to apps/studio/assets/appx/AppList.targetsize-16_altform-unplated.png diff --git a/assets/appx/AppList.targetsize-20.png b/apps/studio/assets/appx/AppList.targetsize-20.png similarity index 100% rename from assets/appx/AppList.targetsize-20.png rename to apps/studio/assets/appx/AppList.targetsize-20.png diff --git a/assets/appx/AppList.targetsize-20_altform-lightunplated.png b/apps/studio/assets/appx/AppList.targetsize-20_altform-lightunplated.png similarity index 100% rename from assets/appx/AppList.targetsize-20_altform-lightunplated.png rename to apps/studio/assets/appx/AppList.targetsize-20_altform-lightunplated.png diff --git a/assets/appx/AppList.targetsize-20_altform-unplated.png b/apps/studio/assets/appx/AppList.targetsize-20_altform-unplated.png similarity index 100% rename from assets/appx/AppList.targetsize-20_altform-unplated.png rename to apps/studio/assets/appx/AppList.targetsize-20_altform-unplated.png diff --git a/assets/appx/AppList.targetsize-24.png b/apps/studio/assets/appx/AppList.targetsize-24.png similarity index 100% rename from assets/appx/AppList.targetsize-24.png rename to apps/studio/assets/appx/AppList.targetsize-24.png diff --git a/assets/appx/AppList.targetsize-24_altform-lightunplated.png b/apps/studio/assets/appx/AppList.targetsize-24_altform-lightunplated.png similarity index 100% rename from assets/appx/AppList.targetsize-24_altform-lightunplated.png rename to apps/studio/assets/appx/AppList.targetsize-24_altform-lightunplated.png diff --git a/assets/appx/AppList.targetsize-24_altform-unplated.png b/apps/studio/assets/appx/AppList.targetsize-24_altform-unplated.png similarity index 100% rename from assets/appx/AppList.targetsize-24_altform-unplated.png rename to apps/studio/assets/appx/AppList.targetsize-24_altform-unplated.png diff --git a/assets/appx/AppList.targetsize-256.png b/apps/studio/assets/appx/AppList.targetsize-256.png similarity index 100% rename from assets/appx/AppList.targetsize-256.png rename to apps/studio/assets/appx/AppList.targetsize-256.png diff --git a/assets/appx/AppList.targetsize-256_altform-lightunplated.png b/apps/studio/assets/appx/AppList.targetsize-256_altform-lightunplated.png similarity index 100% rename from assets/appx/AppList.targetsize-256_altform-lightunplated.png rename to apps/studio/assets/appx/AppList.targetsize-256_altform-lightunplated.png diff --git a/assets/appx/AppList.targetsize-256_altform-unplated.png b/apps/studio/assets/appx/AppList.targetsize-256_altform-unplated.png similarity index 100% rename from assets/appx/AppList.targetsize-256_altform-unplated.png rename to apps/studio/assets/appx/AppList.targetsize-256_altform-unplated.png diff --git a/assets/appx/AppList.targetsize-30.png b/apps/studio/assets/appx/AppList.targetsize-30.png similarity index 100% rename from assets/appx/AppList.targetsize-30.png rename to apps/studio/assets/appx/AppList.targetsize-30.png diff --git a/assets/appx/AppList.targetsize-30_altform-lightunplated.png b/apps/studio/assets/appx/AppList.targetsize-30_altform-lightunplated.png similarity index 100% rename from assets/appx/AppList.targetsize-30_altform-lightunplated.png rename to apps/studio/assets/appx/AppList.targetsize-30_altform-lightunplated.png diff --git a/assets/appx/AppList.targetsize-30_altform-unplated.png b/apps/studio/assets/appx/AppList.targetsize-30_altform-unplated.png similarity index 100% rename from assets/appx/AppList.targetsize-30_altform-unplated.png rename to apps/studio/assets/appx/AppList.targetsize-30_altform-unplated.png diff --git a/assets/appx/AppList.targetsize-32.png b/apps/studio/assets/appx/AppList.targetsize-32.png similarity index 100% rename from assets/appx/AppList.targetsize-32.png rename to apps/studio/assets/appx/AppList.targetsize-32.png diff --git a/assets/appx/AppList.targetsize-32_altform-lightunplated.png b/apps/studio/assets/appx/AppList.targetsize-32_altform-lightunplated.png similarity index 100% rename from assets/appx/AppList.targetsize-32_altform-lightunplated.png rename to apps/studio/assets/appx/AppList.targetsize-32_altform-lightunplated.png diff --git a/assets/appx/AppList.targetsize-32_altform-unplated.png b/apps/studio/assets/appx/AppList.targetsize-32_altform-unplated.png similarity index 100% rename from assets/appx/AppList.targetsize-32_altform-unplated.png rename to apps/studio/assets/appx/AppList.targetsize-32_altform-unplated.png diff --git a/assets/appx/AppList.targetsize-36.png b/apps/studio/assets/appx/AppList.targetsize-36.png similarity index 100% rename from assets/appx/AppList.targetsize-36.png rename to apps/studio/assets/appx/AppList.targetsize-36.png diff --git a/assets/appx/AppList.targetsize-36_altform-lightunplated.png b/apps/studio/assets/appx/AppList.targetsize-36_altform-lightunplated.png similarity index 100% rename from assets/appx/AppList.targetsize-36_altform-lightunplated.png rename to apps/studio/assets/appx/AppList.targetsize-36_altform-lightunplated.png diff --git a/assets/appx/AppList.targetsize-36_altform-unplated.png b/apps/studio/assets/appx/AppList.targetsize-36_altform-unplated.png similarity index 100% rename from assets/appx/AppList.targetsize-36_altform-unplated.png rename to apps/studio/assets/appx/AppList.targetsize-36_altform-unplated.png diff --git a/assets/appx/AppList.targetsize-40.png b/apps/studio/assets/appx/AppList.targetsize-40.png similarity index 100% rename from assets/appx/AppList.targetsize-40.png rename to apps/studio/assets/appx/AppList.targetsize-40.png diff --git a/assets/appx/AppList.targetsize-40_altform-lightunplated.png b/apps/studio/assets/appx/AppList.targetsize-40_altform-lightunplated.png similarity index 100% rename from assets/appx/AppList.targetsize-40_altform-lightunplated.png rename to apps/studio/assets/appx/AppList.targetsize-40_altform-lightunplated.png diff --git a/assets/appx/AppList.targetsize-40_altform-unplated.png b/apps/studio/assets/appx/AppList.targetsize-40_altform-unplated.png similarity index 100% rename from assets/appx/AppList.targetsize-40_altform-unplated.png rename to apps/studio/assets/appx/AppList.targetsize-40_altform-unplated.png diff --git a/assets/appx/AppList.targetsize-48.png b/apps/studio/assets/appx/AppList.targetsize-48.png similarity index 100% rename from assets/appx/AppList.targetsize-48.png rename to apps/studio/assets/appx/AppList.targetsize-48.png diff --git a/assets/appx/AppList.targetsize-48_altform-lightunplated.png b/apps/studio/assets/appx/AppList.targetsize-48_altform-lightunplated.png similarity index 100% rename from assets/appx/AppList.targetsize-48_altform-lightunplated.png rename to apps/studio/assets/appx/AppList.targetsize-48_altform-lightunplated.png diff --git a/assets/appx/AppList.targetsize-48_altform-unplated.png b/apps/studio/assets/appx/AppList.targetsize-48_altform-unplated.png similarity index 100% rename from assets/appx/AppList.targetsize-48_altform-unplated.png rename to apps/studio/assets/appx/AppList.targetsize-48_altform-unplated.png diff --git a/assets/appx/AppList.targetsize-60.png b/apps/studio/assets/appx/AppList.targetsize-60.png similarity index 100% rename from assets/appx/AppList.targetsize-60.png rename to apps/studio/assets/appx/AppList.targetsize-60.png diff --git a/assets/appx/AppList.targetsize-60_altform-lightunplated.png b/apps/studio/assets/appx/AppList.targetsize-60_altform-lightunplated.png similarity index 100% rename from assets/appx/AppList.targetsize-60_altform-lightunplated.png rename to apps/studio/assets/appx/AppList.targetsize-60_altform-lightunplated.png diff --git a/assets/appx/AppList.targetsize-60_altform-unplated.png b/apps/studio/assets/appx/AppList.targetsize-60_altform-unplated.png similarity index 100% rename from assets/appx/AppList.targetsize-60_altform-unplated.png rename to apps/studio/assets/appx/AppList.targetsize-60_altform-unplated.png diff --git a/assets/appx/AppList.targetsize-64.png b/apps/studio/assets/appx/AppList.targetsize-64.png similarity index 100% rename from assets/appx/AppList.targetsize-64.png rename to apps/studio/assets/appx/AppList.targetsize-64.png diff --git a/assets/appx/AppList.targetsize-64_altform-lightunplated.png b/apps/studio/assets/appx/AppList.targetsize-64_altform-lightunplated.png similarity index 100% rename from assets/appx/AppList.targetsize-64_altform-lightunplated.png rename to apps/studio/assets/appx/AppList.targetsize-64_altform-lightunplated.png diff --git a/assets/appx/AppList.targetsize-64_altform-unplated.png b/apps/studio/assets/appx/AppList.targetsize-64_altform-unplated.png similarity index 100% rename from assets/appx/AppList.targetsize-64_altform-unplated.png rename to apps/studio/assets/appx/AppList.targetsize-64_altform-unplated.png diff --git a/assets/appx/AppList.targetsize-72.png b/apps/studio/assets/appx/AppList.targetsize-72.png similarity index 100% rename from assets/appx/AppList.targetsize-72.png rename to apps/studio/assets/appx/AppList.targetsize-72.png diff --git a/assets/appx/AppList.targetsize-72_altform-lightunplated.png b/apps/studio/assets/appx/AppList.targetsize-72_altform-lightunplated.png similarity index 100% rename from assets/appx/AppList.targetsize-72_altform-lightunplated.png rename to apps/studio/assets/appx/AppList.targetsize-72_altform-lightunplated.png diff --git a/assets/appx/AppList.targetsize-72_altform-unplated.png b/apps/studio/assets/appx/AppList.targetsize-72_altform-unplated.png similarity index 100% rename from assets/appx/AppList.targetsize-72_altform-unplated.png rename to apps/studio/assets/appx/AppList.targetsize-72_altform-unplated.png diff --git a/assets/appx/AppList.targetsize-80.png b/apps/studio/assets/appx/AppList.targetsize-80.png similarity index 100% rename from assets/appx/AppList.targetsize-80.png rename to apps/studio/assets/appx/AppList.targetsize-80.png diff --git a/assets/appx/AppList.targetsize-80_altform-lightunplated.png b/apps/studio/assets/appx/AppList.targetsize-80_altform-lightunplated.png similarity index 100% rename from assets/appx/AppList.targetsize-80_altform-lightunplated.png rename to apps/studio/assets/appx/AppList.targetsize-80_altform-lightunplated.png diff --git a/assets/appx/AppList.targetsize-80_altform-unplated.png b/apps/studio/assets/appx/AppList.targetsize-80_altform-unplated.png similarity index 100% rename from assets/appx/AppList.targetsize-80_altform-unplated.png rename to apps/studio/assets/appx/AppList.targetsize-80_altform-unplated.png diff --git a/assets/appx/AppList.targetsize-96.png b/apps/studio/assets/appx/AppList.targetsize-96.png similarity index 100% rename from assets/appx/AppList.targetsize-96.png rename to apps/studio/assets/appx/AppList.targetsize-96.png diff --git a/assets/appx/AppList.targetsize-96_altform-lightunplated.png b/apps/studio/assets/appx/AppList.targetsize-96_altform-lightunplated.png similarity index 100% rename from assets/appx/AppList.targetsize-96_altform-lightunplated.png rename to apps/studio/assets/appx/AppList.targetsize-96_altform-lightunplated.png diff --git a/assets/appx/AppList.targetsize-96_altform-unplated.png b/apps/studio/assets/appx/AppList.targetsize-96_altform-unplated.png similarity index 100% rename from assets/appx/AppList.targetsize-96_altform-unplated.png rename to apps/studio/assets/appx/AppList.targetsize-96_altform-unplated.png diff --git a/assets/appx/LargeTile.scale-100.png b/apps/studio/assets/appx/LargeTile.scale-100.png similarity index 100% rename from assets/appx/LargeTile.scale-100.png rename to apps/studio/assets/appx/LargeTile.scale-100.png diff --git a/assets/appx/LargeTile.scale-100_altform-colorful_theme-light.png b/apps/studio/assets/appx/LargeTile.scale-100_altform-colorful_theme-light.png similarity index 100% rename from assets/appx/LargeTile.scale-100_altform-colorful_theme-light.png rename to apps/studio/assets/appx/LargeTile.scale-100_altform-colorful_theme-light.png diff --git a/assets/appx/LargeTile.scale-125.png b/apps/studio/assets/appx/LargeTile.scale-125.png similarity index 100% rename from assets/appx/LargeTile.scale-125.png rename to apps/studio/assets/appx/LargeTile.scale-125.png diff --git a/assets/appx/LargeTile.scale-125_altform-colorful_theme-light.png b/apps/studio/assets/appx/LargeTile.scale-125_altform-colorful_theme-light.png similarity index 100% rename from assets/appx/LargeTile.scale-125_altform-colorful_theme-light.png rename to apps/studio/assets/appx/LargeTile.scale-125_altform-colorful_theme-light.png diff --git a/assets/appx/LargeTile.scale-150.png b/apps/studio/assets/appx/LargeTile.scale-150.png similarity index 100% rename from assets/appx/LargeTile.scale-150.png rename to apps/studio/assets/appx/LargeTile.scale-150.png diff --git a/assets/appx/LargeTile.scale-150_altform-colorful_theme-light.png b/apps/studio/assets/appx/LargeTile.scale-150_altform-colorful_theme-light.png similarity index 100% rename from assets/appx/LargeTile.scale-150_altform-colorful_theme-light.png rename to apps/studio/assets/appx/LargeTile.scale-150_altform-colorful_theme-light.png diff --git a/assets/appx/LargeTile.scale-200.png b/apps/studio/assets/appx/LargeTile.scale-200.png similarity index 100% rename from assets/appx/LargeTile.scale-200.png rename to apps/studio/assets/appx/LargeTile.scale-200.png diff --git a/assets/appx/LargeTile.scale-200_altform-colorful_theme-light.png b/apps/studio/assets/appx/LargeTile.scale-200_altform-colorful_theme-light.png similarity index 100% rename from assets/appx/LargeTile.scale-200_altform-colorful_theme-light.png rename to apps/studio/assets/appx/LargeTile.scale-200_altform-colorful_theme-light.png diff --git a/assets/appx/LargeTile.scale-400.png b/apps/studio/assets/appx/LargeTile.scale-400.png similarity index 100% rename from assets/appx/LargeTile.scale-400.png rename to apps/studio/assets/appx/LargeTile.scale-400.png diff --git a/assets/appx/LargeTile.scale-400_altform-colorful_theme-light.png b/apps/studio/assets/appx/LargeTile.scale-400_altform-colorful_theme-light.png similarity index 100% rename from assets/appx/LargeTile.scale-400_altform-colorful_theme-light.png rename to apps/studio/assets/appx/LargeTile.scale-400_altform-colorful_theme-light.png diff --git a/assets/appx/MedTile.scale-100.png b/apps/studio/assets/appx/MedTile.scale-100.png similarity index 100% rename from assets/appx/MedTile.scale-100.png rename to apps/studio/assets/appx/MedTile.scale-100.png diff --git a/assets/appx/MedTile.scale-100_altform-colorful_theme-light.png b/apps/studio/assets/appx/MedTile.scale-100_altform-colorful_theme-light.png similarity index 100% rename from assets/appx/MedTile.scale-100_altform-colorful_theme-light.png rename to apps/studio/assets/appx/MedTile.scale-100_altform-colorful_theme-light.png diff --git a/assets/appx/MedTile.scale-125.png b/apps/studio/assets/appx/MedTile.scale-125.png similarity index 100% rename from assets/appx/MedTile.scale-125.png rename to apps/studio/assets/appx/MedTile.scale-125.png diff --git a/assets/appx/MedTile.scale-125_altform-colorful_theme-light.png b/apps/studio/assets/appx/MedTile.scale-125_altform-colorful_theme-light.png similarity index 100% rename from assets/appx/MedTile.scale-125_altform-colorful_theme-light.png rename to apps/studio/assets/appx/MedTile.scale-125_altform-colorful_theme-light.png diff --git a/assets/appx/MedTile.scale-150.png b/apps/studio/assets/appx/MedTile.scale-150.png similarity index 100% rename from assets/appx/MedTile.scale-150.png rename to apps/studio/assets/appx/MedTile.scale-150.png diff --git a/assets/appx/MedTile.scale-150_altform-colorful_theme-light.png b/apps/studio/assets/appx/MedTile.scale-150_altform-colorful_theme-light.png similarity index 100% rename from assets/appx/MedTile.scale-150_altform-colorful_theme-light.png rename to apps/studio/assets/appx/MedTile.scale-150_altform-colorful_theme-light.png diff --git a/assets/appx/MedTile.scale-200.png b/apps/studio/assets/appx/MedTile.scale-200.png similarity index 100% rename from assets/appx/MedTile.scale-200.png rename to apps/studio/assets/appx/MedTile.scale-200.png diff --git a/assets/appx/MedTile.scale-200_altform-colorful_theme-light.png b/apps/studio/assets/appx/MedTile.scale-200_altform-colorful_theme-light.png similarity index 100% rename from assets/appx/MedTile.scale-200_altform-colorful_theme-light.png rename to apps/studio/assets/appx/MedTile.scale-200_altform-colorful_theme-light.png diff --git a/assets/appx/MedTile.scale-400.png b/apps/studio/assets/appx/MedTile.scale-400.png similarity index 100% rename from assets/appx/MedTile.scale-400.png rename to apps/studio/assets/appx/MedTile.scale-400.png diff --git a/assets/appx/MedTile.scale-400_altform-colorful_theme-light.png b/apps/studio/assets/appx/MedTile.scale-400_altform-colorful_theme-light.png similarity index 100% rename from assets/appx/MedTile.scale-400_altform-colorful_theme-light.png rename to apps/studio/assets/appx/MedTile.scale-400_altform-colorful_theme-light.png diff --git a/assets/appx/SmallTile.scale-100.png b/apps/studio/assets/appx/SmallTile.scale-100.png similarity index 100% rename from assets/appx/SmallTile.scale-100.png rename to apps/studio/assets/appx/SmallTile.scale-100.png diff --git a/assets/appx/SmallTile.scale-100_altform-colorful_theme-light.png b/apps/studio/assets/appx/SmallTile.scale-100_altform-colorful_theme-light.png similarity index 100% rename from assets/appx/SmallTile.scale-100_altform-colorful_theme-light.png rename to apps/studio/assets/appx/SmallTile.scale-100_altform-colorful_theme-light.png diff --git a/assets/appx/SmallTile.scale-125.png b/apps/studio/assets/appx/SmallTile.scale-125.png similarity index 100% rename from assets/appx/SmallTile.scale-125.png rename to apps/studio/assets/appx/SmallTile.scale-125.png diff --git a/assets/appx/SmallTile.scale-125_altform-colorful_theme-light.png b/apps/studio/assets/appx/SmallTile.scale-125_altform-colorful_theme-light.png similarity index 100% rename from assets/appx/SmallTile.scale-125_altform-colorful_theme-light.png rename to apps/studio/assets/appx/SmallTile.scale-125_altform-colorful_theme-light.png diff --git a/assets/appx/SmallTile.scale-150.png b/apps/studio/assets/appx/SmallTile.scale-150.png similarity index 100% rename from assets/appx/SmallTile.scale-150.png rename to apps/studio/assets/appx/SmallTile.scale-150.png diff --git a/assets/appx/SmallTile.scale-150_altform-colorful_theme-light.png b/apps/studio/assets/appx/SmallTile.scale-150_altform-colorful_theme-light.png similarity index 100% rename from assets/appx/SmallTile.scale-150_altform-colorful_theme-light.png rename to apps/studio/assets/appx/SmallTile.scale-150_altform-colorful_theme-light.png diff --git a/assets/appx/SmallTile.scale-200.png b/apps/studio/assets/appx/SmallTile.scale-200.png similarity index 100% rename from assets/appx/SmallTile.scale-200.png rename to apps/studio/assets/appx/SmallTile.scale-200.png diff --git a/assets/appx/SmallTile.scale-200_altform-colorful_theme-light.png b/apps/studio/assets/appx/SmallTile.scale-200_altform-colorful_theme-light.png similarity index 100% rename from assets/appx/SmallTile.scale-200_altform-colorful_theme-light.png rename to apps/studio/assets/appx/SmallTile.scale-200_altform-colorful_theme-light.png diff --git a/assets/appx/SmallTile.scale-400.png b/apps/studio/assets/appx/SmallTile.scale-400.png similarity index 100% rename from assets/appx/SmallTile.scale-400.png rename to apps/studio/assets/appx/SmallTile.scale-400.png diff --git a/assets/appx/SmallTile.scale-400_altform-colorful_theme-light.png b/apps/studio/assets/appx/SmallTile.scale-400_altform-colorful_theme-light.png similarity index 100% rename from assets/appx/SmallTile.scale-400_altform-colorful_theme-light.png rename to apps/studio/assets/appx/SmallTile.scale-400_altform-colorful_theme-light.png diff --git a/assets/appx/SplashScreen.scale-100.png b/apps/studio/assets/appx/SplashScreen.scale-100.png similarity index 100% rename from assets/appx/SplashScreen.scale-100.png rename to apps/studio/assets/appx/SplashScreen.scale-100.png diff --git a/assets/appx/SplashScreen.scale-100_altform-colorful_theme-dark.png b/apps/studio/assets/appx/SplashScreen.scale-100_altform-colorful_theme-dark.png similarity index 100% rename from assets/appx/SplashScreen.scale-100_altform-colorful_theme-dark.png rename to apps/studio/assets/appx/SplashScreen.scale-100_altform-colorful_theme-dark.png diff --git a/assets/appx/SplashScreen.scale-100_altform-colorful_theme-light.png b/apps/studio/assets/appx/SplashScreen.scale-100_altform-colorful_theme-light.png similarity index 100% rename from assets/appx/SplashScreen.scale-100_altform-colorful_theme-light.png rename to apps/studio/assets/appx/SplashScreen.scale-100_altform-colorful_theme-light.png diff --git a/assets/appx/SplashScreen.scale-125.png b/apps/studio/assets/appx/SplashScreen.scale-125.png similarity index 100% rename from assets/appx/SplashScreen.scale-125.png rename to apps/studio/assets/appx/SplashScreen.scale-125.png diff --git a/assets/appx/SplashScreen.scale-125_altform-colorful_theme-dark.png b/apps/studio/assets/appx/SplashScreen.scale-125_altform-colorful_theme-dark.png similarity index 100% rename from assets/appx/SplashScreen.scale-125_altform-colorful_theme-dark.png rename to apps/studio/assets/appx/SplashScreen.scale-125_altform-colorful_theme-dark.png diff --git a/assets/appx/SplashScreen.scale-125_altform-colorful_theme-light.png b/apps/studio/assets/appx/SplashScreen.scale-125_altform-colorful_theme-light.png similarity index 100% rename from assets/appx/SplashScreen.scale-125_altform-colorful_theme-light.png rename to apps/studio/assets/appx/SplashScreen.scale-125_altform-colorful_theme-light.png diff --git a/assets/appx/SplashScreen.scale-150.png b/apps/studio/assets/appx/SplashScreen.scale-150.png similarity index 100% rename from assets/appx/SplashScreen.scale-150.png rename to apps/studio/assets/appx/SplashScreen.scale-150.png diff --git a/assets/appx/SplashScreen.scale-150_altform-colorful_theme-dark.png b/apps/studio/assets/appx/SplashScreen.scale-150_altform-colorful_theme-dark.png similarity index 100% rename from assets/appx/SplashScreen.scale-150_altform-colorful_theme-dark.png rename to apps/studio/assets/appx/SplashScreen.scale-150_altform-colorful_theme-dark.png diff --git a/assets/appx/SplashScreen.scale-150_altform-colorful_theme-light.png b/apps/studio/assets/appx/SplashScreen.scale-150_altform-colorful_theme-light.png similarity index 100% rename from assets/appx/SplashScreen.scale-150_altform-colorful_theme-light.png rename to apps/studio/assets/appx/SplashScreen.scale-150_altform-colorful_theme-light.png diff --git a/assets/appx/SplashScreen.scale-200.png b/apps/studio/assets/appx/SplashScreen.scale-200.png similarity index 100% rename from assets/appx/SplashScreen.scale-200.png rename to apps/studio/assets/appx/SplashScreen.scale-200.png diff --git a/assets/appx/SplashScreen.scale-200_altform-colorful_theme-dark.png b/apps/studio/assets/appx/SplashScreen.scale-200_altform-colorful_theme-dark.png similarity index 100% rename from assets/appx/SplashScreen.scale-200_altform-colorful_theme-dark.png rename to apps/studio/assets/appx/SplashScreen.scale-200_altform-colorful_theme-dark.png diff --git a/assets/appx/SplashScreen.scale-200_altform-colorful_theme-light.png b/apps/studio/assets/appx/SplashScreen.scale-200_altform-colorful_theme-light.png similarity index 100% rename from assets/appx/SplashScreen.scale-200_altform-colorful_theme-light.png rename to apps/studio/assets/appx/SplashScreen.scale-200_altform-colorful_theme-light.png diff --git a/assets/appx/SplashScreen.scale-400.png b/apps/studio/assets/appx/SplashScreen.scale-400.png similarity index 100% rename from assets/appx/SplashScreen.scale-400.png rename to apps/studio/assets/appx/SplashScreen.scale-400.png diff --git a/assets/appx/SplashScreen.scale-400_altform-colorful_theme-dark.png b/apps/studio/assets/appx/SplashScreen.scale-400_altform-colorful_theme-dark.png similarity index 100% rename from assets/appx/SplashScreen.scale-400_altform-colorful_theme-dark.png rename to apps/studio/assets/appx/SplashScreen.scale-400_altform-colorful_theme-dark.png diff --git a/assets/appx/SplashScreen.scale-400_altform-colorful_theme-light.png b/apps/studio/assets/appx/SplashScreen.scale-400_altform-colorful_theme-light.png similarity index 100% rename from assets/appx/SplashScreen.scale-400_altform-colorful_theme-light.png rename to apps/studio/assets/appx/SplashScreen.scale-400_altform-colorful_theme-light.png diff --git a/assets/appx/Square150x150Logo.png b/apps/studio/assets/appx/Square150x150Logo.png similarity index 100% rename from assets/appx/Square150x150Logo.png rename to apps/studio/assets/appx/Square150x150Logo.png diff --git a/assets/appx/Square44x44Logo.png b/apps/studio/assets/appx/Square44x44Logo.png similarity index 100% rename from assets/appx/Square44x44Logo.png rename to apps/studio/assets/appx/Square44x44Logo.png diff --git a/assets/appx/StoreLogo.png b/apps/studio/assets/appx/StoreLogo.png similarity index 100% rename from assets/appx/StoreLogo.png rename to apps/studio/assets/appx/StoreLogo.png diff --git a/assets/appx/StoreLogo.scale-100.png b/apps/studio/assets/appx/StoreLogo.scale-100.png similarity index 100% rename from assets/appx/StoreLogo.scale-100.png rename to apps/studio/assets/appx/StoreLogo.scale-100.png diff --git a/assets/appx/StoreLogo.scale-100_altform-colorful_theme-light.png b/apps/studio/assets/appx/StoreLogo.scale-100_altform-colorful_theme-light.png similarity index 100% rename from assets/appx/StoreLogo.scale-100_altform-colorful_theme-light.png rename to apps/studio/assets/appx/StoreLogo.scale-100_altform-colorful_theme-light.png diff --git a/assets/appx/StoreLogo.scale-125.png b/apps/studio/assets/appx/StoreLogo.scale-125.png similarity index 100% rename from assets/appx/StoreLogo.scale-125.png rename to apps/studio/assets/appx/StoreLogo.scale-125.png diff --git a/assets/appx/StoreLogo.scale-125_altform-colorful_theme-light.png b/apps/studio/assets/appx/StoreLogo.scale-125_altform-colorful_theme-light.png similarity index 100% rename from assets/appx/StoreLogo.scale-125_altform-colorful_theme-light.png rename to apps/studio/assets/appx/StoreLogo.scale-125_altform-colorful_theme-light.png diff --git a/assets/appx/StoreLogo.scale-150.png b/apps/studio/assets/appx/StoreLogo.scale-150.png similarity index 100% rename from assets/appx/StoreLogo.scale-150.png rename to apps/studio/assets/appx/StoreLogo.scale-150.png diff --git a/assets/appx/StoreLogo.scale-150_altform-colorful_theme-light.png b/apps/studio/assets/appx/StoreLogo.scale-150_altform-colorful_theme-light.png similarity index 100% rename from assets/appx/StoreLogo.scale-150_altform-colorful_theme-light.png rename to apps/studio/assets/appx/StoreLogo.scale-150_altform-colorful_theme-light.png diff --git a/assets/appx/StoreLogo.scale-200.png b/apps/studio/assets/appx/StoreLogo.scale-200.png similarity index 100% rename from assets/appx/StoreLogo.scale-200.png rename to apps/studio/assets/appx/StoreLogo.scale-200.png diff --git a/assets/appx/StoreLogo.scale-200_altform-colorful_theme-light.png b/apps/studio/assets/appx/StoreLogo.scale-200_altform-colorful_theme-light.png similarity index 100% rename from assets/appx/StoreLogo.scale-200_altform-colorful_theme-light.png rename to apps/studio/assets/appx/StoreLogo.scale-200_altform-colorful_theme-light.png diff --git a/assets/appx/StoreLogo.scale-400.png b/apps/studio/assets/appx/StoreLogo.scale-400.png similarity index 100% rename from assets/appx/StoreLogo.scale-400.png rename to apps/studio/assets/appx/StoreLogo.scale-400.png diff --git a/assets/appx/StoreLogo.scale-400_altform-colorful_theme-light.png b/apps/studio/assets/appx/StoreLogo.scale-400_altform-colorful_theme-light.png similarity index 100% rename from assets/appx/StoreLogo.scale-400_altform-colorful_theme-light.png rename to apps/studio/assets/appx/StoreLogo.scale-400_altform-colorful_theme-light.png diff --git a/assets/appx/Wide310x150Logo.png b/apps/studio/assets/appx/Wide310x150Logo.png similarity index 100% rename from assets/appx/Wide310x150Logo.png rename to apps/studio/assets/appx/Wide310x150Logo.png diff --git a/assets/appx/WideTile.scale-100.png b/apps/studio/assets/appx/WideTile.scale-100.png similarity index 100% rename from assets/appx/WideTile.scale-100.png rename to apps/studio/assets/appx/WideTile.scale-100.png diff --git a/assets/appx/WideTile.scale-100_altform-colorful_theme-light.png b/apps/studio/assets/appx/WideTile.scale-100_altform-colorful_theme-light.png similarity index 100% rename from assets/appx/WideTile.scale-100_altform-colorful_theme-light.png rename to apps/studio/assets/appx/WideTile.scale-100_altform-colorful_theme-light.png diff --git a/assets/appx/WideTile.scale-125.png b/apps/studio/assets/appx/WideTile.scale-125.png similarity index 100% rename from assets/appx/WideTile.scale-125.png rename to apps/studio/assets/appx/WideTile.scale-125.png diff --git a/assets/appx/WideTile.scale-125_altform-colorful_theme-light.png b/apps/studio/assets/appx/WideTile.scale-125_altform-colorful_theme-light.png similarity index 100% rename from assets/appx/WideTile.scale-125_altform-colorful_theme-light.png rename to apps/studio/assets/appx/WideTile.scale-125_altform-colorful_theme-light.png diff --git a/assets/appx/WideTile.scale-150.png b/apps/studio/assets/appx/WideTile.scale-150.png similarity index 100% rename from assets/appx/WideTile.scale-150.png rename to apps/studio/assets/appx/WideTile.scale-150.png diff --git a/assets/appx/WideTile.scale-150_altform-colorful_theme-light.png b/apps/studio/assets/appx/WideTile.scale-150_altform-colorful_theme-light.png similarity index 100% rename from assets/appx/WideTile.scale-150_altform-colorful_theme-light.png rename to apps/studio/assets/appx/WideTile.scale-150_altform-colorful_theme-light.png diff --git a/assets/appx/WideTile.scale-200.png b/apps/studio/assets/appx/WideTile.scale-200.png similarity index 100% rename from assets/appx/WideTile.scale-200.png rename to apps/studio/assets/appx/WideTile.scale-200.png diff --git a/assets/appx/WideTile.scale-200_altform-colorful_theme-light.png b/apps/studio/assets/appx/WideTile.scale-200_altform-colorful_theme-light.png similarity index 100% rename from assets/appx/WideTile.scale-200_altform-colorful_theme-light.png rename to apps/studio/assets/appx/WideTile.scale-200_altform-colorful_theme-light.png diff --git a/assets/appx/WideTile.scale-400.png b/apps/studio/assets/appx/WideTile.scale-400.png similarity index 100% rename from assets/appx/WideTile.scale-400.png rename to apps/studio/assets/appx/WideTile.scale-400.png diff --git a/assets/appx/WideTile.scale-400_altform-colorful_theme-light.png b/apps/studio/assets/appx/WideTile.scale-400_altform-colorful_theme-light.png similarity index 100% rename from assets/appx/WideTile.scale-400_altform-colorful_theme-light.png rename to apps/studio/assets/appx/WideTile.scale-400_altform-colorful_theme-light.png diff --git a/assets/dmg-background.png b/apps/studio/assets/dmg-background.png similarity index 100% rename from assets/dmg-background.png rename to apps/studio/assets/dmg-background.png diff --git a/assets/dmg-background@2x.png b/apps/studio/assets/dmg-background@2x.png similarity index 100% rename from assets/dmg-background@2x.png rename to apps/studio/assets/dmg-background@2x.png diff --git a/assets/studio-app-icon.icns b/apps/studio/assets/studio-app-icon.icns similarity index 100% rename from assets/studio-app-icon.icns rename to apps/studio/assets/studio-app-icon.icns diff --git a/assets/studio-app-icon.ico b/apps/studio/assets/studio-app-icon.ico similarity index 100% rename from assets/studio-app-icon.ico rename to apps/studio/assets/studio-app-icon.ico diff --git a/assets/studio-app-icon.png b/apps/studio/assets/studio-app-icon.png similarity index 100% rename from assets/studio-app-icon.png rename to apps/studio/assets/studio-app-icon.png diff --git a/assets/titlebar-icon.svg b/apps/studio/assets/titlebar-icon.svg similarity index 100% rename from assets/titlebar-icon.svg rename to apps/studio/assets/titlebar-icon.svg diff --git a/bin/install-studio-cli.sh b/apps/studio/bin/install-studio-cli.sh similarity index 100% rename from bin/install-studio-cli.sh rename to apps/studio/bin/install-studio-cli.sh diff --git a/bin/studio-cli-launcher.js b/apps/studio/bin/studio-cli-launcher.js similarity index 100% rename from bin/studio-cli-launcher.js rename to apps/studio/bin/studio-cli-launcher.js diff --git a/bin/studio-cli.bat b/apps/studio/bin/studio-cli.bat similarity index 100% rename from bin/studio-cli.bat rename to apps/studio/bin/studio-cli.bat diff --git a/bin/studio-cli.sh b/apps/studio/bin/studio-cli.sh similarity index 100% rename from bin/studio-cli.sh rename to apps/studio/bin/studio-cli.sh diff --git a/bin/uninstall-studio-cli.sh b/apps/studio/bin/uninstall-studio-cli.sh similarity index 100% rename from bin/uninstall-studio-cli.sh rename to apps/studio/bin/uninstall-studio-cli.sh diff --git a/e2e/app.test.ts b/apps/studio/e2e/app.test.ts similarity index 100% rename from e2e/app.test.ts rename to apps/studio/e2e/app.test.ts diff --git a/e2e/blueprints.test.ts b/apps/studio/e2e/blueprints.test.ts similarity index 100% rename from e2e/blueprints.test.ts rename to apps/studio/e2e/blueprints.test.ts diff --git a/e2e/constants.ts b/apps/studio/e2e/constants.ts similarity index 100% rename from e2e/constants.ts rename to apps/studio/e2e/constants.ts diff --git a/e2e/e2e-helpers.ts b/apps/studio/e2e/e2e-helpers.ts similarity index 96% rename from e2e/e2e-helpers.ts rename to apps/studio/e2e/e2e-helpers.ts index 687f70e094..34893addf8 100644 --- a/e2e/e2e-helpers.ts +++ b/apps/studio/e2e/e2e-helpers.ts @@ -82,7 +82,8 @@ export class E2ESession { } private async launchFirstWindow( testEnv: NodeJS.ProcessEnv = {} ) { - const latestBuild = findLatestBuild(); + const buildDir = path.join( __dirname, '..', 'out' ); + const latestBuild = findLatestBuild( buildDir ); const appInfo = parseElectronApp( latestBuild ); let executablePath = appInfo.executable; diff --git a/e2e/fixtures/blueprints/activate-plugin.json b/apps/studio/e2e/fixtures/blueprints/activate-plugin.json similarity index 100% rename from e2e/fixtures/blueprints/activate-plugin.json rename to apps/studio/e2e/fixtures/blueprints/activate-plugin.json diff --git a/e2e/fixtures/blueprints/activate-theme.json b/apps/studio/e2e/fixtures/blueprints/activate-theme.json similarity index 100% rename from e2e/fixtures/blueprints/activate-theme.json rename to apps/studio/e2e/fixtures/blueprints/activate-theme.json diff --git a/e2e/fixtures/blueprints/install-plugin.json b/apps/studio/e2e/fixtures/blueprints/install-plugin.json similarity index 100% rename from e2e/fixtures/blueprints/install-plugin.json rename to apps/studio/e2e/fixtures/blueprints/install-plugin.json diff --git a/e2e/fixtures/blueprints/install-theme.json b/apps/studio/e2e/fixtures/blueprints/install-theme.json similarity index 100% rename from e2e/fixtures/blueprints/install-theme.json rename to apps/studio/e2e/fixtures/blueprints/install-theme.json diff --git a/e2e/fixtures/blueprints/run-php-code.json b/apps/studio/e2e/fixtures/blueprints/run-php-code.json similarity index 99% rename from e2e/fixtures/blueprints/run-php-code.json rename to apps/studio/e2e/fixtures/blueprints/run-php-code.json index d839811b99..427e8e42ed 100644 --- a/e2e/fixtures/blueprints/run-php-code.json +++ b/apps/studio/e2e/fixtures/blueprints/run-php-code.json @@ -7,4 +7,4 @@ "code": " { // The bundled Node binary requires specific entitlements for V8 JIT compilation. // Without these, V8 crashes with SIGTRAP when trying to allocate executable memory. if ( filePath.endsWith( 'bin/node' ) ) { return { - entitlements: path.join( __dirname, 'entitlements', 'node.plist' ), + entitlements: path.join( repoRoot, 'apps', 'studio', 'entitlements', 'node.plist' ), }; } return {}; @@ -32,20 +38,20 @@ const config: ForgeConfig = { ignore: [ // Exclude major development directories /^\/\..*/, // All dotfiles and dot directories - /^\/src/, - /^\/common/, - /^\/cli/, + /^\/apps\/studio\/src/, + /^\/apps\/studio\/e2e/, + /^\/apps\/cli/, + /^\/tools\/common/, /^\/vendor/, /^\/fastlane/, /^\/docs/, - /^\/e2e/, /^\/scripts/, - /^\/packages/, + /^\/tools/, /^\/patches/, - /^\/metrics/, + /^\/tools\/metrics/, /^\/test-results/, /^\/webpack-loaders/, - /^\/installers/, + /^\/apps\/studio\/installers/, // Config files /^\/webpack\./, /^\/tsconfig\./, @@ -55,7 +61,10 @@ const config: ForgeConfig = { /^\/tailwind\./, /^\/forge\./, /^\/electron\./, - /^\/index\.html$/, + /^\/apps\/studio\/.*\\.config\\./, + /^\/apps\/studio\/tailwind\\.config\\.js$/, + /^\/apps\/studio\/postcss\\.config\\.js$/, + /^\/apps\/studio\/index\.html$/, /^\/Gemfile/, /^\/.*\.md$/, /^\/.*\.txt$/, @@ -64,7 +73,7 @@ const config: ForgeConfig = { /^\/assets/, /^\/bin/, /^\/wp-files/, - /^\/dist\/cli/, + /^\/apps\/cli\/dist\/cli/, /^\/dist\/playground-cli/, ], }, @@ -80,15 +89,16 @@ const config: ForgeConfig = { } ), new MakerSquirrel( { - loadingGif: './installers/loading.gif', - setupIcon: './assets/studio-app-icon.ico', + loadingGif: path.join( __dirname, 'installers', 'loading.gif' ), + setupIcon: path.join( __dirname, 'assets', 'studio-app-icon.ico' ), // This icon is shown in Control Panel -> Programs and Features // Windows Explorer caches the icon agressively; use the cache busting param when necessary. iconUrl: 'https://s0.wp.com/i/studio-app/studio-app-icon.ico?v=3', setupExe: 'studio-setup.exe', - certificateFile: 'certificate.pfx', + // CI code-signing setup writes certificate.pfx at the repository root. + certificateFile: path.join( repoRoot, 'certificate.pfx' ), certificatePassword: process.env.WINDOWS_CODE_SIGNING_CERT_PASSWORD, }, [ 'win32' ] @@ -98,8 +108,8 @@ const config: ForgeConfig = { : [ new MakerDMG( { - icon: 'assets/studio-app-icon.icns', - background: 'assets/dmg-background.png', + icon: path.join( __dirname, 'assets', 'studio-app-icon.icns' ), + background: path.join( __dirname, 'assets', 'dmg-background.png' ), contents: [ { x: 533, @@ -131,24 +141,50 @@ const config: ForgeConfig = { plugins: [ new AutoUnpackNativesPlugin( {} ) ], hooks: { prePackage: async ( _forgeConfig, platform, arch ) => { - const execAsync = promisify( exec ); + const execAsync = ( command: string ) => + new Promise< void >( ( resolve, reject ) => { + exec( + command, + { cwd: repoRoot, maxBuffer: 50 * 1024 * 1024, windowsHide: true }, + ( error ) => { + if ( error ) { + reject( error ); + } else { + resolve(); + } + } + ); + } ); console.log( "Ensuring latest WordPress zip isn't included in production build ..." ); - const zipPath = path.join( __dirname, 'wp-files', 'latest.zip' ); + const zipPath = path.join( repoRoot, 'wp-files', 'latest.zip' ); try { fs.unlinkSync( zipPath ); } catch ( err ) { if ( isErrnoException( err ) && err.code !== 'ENOENT' ) throw err; } - console.log( 'Downloading language packs ...' ); - await execAsync( 'npm run download-language-packs' ); + console.log( 'Installing Studio app dependencies for bundling ...' ); + // NOTE: The `app:install:bundle` script mutates the `apps/studio/node_modules` directory. You + // may need to rerun `npm ci` from the repo root to reset the dependency tree after packaging. + await execAsync( 'npm run app:install:bundle' ); - console.log( 'Building CLI ...' ); - await execAsync( 'npm run cli:build' ); + console.log( 'Building CLI (with bundled node_modules) ...' ); + // NOTE: The `cli:package` script mutates the `apps/cli/node_modules` directory. You may need to + // rerun `npm ci` from the repo root to reset the dependency tree after packaging. + await execAsync( 'npm run cli:package' ); + + console.log('Downloading language packs ...'); + await execAsync( 'npm run download-language-packs' ); console.log( `Downloading Node.js binary for ${ platform }-${ arch }...` ); - await execAsync( `npx ts-node ./scripts/download-node-binary.ts ${ platform } ${ arch }` ); + await execAsync( + `npx ts-node ${ path.join( + repoRoot, + 'scripts', + 'download-node-binary.ts' + ) } ${ platform } ${ arch }` + ); // Build CLI launcher executable for Windows AppX (Microsoft Store). // AppX packages require AppExecutionAlias with an .exe target — batch files won't work. diff --git a/index.html b/apps/studio/index.html similarity index 100% rename from index.html rename to apps/studio/index.html diff --git a/installers/loading.gif b/apps/studio/installers/loading.gif similarity index 100% rename from installers/loading.gif rename to apps/studio/installers/loading.gif diff --git a/apps/studio/package.json b/apps/studio/package.json new file mode 100644 index 0000000000..fc6e78737d --- /dev/null +++ b/apps/studio/package.json @@ -0,0 +1,123 @@ +{ + "name": "studio-app", + "author": "Automattic Inc.", + "private": true, + "productName": "Studio", + "version": "1.7.4", + "description": "Local WordPress development environment using Playgrounds", + "license": "GPL-2.0-or-later", + "main": "dist/main/index.js", + "config": { + "forge": "./forge.config.ts" + }, + "scripts": { + "start": "electron-vite dev --config ./electron.vite.config.ts --outDir=dist --watch", + "prestart": "npm -w studio-cli run build", + "make": "electron-vite build --config ./electron.vite.config.ts --outDir=dist && electron-forge make .", + "make:windows-x64": "electron-vite build --config ./electron.vite.config.ts --outDir=dist && electron-forge make . --arch=x64 --platform=win32", + "make:windows-arm64": "electron-vite build --config ./electron.vite.config.ts --outDir=dist && electron-forge make . --arch=arm64 --platform=win32", + "make:macos-x64": "electron-vite build --config ./electron.vite.config.ts --outDir=dist && SKIP_DMG=true FILE_ARCHITECTURE=x64 electron-forge make . --arch=x64 --platform=darwin", + "make:macos-arm64": "electron-vite build --config ./electron.vite.config.ts --outDir=dist && SKIP_DMG=true FILE_ARCHITECTURE=arm64 electron-forge make . --arch=arm64 --platform=darwin", + "install:bundle": "npm install --no-package-lock --no-progress --install-links --no-workspaces && patch-package", + "package": "electron-vite build --config ./electron.vite.config.ts --outDir=dist && electron-forge package .", + "publish": "electron-forge publish .", + "start-wayland": "npm -w studio-cli run build && electron-forge start . -- --enable-features=UseOzonePlatform --ozone-platform=wayland" + }, + "dependencies": { + "@automattic/generate-password": "^0.1.0", + "@automattic/interpolate-components": "^1.2.1", + "@formatjs/intl-locale": "^3.4.5", + "@formatjs/intl-localematcher": "^0.5.4", + "@inquirer/prompts": "^7.10.1", + "@reduxjs/toolkit": "^2.11.2", + "@rive-app/react-canvas": "^4.12.0", + "@sentry/electron": "^6.5.0", + "@sentry/react": "^7.120.3", + "@studio/common": "file:../../tools/common", + "@vscode/sudo-prompt": "^9.3.1", + "@wordpress/components": "32.1.0", + "@wordpress/compose": "^7.36.0", + "@wordpress/dataviews": "^11.3.0", + "@wordpress/element": "^6.39.0", + "@wordpress/i18n": "^6.9.0", + "@wordpress/icons": "^11.4.0", + "@wordpress/react-i18n": "^4.39.0", + "archiver": "^6.0.2", + "atomically": "^2.1.0", + "cli-table3": "^0.6.5", + "compressible": "2.0.18", + "compression": "^1.8.1", + "cross-port-killer": "^1.4.0", + "date-fns": "^3.3.1", + "electron-squirrel-startup": "^1.0.1", + "electron2appx": "^2.1.2", + "express": "4.22.1", + "fast-deep-equal": "^3.1.3", + "file-stream-rotator": "^1.0.0", + "follow-redirects": "^1.15.11", + "fs-extra": "^11.3.2", + "hpagent": "1.2.0", + "http-proxy": "^1.18.1", + "lockfile": "^1.0.4", + "ora": "^8.2.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-markdown": "^9.0.1", + "react-redux": "^9.2.0", + "rehype-raw": "^7.0.0", + "remark-gfm": "^4.0.1", + "resize-observer-polyfill": "^1.5.1", + "semver": "^7.7.3", + "shell-quote": "^1.8.3", + "strip-ansi": "^7.1.2", + "tar": "^7.5.9", + "tus-js-client": "^4.3.1", + "winreg": "1.2.4", + "yargs": "^18.0.0", + "yargs-parser": "^22.0.0", + "yauzl": "^3.2.0", + "zod": "^4.0.0" + }, + "devDependencies": { + "@automattic/color-studio": "^4.1.0", + "@electron-forge/cli": "^7.11.1", + "@electron-forge/maker-deb": "^7.11.1", + "@electron-forge/maker-dmg": "^7.11.1", + "@electron-forge/maker-squirrel": "^7.11.1", + "@electron-forge/maker-zip": "^7.11.1", + "@electron-forge/plugin-auto-unpack-natives": "^7.11.1", + "@sentry/vite-plugin": "^4.3.0", + "@types/archiver": "^6.0.4", + "@types/follow-redirects": "^1.14.4", + "@types/fs-extra": "^11.0.4", + "@types/http-proxy": "^1.17.17", + "@types/react": "^18.3.27", + "@types/react-dom": "^18.3.7", + "@types/semver": "^7.7.1", + "@types/shell-quote": "^1.7.5", + "@types/winreg": "^1.2.36", + "@types/yauzl": "^2.10.3", + "@vitejs/plugin-react": "^5.1.4", + "@wp-playground/blueprints": "3.1.1", + "electron": "^40.4.1", + "electron-devtools-installer": "^4.0.0", + "electron-vite": "^5.0.0", + "patch-package": "^8.0.1", + "postcss": "^8.4.32", + "tailwindcss": "^3.3.6", + "vite": "^7.3.1", + "vite-plugin-static-copy": "^3.1.5", + "vite-plugin-top-level-await": "^1.6.0", + "vite-plugin-wasm": "^3.5.0" + }, + "optionalDependencies": { + "@rollup/rollup-linux-x64-gnu": "^4.50.2", + "@rollup/rollup-win32-x64-msvc": "^4.50.2", + "appdmg": "^0.6.6" + }, + "overrides": { + "fs-ext": { + "nan": "2.25.0" + } + } +} diff --git a/patches/@automattic+generate-password+0.1.0.patch b/apps/studio/patches/@automattic+generate-password+0.1.0.patch similarity index 100% rename from patches/@automattic+generate-password+0.1.0.patch rename to apps/studio/patches/@automattic+generate-password+0.1.0.patch diff --git a/patches/@types+archiver+6.0.4.patch b/apps/studio/patches/@types+archiver+6.0.4.patch similarity index 100% rename from patches/@types+archiver+6.0.4.patch rename to apps/studio/patches/@types+archiver+6.0.4.patch diff --git a/patches/@wordpress+components+32.1.0.patch b/apps/studio/patches/@wordpress+components+32.1.0.patch similarity index 100% rename from patches/@wordpress+components+32.1.0.patch rename to apps/studio/patches/@wordpress+components+32.1.0.patch diff --git a/patches/archiver+6.0.2.patch b/apps/studio/patches/archiver+6.0.2.patch similarity index 100% rename from patches/archiver+6.0.2.patch rename to apps/studio/patches/archiver+6.0.2.patch diff --git a/patches/electron-devtools-installer+4.0.0.patch b/apps/studio/patches/electron-devtools-installer+4.0.0.patch similarity index 100% rename from patches/electron-devtools-installer+4.0.0.patch rename to apps/studio/patches/electron-devtools-installer+4.0.0.patch diff --git a/patches/electron2appx+2.1.2.patch b/apps/studio/patches/electron2appx+2.1.2.patch similarity index 100% rename from patches/electron2appx+2.1.2.patch rename to apps/studio/patches/electron2appx+2.1.2.patch diff --git a/apps/studio/postcss.config.js b/apps/studio/postcss.config.js new file mode 100644 index 0000000000..4b65759eb7 --- /dev/null +++ b/apps/studio/postcss.config.js @@ -0,0 +1,9 @@ +const path = require( 'path' ); + +module.exports = { + plugins: { + tailwindcss: { + config: path.join( __dirname, 'tailwind.config.js' ), + }, + }, +}; diff --git a/src/__mocks__/@sentry/electron/main.ts b/apps/studio/src/__mocks__/@sentry/electron/main.ts similarity index 100% rename from src/__mocks__/@sentry/electron/main.ts rename to apps/studio/src/__mocks__/@sentry/electron/main.ts diff --git a/src/__mocks__/atomically.ts b/apps/studio/src/__mocks__/atomically.ts similarity index 100% rename from src/__mocks__/atomically.ts rename to apps/studio/src/__mocks__/atomically.ts diff --git a/src/__mocks__/electron.ts b/apps/studio/src/__mocks__/electron.ts similarity index 100% rename from src/__mocks__/electron.ts rename to apps/studio/src/__mocks__/electron.ts diff --git a/src/__mocks__/fs-extra.ts b/apps/studio/src/__mocks__/fs-extra.ts similarity index 100% rename from src/__mocks__/fs-extra.ts rename to apps/studio/src/__mocks__/fs-extra.ts diff --git a/src/__mocks__/fs.ts b/apps/studio/src/__mocks__/fs.ts similarity index 100% rename from src/__mocks__/fs.ts rename to apps/studio/src/__mocks__/fs.ts diff --git a/src/__mocks__/lockfile.ts b/apps/studio/src/__mocks__/lockfile.ts similarity index 100% rename from src/__mocks__/lockfile.ts rename to apps/studio/src/__mocks__/lockfile.ts diff --git a/src/__mocks__/react-markdown.ts b/apps/studio/src/__mocks__/react-markdown.ts similarity index 100% rename from src/__mocks__/react-markdown.ts rename to apps/studio/src/__mocks__/react-markdown.ts diff --git a/src/__mocks__/rehype-raw.ts b/apps/studio/src/__mocks__/rehype-raw.ts similarity index 100% rename from src/__mocks__/rehype-raw.ts rename to apps/studio/src/__mocks__/rehype-raw.ts diff --git a/src/__mocks__/remark-gfm.ts b/apps/studio/src/__mocks__/remark-gfm.ts similarity index 100% rename from src/__mocks__/remark-gfm.ts rename to apps/studio/src/__mocks__/remark-gfm.ts diff --git a/src/__mocks__/strip-ansi.ts b/apps/studio/src/__mocks__/strip-ansi.ts similarity index 100% rename from src/__mocks__/strip-ansi.ts rename to apps/studio/src/__mocks__/strip-ansi.ts diff --git a/apps/studio/src/about-menu/about-menu.html b/apps/studio/src/about-menu/about-menu.html new file mode 100644 index 0000000000..c3c00087e0 --- /dev/null +++ b/apps/studio/src/about-menu/about-menu.html @@ -0,0 +1,126 @@ + + + + + About WordPress Studio + + +
+ + Studio App Icon +

WordPress Studio

+

x.y.z (...)

+ +
+
+

+ Preview sites powered by
WordPress.com hosting ↗ +

+
+
+

+ Local sites powered by
WordPress Playground ↗ +

+
+ + diff --git a/src/about-menu/open-about-menu.ts b/apps/studio/src/about-menu/open-about-menu.ts similarity index 100% rename from src/about-menu/open-about-menu.ts rename to apps/studio/src/about-menu/open-about-menu.ts diff --git a/src/about-menu/studio-app-icon.png b/apps/studio/src/about-menu/studio-app-icon.png similarity index 100% rename from src/about-menu/studio-app-icon.png rename to apps/studio/src/about-menu/studio-app-icon.png diff --git a/src/about-menu/tests/open-about-menu.test.tsx b/apps/studio/src/about-menu/tests/open-about-menu.test.tsx similarity index 100% rename from src/about-menu/tests/open-about-menu.test.tsx rename to apps/studio/src/about-menu/tests/open-about-menu.test.tsx diff --git a/src/additional-phrases.ts b/apps/studio/src/additional-phrases.ts similarity index 100% rename from src/additional-phrases.ts rename to apps/studio/src/additional-phrases.ts diff --git a/src/components/action-button.tsx b/apps/studio/src/components/action-button.tsx similarity index 100% rename from src/components/action-button.tsx rename to apps/studio/src/components/action-button.tsx diff --git a/src/components/add-site-with-blueprint-button.tsx b/apps/studio/src/components/add-site-with-blueprint-button.tsx similarity index 94% rename from src/components/add-site-with-blueprint-button.tsx rename to apps/studio/src/components/add-site-with-blueprint-button.tsx index 08497b967b..528e527887 100644 --- a/src/components/add-site-with-blueprint-button.tsx +++ b/apps/studio/src/components/add-site-with-blueprint-button.tsx @@ -1,6 +1,6 @@ +import { PROTOCOL_PREFIX } from '@studio/common/constants'; import { __ } from '@wordpress/i18n'; import { plus } from '@wordpress/icons'; -import { PROTOCOL_PREFIX } from 'common/constants'; import Button, { ButtonProps } from 'src/components/button'; import { getIpcApi } from 'src/lib/get-ipc-api'; diff --git a/src/components/ai-clear-history-reminder.tsx b/apps/studio/src/components/ai-clear-history-reminder.tsx similarity index 100% rename from src/components/ai-clear-history-reminder.tsx rename to apps/studio/src/components/ai-clear-history-reminder.tsx diff --git a/src/components/ai-input.tsx b/apps/studio/src/components/ai-input.tsx similarity index 100% rename from src/components/ai-input.tsx rename to apps/studio/src/components/ai-input.tsx diff --git a/src/components/app.tsx b/apps/studio/src/components/app.tsx similarity index 100% rename from src/components/app.tsx rename to apps/studio/src/components/app.tsx diff --git a/src/components/arrow-icon.tsx b/apps/studio/src/components/arrow-icon.tsx similarity index 100% rename from src/components/arrow-icon.tsx rename to apps/studio/src/components/arrow-icon.tsx diff --git a/src/components/assistant-anchor.tsx b/apps/studio/src/components/assistant-anchor.tsx similarity index 100% rename from src/components/assistant-anchor.tsx rename to apps/studio/src/components/assistant-anchor.tsx diff --git a/src/components/assistant-code-block.tsx b/apps/studio/src/components/assistant-code-block.tsx similarity index 100% rename from src/components/assistant-code-block.tsx rename to apps/studio/src/components/assistant-code-block.tsx diff --git a/src/components/assistant-thinking.tsx b/apps/studio/src/components/assistant-thinking.tsx similarity index 100% rename from src/components/assistant-thinking.tsx rename to apps/studio/src/components/assistant-thinking.tsx diff --git a/src/components/auth-provider.tsx b/apps/studio/src/components/auth-provider.tsx similarity index 97% rename from src/components/auth-provider.tsx rename to apps/studio/src/components/auth-provider.tsx index 1d78a620ee..1c92f0c48c 100644 --- a/src/components/auth-provider.tsx +++ b/apps/studio/src/components/auth-provider.tsx @@ -1,4 +1,6 @@ import * as Sentry from '@sentry/electron/renderer'; +import wpcomFactory from '@studio/common/lib/wpcom-factory'; +import wpcomXhrRequest from '@studio/common/lib/wpcom-xhr-request-factory'; import { useI18n } from '@wordpress/react-i18n'; import { createContext, useState, useEffect, useMemo, useCallback, ReactNode } from 'react'; import { WPCOM } from 'wpcom/types'; @@ -6,8 +8,6 @@ import { useIpcListener } from 'src/hooks/use-ipc-listener'; import { useOffline } from 'src/hooks/use-offline'; import { getIpcApi } from 'src/lib/get-ipc-api'; import { isInvalidTokenError } from 'src/lib/is-invalid-oauth-token-error'; -import wpcomFactory from 'src/lib/wpcom-factory'; -import wpcomXhrRequest from 'src/lib/wpcom-xhr-request-factory'; import { useI18nLocale } from 'src/stores'; import { setWpcomClient } from 'src/stores/wpcom-api'; diff --git a/src/components/badge.tsx b/apps/studio/src/components/badge.tsx similarity index 100% rename from src/components/badge.tsx rename to apps/studio/src/components/badge.tsx diff --git a/src/components/button.tsx b/apps/studio/src/components/button.tsx similarity index 100% rename from src/components/button.tsx rename to apps/studio/src/components/button.tsx diff --git a/src/components/buttons-section.tsx b/apps/studio/src/components/buttons-section.tsx similarity index 100% rename from src/components/buttons-section.tsx rename to apps/studio/src/components/buttons-section.tsx diff --git a/src/components/chat-message.tsx b/apps/studio/src/components/chat-message.tsx similarity index 100% rename from src/components/chat-message.tsx rename to apps/studio/src/components/chat-message.tsx diff --git a/src/components/chat-rating.tsx b/apps/studio/src/components/chat-rating.tsx similarity index 100% rename from src/components/chat-rating.tsx rename to apps/studio/src/components/chat-rating.tsx diff --git a/src/components/check-icon.tsx b/apps/studio/src/components/check-icon.tsx similarity index 100% rename from src/components/check-icon.tsx rename to apps/studio/src/components/check-icon.tsx diff --git a/src/components/clear-action.tsx b/apps/studio/src/components/clear-action.tsx similarity index 100% rename from src/components/clear-action.tsx rename to apps/studio/src/components/clear-action.tsx diff --git a/src/components/content-tab-assistant.tsx b/apps/studio/src/components/content-tab-assistant.tsx similarity index 100% rename from src/components/content-tab-assistant.tsx rename to apps/studio/src/components/content-tab-assistant.tsx diff --git a/src/components/content-tab-import-export.tsx b/apps/studio/src/components/content-tab-import-export.tsx similarity index 100% rename from src/components/content-tab-import-export.tsx rename to apps/studio/src/components/content-tab-import-export.tsx diff --git a/src/components/content-tab-overview.tsx b/apps/studio/src/components/content-tab-overview.tsx similarity index 100% rename from src/components/content-tab-overview.tsx rename to apps/studio/src/components/content-tab-overview.tsx diff --git a/src/components/content-tab-previews.tsx b/apps/studio/src/components/content-tab-previews.tsx similarity index 100% rename from src/components/content-tab-previews.tsx rename to apps/studio/src/components/content-tab-previews.tsx diff --git a/src/components/content-tab-settings.tsx b/apps/studio/src/components/content-tab-settings.tsx similarity index 99% rename from src/components/content-tab-settings.tsx rename to apps/studio/src/components/content-tab-settings.tsx index 54034af04c..d219956734 100644 --- a/src/components/content-tab-settings.tsx +++ b/apps/studio/src/components/content-tab-settings.tsx @@ -1,8 +1,8 @@ +import { decodePassword } from '@studio/common/lib/passwords'; import { DropdownMenu, MenuGroup, Button } from '@wordpress/components'; import { moreVertical } from '@wordpress/icons'; import { useI18n } from '@wordpress/react-i18n'; import { PropsWithChildren } from 'react'; -import { decodePassword } from 'common/lib/passwords'; import { CopyTextButton } from 'src/components/copy-text-button'; import { LearnHowLink } from 'src/components/learn-more'; import { SettingsMenuItem } from 'src/components/settings-site-menu'; diff --git a/src/components/copy-text-button.tsx b/apps/studio/src/components/copy-text-button.tsx similarity index 100% rename from src/components/copy-text-button.tsx rename to apps/studio/src/components/copy-text-button.tsx diff --git a/src/components/crash-tester.tsx b/apps/studio/src/components/crash-tester.tsx similarity index 100% rename from src/components/crash-tester.tsx rename to apps/studio/src/components/crash-tester.tsx diff --git a/src/components/default-error-fallback.tsx b/apps/studio/src/components/default-error-fallback.tsx similarity index 95% rename from src/components/default-error-fallback.tsx rename to apps/studio/src/components/default-error-fallback.tsx index 236887bc7b..8e2c63aade 100644 --- a/src/components/default-error-fallback.tsx +++ b/apps/studio/src/components/default-error-fallback.tsx @@ -1,11 +1,12 @@ +import { DEFAULT_LOCALE } from '@studio/common/lib/locale'; import { __experimentalVStack as VStack, __experimentalHStack as HStack, } from '@wordpress/components'; import { useI18n } from '@wordpress/react-i18n'; -import { DEFAULT_LOCALE } from 'common/lib/locale'; import Button from 'src/components/button'; import { DynamicStylesheet } from 'src/components/dynamic-stylesheet'; +import { getWordpressStylesHref } from 'src/components/wordpress-styles'; import { isMac, isWindows } from 'src/lib/app-globals'; import { cx } from 'src/lib/cx'; import { getIpcApi } from 'src/lib/get-ipc-api'; @@ -92,9 +93,7 @@ export default function DefaultErrorFallback() { const { isRTL } = useI18n(); const isRtl = isRTL(); - const href = isRtl - ? './main_window/styles/wordpress-components-style-rtl.css' - : './main_window/styles/wordpress-components-style.css'; + const href = getWordpressStylesHref( isRtl ); return (
diff --git a/src/components/dynamic-stylesheet.tsx b/apps/studio/src/components/dynamic-stylesheet.tsx similarity index 100% rename from src/components/dynamic-stylesheet.tsx rename to apps/studio/src/components/dynamic-stylesheet.tsx diff --git a/src/components/error-boundary.tsx b/apps/studio/src/components/error-boundary.tsx similarity index 100% rename from src/components/error-boundary.tsx rename to apps/studio/src/components/error-boundary.tsx diff --git a/src/components/error-icon.tsx b/apps/studio/src/components/error-icon.tsx similarity index 100% rename from src/components/error-icon.tsx rename to apps/studio/src/components/error-icon.tsx diff --git a/src/components/error-information.tsx b/apps/studio/src/components/error-information.tsx similarity index 100% rename from src/components/error-information.tsx rename to apps/studio/src/components/error-information.tsx diff --git a/src/components/folder-icon.tsx b/apps/studio/src/components/folder-icon.tsx similarity index 100% rename from src/components/folder-icon.tsx rename to apps/studio/src/components/folder-icon.tsx diff --git a/src/components/fullscreen-modal.tsx b/apps/studio/src/components/fullscreen-modal.tsx similarity index 100% rename from src/components/fullscreen-modal.tsx rename to apps/studio/src/components/fullscreen-modal.tsx diff --git a/src/components/gravatar.tsx b/apps/studio/src/components/gravatar.tsx similarity index 100% rename from src/components/gravatar.tsx rename to apps/studio/src/components/gravatar.tsx diff --git a/src/components/header.tsx b/apps/studio/src/components/header.tsx similarity index 100% rename from src/components/header.tsx rename to apps/studio/src/components/header.tsx diff --git a/src/components/icons/circle-red-cross.tsx b/apps/studio/src/components/icons/circle-red-cross.tsx similarity index 100% rename from src/components/icons/circle-red-cross.tsx rename to apps/studio/src/components/icons/circle-red-cross.tsx diff --git a/src/components/icons/execute.tsx b/apps/studio/src/components/icons/execute.tsx similarity index 100% rename from src/components/icons/execute.tsx rename to apps/studio/src/components/icons/execute.tsx diff --git a/src/components/icons/pause.tsx b/apps/studio/src/components/icons/pause.tsx similarity index 100% rename from src/components/icons/pause.tsx rename to apps/studio/src/components/icons/pause.tsx diff --git a/src/components/icons/play.tsx b/apps/studio/src/components/icons/play.tsx similarity index 100% rename from src/components/icons/play.tsx rename to apps/studio/src/components/icons/play.tsx diff --git a/src/components/icons/right-arrow.tsx b/apps/studio/src/components/icons/right-arrow.tsx similarity index 100% rename from src/components/icons/right-arrow.tsx rename to apps/studio/src/components/icons/right-arrow.tsx diff --git a/src/components/icons/xdebug-icon.tsx b/apps/studio/src/components/icons/xdebug-icon.tsx similarity index 100% rename from src/components/icons/xdebug-icon.tsx rename to apps/studio/src/components/icons/xdebug-icon.tsx diff --git a/src/components/learn-more.tsx b/apps/studio/src/components/learn-more.tsx similarity index 100% rename from src/components/learn-more.tsx rename to apps/studio/src/components/learn-more.tsx diff --git a/src/components/link-button.tsx b/apps/studio/src/components/link-button.tsx similarity index 100% rename from src/components/link-button.tsx rename to apps/studio/src/components/link-button.tsx diff --git a/src/components/mac-titlebar.tsx b/apps/studio/src/components/mac-titlebar.tsx similarity index 100% rename from src/components/mac-titlebar.tsx rename to apps/studio/src/components/mac-titlebar.tsx diff --git a/src/components/main-sidebar.tsx b/apps/studio/src/components/main-sidebar.tsx similarity index 100% rename from src/components/main-sidebar.tsx rename to apps/studio/src/components/main-sidebar.tsx diff --git a/src/components/modal.tsx b/apps/studio/src/components/modal.tsx similarity index 100% rename from src/components/modal.tsx rename to apps/studio/src/components/modal.tsx diff --git a/src/components/no-studio-sites/index.tsx b/apps/studio/src/components/no-studio-sites/index.tsx similarity index 100% rename from src/components/no-studio-sites/index.tsx rename to apps/studio/src/components/no-studio-sites/index.tsx diff --git a/src/components/offline-icon.tsx b/apps/studio/src/components/offline-icon.tsx similarity index 100% rename from src/components/offline-icon.tsx rename to apps/studio/src/components/offline-icon.tsx diff --git a/src/components/pressable-logo.tsx b/apps/studio/src/components/pressable-logo.tsx similarity index 100% rename from src/components/pressable-logo.tsx rename to apps/studio/src/components/pressable-logo.tsx diff --git a/src/components/profile-icon-detailed.tsx b/apps/studio/src/components/profile-icon-detailed.tsx similarity index 100% rename from src/components/profile-icon-detailed.tsx rename to apps/studio/src/components/profile-icon-detailed.tsx diff --git a/src/components/progress-bar.tsx b/apps/studio/src/components/progress-bar.tsx similarity index 100% rename from src/components/progress-bar.tsx rename to apps/studio/src/components/progress-bar.tsx diff --git a/src/components/publish-site-button.tsx b/apps/studio/src/components/publish-site-button.tsx similarity index 100% rename from src/components/publish-site-button.tsx rename to apps/studio/src/components/publish-site-button.tsx diff --git a/src/components/root.tsx b/apps/studio/src/components/root.tsx similarity index 100% rename from src/components/root.tsx rename to apps/studio/src/components/root.tsx diff --git a/src/components/running-sites.tsx b/apps/studio/src/components/running-sites.tsx similarity index 100% rename from src/components/running-sites.tsx rename to apps/studio/src/components/running-sites.tsx diff --git a/src/components/screenshot-demo-site.tsx b/apps/studio/src/components/screenshot-demo-site.tsx similarity index 100% rename from src/components/screenshot-demo-site.tsx rename to apps/studio/src/components/screenshot-demo-site.tsx diff --git a/src/components/settings-site-menu.tsx b/apps/studio/src/components/settings-site-menu.tsx similarity index 100% rename from src/components/settings-site-menu.tsx rename to apps/studio/src/components/settings-site-menu.tsx diff --git a/src/components/site-content-tabs.tsx b/apps/studio/src/components/site-content-tabs.tsx similarity index 100% rename from src/components/site-content-tabs.tsx rename to apps/studio/src/components/site-content-tabs.tsx diff --git a/src/components/site-is-being-created.tsx b/apps/studio/src/components/site-is-being-created.tsx similarity index 100% rename from src/components/site-is-being-created.tsx rename to apps/studio/src/components/site-is-being-created.tsx diff --git a/src/components/site-management-actions.tsx b/apps/studio/src/components/site-management-actions.tsx similarity index 100% rename from src/components/site-management-actions.tsx rename to apps/studio/src/components/site-management-actions.tsx diff --git a/src/components/site-menu.tsx b/apps/studio/src/components/site-menu.tsx similarity index 100% rename from src/components/site-menu.tsx rename to apps/studio/src/components/site-menu.tsx diff --git a/src/components/studio-logo.tsx b/apps/studio/src/components/studio-logo.tsx similarity index 100% rename from src/components/studio-logo.tsx rename to apps/studio/src/components/studio-logo.tsx diff --git a/src/components/tests/ai-clear-history-reminder.test.tsx b/apps/studio/src/components/tests/ai-clear-history-reminder.test.tsx similarity index 100% rename from src/components/tests/ai-clear-history-reminder.test.tsx rename to apps/studio/src/components/tests/ai-clear-history-reminder.test.tsx diff --git a/src/components/tests/ai-input.test.tsx b/apps/studio/src/components/tests/ai-input.test.tsx similarity index 100% rename from src/components/tests/ai-input.test.tsx rename to apps/studio/src/components/tests/ai-input.test.tsx diff --git a/src/components/tests/app.test.tsx b/apps/studio/src/components/tests/app.test.tsx similarity index 100% rename from src/components/tests/app.test.tsx rename to apps/studio/src/components/tests/app.test.tsx diff --git a/src/components/tests/assistant-anchor.test.tsx b/apps/studio/src/components/tests/assistant-anchor.test.tsx similarity index 100% rename from src/components/tests/assistant-anchor.test.tsx rename to apps/studio/src/components/tests/assistant-anchor.test.tsx diff --git a/src/components/tests/assistant-code-block.test.tsx b/apps/studio/src/components/tests/assistant-code-block.test.tsx similarity index 100% rename from src/components/tests/assistant-code-block.test.tsx rename to apps/studio/src/components/tests/assistant-code-block.test.tsx diff --git a/src/components/tests/content-tab-assistant.test.tsx b/apps/studio/src/components/tests/content-tab-assistant.test.tsx similarity index 100% rename from src/components/tests/content-tab-assistant.test.tsx rename to apps/studio/src/components/tests/content-tab-assistant.test.tsx diff --git a/src/components/tests/content-tab-import-export.test.tsx b/apps/studio/src/components/tests/content-tab-import-export.test.tsx similarity index 100% rename from src/components/tests/content-tab-import-export.test.tsx rename to apps/studio/src/components/tests/content-tab-import-export.test.tsx diff --git a/src/components/tests/content-tab-overview-shortcuts-section.test.tsx b/apps/studio/src/components/tests/content-tab-overview-shortcuts-section.test.tsx similarity index 100% rename from src/components/tests/content-tab-overview-shortcuts-section.test.tsx rename to apps/studio/src/components/tests/content-tab-overview-shortcuts-section.test.tsx diff --git a/src/components/tests/content-tab-overview.test.tsx b/apps/studio/src/components/tests/content-tab-overview.test.tsx similarity index 100% rename from src/components/tests/content-tab-overview.test.tsx rename to apps/studio/src/components/tests/content-tab-overview.test.tsx diff --git a/src/components/tests/content-tab-settings.test.tsx b/apps/studio/src/components/tests/content-tab-settings.test.tsx similarity index 99% rename from src/components/tests/content-tab-settings.test.tsx rename to apps/studio/src/components/tests/content-tab-settings.test.tsx index 64ee3dd916..2b671b9fac 100644 --- a/src/components/tests/content-tab-settings.test.tsx +++ b/apps/studio/src/components/tests/content-tab-settings.test.tsx @@ -1,11 +1,11 @@ // To run tests, execute `npm run test -- src/components/tests/content-tab-settings.test.tsx` from the root directory import { UnknownAction } from '@reduxjs/toolkit'; +import { Snapshot } from '@studio/common/types/snapshot'; import { render, screen, waitFor, within } from '@testing-library/react'; import { userEvent } from '@testing-library/user-event'; import { produce } from 'immer'; import { Provider } from 'react-redux'; import { vi } from 'vitest'; -import { Snapshot } from 'common/types/snapshot'; import { ContentTabSettings } from 'src/components/content-tab-settings'; import { useGetWpVersion } from 'src/hooks/use-get-wp-version'; import { useSiteDetails } from 'src/hooks/use-site-details'; diff --git a/src/components/tests/copy-text-button.test.tsx b/apps/studio/src/components/tests/copy-text-button.test.tsx similarity index 100% rename from src/components/tests/copy-text-button.test.tsx rename to apps/studio/src/components/tests/copy-text-button.test.tsx diff --git a/src/components/tests/dynamic-stylesheet.test.tsx b/apps/studio/src/components/tests/dynamic-stylesheet.test.tsx similarity index 100% rename from src/components/tests/dynamic-stylesheet.test.tsx rename to apps/studio/src/components/tests/dynamic-stylesheet.test.tsx diff --git a/src/components/tests/gravatar.test.tsx b/apps/studio/src/components/tests/gravatar.test.tsx similarity index 100% rename from src/components/tests/gravatar.test.tsx rename to apps/studio/src/components/tests/gravatar.test.tsx diff --git a/src/components/tests/header.test.tsx b/apps/studio/src/components/tests/header.test.tsx similarity index 100% rename from src/components/tests/header.test.tsx rename to apps/studio/src/components/tests/header.test.tsx diff --git a/src/components/tests/mac-titlebar.test.tsx b/apps/studio/src/components/tests/mac-titlebar.test.tsx similarity index 100% rename from src/components/tests/mac-titlebar.test.tsx rename to apps/studio/src/components/tests/mac-titlebar.test.tsx diff --git a/src/components/tests/main-sidebar.test.tsx b/apps/studio/src/components/tests/main-sidebar.test.tsx similarity index 100% rename from src/components/tests/main-sidebar.test.tsx rename to apps/studio/src/components/tests/main-sidebar.test.tsx diff --git a/src/components/tests/onboarding.test.tsx b/apps/studio/src/components/tests/onboarding.test.tsx similarity index 100% rename from src/components/tests/onboarding.test.tsx rename to apps/studio/src/components/tests/onboarding.test.tsx diff --git a/src/components/tests/running-sites.test.tsx b/apps/studio/src/components/tests/running-sites.test.tsx similarity index 100% rename from src/components/tests/running-sites.test.tsx rename to apps/studio/src/components/tests/running-sites.test.tsx diff --git a/src/components/tests/site-content-tabs.test.tsx b/apps/studio/src/components/tests/site-content-tabs.test.tsx similarity index 100% rename from src/components/tests/site-content-tabs.test.tsx rename to apps/studio/src/components/tests/site-content-tabs.test.tsx diff --git a/src/components/tests/site-management-actions.test.tsx b/apps/studio/src/components/tests/site-management-actions.test.tsx similarity index 100% rename from src/components/tests/site-management-actions.test.tsx rename to apps/studio/src/components/tests/site-management-actions.test.tsx diff --git a/src/components/tests/topbar.test.tsx b/apps/studio/src/components/tests/topbar.test.tsx similarity index 100% rename from src/components/tests/topbar.test.tsx rename to apps/studio/src/components/tests/topbar.test.tsx diff --git a/src/components/text-control.tsx b/apps/studio/src/components/text-control.tsx similarity index 100% rename from src/components/text-control.tsx rename to apps/studio/src/components/text-control.tsx diff --git a/src/components/tooltip.tsx b/apps/studio/src/components/tooltip.tsx similarity index 100% rename from src/components/tooltip.tsx rename to apps/studio/src/components/tooltip.tsx diff --git a/src/components/top-bar.tsx b/apps/studio/src/components/top-bar.tsx similarity index 100% rename from src/components/top-bar.tsx rename to apps/studio/src/components/top-bar.tsx diff --git a/src/components/tree-view.tsx b/apps/studio/src/components/tree-view.tsx similarity index 100% rename from src/components/tree-view.tsx rename to apps/studio/src/components/tree-view.tsx diff --git a/src/components/welcome-message-prompt.tsx b/apps/studio/src/components/welcome-message-prompt.tsx similarity index 100% rename from src/components/welcome-message-prompt.tsx rename to apps/studio/src/components/welcome-message-prompt.tsx diff --git a/src/components/windows-titlebar.tsx b/apps/studio/src/components/windows-titlebar.tsx similarity index 100% rename from src/components/windows-titlebar.tsx rename to apps/studio/src/components/windows-titlebar.tsx diff --git a/src/components/wordpress-logo-circle.tsx b/apps/studio/src/components/wordpress-logo-circle.tsx similarity index 100% rename from src/components/wordpress-logo-circle.tsx rename to apps/studio/src/components/wordpress-logo-circle.tsx diff --git a/src/components/wordpress-logo.tsx b/apps/studio/src/components/wordpress-logo.tsx similarity index 100% rename from src/components/wordpress-logo.tsx rename to apps/studio/src/components/wordpress-logo.tsx diff --git a/src/components/wordpress-short-logo.tsx b/apps/studio/src/components/wordpress-short-logo.tsx similarity index 100% rename from src/components/wordpress-short-logo.tsx rename to apps/studio/src/components/wordpress-short-logo.tsx diff --git a/apps/studio/src/components/wordpress-styles.tsx b/apps/studio/src/components/wordpress-styles.tsx new file mode 100644 index 0000000000..12daccb95f --- /dev/null +++ b/apps/studio/src/components/wordpress-styles.tsx @@ -0,0 +1,18 @@ +import wordpressStylesRtlUrl from '@wordpress/components/build-style/style-rtl.css?url'; +import wordpressStylesUrl from '@wordpress/components/build-style/style.css?url'; +import { useI18n } from '@wordpress/react-i18n'; +import { DynamicStylesheet } from 'src/components/dynamic-stylesheet'; + +const WORDPRESS_STYLES_ID = 'wordpress-components-style'; + +export const getWordpressStylesHref = ( isRtl: boolean ) => + isRtl ? wordpressStylesRtlUrl : wordpressStylesUrl; + +export const WordPressStyles = () => { + const { isRTL } = useI18n(); + const isRtl = isRTL(); + + const href = getWordpressStylesHref( isRtl ); + + return ; +}; diff --git a/src/components/wp-version-selector/add-wp-version-to-list.test.ts b/apps/studio/src/components/wp-version-selector/add-wp-version-to-list.test.ts similarity index 100% rename from src/components/wp-version-selector/add-wp-version-to-list.test.ts rename to apps/studio/src/components/wp-version-selector/add-wp-version-to-list.test.ts diff --git a/src/components/wp-version-selector/add-wp-version-to-list.ts b/apps/studio/src/components/wp-version-selector/add-wp-version-to-list.ts similarity index 100% rename from src/components/wp-version-selector/add-wp-version-to-list.ts rename to apps/studio/src/components/wp-version-selector/add-wp-version-to-list.ts diff --git a/src/components/wp-version-selector/index.tsx b/apps/studio/src/components/wp-version-selector/index.tsx similarity index 97% rename from src/components/wp-version-selector/index.tsx rename to apps/studio/src/components/wp-version-selector/index.tsx index ded3cb9258..2f17ba3229 100644 --- a/src/components/wp-version-selector/index.tsx +++ b/apps/studio/src/components/wp-version-selector/index.tsx @@ -1,9 +1,9 @@ +import { DEFAULT_WORDPRESS_VERSION, MINIMUM_WORDPRESS_VERSION } from '@studio/common/constants'; +import { isWordPressBetaVersion } from '@studio/common/lib/wordpress-version-utils'; import { SelectControl, Icon } from '@wordpress/components'; import { info } from '@wordpress/icons'; import { useI18n } from '@wordpress/react-i18n'; import { useEffect } from 'react'; -import { DEFAULT_WORDPRESS_VERSION, MINIMUM_WORDPRESS_VERSION } from 'common/constants'; -import { isWordPressBetaVersion } from 'common/lib/wordpress-version-utils'; import offlineIcon from 'src/components/offline-icon'; import { Tooltip } from 'src/components/tooltip'; import { useOffline } from 'src/hooks/use-offline'; diff --git a/src/constants.ts b/apps/studio/src/constants.ts similarity index 89% rename from src/constants.ts rename to apps/studio/src/constants.ts index ad2836e06d..dcfb05bb59 100644 --- a/src/constants.ts +++ b/apps/studio/src/constants.ts @@ -1,11 +1,4 @@ -// This needs to be a relative import due to the postinstall scripts. -import { - HOUR_MS, - PLAYGROUND_CLI_ACTIVITY_CHECK_INTERVAL, - PLAYGROUND_CLI_INACTIVITY_TIMEOUT, - PLAYGROUND_CLI_MAX_TIMEOUT, -} from '../common/constants'; - +import { HOUR_MS } from '@studio/common/constants'; export const DEFAULT_WIDTH = 900; export const MAIN_MIN_HEIGHT = 600; export const SIDEBAR_WIDTH = 208; @@ -80,13 +73,6 @@ export const WP_CLI_IMPORT_EXPORT_RESPONSE_TIMEOUT_IN_HRS = 6; export const WP_CLI_IMPORT_EXPORT_RESPONSE_TIMEOUT = WP_CLI_IMPORT_EXPORT_RESPONSE_TIMEOUT_IN_HRS * 60 * 60 * 1000; // 6hr -// Playground CLI constants are re-exported from common/constants.ts -export { - PLAYGROUND_CLI_ACTIVITY_CHECK_INTERVAL, - PLAYGROUND_CLI_INACTIVITY_TIMEOUT, - PLAYGROUND_CLI_MAX_TIMEOUT, -}; - // SQLite export const SQLITE_DATABASE_INTEGRATION_VERSION = 'v2.2.17'; diff --git a/src/custom-package-definitions.d.ts b/apps/studio/src/custom-package-definitions.d.ts similarity index 92% rename from src/custom-package-definitions.d.ts rename to apps/studio/src/custom-package-definitions.d.ts index d9dbef9e12..a973ac33fd 100644 --- a/src/custom-package-definitions.d.ts +++ b/apps/studio/src/custom-package-definitions.d.ts @@ -33,6 +33,11 @@ declare module '*.riv?url' { export default url; } +declare module '*.css?url' { + const url: string; + export default url; +} + declare module '*.wasm' { const dataUri: function; export default dataUri; diff --git a/src/hooks/sync-sites/index.ts b/apps/studio/src/hooks/sync-sites/index.ts similarity index 100% rename from src/hooks/sync-sites/index.ts rename to apps/studio/src/hooks/sync-sites/index.ts diff --git a/src/hooks/sync-sites/sync-sites-context.tsx b/apps/studio/src/hooks/sync-sites/sync-sites-context.tsx similarity index 100% rename from src/hooks/sync-sites/sync-sites-context.tsx rename to apps/studio/src/hooks/sync-sites/sync-sites-context.tsx diff --git a/src/hooks/sync-sites/tests/use-pull-push-states.test.ts b/apps/studio/src/hooks/sync-sites/tests/use-pull-push-states.test.ts similarity index 100% rename from src/hooks/sync-sites/tests/use-pull-push-states.test.ts rename to apps/studio/src/hooks/sync-sites/tests/use-pull-push-states.test.ts diff --git a/src/hooks/sync-sites/use-listen-deep-link-connection.ts b/apps/studio/src/hooks/sync-sites/use-listen-deep-link-connection.ts similarity index 100% rename from src/hooks/sync-sites/use-listen-deep-link-connection.ts rename to apps/studio/src/hooks/sync-sites/use-listen-deep-link-connection.ts diff --git a/src/hooks/sync-sites/use-pull-push-states.ts b/apps/studio/src/hooks/sync-sites/use-pull-push-states.ts similarity index 100% rename from src/hooks/sync-sites/use-pull-push-states.ts rename to apps/studio/src/hooks/sync-sites/use-pull-push-states.ts diff --git a/src/hooks/sync-sites/use-sync-pull.ts b/apps/studio/src/hooks/sync-sites/use-sync-pull.ts similarity index 100% rename from src/hooks/sync-sites/use-sync-pull.ts rename to apps/studio/src/hooks/sync-sites/use-sync-pull.ts diff --git a/src/hooks/sync-sites/use-sync-push.ts b/apps/studio/src/hooks/sync-sites/use-sync-push.ts similarity index 100% rename from src/hooks/sync-sites/use-sync-push.ts rename to apps/studio/src/hooks/sync-sites/use-sync-push.ts diff --git a/src/hooks/tests/get-sync-support.test.ts b/apps/studio/src/hooks/tests/get-sync-support.test.ts similarity index 100% rename from src/hooks/tests/get-sync-support.test.ts rename to apps/studio/src/hooks/tests/get-sync-support.test.ts diff --git a/src/hooks/tests/reconcile-connected-sites.test.ts b/apps/studio/src/hooks/tests/reconcile-connected-sites.test.ts similarity index 100% rename from src/hooks/tests/reconcile-connected-sites.test.ts rename to apps/studio/src/hooks/tests/reconcile-connected-sites.test.ts diff --git a/src/hooks/tests/use-add-site.test.tsx b/apps/studio/src/hooks/tests/use-add-site.test.tsx similarity index 100% rename from src/hooks/tests/use-add-site.test.tsx rename to apps/studio/src/hooks/tests/use-add-site.test.tsx diff --git a/src/hooks/tests/use-drag-and-drop-file.test.tsx b/apps/studio/src/hooks/tests/use-drag-and-drop-file.test.tsx similarity index 100% rename from src/hooks/tests/use-drag-and-drop-file.test.tsx rename to apps/studio/src/hooks/tests/use-drag-and-drop-file.test.tsx diff --git a/src/hooks/tests/use-expiration-date.test.ts b/apps/studio/src/hooks/tests/use-expiration-date.test.ts similarity index 100% rename from src/hooks/tests/use-expiration-date.test.ts rename to apps/studio/src/hooks/tests/use-expiration-date.test.ts diff --git a/src/hooks/tests/use-fullscreen.test.ts b/apps/studio/src/hooks/tests/use-fullscreen.test.ts similarity index 100% rename from src/hooks/tests/use-fullscreen.test.ts rename to apps/studio/src/hooks/tests/use-fullscreen.test.ts diff --git a/src/hooks/tests/use-import-export.test.tsx b/apps/studio/src/hooks/tests/use-import-export.test.tsx similarity index 100% rename from src/hooks/tests/use-import-export.test.tsx rename to apps/studio/src/hooks/tests/use-import-export.test.tsx diff --git a/src/hooks/tests/use-is-valid-wp-cli-inline.test.ts b/apps/studio/src/hooks/tests/use-is-valid-wp-cli-inline.test.ts similarity index 100% rename from src/hooks/tests/use-is-valid-wp-cli-inline.test.ts rename to apps/studio/src/hooks/tests/use-is-valid-wp-cli-inline.test.ts diff --git a/src/hooks/tests/use-site-details.test.tsx b/apps/studio/src/hooks/tests/use-site-details.test.tsx similarity index 100% rename from src/hooks/tests/use-site-details.test.tsx rename to apps/studio/src/hooks/tests/use-site-details.test.tsx diff --git a/src/hooks/use-add-site.ts b/apps/studio/src/hooks/use-add-site.ts similarity index 96% rename from src/hooks/use-add-site.ts rename to apps/studio/src/hooks/use-add-site.ts index 646d95851c..8ba7590196 100644 --- a/src/hooks/use-add-site.ts +++ b/apps/studio/src/hooks/use-add-site.ts @@ -1,9 +1,9 @@ import * as Sentry from '@sentry/electron/renderer'; +import { updateBlueprintWithFormValues } from '@studio/common/lib/blueprint-settings'; +import { BlueprintValidationWarning } from '@studio/common/lib/blueprint-validation'; +import { generateCustomDomainFromSiteName } from '@studio/common/lib/domains'; import { useI18n } from '@wordpress/react-i18n'; import { useCallback, useMemo, useState } from 'react'; -import { updateBlueprintWithFormValues } from 'common/lib/blueprint-settings'; -import { BlueprintValidationWarning } from 'common/lib/blueprint-validation'; -import { generateCustomDomainFromSiteName } from 'common/lib/domains'; import { useSyncSites } from 'src/hooks/sync-sites'; import { useContentTabs } from 'src/hooks/use-content-tabs'; import { useImportExport } from 'src/hooks/use-import-export'; @@ -16,7 +16,7 @@ import { } from 'src/stores/provider-constants-slice'; import { useConnectSiteMutation } from 'src/stores/sync/connected-sites'; import { Blueprint } from 'src/stores/wpcom-api'; -import type { BlueprintPreferredVersions } from 'common/lib/blueprint-validation'; +import type { BlueprintPreferredVersions } from '@studio/common/lib/blueprint-validation'; import type { AllowedPHPVersion } from 'src/lib/wordpress-server-types'; import type { SyncSite } from 'src/modules/sync/types'; import type { SyncOption } from 'src/types'; diff --git a/src/hooks/use-ai-icon.ts b/apps/studio/src/hooks/use-ai-icon.ts similarity index 94% rename from src/hooks/use-ai-icon.ts rename to apps/studio/src/hooks/use-ai-icon.ts index ed9c1b9ceb..d58d5453e7 100644 --- a/src/hooks/use-ai-icon.ts +++ b/apps/studio/src/hooks/use-ai-icon.ts @@ -1,8 +1,7 @@ import { RuntimeLoader } from '@rive-app/canvas'; import { useRive, useStateMachineInput } from '@rive-app/react-canvas'; import { useCallback, useEffect } from '@wordpress/element'; -// eslint-disable-next-line import/no-unresolved -import aiImage from '/assets/ai-icon.riv'; +import aiImage from '../../assets/ai-icon.riv'; const useAiIcon = () => { const stateMachineName = 'State Machine A'; diff --git a/src/hooks/use-auth.ts b/apps/studio/src/hooks/use-auth.ts similarity index 100% rename from src/hooks/use-auth.ts rename to apps/studio/src/hooks/use-auth.ts diff --git a/src/hooks/use-confirmation-dialog.ts b/apps/studio/src/hooks/use-confirmation-dialog.ts similarity index 100% rename from src/hooks/use-confirmation-dialog.ts rename to apps/studio/src/hooks/use-confirmation-dialog.ts diff --git a/src/hooks/use-content-tabs.tsx b/apps/studio/src/hooks/use-content-tabs.tsx similarity index 100% rename from src/hooks/use-content-tabs.tsx rename to apps/studio/src/hooks/use-content-tabs.tsx diff --git a/src/hooks/use-delete-site.ts b/apps/studio/src/hooks/use-delete-site.ts similarity index 100% rename from src/hooks/use-delete-site.ts rename to apps/studio/src/hooks/use-delete-site.ts diff --git a/src/hooks/use-drag-and-drop-file.ts b/apps/studio/src/hooks/use-drag-and-drop-file.ts similarity index 100% rename from src/hooks/use-drag-and-drop-file.ts rename to apps/studio/src/hooks/use-drag-and-drop-file.ts diff --git a/src/hooks/use-effective-tab.tsx b/apps/studio/src/hooks/use-effective-tab.tsx similarity index 100% rename from src/hooks/use-effective-tab.tsx rename to apps/studio/src/hooks/use-effective-tab.tsx diff --git a/src/hooks/use-execute-cli.ts b/apps/studio/src/hooks/use-execute-cli.ts similarity index 100% rename from src/hooks/use-execute-cli.ts rename to apps/studio/src/hooks/use-execute-cli.ts diff --git a/src/hooks/use-expiration-date.ts b/apps/studio/src/hooks/use-expiration-date.ts similarity index 92% rename from src/hooks/use-expiration-date.ts rename to apps/studio/src/hooks/use-expiration-date.ts index e69bced883..47afaf72d2 100644 --- a/src/hooks/use-expiration-date.ts +++ b/apps/studio/src/hooks/use-expiration-date.ts @@ -1,7 +1,7 @@ +import { HOUR_MS, DAY_MS, DEMO_SITE_EXPIRATION_DAYS } from '@studio/common/constants'; +import { SupportedLocale } from '@studio/common/lib/locale'; import { useI18n } from '@wordpress/react-i18n'; import { intervalToDuration, formatDuration, addDays, DurationUnit, addHours } from 'date-fns'; -import { HOUR_MS, DAY_MS, DEMO_SITE_EXPIRATION_DAYS } from 'common/constants'; -import { SupportedLocale } from 'common/lib/locale'; import { formatDistance } from 'src/lib/date'; import { useI18nLocale } from 'src/stores'; diff --git a/src/hooks/use-feature-flags.tsx b/apps/studio/src/hooks/use-feature-flags.tsx similarity index 100% rename from src/hooks/use-feature-flags.tsx rename to apps/studio/src/hooks/use-feature-flags.tsx diff --git a/src/hooks/use-format-localized-timestamps.tsx b/apps/studio/src/hooks/use-format-localized-timestamps.tsx similarity index 100% rename from src/hooks/use-format-localized-timestamps.tsx rename to apps/studio/src/hooks/use-format-localized-timestamps.tsx diff --git a/src/hooks/use-fullscreen.ts b/apps/studio/src/hooks/use-fullscreen.ts similarity index 100% rename from src/hooks/use-fullscreen.ts rename to apps/studio/src/hooks/use-fullscreen.ts diff --git a/src/hooks/use-get-wp-version.ts b/apps/studio/src/hooks/use-get-wp-version.ts similarity index 100% rename from src/hooks/use-get-wp-version.ts rename to apps/studio/src/hooks/use-get-wp-version.ts diff --git a/src/hooks/use-gravatar-url.ts b/apps/studio/src/hooks/use-gravatar-url.ts similarity index 100% rename from src/hooks/use-gravatar-url.ts rename to apps/studio/src/hooks/use-gravatar-url.ts diff --git a/src/hooks/use-import-export.tsx b/apps/studio/src/hooks/use-import-export.tsx similarity index 100% rename from src/hooks/use-import-export.tsx rename to apps/studio/src/hooks/use-import-export.tsx diff --git a/src/hooks/use-ipc-listener.ts b/apps/studio/src/hooks/use-ipc-listener.ts similarity index 100% rename from src/hooks/use-ipc-listener.ts rename to apps/studio/src/hooks/use-ipc-listener.ts diff --git a/src/hooks/use-is-valid-blueprint.ts b/apps/studio/src/hooks/use-is-valid-blueprint.ts similarity index 100% rename from src/hooks/use-is-valid-blueprint.ts rename to apps/studio/src/hooks/use-is-valid-blueprint.ts diff --git a/src/hooks/use-is-valid-wp-cli-inline.ts b/apps/studio/src/hooks/use-is-valid-wp-cli-inline.ts similarity index 100% rename from src/hooks/use-is-valid-wp-cli-inline.ts rename to apps/studio/src/hooks/use-is-valid-wp-cli-inline.ts diff --git a/src/hooks/use-localization-support.ts b/apps/studio/src/hooks/use-localization-support.ts similarity index 100% rename from src/hooks/use-localization-support.ts rename to apps/studio/src/hooks/use-localization-support.ts diff --git a/src/hooks/use-offline.ts b/apps/studio/src/hooks/use-offline.ts similarity index 100% rename from src/hooks/use-offline.ts rename to apps/studio/src/hooks/use-offline.ts diff --git a/src/hooks/use-progress.tsx b/apps/studio/src/hooks/use-progress.tsx similarity index 100% rename from src/hooks/use-progress.tsx rename to apps/studio/src/hooks/use-progress.tsx diff --git a/src/hooks/use-sha256.ts b/apps/studio/src/hooks/use-sha256.ts similarity index 100% rename from src/hooks/use-sha256.ts rename to apps/studio/src/hooks/use-sha256.ts diff --git a/src/hooks/use-sidebar-visibility.ts b/apps/studio/src/hooks/use-sidebar-visibility.ts similarity index 100% rename from src/hooks/use-sidebar-visibility.ts rename to apps/studio/src/hooks/use-sidebar-visibility.ts diff --git a/src/hooks/use-site-details.tsx b/apps/studio/src/hooks/use-site-details.tsx similarity index 99% rename from src/hooks/use-site-details.tsx rename to apps/studio/src/hooks/use-site-details.tsx index cad2214a06..13bbf09749 100644 --- a/src/hooks/use-site-details.tsx +++ b/apps/studio/src/hooks/use-site-details.tsx @@ -1,3 +1,5 @@ +import { SITE_EVENTS, SiteEvent } from '@studio/common/lib/site-events'; +import { sortSites } from '@studio/common/lib/sort-sites'; import { __, sprintf } from '@wordpress/i18n'; import { ReactNode, @@ -8,8 +10,6 @@ import { useMemo, useState, } from 'react'; -import { SITE_EVENTS, SiteEvent } from 'common/lib/site-events'; -import { sortSites } from 'common/lib/sort-sites'; import { useAuth } from 'src/hooks/use-auth'; import { useContentTabs } from 'src/hooks/use-content-tabs'; import { useIpcListener } from 'src/hooks/use-ipc-listener'; diff --git a/src/hooks/use-site-size.ts b/apps/studio/src/hooks/use-site-size.ts similarity index 92% rename from src/hooks/use-site-size.ts rename to apps/studio/src/hooks/use-site-size.ts index fc73503204..8fb3c8d07f 100644 --- a/src/hooks/use-site-size.ts +++ b/apps/studio/src/hooks/use-site-size.ts @@ -1,5 +1,5 @@ +import { DEMO_SITE_SIZE_LIMIT_BYTES } from '@studio/common/constants'; import { useState, useEffect, useCallback } from 'react'; -import { DEMO_SITE_SIZE_LIMIT_BYTES } from 'common/constants'; import { useWindowListener } from 'src/hooks/use-window-listener'; import { getIpcApi } from 'src/lib/get-ipc-api'; diff --git a/src/hooks/use-sync-states-progress-info.ts b/apps/studio/src/hooks/use-sync-states-progress-info.ts similarity index 100% rename from src/hooks/use-sync-states-progress-info.ts rename to apps/studio/src/hooks/use-sync-states-progress-info.ts diff --git a/src/hooks/use-theme-details.tsx b/apps/studio/src/hooks/use-theme-details.tsx similarity index 100% rename from src/hooks/use-theme-details.tsx rename to apps/studio/src/hooks/use-theme-details.tsx diff --git a/src/hooks/use-window-listener.ts b/apps/studio/src/hooks/use-window-listener.ts similarity index 100% rename from src/hooks/use-window-listener.ts rename to apps/studio/src/hooks/use-window-listener.ts diff --git a/src/index.css b/apps/studio/src/index.css similarity index 96% rename from src/index.css rename to apps/studio/src/index.css index 4f2ed3b72a..b4d5e8ca62 100644 --- a/src/index.css +++ b/apps/studio/src/index.css @@ -11,11 +11,16 @@ body { font-family: - -apple-system, BlinkMacSystemFont, /* macOS/iOS system UI */ - 'Segoe UI', Roboto, /* Windows + Android system UI */ - 'Apple Color Emoji', 'Segoe UI Emoji', 'Noto Color Emoji', /* emoji */ - 'Noto Sans', 'Arial Unicode MS', /* broad Unicode coverage */ - sans-serif; + -apple-system, + BlinkMacSystemFont, + /* macOS/iOS system UI */ 'Segoe UI', + Roboto, + /* Windows + Android system UI */ 'Apple Color Emoji', + 'Segoe UI Emoji', + 'Noto Color Emoji', + /* emoji */ 'Noto Sans', + 'Arial Unicode MS', + /* broad Unicode coverage */ sans-serif; } .app-drag-region { @@ -52,7 +57,7 @@ blockquote { .components-tab-panel__tabs { padding: 0 theme( 'spacing.4' ); - border-bottom: 1px solid theme( 'colors.a8c-gray.5' ); + border-bottom: 1px solid theme( 'colors.a8c-gray-5' ); } .components-tab-panel__tabs-item { diff --git a/src/index.ts b/apps/studio/src/index.ts similarity index 98% rename from src/index.ts rename to apps/studio/src/index.ts index d8ad67d664..a44d16f30c 100644 --- a/src/index.ts +++ b/apps/studio/src/index.ts @@ -12,21 +12,21 @@ import { import path from 'path'; import { pathToFileURL } from 'url'; import * as Sentry from '@sentry/electron/main'; +import { PROTOCOL_PREFIX } from '@studio/common/constants'; +import { + bumpStat, + bumpAggregatedUniqueStat, + AppdataProvider, + LastBumpStatsData, +} from '@studio/common/lib/bump-stat'; +import { suppressPunycodeWarning } from '@studio/common/lib/suppress-punycode-warning'; +import { StatsGroup } from '@studio/common/types/stats'; import { __, _n, sprintf } from '@wordpress/i18n'; import { installExtension, REACT_DEVELOPER_TOOLS, REDUX_DEVTOOLS, } from 'electron-devtools-installer'; -import { PROTOCOL_PREFIX } from 'common/constants'; -import { - bumpStat, - bumpAggregatedUniqueStat, - AppdataProvider, - LastBumpStatsData, -} from 'common/lib/bump-stat'; -import { suppressPunycodeWarning } from 'common/lib/suppress-punycode-warning'; -import { StatsGroup } from 'common/types/stats'; import { IPC_VOID_HANDLERS } from 'src/constants'; import * as ipcHandlers from 'src/ipc-handlers'; import { @@ -95,7 +95,7 @@ const appAppdataProvider: AppdataProvider< LastBumpStatsData > = { unlock: unlockAppdata, save: async ( data ) => { // Cast is safe: data comes from loadUserData() which returns the full UserData type. - // The lock/unlock is already handled by the caller (updateLastBump in common/lib/bump-stat.ts) + // The lock/unlock is already handled by the caller (updateLastBump in /common/lib/bump-stat.ts) // eslint-disable-next-line studio/require-lock-before-save await saveUserData( data as never ); }, diff --git a/src/ipc-handlers.ts b/apps/studio/src/ipc-handlers.ts similarity index 98% rename from src/ipc-handlers.ts rename to apps/studio/src/ipc-handlers.ts index fe613ab598..3027675bb3 100644 --- a/src/ipc-handlers.ts +++ b/apps/studio/src/ipc-handlers.ts @@ -17,10 +17,9 @@ import https from 'node:https'; import os from 'os'; import nodePath from 'path'; import * as Sentry from '@sentry/electron/main'; -import { __, sprintf, LocaleData, defaultI18n } from '@wordpress/i18n'; -import { validateBlueprintData } from 'common/lib/blueprint-validation'; -import { bumpStat } from 'common/lib/bump-stat'; -import { parseCliError, errorMessageContains } from 'common/lib/cli-error'; +import { validateBlueprintData } from '@studio/common/lib/blueprint-validation'; +import { bumpStat } from '@studio/common/lib/bump-stat'; +import { parseCliError, errorMessageContains } from '@studio/common/lib/cli-error'; import { calculateDirectorySizeForArchive, isWordPressDirectory, @@ -28,15 +27,16 @@ import { isEmptyDir, pathExists, recursiveCopyDirectory, -} from 'common/lib/fs-utils'; -import { getWordPressVersion } from 'common/lib/get-wordpress-version'; -import { isErrnoException } from 'common/lib/is-errno-exception'; -import { getAuthenticationUrl } from 'common/lib/oauth'; -import { portFinder } from 'common/lib/port-finder'; -import { sanitizeFolderName } from 'common/lib/sanitize-folder-name'; -import { isWordPressDevVersion } from 'common/lib/wordpress-version-utils'; -import { Snapshot } from 'common/types/snapshot'; -import { StatsGroup, StatsMetric } from 'common/types/stats'; +} from '@studio/common/lib/fs-utils'; +import { getWordPressVersion } from '@studio/common/lib/get-wordpress-version'; +import { isErrnoException } from '@studio/common/lib/is-errno-exception'; +import { getAuthenticationUrl } from '@studio/common/lib/oauth'; +import { portFinder } from '@studio/common/lib/port-finder'; +import { sanitizeFolderName } from '@studio/common/lib/sanitize-folder-name'; +import { isWordPressDevVersion } from '@studio/common/lib/wordpress-version-utils'; +import { Snapshot } from '@studio/common/types/snapshot'; +import { StatsGroup, StatsMetric } from '@studio/common/types/stats'; +import { __, sprintf, LocaleData, defaultI18n } from '@wordpress/i18n'; import { MAIN_MIN_WIDTH, SIDEBAR_WIDTH } from 'src/constants'; import { sendIpcEventToRendererWithWindow } from 'src/ipc-utils'; import { getBetaFeatures as getBetaFeaturesFromLib } from 'src/lib/beta-features'; diff --git a/src/ipc-types.d.ts b/apps/studio/src/ipc-types.d.ts similarity index 100% rename from src/ipc-types.d.ts rename to apps/studio/src/ipc-types.d.ts diff --git a/src/ipc-utils.ts b/apps/studio/src/ipc-utils.ts similarity index 93% rename from src/ipc-utils.ts rename to apps/studio/src/ipc-utils.ts index ec17a1eb51..25cbc40425 100644 --- a/src/ipc-utils.ts +++ b/apps/studio/src/ipc-utils.ts @@ -1,8 +1,8 @@ import crypto from 'crypto'; import { BrowserWindow } from 'electron'; -import { BlueprintValidationWarning } from 'common/lib/blueprint-validation'; -import { SiteEvent } from 'common/lib/site-events'; -import { PreviewCommandLoggerAction } from 'common/logger-actions'; +import { BlueprintValidationWarning } from '@studio/common/lib/blueprint-validation'; +import { SiteEvent } from '@studio/common/lib/site-events'; +import { PreviewCommandLoggerAction } from '@studio/common/logger-actions'; import { ImportExportEventData } from 'src/lib/import-export/handle-events'; import { StoredToken } from 'src/lib/oauth'; import { getMainWindow } from 'src/main-window'; diff --git a/src/lib/active-sync-operations.ts b/apps/studio/src/lib/active-sync-operations.ts similarity index 100% rename from src/lib/active-sync-operations.ts rename to apps/studio/src/lib/active-sync-operations.ts diff --git a/src/lib/app-globals.ts b/apps/studio/src/lib/app-globals.ts similarity index 100% rename from src/lib/app-globals.ts rename to apps/studio/src/lib/app-globals.ts diff --git a/src/lib/beta-features.ts b/apps/studio/src/lib/beta-features.ts similarity index 100% rename from src/lib/beta-features.ts rename to apps/studio/src/lib/beta-features.ts diff --git a/src/lib/bump-stats/lib.ts b/apps/studio/src/lib/bump-stats/lib.ts similarity index 95% rename from src/lib/bump-stats/lib.ts rename to apps/studio/src/lib/bump-stats/lib.ts index 060b54e2ee..c6b3f71df3 100644 --- a/src/lib/bump-stats/lib.ts +++ b/apps/studio/src/lib/bump-stats/lib.ts @@ -1,4 +1,4 @@ -import { StatsMetric } from 'common/types/stats'; +import { StatsMetric } from '@studio/common/types/stats'; import { JetpackImporter, LocalImporter, diff --git a/src/lib/certificate-manager.ts b/apps/studio/src/lib/certificate-manager.ts similarity index 100% rename from src/lib/certificate-manager.ts rename to apps/studio/src/lib/certificate-manager.ts diff --git a/src/lib/cx.ts b/apps/studio/src/lib/cx.ts similarity index 100% rename from src/lib/cx.ts rename to apps/studio/src/lib/cx.ts diff --git a/src/lib/date.ts b/apps/studio/src/lib/date.ts similarity index 100% rename from src/lib/date.ts rename to apps/studio/src/lib/date.ts diff --git a/src/lib/deeplink/deeplink-handler.ts b/apps/studio/src/lib/deeplink/deeplink-handler.ts similarity index 100% rename from src/lib/deeplink/deeplink-handler.ts rename to apps/studio/src/lib/deeplink/deeplink-handler.ts diff --git a/src/lib/deeplink/handlers/add-site-with-blueprint.ts b/apps/studio/src/lib/deeplink/handlers/add-site-with-blueprint.ts similarity index 97% rename from src/lib/deeplink/handlers/add-site-with-blueprint.ts rename to apps/studio/src/lib/deeplink/handlers/add-site-with-blueprint.ts index 07eae6bf42..2ee8b65d11 100644 --- a/src/lib/deeplink/handlers/add-site-with-blueprint.ts +++ b/apps/studio/src/lib/deeplink/handlers/add-site-with-blueprint.ts @@ -1,8 +1,8 @@ import { app, dialog, shell } from 'electron'; import nodePath from 'path'; +import { validateBlueprintData } from '@studio/common/lib/blueprint-validation'; import { __ } from '@wordpress/i18n'; import fs from 'fs-extra'; -import { validateBlueprintData } from 'common/lib/blueprint-validation'; import { sendIpcEventToRenderer } from 'src/ipc-utils'; import { download } from 'src/lib/download'; import { getLogsFilePath } from 'src/logging'; diff --git a/src/lib/deeplink/handlers/auth.ts b/apps/studio/src/lib/deeplink/handlers/auth.ts similarity index 93% rename from src/lib/deeplink/handlers/auth.ts rename to apps/studio/src/lib/deeplink/handlers/auth.ts index c655adbc02..82456aab60 100644 --- a/src/lib/deeplink/handlers/auth.ts +++ b/apps/studio/src/lib/deeplink/handlers/auth.ts @@ -1,8 +1,8 @@ import * as Sentry from '@sentry/electron/main'; +import wpcomFactory from '@studio/common/lib/wpcom-factory'; +import wpcomXhrRequest from '@studio/common/lib/wpcom-xhr-request-factory'; import { z } from 'zod'; import { sendIpcEventToRenderer } from 'src/ipc-utils'; -import wpcomFactory from 'src/lib/wpcom-factory'; -import wpcomXhrRequest from 'src/lib/wpcom-xhr-request-factory'; import { updateAppdata } from 'src/storage/user-data'; const authTokenSchema = z.object( { diff --git a/src/lib/deeplink/handlers/sync-connect-site.ts b/apps/studio/src/lib/deeplink/handlers/sync-connect-site.ts similarity index 100% rename from src/lib/deeplink/handlers/sync-connect-site.ts rename to apps/studio/src/lib/deeplink/handlers/sync-connect-site.ts diff --git a/src/lib/deeplink/index.ts b/apps/studio/src/lib/deeplink/index.ts similarity index 100% rename from src/lib/deeplink/index.ts rename to apps/studio/src/lib/deeplink/index.ts diff --git a/src/lib/deeplink/tests/add-site.test.ts b/apps/studio/src/lib/deeplink/tests/add-site.test.ts similarity index 98% rename from src/lib/deeplink/tests/add-site.test.ts rename to apps/studio/src/lib/deeplink/tests/add-site.test.ts index 4ec959bb67..2504dd6f47 100644 --- a/src/lib/deeplink/tests/add-site.test.ts +++ b/apps/studio/src/lib/deeplink/tests/add-site.test.ts @@ -1,7 +1,7 @@ import { app, dialog, shell, BrowserWindow } from 'electron'; +import { validateBlueprintData } from '@studio/common/lib/blueprint-validation'; import fs from 'fs-extra'; import { vi, beforeAll, afterAll } from 'vitest'; -import { validateBlueprintData } from 'common/lib/blueprint-validation'; import { sendIpcEventToRenderer } from 'src/ipc-utils'; import { handleAddSiteWithBlueprint } from 'src/lib/deeplink/handlers/add-site-with-blueprint'; import { download } from 'src/lib/download'; @@ -15,7 +15,7 @@ vi.mock( 'src/main-window' ); vi.mock( 'src/logging', () => ( { getLogsFilePath: vi.fn().mockReturnValue( '/mock/path/to/logs.log' ), } ) ); -vi.mock( 'common/lib/blueprint-validation', () => ( { +vi.mock( '@studio/common/lib/blueprint-validation', () => ( { validateBlueprintData: vi.fn(), } ) ); diff --git a/src/lib/deeplink/tests/auth.test.ts b/apps/studio/src/lib/deeplink/tests/auth.test.ts similarity index 95% rename from src/lib/deeplink/tests/auth.test.ts rename to apps/studio/src/lib/deeplink/tests/auth.test.ts index 3e961cd8fd..00cb23fbbf 100644 --- a/src/lib/deeplink/tests/auth.test.ts +++ b/apps/studio/src/lib/deeplink/tests/auth.test.ts @@ -10,12 +10,12 @@ const mockWpcomGet = vi.fn(); vi.mock( 'src/lib/certificate-manager', () => ( {} ) ); vi.mock( 'src/ipc-utils' ); -vi.mock( 'src/lib/wpcom-factory', () => ( { +vi.mock( '@studio/common/lib/wpcom-factory', () => ( { default: () => ( { req: { get: mockWpcomGet }, } ), } ) ); -vi.mock( 'src/lib/wpcom-xhr-request-factory', () => ( { +vi.mock( '@studio/common/lib/wpcom-xhr-request-factory', () => ( { default: vi.fn(), } ) ); diff --git a/src/lib/deeplink/tests/sync-connect-site.test.ts b/apps/studio/src/lib/deeplink/tests/sync-connect-site.test.ts similarity index 100% rename from src/lib/deeplink/tests/sync-connect-site.test.ts rename to apps/studio/src/lib/deeplink/tests/sync-connect-site.test.ts diff --git a/src/lib/download-utils.ts b/apps/studio/src/lib/download-utils.ts similarity index 99% rename from src/lib/download-utils.ts rename to apps/studio/src/lib/download-utils.ts index 20f4566b56..c3bb09d248 100644 --- a/src/lib/download-utils.ts +++ b/apps/studio/src/lib/download-utils.ts @@ -6,10 +6,10 @@ import { IncomingMessage } from 'http'; import os from 'os'; import path from 'path'; +import { extractZip } from '@studio/common/lib/extract-zip'; import followRedirects, { FollowResponse } from 'follow-redirects'; import fs from 'fs-extra'; import { HttpProxyAgent, HttpsProxyAgent } from 'hpagent'; -import { extractZip } from 'common/lib/extract-zip'; import { getWordPressVersionPath, getWpCliPath } from './server-files-paths'; const { https } = followRedirects; diff --git a/src/lib/download.ts b/apps/studio/src/lib/download.ts similarity index 100% rename from src/lib/download.ts rename to apps/studio/src/lib/download.ts diff --git a/src/lib/error-formatting.ts b/apps/studio/src/lib/error-formatting.ts similarity index 100% rename from src/lib/error-formatting.ts rename to apps/studio/src/lib/error-formatting.ts diff --git a/src/lib/feature-flags.ts b/apps/studio/src/lib/feature-flags.ts similarity index 100% rename from src/lib/feature-flags.ts rename to apps/studio/src/lib/feature-flags.ts diff --git a/src/lib/generate-checkout-url.ts b/apps/studio/src/lib/generate-checkout-url.ts similarity index 91% rename from src/lib/generate-checkout-url.ts rename to apps/studio/src/lib/generate-checkout-url.ts index e6749151c4..b5e455fd75 100644 --- a/src/lib/generate-checkout-url.ts +++ b/apps/studio/src/lib/generate-checkout-url.ts @@ -1,4 +1,4 @@ -import { DEFAULT_CUSTOM_DOMAIN_SUFFIX } from 'common/constants'; +import { DEFAULT_CUSTOM_DOMAIN_SUFFIX } from '@studio/common/constants'; export function generateCheckoutUrl( selectedSite?: SiteDetails, diff --git a/src/lib/generate-site-name.ts b/apps/studio/src/lib/generate-site-name.ts similarity index 96% rename from src/lib/generate-site-name.ts rename to apps/studio/src/lib/generate-site-name.ts index 88038ee94e..db297932aa 100644 --- a/src/lib/generate-site-name.ts +++ b/apps/studio/src/lib/generate-site-name.ts @@ -1,7 +1,7 @@ import { __ } from '@wordpress/i18n'; import { getIpcApi } from 'src/lib/get-ipc-api'; -export { sanitizeFolderName } from 'common/lib/sanitize-folder-name'; +export { sanitizeFolderName } from '@studio/common/lib/sanitize-folder-name'; async function isNameAvailable( name: string, usedSites: SiteDetails[] ): Promise< boolean > { const isNameUnique = ! usedSites.some( ( site ) => site.name === name ); diff --git a/src/lib/get-image-data.ts b/apps/studio/src/lib/get-image-data.ts similarity index 100% rename from src/lib/get-image-data.ts rename to apps/studio/src/lib/get-image-data.ts diff --git a/src/lib/get-ipc-api.ts b/apps/studio/src/lib/get-ipc-api.ts similarity index 100% rename from src/lib/get-ipc-api.ts rename to apps/studio/src/lib/get-ipc-api.ts diff --git a/src/lib/get-localized-link.ts b/apps/studio/src/lib/get-localized-link.ts similarity index 98% rename from src/lib/get-localized-link.ts rename to apps/studio/src/lib/get-localized-link.ts index 7ed1c5a7b5..cefbfee99c 100644 --- a/src/lib/get-localized-link.ts +++ b/apps/studio/src/lib/get-localized-link.ts @@ -1,4 +1,4 @@ -import { SupportedLocale } from 'common/lib/locale'; +import { SupportedLocale } from '@studio/common/lib/locale'; // English is always required, and the other locales are optional. type TranslatedLink = Partial< Record< SupportedLocale, string > > & { en: string }; diff --git a/src/lib/get-site-url.ts b/apps/studio/src/lib/get-site-url.ts similarity index 100% rename from src/lib/get-site-url.ts rename to apps/studio/src/lib/get-site-url.ts diff --git a/src/lib/get-sync-backup-temp-path.ts b/apps/studio/src/lib/get-sync-backup-temp-path.ts similarity index 100% rename from src/lib/get-sync-backup-temp-path.ts rename to apps/studio/src/lib/get-sync-backup-temp-path.ts diff --git a/src/lib/hosts-file.ts b/apps/studio/src/lib/hosts-file.ts similarity index 99% rename from src/lib/hosts-file.ts rename to apps/studio/src/lib/hosts-file.ts index 3d64c7d026..6cdbbeac21 100644 --- a/src/lib/hosts-file.ts +++ b/apps/studio/src/lib/hosts-file.ts @@ -4,7 +4,7 @@ import { platform, tmpdir } from 'os'; import path from 'path'; import { promisify } from 'util'; import * as Sentry from '@sentry/electron/main'; -import { escapeRegex } from 'common/lib/escape-regex'; +import { escapeRegex } from '@studio/common/lib/escape-regex'; import { sudoExec } from 'src/lib/sudo-exec'; const readFile = promisify( fs.readFile ); diff --git a/src/lib/import-export/export/events.ts b/apps/studio/src/lib/import-export/export/events.ts similarity index 100% rename from src/lib/import-export/export/events.ts rename to apps/studio/src/lib/import-export/export/events.ts diff --git a/src/lib/import-export/export/export-database.ts b/apps/studio/src/lib/import-export/export/export-database.ts similarity index 97% rename from src/lib/import-export/export/export-database.ts rename to apps/studio/src/lib/import-export/export/export-database.ts index 073179223f..50bf4dd3f0 100644 --- a/src/lib/import-export/export/export-database.ts +++ b/apps/studio/src/lib/import-export/export/export-database.ts @@ -1,6 +1,6 @@ import path from 'path'; +import { parseJsonFromPhpOutput } from '@studio/common/lib/php-output-parser'; import { move } from 'fs-extra'; -import { parseJsonFromPhpOutput } from 'common/lib/php-output-parser'; import { generateBackupFilename } from 'src/lib/import-export/export/generate-backup-filename'; import { SiteServer } from 'src/site-server'; diff --git a/src/lib/import-export/export/export-manager.ts b/apps/studio/src/lib/import-export/export/export-manager.ts similarity index 100% rename from src/lib/import-export/export/export-manager.ts rename to apps/studio/src/lib/import-export/export/export-manager.ts diff --git a/src/lib/import-export/export/exporters/default-exporter.ts b/apps/studio/src/lib/import-export/export/exporters/default-exporter.ts similarity index 98% rename from src/lib/import-export/export/exporters/default-exporter.ts rename to apps/studio/src/lib/import-export/export/exporters/default-exporter.ts index ea8fde95d8..e303aa3d66 100644 --- a/src/lib/import-export/export/exporters/default-exporter.ts +++ b/apps/studio/src/lib/import-export/export/exporters/default-exporter.ts @@ -3,8 +3,12 @@ import fs from 'fs'; import fsPromises from 'fs/promises'; import os from 'os'; import path from 'path'; +import { parseJsonFromPhpOutput } from '@studio/common/lib/php-output-parser'; +import { + hasDefaultDbBlock, + removeDbConstants, +} from '@studio/common/lib/remove-default-db-constants'; import archiver from 'archiver'; -import { parseJsonFromPhpOutput } from 'common/lib/php-output-parser'; import { ARCHIVER_OPTIONS } from 'src/constants'; import { getSiteUrl } from 'src/lib/get-site-url'; import { ExportEvents } from 'src/lib/import-export/export/events'; @@ -21,7 +25,6 @@ import { StudioJson, } from 'src/lib/import-export/export/types'; import { getWordPressVersionFromInstallation } from 'src/lib/wp-versions'; -import { hasDefaultDbBlock, removeDbConstants } from 'src/migrations/remove-default-db-constants'; import { SiteServer } from 'src/site-server'; export class DefaultExporter extends EventEmitter implements Exporter { diff --git a/src/lib/import-export/export/exporters/index.ts b/apps/studio/src/lib/import-export/export/exporters/index.ts similarity index 100% rename from src/lib/import-export/export/exporters/index.ts rename to apps/studio/src/lib/import-export/export/exporters/index.ts diff --git a/src/lib/import-export/export/exporters/sql-exporter.ts b/apps/studio/src/lib/import-export/export/exporters/sql-exporter.ts similarity index 100% rename from src/lib/import-export/export/exporters/sql-exporter.ts rename to apps/studio/src/lib/import-export/export/exporters/sql-exporter.ts diff --git a/src/lib/import-export/export/generate-backup-filename.ts b/apps/studio/src/lib/import-export/export/generate-backup-filename.ts similarity index 100% rename from src/lib/import-export/export/generate-backup-filename.ts rename to apps/studio/src/lib/import-export/export/generate-backup-filename.ts diff --git a/src/lib/import-export/export/types.ts b/apps/studio/src/lib/import-export/export/types.ts similarity index 100% rename from src/lib/import-export/export/types.ts rename to apps/studio/src/lib/import-export/export/types.ts diff --git a/src/lib/import-export/handle-events.ts b/apps/studio/src/lib/import-export/handle-events.ts similarity index 100% rename from src/lib/import-export/handle-events.ts rename to apps/studio/src/lib/import-export/handle-events.ts diff --git a/src/lib/import-export/import/events.ts b/apps/studio/src/lib/import-export/import/events.ts similarity index 100% rename from src/lib/import-export/import/events.ts rename to apps/studio/src/lib/import-export/import/events.ts diff --git a/src/lib/import-export/import/handlers/backup-handler-factory.ts b/apps/studio/src/lib/import-export/import/handlers/backup-handler-factory.ts similarity index 100% rename from src/lib/import-export/import/handlers/backup-handler-factory.ts rename to apps/studio/src/lib/import-export/import/handlers/backup-handler-factory.ts diff --git a/src/lib/import-export/import/handlers/backup-handler-sql.ts b/apps/studio/src/lib/import-export/import/handlers/backup-handler-sql.ts similarity index 100% rename from src/lib/import-export/import/handlers/backup-handler-sql.ts rename to apps/studio/src/lib/import-export/import/handlers/backup-handler-sql.ts diff --git a/src/lib/import-export/import/handlers/backup-handler-tar-gz.ts b/apps/studio/src/lib/import-export/import/handlers/backup-handler-tar-gz.ts similarity index 100% rename from src/lib/import-export/import/handlers/backup-handler-tar-gz.ts rename to apps/studio/src/lib/import-export/import/handlers/backup-handler-tar-gz.ts diff --git a/src/lib/import-export/import/handlers/backup-handler-wpress.ts b/apps/studio/src/lib/import-export/import/handlers/backup-handler-wpress.ts similarity index 100% rename from src/lib/import-export/import/handlers/backup-handler-wpress.ts rename to apps/studio/src/lib/import-export/import/handlers/backup-handler-wpress.ts diff --git a/src/lib/import-export/import/handlers/backup-handler-zip.ts b/apps/studio/src/lib/import-export/import/handlers/backup-handler-zip.ts similarity index 100% rename from src/lib/import-export/import/handlers/backup-handler-zip.ts rename to apps/studio/src/lib/import-export/import/handlers/backup-handler-zip.ts diff --git a/src/lib/import-export/import/import-manager.ts b/apps/studio/src/lib/import-export/import/import-manager.ts similarity index 100% rename from src/lib/import-export/import/import-manager.ts rename to apps/studio/src/lib/import-export/import/import-manager.ts diff --git a/src/lib/import-export/import/importers/importer.ts b/apps/studio/src/lib/import-export/import/importers/importer.ts similarity index 99% rename from src/lib/import-export/import/importers/importer.ts rename to apps/studio/src/lib/import-export/import/importers/importer.ts index 57d5154e2e..ee56f87369 100644 --- a/src/lib/import-export/import/importers/importer.ts +++ b/apps/studio/src/lib/import-export/import/importers/importer.ts @@ -4,10 +4,10 @@ import fs, { createReadStream, createWriteStream } from 'fs'; import fsPromises from 'fs/promises'; import path from 'path'; import { createInterface } from 'readline'; +import { DEFAULT_PHP_VERSION } from '@studio/common/constants'; +import { SupportedPHPVersionsList } from '@studio/common/types/php-versions'; import { lstat, move } from 'fs-extra'; import semver from 'semver'; -import { DEFAULT_PHP_VERSION } from 'common/constants'; -import { SupportedPHPVersionsList } from 'common/types/php-versions'; import { getSiteUrl } from 'src/lib/get-site-url'; import { generateBackupFilename } from 'src/lib/import-export/export/generate-backup-filename'; import { ImportEvents } from 'src/lib/import-export/import/events'; diff --git a/src/lib/import-export/import/importers/index.ts b/apps/studio/src/lib/import-export/import/importers/index.ts similarity index 100% rename from src/lib/import-export/import/importers/index.ts rename to apps/studio/src/lib/import-export/import/importers/index.ts diff --git a/src/lib/import-export/import/types.ts b/apps/studio/src/lib/import-export/import/types.ts similarity index 100% rename from src/lib/import-export/import/types.ts rename to apps/studio/src/lib/import-export/import/types.ts diff --git a/src/lib/import-export/import/validators/index.ts b/apps/studio/src/lib/import-export/import/validators/index.ts similarity index 100% rename from src/lib/import-export/import/validators/index.ts rename to apps/studio/src/lib/import-export/import/validators/index.ts diff --git a/src/lib/import-export/import/validators/jetpack-validator.ts b/apps/studio/src/lib/import-export/import/validators/jetpack-validator.ts similarity index 100% rename from src/lib/import-export/import/validators/jetpack-validator.ts rename to apps/studio/src/lib/import-export/import/validators/jetpack-validator.ts diff --git a/src/lib/import-export/import/validators/local-validator.ts b/apps/studio/src/lib/import-export/import/validators/local-validator.ts similarity index 100% rename from src/lib/import-export/import/validators/local-validator.ts rename to apps/studio/src/lib/import-export/import/validators/local-validator.ts diff --git a/src/lib/import-export/import/validators/playground-validator.ts b/apps/studio/src/lib/import-export/import/validators/playground-validator.ts similarity index 100% rename from src/lib/import-export/import/validators/playground-validator.ts rename to apps/studio/src/lib/import-export/import/validators/playground-validator.ts diff --git a/src/lib/import-export/import/validators/sql-validator.ts b/apps/studio/src/lib/import-export/import/validators/sql-validator.ts similarity index 100% rename from src/lib/import-export/import/validators/sql-validator.ts rename to apps/studio/src/lib/import-export/import/validators/sql-validator.ts diff --git a/src/lib/import-export/import/validators/validator.ts b/apps/studio/src/lib/import-export/import/validators/validator.ts similarity index 100% rename from src/lib/import-export/import/validators/validator.ts rename to apps/studio/src/lib/import-export/import/validators/validator.ts diff --git a/src/lib/import-export/import/validators/wpress-validator.ts b/apps/studio/src/lib/import-export/import/validators/wpress-validator.ts similarity index 100% rename from src/lib/import-export/import/validators/wpress-validator.ts rename to apps/studio/src/lib/import-export/import/validators/wpress-validator.ts diff --git a/src/lib/import-export/tests/export/export-manager.test.ts b/apps/studio/src/lib/import-export/tests/export/export-manager.test.ts similarity index 100% rename from src/lib/import-export/tests/export/export-manager.test.ts rename to apps/studio/src/lib/import-export/tests/export/export-manager.test.ts diff --git a/src/lib/import-export/tests/export/exporters/default-exporter.test.ts b/apps/studio/src/lib/import-export/tests/export/exporters/default-exporter.test.ts similarity index 99% rename from src/lib/import-export/tests/export/exporters/default-exporter.test.ts rename to apps/studio/src/lib/import-export/tests/export/exporters/default-exporter.test.ts index a3f87fde62..2d8769630b 100644 --- a/src/lib/import-export/tests/export/exporters/default-exporter.test.ts +++ b/apps/studio/src/lib/import-export/tests/export/exporters/default-exporter.test.ts @@ -2,18 +2,18 @@ import fs from 'fs'; import fsPromises from 'fs/promises'; import os from 'os'; import path from 'path'; +import { + normalizeLineEndings, + removeDbConstants, +} from '@studio/common/lib/remove-default-db-constants'; +import { platformTestSuite } from '@studio/common/lib/tests/utils/platform-test-suite'; import archiver from 'archiver'; import { format } from 'date-fns'; import { vi, beforeAll, afterAll, Mock, MockedFunction, Mocked } from 'vitest'; import { DefaultExporter } from 'src/lib/import-export/export/exporters'; import { ExportOptions, BackupContents } from 'src/lib/import-export/export/types'; import { getWordPressVersionFromInstallation } from 'src/lib/wp-versions'; -import { - normalizeLineEndings, - removeDbConstants, -} from 'src/migrations/remove-default-db-constants'; import { SiteServer } from 'src/site-server'; -import { platformTestSuite } from 'src/tests/utils/platform-test-suite'; vi.mock( 'fs', () => ( { default: { diff --git a/src/lib/import-export/tests/export/exporters/sql-exporter.test.ts b/apps/studio/src/lib/import-export/tests/export/exporters/sql-exporter.test.ts similarity index 96% rename from src/lib/import-export/tests/export/exporters/sql-exporter.test.ts rename to apps/studio/src/lib/import-export/tests/export/exporters/sql-exporter.test.ts index 5c9b95cc63..e30c5ab626 100644 --- a/src/lib/import-export/tests/export/exporters/sql-exporter.test.ts +++ b/apps/studio/src/lib/import-export/tests/export/exporters/sql-exporter.test.ts @@ -1,9 +1,9 @@ +import { platformTestSuite } from '@studio/common/lib/tests/utils/platform-test-suite'; import { move } from 'fs-extra'; import { vi } from 'vitest'; import { SqlExporter } from 'src/lib/import-export/export/exporters'; import { ExportOptions } from 'src/lib/import-export/export/types'; import { SiteServer } from 'src/site-server'; -import { platformTestSuite } from 'src/tests/utils/platform-test-suite'; vi.mock( 'fs' ); vi.mock( 'fs/promises' ); diff --git a/src/lib/import-export/tests/import/handlers/backup-handler.test.ts b/apps/studio/src/lib/import-export/tests/import/handlers/backup-handler.test.ts similarity index 95% rename from src/lib/import-export/tests/import/handlers/backup-handler.test.ts rename to apps/studio/src/lib/import-export/tests/import/handlers/backup-handler.test.ts index 8a518e80d9..2c7194e520 100644 --- a/src/lib/import-export/tests/import/handlers/backup-handler.test.ts +++ b/apps/studio/src/lib/import-export/tests/import/handlers/backup-handler.test.ts @@ -2,6 +2,7 @@ import fs from 'fs'; import path from 'path'; import { Readable } from 'stream'; +import fse from 'fs-extra'; import * as tar from 'tar'; import { vi, Mock } from 'vitest'; import * as yauzl from 'yauzl'; @@ -31,6 +32,12 @@ vi.mock( 'fs', () => ( { }, } ) ); vi.mock( 'fs/promises' ); +vi.mock( 'fs-extra', () => ( { + default: { + ensureDir: vi.fn(), + }, + ensureDir: vi.fn(), +} ) ); vi.mock( 'zlib' ); vi.mock( 'tar' ); vi.mock( 'yauzl' ); @@ -69,6 +76,7 @@ describe( 'BackupHandlerFactory', () => { parts.pop(); return parts.join( '/' ); } ); + vi.mocked( fse.ensureDir ).mockResolvedValue( undefined ); vi.mocked( fs.promises.copyFile ).mockResolvedValue( undefined ); } ); @@ -253,11 +261,17 @@ describe( 'BackupHandlerFactory', () => { } return mockWriteStream; } ), - once: vi.fn().mockReturnThis(), + once: vi.fn().mockImplementation( ( event, callback ) => { + if ( event === 'finish' ) { + callback(); + } + return mockWriteStream; + } ), } as Partial< fs.WriteStream >; let entryCallback: ( ( entry: { fileName: string } ) => void ) | undefined; let endCallback: ( () => void ) | undefined; + let emittedEntry = false; const mockZipFile: MockZipFile = { on: vi.fn().mockImplementation( ( event, callback ) => { @@ -269,11 +283,12 @@ describe( 'BackupHandlerFactory', () => { return mockZipFile; } ), readEntry: vi.fn().mockImplementation( () => { - if ( entryCallback ) { + if ( ! emittedEntry && entryCallback ) { + emittedEntry = true; entryCallback( { fileName: 'test.txt' } ); - // After processing one entry, call end - setTimeout( () => endCallback?.(), 0 ); + return; } + endCallback?.(); } ), openReadStream: vi.fn().mockImplementation( ( entry, callback ) => { callback( null, mockReadStream ); diff --git a/src/lib/import-export/tests/import/import-manager.test.ts b/apps/studio/src/lib/import-export/tests/import/import-manager.test.ts similarity index 100% rename from src/lib/import-export/tests/import/import-manager.test.ts rename to apps/studio/src/lib/import-export/tests/import/import-manager.test.ts diff --git a/src/lib/import-export/tests/import/importer/jetpack-importer.test.ts b/apps/studio/src/lib/import-export/tests/import/importer/jetpack-importer.test.ts similarity index 99% rename from src/lib/import-export/tests/import/importer/jetpack-importer.test.ts rename to apps/studio/src/lib/import-export/tests/import/importer/jetpack-importer.test.ts index b5fc6161d8..dea0cf931d 100644 --- a/src/lib/import-export/tests/import/importer/jetpack-importer.test.ts +++ b/apps/studio/src/lib/import-export/tests/import/importer/jetpack-importer.test.ts @@ -1,10 +1,10 @@ import * as fs from 'fs/promises'; +import { platformTestSuite } from '@studio/common/lib/tests/utils/platform-test-suite'; import { lstat, move, Stats } from 'fs-extra'; import { vi } from 'vitest'; import { JetpackImporter, SQLImporter } from 'src/lib/import-export/import/importers'; import { BackupContents } from 'src/lib/import-export/import/types'; import { SiteServer } from 'src/site-server'; -import { platformTestSuite } from 'src/tests/utils/platform-test-suite'; vi.mock( 'fs/promises', () => { const mockFns = { diff --git a/src/lib/import-export/tests/import/importer/local-importer.test.ts b/apps/studio/src/lib/import-export/tests/import/importer/local-importer.test.ts similarity index 98% rename from src/lib/import-export/tests/import/importer/local-importer.test.ts rename to apps/studio/src/lib/import-export/tests/import/importer/local-importer.test.ts index 78ff6f9f31..b57f50ae26 100644 --- a/src/lib/import-export/tests/import/importer/local-importer.test.ts +++ b/apps/studio/src/lib/import-export/tests/import/importer/local-importer.test.ts @@ -1,10 +1,10 @@ import * as fs from 'fs/promises'; +import { platformTestSuite } from '@studio/common/lib/tests/utils/platform-test-suite'; import { lstat, move, Stats } from 'fs-extra'; import { vi } from 'vitest'; import { LocalImporter } from 'src/lib/import-export/import/importers'; import { BackupContents } from 'src/lib/import-export/import/types'; import { SiteServer } from 'src/site-server'; -import { platformTestSuite } from 'src/tests/utils/platform-test-suite'; vi.mock( 'fs/promises', () => { const mockFns = { diff --git a/src/lib/import-export/tests/import/importer/playground-importer.test.ts b/apps/studio/src/lib/import-export/tests/import/importer/playground-importer.test.ts similarity index 98% rename from src/lib/import-export/tests/import/importer/playground-importer.test.ts rename to apps/studio/src/lib/import-export/tests/import/importer/playground-importer.test.ts index e3bac649e7..b3a64b830e 100644 --- a/src/lib/import-export/tests/import/importer/playground-importer.test.ts +++ b/apps/studio/src/lib/import-export/tests/import/importer/playground-importer.test.ts @@ -1,10 +1,10 @@ import * as fs from 'fs/promises'; +import { platformTestSuite } from '@studio/common/lib/tests/utils/platform-test-suite'; import { lstat, move, Stats } from 'fs-extra'; import { vi } from 'vitest'; import { PlaygroundImporter } from 'src/lib/import-export/import/importers'; import { BackupContents } from 'src/lib/import-export/import/types'; import { SiteServer } from 'src/site-server'; -import { platformTestSuite } from 'src/tests/utils/platform-test-suite'; vi.mock( 'fs/promises', () => { const mockFns = { diff --git a/src/lib/import-export/tests/import/validators/jetpack-validator.test.ts b/apps/studio/src/lib/import-export/tests/import/validators/jetpack-validator.test.ts similarity index 97% rename from src/lib/import-export/tests/import/validators/jetpack-validator.test.ts rename to apps/studio/src/lib/import-export/tests/import/validators/jetpack-validator.test.ts index bb1a88ec1f..7d6c788369 100644 --- a/src/lib/import-export/tests/import/validators/jetpack-validator.test.ts +++ b/apps/studio/src/lib/import-export/tests/import/validators/jetpack-validator.test.ts @@ -1,5 +1,5 @@ +import { platformTestSuite } from '@studio/common/lib/tests/utils/platform-test-suite'; import { JetpackValidator } from 'src/lib/import-export/import/validators/jetpack-validator'; -import { platformTestSuite } from 'src/tests/utils/platform-test-suite'; platformTestSuite( 'JetpackValidator', ( { normalize } ) => { let validator: JetpackValidator; diff --git a/src/lib/import-export/tests/import/validators/local-validator.test.ts b/apps/studio/src/lib/import-export/tests/import/validators/local-validator.test.ts similarity index 97% rename from src/lib/import-export/tests/import/validators/local-validator.test.ts rename to apps/studio/src/lib/import-export/tests/import/validators/local-validator.test.ts index 5e671273c4..ff4936ebee 100644 --- a/src/lib/import-export/tests/import/validators/local-validator.test.ts +++ b/apps/studio/src/lib/import-export/tests/import/validators/local-validator.test.ts @@ -1,5 +1,5 @@ +import { platformTestSuite } from '@studio/common/lib/tests/utils/platform-test-suite'; import { LocalValidator } from 'src/lib/import-export/import/validators/local-validator'; -import { platformTestSuite } from 'src/tests/utils/platform-test-suite'; platformTestSuite( 'LocalValidator', ( { normalize } ) => { let validator: LocalValidator; diff --git a/src/lib/import-export/tests/import/validators/playground-validator.test.ts b/apps/studio/src/lib/import-export/tests/import/validators/playground-validator.test.ts similarity index 97% rename from src/lib/import-export/tests/import/validators/playground-validator.test.ts rename to apps/studio/src/lib/import-export/tests/import/validators/playground-validator.test.ts index f51afa307e..13f7aeb304 100644 --- a/src/lib/import-export/tests/import/validators/playground-validator.test.ts +++ b/apps/studio/src/lib/import-export/tests/import/validators/playground-validator.test.ts @@ -1,5 +1,5 @@ +import { platformTestSuite } from '@studio/common/lib/tests/utils/platform-test-suite'; import { PlaygroundValidator } from 'src/lib/import-export/import/validators/playground-validator'; -import { platformTestSuite } from 'src/tests/utils/platform-test-suite'; platformTestSuite( 'PlaygroundValidator', ( { normalize } ) => { const validator = new PlaygroundValidator(); diff --git a/src/lib/import-export/tests/import/validators/sql-validator.test.ts b/apps/studio/src/lib/import-export/tests/import/validators/sql-validator.test.ts similarity index 94% rename from src/lib/import-export/tests/import/validators/sql-validator.test.ts rename to apps/studio/src/lib/import-export/tests/import/validators/sql-validator.test.ts index f7948085e0..bb442e5f75 100644 --- a/src/lib/import-export/tests/import/validators/sql-validator.test.ts +++ b/apps/studio/src/lib/import-export/tests/import/validators/sql-validator.test.ts @@ -1,5 +1,5 @@ +import { platformTestSuite } from '@studio/common/lib/tests/utils/platform-test-suite'; import { SqlValidator } from 'src/lib/import-export/import/validators/sql-validator'; -import { platformTestSuite } from 'src/tests/utils/platform-test-suite'; platformTestSuite( 'SqlValidator', ( { normalize } ) => { let validator: SqlValidator; diff --git a/src/lib/import-export/tests/import/validators/wpress-validator.test.ts b/apps/studio/src/lib/import-export/tests/import/validators/wpress-validator.test.ts similarity index 97% rename from src/lib/import-export/tests/import/validators/wpress-validator.test.ts rename to apps/studio/src/lib/import-export/tests/import/validators/wpress-validator.test.ts index b41817c958..3686d3d13c 100644 --- a/src/lib/import-export/tests/import/validators/wpress-validator.test.ts +++ b/apps/studio/src/lib/import-export/tests/import/validators/wpress-validator.test.ts @@ -1,7 +1,7 @@ +import { platformTestSuite } from '@studio/common/lib/tests/utils/platform-test-suite'; import { vi } from 'vitest'; import { ImportEvents } from 'src/lib/import-export/import/events'; import { WpressValidator } from 'src/lib/import-export/import/validators/wpress-validator'; -import { platformTestSuite } from 'src/tests/utils/platform-test-suite'; platformTestSuite( 'WpressValidator', ( { sep: separator } ) => { let validator: WpressValidator; diff --git a/src/lib/is-installed.ts b/apps/studio/src/lib/is-installed.ts similarity index 100% rename from src/lib/is-installed.ts rename to apps/studio/src/lib/is-installed.ts diff --git a/src/lib/is-invalid-oauth-token-error.ts b/apps/studio/src/lib/is-invalid-oauth-token-error.ts similarity index 100% rename from src/lib/is-invalid-oauth-token-error.ts rename to apps/studio/src/lib/is-invalid-oauth-token-error.ts diff --git a/src/lib/is-window-frame-rtl.ts b/apps/studio/src/lib/is-window-frame-rtl.ts similarity index 100% rename from src/lib/is-window-frame-rtl.ts rename to apps/studio/src/lib/is-window-frame-rtl.ts diff --git a/src/lib/is-wpcom-network-error.ts b/apps/studio/src/lib/is-wpcom-network-error.ts similarity index 100% rename from src/lib/is-wpcom-network-error.ts rename to apps/studio/src/lib/is-wpcom-network-error.ts diff --git a/src/lib/locale-node.ts b/apps/studio/src/lib/locale-node.ts similarity index 95% rename from src/lib/locale-node.ts rename to apps/studio/src/lib/locale-node.ts index 3de5d6f3b6..8d5421bc09 100644 --- a/src/lib/locale-node.ts +++ b/apps/studio/src/lib/locale-node.ts @@ -5,7 +5,7 @@ import { isSupportedLocale, SupportedLocale, supportedLocales, -} from 'common/lib/locale'; +} from '@studio/common/lib/locale'; import { loadUserData } from 'src/storage/user-data'; export function getSupportedLocale() { diff --git a/src/lib/oauth.ts b/apps/studio/src/lib/oauth.ts similarity index 87% rename from src/lib/oauth.ts rename to apps/studio/src/lib/oauth.ts index 6c984cbffc..e59f151520 100644 --- a/src/lib/oauth.ts +++ b/apps/studio/src/lib/oauth.ts @@ -1,7 +1,7 @@ +import { CLIENT_ID } from '@studio/common/constants'; +import { SupportedLocale } from '@studio/common/lib/locale'; +import { getAuthenticationUrl } from '@studio/common/lib/oauth'; import { z } from 'zod'; -import { CLIENT_ID } from 'common/constants'; -import { SupportedLocale } from 'common/lib/locale'; -import { getAuthenticationUrl } from 'common/lib/oauth'; import { loadUserData } from 'src/storage/user-data'; const authTokenSchema = z.object( { diff --git a/src/lib/sanitize-for-logging.ts b/apps/studio/src/lib/sanitize-for-logging.ts similarity index 100% rename from src/lib/sanitize-for-logging.ts rename to apps/studio/src/lib/sanitize-for-logging.ts diff --git a/src/lib/sentry-release.ts b/apps/studio/src/lib/sentry-release.ts similarity index 100% rename from src/lib/sentry-release.ts rename to apps/studio/src/lib/sentry-release.ts diff --git a/src/lib/serialize-plugins.ts b/apps/studio/src/lib/serialize-plugins.ts similarity index 100% rename from src/lib/serialize-plugins.ts rename to apps/studio/src/lib/serialize-plugins.ts diff --git a/src/lib/server-files-paths.ts b/apps/studio/src/lib/server-files-paths.ts similarity index 100% rename from src/lib/server-files-paths.ts rename to apps/studio/src/lib/server-files-paths.ts diff --git a/src/lib/shell-open-external-wrapper.ts b/apps/studio/src/lib/shell-open-external-wrapper.ts similarity index 100% rename from src/lib/shell-open-external-wrapper.ts rename to apps/studio/src/lib/shell-open-external-wrapper.ts diff --git a/src/lib/site-language.ts b/apps/studio/src/lib/site-language.ts similarity index 98% rename from src/lib/site-language.ts rename to apps/studio/src/lib/site-language.ts index 4fa19c4f22..1645d9722d 100644 --- a/src/lib/site-language.ts +++ b/apps/studio/src/lib/site-language.ts @@ -1,8 +1,8 @@ import path from 'path'; import { Locale } from '@formatjs/intl-locale'; import { match } from '@formatjs/intl-localematcher'; +import { DEFAULT_LOCALE } from '@studio/common/lib/locale'; import fs from 'fs-extra'; -import { DEFAULT_LOCALE } from 'common/lib/locale'; import { getUserLocaleWithFallback } from 'src/lib/locale-node'; import { getResourcesPath } from 'src/storage/paths'; diff --git a/src/lib/sqlite-command-release.ts b/apps/studio/src/lib/sqlite-command-release.ts similarity index 100% rename from src/lib/sqlite-command-release.ts rename to apps/studio/src/lib/sqlite-command-release.ts diff --git a/src/lib/sqlite-command-versions.ts b/apps/studio/src/lib/sqlite-command-versions.ts similarity index 100% rename from src/lib/sqlite-command-versions.ts rename to apps/studio/src/lib/sqlite-command-versions.ts diff --git a/src/lib/sqlite-versions.ts b/apps/studio/src/lib/sqlite-versions.ts similarity index 82% rename from src/lib/sqlite-versions.ts rename to apps/studio/src/lib/sqlite-versions.ts index 96679cbd3b..c4f8d5ab5a 100644 --- a/src/lib/sqlite-versions.ts +++ b/apps/studio/src/lib/sqlite-versions.ts @@ -1,5 +1,5 @@ -import { SQLITE_FILENAME } from 'common/constants'; -import { SqliteIntegrationProvider } from 'common/lib/sqlite-integration'; +import { SQLITE_FILENAME } from '@studio/common/constants'; +import { SqliteIntegrationProvider } from '@studio/common/lib/sqlite-integration'; import { getServerFilesPath } from 'src/storage/paths'; class ElectronSqliteProvider extends SqliteIntegrationProvider { diff --git a/src/lib/sudo-exec.ts b/apps/studio/src/lib/sudo-exec.ts similarity index 100% rename from src/lib/sudo-exec.ts rename to apps/studio/src/lib/sudo-exec.ts diff --git a/src/lib/test-utils.tsx b/apps/studio/src/lib/test-utils.tsx similarity index 94% rename from src/lib/test-utils.tsx rename to apps/studio/src/lib/test-utils.tsx index 0875e4d642..e17a98c5d8 100644 --- a/src/lib/test-utils.tsx +++ b/apps/studio/src/lib/test-utils.tsx @@ -2,7 +2,7 @@ import { configureStore } from '@reduxjs/toolkit'; import { render } from '@testing-library/react'; import React from 'react'; import { Provider } from 'react-redux'; -import { rootReducer, RootState } from 'src/stores'; +import { rootReducer } from 'src/stores'; import { appVersionApi } from 'src/stores/app-version-api'; import { certificateTrustApi } from 'src/stores/certificate-trust-api'; import { installedAppsApi } from 'src/stores/installed-apps-api'; @@ -24,7 +24,7 @@ export function createMock< T >( partial: Partial< T > ): T { } interface TestStoreOptions { - preloadedState?: Partial< RootState >; + preloadedState?: Parameters< typeof rootReducer >[ 0 ]; } export function createTestStore( options: TestStoreOptions = {} ) { diff --git a/src/lib/tests/bump-stats.test.ts b/apps/studio/src/lib/tests/bump-stats.test.ts similarity index 98% rename from src/lib/tests/bump-stats.test.ts rename to apps/studio/src/lib/tests/bump-stats.test.ts index 471e91c144..3468147df2 100644 --- a/src/lib/tests/bump-stats.test.ts +++ b/apps/studio/src/lib/tests/bump-stats.test.ts @@ -1,13 +1,13 @@ -import { waitFor } from '@testing-library/react'; -import { readFile, writeFile } from 'atomically'; -import { vi } from 'vitest'; import { bumpStat, bumpAggregatedUniqueStat, AppdataProvider, LastBumpStatsData, -} from 'common/lib/bump-stat'; -import { AggregateInterval, StatsGroup, StatsMetric } from 'common/types/stats'; +} from '@studio/common/lib/bump-stat'; +import { AggregateInterval, StatsGroup, StatsMetric } from '@studio/common/types/stats'; +import { waitFor } from '@testing-library/react'; +import { readFile, writeFile } from 'atomically'; +import { vi } from 'vitest'; vi.mock( 'atomically', () => ( { readFile: vi.fn(), diff --git a/src/lib/tests/generate-site-name.test.ts b/apps/studio/src/lib/tests/generate-site-name.test.ts similarity index 100% rename from src/lib/tests/generate-site-name.test.ts rename to apps/studio/src/lib/tests/generate-site-name.test.ts diff --git a/src/lib/tests/get-localized-link.test.ts b/apps/studio/src/lib/tests/get-localized-link.test.ts similarity index 100% rename from src/lib/tests/get-localized-link.test.ts rename to apps/studio/src/lib/tests/get-localized-link.test.ts diff --git a/src/lib/tests/get-site-url.test.ts b/apps/studio/src/lib/tests/get-site-url.test.ts similarity index 100% rename from src/lib/tests/get-site-url.test.ts rename to apps/studio/src/lib/tests/get-site-url.test.ts diff --git a/src/lib/tests/hosts-file.test.ts b/apps/studio/src/lib/tests/hosts-file.test.ts similarity index 100% rename from src/lib/tests/hosts-file.test.ts rename to apps/studio/src/lib/tests/hosts-file.test.ts diff --git a/src/lib/tests/is-installed.test.ts b/apps/studio/src/lib/tests/is-installed.test.ts similarity index 100% rename from src/lib/tests/is-installed.test.ts rename to apps/studio/src/lib/tests/is-installed.test.ts diff --git a/src/lib/tests/is-invalid-oauth-token-error.test.ts b/apps/studio/src/lib/tests/is-invalid-oauth-token-error.test.ts similarity index 100% rename from src/lib/tests/is-invalid-oauth-token-error.test.ts rename to apps/studio/src/lib/tests/is-invalid-oauth-token-error.test.ts diff --git a/src/lib/tests/locale.test.ts b/apps/studio/src/lib/tests/locale.test.ts similarity index 97% rename from src/lib/tests/locale.test.ts rename to apps/studio/src/lib/tests/locale.test.ts index c7612abb1f..8144a5fe3f 100644 --- a/src/lib/tests/locale.test.ts +++ b/apps/studio/src/lib/tests/locale.test.ts @@ -2,9 +2,9 @@ * @vitest-environment node */ import { app } from 'electron'; +import { getLocaleData } from '@studio/common/lib/locale'; import { createI18n } from '@wordpress/i18n'; import { vi } from 'vitest'; -import { getLocaleData } from 'common/lib/locale'; import { getSupportedLocale } from 'src/lib/locale-node'; vi.mocked( app ).getLocale = vi.fn(); diff --git a/src/lib/tests/oauth.test.ts b/apps/studio/src/lib/tests/oauth.test.ts similarity index 96% rename from src/lib/tests/oauth.test.ts rename to apps/studio/src/lib/tests/oauth.test.ts index 3faaa2c675..ddc1cd22df 100644 --- a/src/lib/tests/oauth.test.ts +++ b/apps/studio/src/lib/tests/oauth.test.ts @@ -1,13 +1,13 @@ +import { SupportedLocale } from '@studio/common/lib/locale'; import { readFile } from 'atomically'; import { vi } from 'vitest'; -import { SupportedLocale } from 'common/lib/locale'; import { getAuthenticationToken, getSignUpUrl } from 'src/lib/oauth'; vi.mock( 'src/lib/certificate-manager', () => ( {} ) ); vi.mock( 'atomically', () => ( { readFile: vi.fn(), } ) ); -vi.mock( 'src/lib/wpcom-factory', () => ( { +vi.mock( '@studio/common/lib/wpcom-factory', () => ( { __esModule: true, default: vi.fn(), } ) ); diff --git a/src/lib/tests/sanitize-for-logging.test.ts b/apps/studio/src/lib/tests/sanitize-for-logging.test.ts similarity index 100% rename from src/lib/tests/sanitize-for-logging.test.ts rename to apps/studio/src/lib/tests/sanitize-for-logging.test.ts diff --git a/src/lib/tests/serialize-plugins.test.ts b/apps/studio/src/lib/tests/serialize-plugins.test.ts similarity index 100% rename from src/lib/tests/serialize-plugins.test.ts rename to apps/studio/src/lib/tests/serialize-plugins.test.ts diff --git a/src/lib/tests/site-language.test.ts b/apps/studio/src/lib/tests/site-language.test.ts similarity index 100% rename from src/lib/tests/site-language.test.ts rename to apps/studio/src/lib/tests/site-language.test.ts diff --git a/src/lib/tests/url-utils.test.ts b/apps/studio/src/lib/tests/url-utils.test.ts similarity index 100% rename from src/lib/tests/url-utils.test.ts rename to apps/studio/src/lib/tests/url-utils.test.ts diff --git a/src/lib/tests/windows-helpers.test.ts b/apps/studio/src/lib/tests/windows-helpers.test.ts similarity index 100% rename from src/lib/tests/windows-helpers.test.ts rename to apps/studio/src/lib/tests/windows-helpers.test.ts diff --git a/src/lib/update-site-url.ts b/apps/studio/src/lib/update-site-url.ts similarity index 100% rename from src/lib/update-site-url.ts rename to apps/studio/src/lib/update-site-url.ts diff --git a/src/lib/url-utils.ts b/apps/studio/src/lib/url-utils.ts similarity index 100% rename from src/lib/url-utils.ts rename to apps/studio/src/lib/url-utils.ts diff --git a/src/lib/user-data-watcher.ts b/apps/studio/src/lib/user-data-watcher.ts similarity index 100% rename from src/lib/user-data-watcher.ts rename to apps/studio/src/lib/user-data-watcher.ts diff --git a/src/lib/version-utils.ts b/apps/studio/src/lib/version-utils.ts similarity index 100% rename from src/lib/version-utils.ts rename to apps/studio/src/lib/version-utils.ts diff --git a/src/lib/windows-helpers.ts b/apps/studio/src/lib/windows-helpers.ts similarity index 100% rename from src/lib/windows-helpers.ts rename to apps/studio/src/lib/windows-helpers.ts diff --git a/src/lib/wordpress-server-types.ts b/apps/studio/src/lib/wordpress-server-types.ts similarity index 100% rename from src/lib/wordpress-server-types.ts rename to apps/studio/src/lib/wordpress-server-types.ts diff --git a/src/lib/wordpress-setup.ts b/apps/studio/src/lib/wordpress-setup.ts similarity index 89% rename from src/lib/wordpress-setup.ts rename to apps/studio/src/lib/wordpress-setup.ts index 9432cd4961..75a576fea0 100644 --- a/src/lib/wordpress-setup.ts +++ b/apps/studio/src/lib/wordpress-setup.ts @@ -4,7 +4,7 @@ */ import nodePath from 'path'; -import { pathExists, recursiveCopyDirectory } from 'common/lib/fs-utils'; +import { pathExists, recursiveCopyDirectory } from '@studio/common/lib/fs-utils'; import { getResourcesPath } from 'src/storage/paths'; /** diff --git a/src/lib/wp-versions.ts b/apps/studio/src/lib/wp-versions.ts similarity index 97% rename from src/lib/wp-versions.ts rename to apps/studio/src/lib/wp-versions.ts index 618fa979ae..0c759c31c3 100644 --- a/src/lib/wp-versions.ts +++ b/apps/studio/src/lib/wp-versions.ts @@ -1,7 +1,7 @@ import path from 'path'; +import { recursiveCopyDirectory } from '@studio/common/lib/fs-utils'; import fs from 'fs-extra'; import semver from 'semver'; -import { recursiveCopyDirectory } from 'common/lib/fs-utils'; import { downloadWordPress } from 'src/lib/download-utils'; import { getWordPressVersionPath } from 'src/lib/server-files-paths'; diff --git a/src/logging.ts b/apps/studio/src/logging.ts similarity index 100% rename from src/logging.ts rename to apps/studio/src/logging.ts diff --git a/src/main-window.ts b/apps/studio/src/main-window.ts similarity index 99% rename from src/main-window.ts rename to apps/studio/src/main-window.ts index 714dd51ba3..f80bc47393 100644 --- a/src/main-window.ts +++ b/apps/studio/src/main-window.ts @@ -1,6 +1,6 @@ import { BrowserWindow, type BrowserWindowConstructorOptions, screen, app } from 'electron'; import * as path from 'path'; -import { portFinder } from 'common/lib/port-finder'; +import { portFinder } from '@studio/common/lib/port-finder'; import { DEFAULT_WIDTH, MAIN_MIN_HEIGHT, diff --git a/src/menu.ts b/apps/studio/src/menu.ts similarity index 100% rename from src/menu.ts rename to apps/studio/src/menu.ts diff --git a/src/migrations/migrate-from-wp-now-folder.ts b/apps/studio/src/migrations/migrate-from-wp-now-folder.ts similarity index 92% rename from src/migrations/migrate-from-wp-now-folder.ts rename to apps/studio/src/migrations/migrate-from-wp-now-folder.ts index 96ae5f1f4c..6384e5901e 100644 --- a/src/migrations/migrate-from-wp-now-folder.ts +++ b/apps/studio/src/migrations/migrate-from-wp-now-folder.ts @@ -1,6 +1,6 @@ import { app } from 'electron'; import path from 'path'; -import { pathExists, recursiveCopyDirectory } from 'common/lib/fs-utils'; +import { pathExists, recursiveCopyDirectory } from '@studio/common/lib/fs-utils'; import { getServerFilesPath } from 'src/storage/paths'; import { loadUserData } from 'src/storage/user-data'; diff --git a/src/migrations/remove-sites-with-empty-dirs.ts b/apps/studio/src/migrations/remove-sites-with-empty-dirs.ts similarity index 92% rename from src/migrations/remove-sites-with-empty-dirs.ts rename to apps/studio/src/migrations/remove-sites-with-empty-dirs.ts index 694b47c4dc..75893b13da 100644 --- a/src/migrations/remove-sites-with-empty-dirs.ts +++ b/apps/studio/src/migrations/remove-sites-with-empty-dirs.ts @@ -1,4 +1,4 @@ -import { isEmptyDir } from 'common/lib/fs-utils'; +import { isEmptyDir } from '@studio/common/lib/fs-utils'; import { loadUserData, lockAppdata, saveUserData, unlockAppdata } from 'src/storage/user-data'; export async function removeSitesWithEmptyDirectories() { diff --git a/src/migrations/rename-launch-uniques-stat.ts b/apps/studio/src/migrations/rename-launch-uniques-stat.ts similarity index 91% rename from src/migrations/rename-launch-uniques-stat.ts rename to apps/studio/src/migrations/rename-launch-uniques-stat.ts index d204330e33..01f05cfcbb 100644 --- a/src/migrations/rename-launch-uniques-stat.ts +++ b/apps/studio/src/migrations/rename-launch-uniques-stat.ts @@ -1,4 +1,4 @@ -import { StatsGroup } from 'common/types/stats'; +import { StatsGroup } from '@studio/common/types/stats'; import { loadUserData, lockAppdata, saveUserData, unlockAppdata } from 'src/storage/user-data'; export async function renameLaunchUniquesStat() { diff --git a/apps/studio/src/modules/add-site/components/blueprint-deeplink.tsx b/apps/studio/src/modules/add-site/components/blueprint-deeplink.tsx new file mode 100644 index 0000000000..e21431322a --- /dev/null +++ b/apps/studio/src/modules/add-site/components/blueprint-deeplink.tsx @@ -0,0 +1,82 @@ +import { BlueprintValidationWarning } from '@studio/common/lib/blueprint-validation'; +import { + __experimentalVStack as VStack, + __experimentalHStack as HStack, + __experimentalHeading as Heading, + __experimentalText as Text, + Icon, +} from '@wordpress/components'; +import { check, link, upload, starFilled } from '@wordpress/icons'; +import { useI18n } from '@wordpress/react-i18n'; +import { Blueprint } from 'src/stores/wpcom-api'; +import { BlueprintWarningNotice } from './blueprint-warning-notice'; + +export type BlueprintSource = 'deeplink' | 'file' | 'featured'; + +interface BlueprintDetailsProps { + selectedBlueprint?: Blueprint; + warnings?: BlueprintValidationWarning[]; + source?: BlueprintSource; +} + +export default function BlueprintDetails( { + selectedBlueprint, + warnings, + source = 'deeplink', +}: BlueprintDetailsProps ) { + const { __ } = useI18n(); + + const blueprintTitle = selectedBlueprint?.title || __( 'Blueprint' ); + const blueprintDescription = selectedBlueprint?.excerpt || ''; + + const sourceConfig = { + deeplink: { icon: link, label: __( 'Blueprint loaded from URL' ) }, + file: { icon: upload, label: __( 'Blueprint loaded from file' ) }, + featured: { icon: starFilled, label: __( 'Featured Blueprint' ) }, + }; + + const { icon: sourceIcon, label: sourceLabel } = sourceConfig[ source ]; + + return ( + + + { __( 'Start from a Blueprint' ) } + + + + + + + + + { blueprintTitle } + + + { blueprintDescription && ( + + { blueprintDescription } + + ) } + + + + + + + { sourceLabel } + + + + ); +} diff --git a/src/modules/add-site/components/blueprint-details.tsx b/apps/studio/src/modules/add-site/components/blueprint-details.tsx similarity index 96% rename from src/modules/add-site/components/blueprint-details.tsx rename to apps/studio/src/modules/add-site/components/blueprint-details.tsx index 6eff0061df..e21431322a 100644 --- a/src/modules/add-site/components/blueprint-details.tsx +++ b/apps/studio/src/modules/add-site/components/blueprint-details.tsx @@ -1,3 +1,4 @@ +import { BlueprintValidationWarning } from '@studio/common/lib/blueprint-validation'; import { __experimentalVStack as VStack, __experimentalHStack as HStack, @@ -7,7 +8,6 @@ import { } from '@wordpress/components'; import { check, link, upload, starFilled } from '@wordpress/icons'; import { useI18n } from '@wordpress/react-i18n'; -import { BlueprintValidationWarning } from 'common/lib/blueprint-validation'; import { Blueprint } from 'src/stores/wpcom-api'; import { BlueprintWarningNotice } from './blueprint-warning-notice'; diff --git a/src/modules/add-site/components/blueprint-icon.tsx b/apps/studio/src/modules/add-site/components/blueprint-icon.tsx similarity index 100% rename from src/modules/add-site/components/blueprint-icon.tsx rename to apps/studio/src/modules/add-site/components/blueprint-icon.tsx diff --git a/src/modules/add-site/components/blueprint-warning-notice.tsx b/apps/studio/src/modules/add-site/components/blueprint-warning-notice.tsx similarity index 97% rename from src/modules/add-site/components/blueprint-warning-notice.tsx rename to apps/studio/src/modules/add-site/components/blueprint-warning-notice.tsx index 0af5a30158..35876b38b2 100644 --- a/src/modules/add-site/components/blueprint-warning-notice.tsx +++ b/apps/studio/src/modules/add-site/components/blueprint-warning-notice.tsx @@ -1,3 +1,4 @@ +import { BlueprintValidationWarning } from '@studio/common/lib/blueprint-validation'; import { __experimentalVStack as VStack, __experimentalHStack as HStack, @@ -9,7 +10,6 @@ import { import { Icon, caution, check } from '@wordpress/icons'; import { useI18n } from '@wordpress/react-i18n'; import { useState } from 'react'; -import { BlueprintValidationWarning } from 'common/lib/blueprint-validation'; interface BlueprintIssuesModalProps { warnings: BlueprintValidationWarning[] | undefined; diff --git a/src/modules/add-site/components/blueprints.css b/apps/studio/src/modules/add-site/components/blueprints.css similarity index 100% rename from src/modules/add-site/components/blueprints.css rename to apps/studio/src/modules/add-site/components/blueprints.css diff --git a/src/modules/add-site/components/blueprints.tsx b/apps/studio/src/modules/add-site/components/blueprints.tsx similarity index 98% rename from src/modules/add-site/components/blueprints.tsx rename to apps/studio/src/modules/add-site/components/blueprints.tsx index 29cde9019d..8f06f6651c 100644 --- a/src/modules/add-site/components/blueprints.tsx +++ b/apps/studio/src/modules/add-site/components/blueprints.tsx @@ -1,3 +1,5 @@ +import { generateDefaultBlueprintDescription } from '@studio/common/lib/blueprint-settings'; +import { BlueprintValidationWarning } from '@studio/common/lib/blueprint-validation'; import { __experimentalVStack as VStack, __experimentalHStack as HStack, @@ -12,8 +14,6 @@ import { sprintf } from '@wordpress/i18n'; import { Icon, external, upload } from '@wordpress/icons'; import { useI18n } from '@wordpress/react-i18n'; import { useCallback, useRef, useState, useMemo } from 'react'; -import { generateDefaultBlueprintDescription } from 'common/lib/blueprint-settings'; -import { BlueprintValidationWarning } from 'common/lib/blueprint-validation'; import StudioButton from 'src/components/button'; import { LearnMoreLink } from 'src/components/learn-more'; import { cx } from 'src/lib/cx'; diff --git a/src/modules/add-site/components/create-site-form.tsx b/apps/studio/src/modules/add-site/components/create-site-form.tsx similarity index 98% rename from src/modules/add-site/components/create-site-form.tsx rename to apps/studio/src/modules/add-site/components/create-site-form.tsx index afa7c5b89d..f2002019b9 100644 --- a/src/modules/add-site/components/create-site-form.tsx +++ b/apps/studio/src/modules/add-site/components/create-site-form.tsx @@ -1,12 +1,15 @@ +import { DEFAULT_WORDPRESS_VERSION } from '@studio/common/constants'; +import { + generateCustomDomainFromSiteName, + getDomainNameValidationError, +} from '@studio/common/lib/domains'; +import { SupportedPHPVersions } from '@studio/common/types/php-versions'; import { Icon, SelectControl, Notice } from '@wordpress/components'; import { createInterpolateElement } from '@wordpress/element'; import { __, sprintf, _n } from '@wordpress/i18n'; import { tip, cautionFilled, chevronRight, chevronDown, chevronLeft } from '@wordpress/icons'; import { useI18n } from '@wordpress/react-i18n'; import { FormEvent, useState, useEffect, useCallback, useMemo, useRef, RefObject } from 'react'; -import { DEFAULT_WORDPRESS_VERSION } from 'common/constants'; -import { generateCustomDomainFromSiteName, getDomainNameValidationError } from 'common/lib/domains'; -import { SupportedPHPVersions } from 'common/types/php-versions'; import Button from 'src/components/button'; import FolderIcon from 'src/components/folder-icon'; import { LearnMoreLink, LearnHowLink } from 'src/components/learn-more'; @@ -19,7 +22,7 @@ import { selectDefaultWordPressVersion, selectAllowedPhpVersions, } from 'src/stores/provider-constants-slice'; -import type { BlueprintPreferredVersions } from 'common/lib/blueprint-validation'; +import type { BlueprintPreferredVersions } from '@studio/common/lib/blueprint-validation'; import type { CreateSiteFormValues, PathValidationResult } from 'src/hooks/use-add-site'; import type { AllowedPHPVersion } from 'src/lib/wordpress-server-types'; diff --git a/src/modules/add-site/components/create-site.tsx b/apps/studio/src/modules/add-site/components/create-site.tsx similarity index 95% rename from src/modules/add-site/components/create-site.tsx rename to apps/studio/src/modules/add-site/components/create-site.tsx index d35eab063c..ea12804183 100644 --- a/src/modules/add-site/components/create-site.tsx +++ b/apps/studio/src/modules/add-site/components/create-site.tsx @@ -6,7 +6,7 @@ import { useI18n } from '@wordpress/react-i18n'; import { RefObject } from 'react'; import { AllowedPHPVersion } from 'src/lib/wordpress-server-types'; import { CreateSiteForm } from 'src/modules/add-site/components/create-site-form'; -import type { BlueprintPreferredVersions } from 'common/lib/blueprint-validation'; +import type { BlueprintPreferredVersions } from '@studio/common/lib/blueprint-validation'; import type { CreateSiteFormValues, PathValidationResult } from 'src/hooks/use-add-site'; export interface CreateSiteProps { diff --git a/src/modules/add-site/components/import-backup.tsx b/apps/studio/src/modules/add-site/components/import-backup.tsx similarity index 100% rename from src/modules/add-site/components/import-backup.tsx rename to apps/studio/src/modules/add-site/components/import-backup.tsx diff --git a/src/modules/add-site/components/index.ts b/apps/studio/src/modules/add-site/components/index.ts similarity index 100% rename from src/modules/add-site/components/index.ts rename to apps/studio/src/modules/add-site/components/index.ts diff --git a/src/modules/add-site/components/options.tsx b/apps/studio/src/modules/add-site/components/options.tsx similarity index 100% rename from src/modules/add-site/components/options.tsx rename to apps/studio/src/modules/add-site/components/options.tsx diff --git a/src/modules/add-site/components/pull-remote-site.tsx b/apps/studio/src/modules/add-site/components/pull-remote-site.tsx similarity index 100% rename from src/modules/add-site/components/pull-remote-site.tsx rename to apps/studio/src/modules/add-site/components/pull-remote-site.tsx diff --git a/src/modules/add-site/components/stepper.tsx b/apps/studio/src/modules/add-site/components/stepper.tsx similarity index 100% rename from src/modules/add-site/components/stepper.tsx rename to apps/studio/src/modules/add-site/components/stepper.tsx diff --git a/src/modules/add-site/hooks/tests/use-blueprint-deeplink.test.tsx b/apps/studio/src/modules/add-site/hooks/tests/use-blueprint-deeplink.test.tsx similarity index 100% rename from src/modules/add-site/hooks/tests/use-blueprint-deeplink.test.tsx rename to apps/studio/src/modules/add-site/hooks/tests/use-blueprint-deeplink.test.tsx diff --git a/src/modules/add-site/hooks/tests/use-find-available-site-name.test.ts b/apps/studio/src/modules/add-site/hooks/tests/use-find-available-site-name.test.ts similarity index 100% rename from src/modules/add-site/hooks/tests/use-find-available-site-name.test.ts rename to apps/studio/src/modules/add-site/hooks/tests/use-find-available-site-name.test.ts diff --git a/src/modules/add-site/hooks/use-blueprint-deeplink.ts b/apps/studio/src/modules/add-site/hooks/use-blueprint-deeplink.ts similarity index 97% rename from src/modules/add-site/hooks/use-blueprint-deeplink.ts rename to apps/studio/src/modules/add-site/hooks/use-blueprint-deeplink.ts index cd4bae6495..949ff94048 100644 --- a/src/modules/add-site/hooks/use-blueprint-deeplink.ts +++ b/apps/studio/src/modules/add-site/hooks/use-blueprint-deeplink.ts @@ -1,13 +1,13 @@ -import { useI18n } from '@wordpress/react-i18n'; -import { useCallback } from 'react'; import { extractFormValuesFromBlueprint, generateDefaultBlueprintDescription, -} from 'common/lib/blueprint-settings'; +} from '@studio/common/lib/blueprint-settings'; import { BlueprintValidationWarning, BlueprintPreferredVersions, -} from 'common/lib/blueprint-validation'; +} from '@studio/common/lib/blueprint-validation'; +import { useI18n } from '@wordpress/react-i18n'; +import { useCallback } from 'react'; import { useIpcListener } from 'src/hooks/use-ipc-listener'; import { getIpcApi } from 'src/lib/get-ipc-api'; import { Blueprint } from 'src/stores/wpcom-api'; diff --git a/src/modules/add-site/hooks/use-find-available-site-name.ts b/apps/studio/src/modules/add-site/hooks/use-find-available-site-name.ts similarity index 100% rename from src/modules/add-site/hooks/use-find-available-site-name.ts rename to apps/studio/src/modules/add-site/hooks/use-find-available-site-name.ts diff --git a/src/modules/add-site/hooks/use-stepper.ts b/apps/studio/src/modules/add-site/hooks/use-stepper.ts similarity index 100% rename from src/modules/add-site/hooks/use-stepper.ts rename to apps/studio/src/modules/add-site/hooks/use-stepper.ts diff --git a/src/modules/add-site/index.tsx b/apps/studio/src/modules/add-site/index.tsx similarity index 98% rename from src/modules/add-site/index.tsx rename to apps/studio/src/modules/add-site/index.tsx index 99c6db7d5d..6fca29d7ab 100644 --- a/src/modules/add-site/index.tsx +++ b/apps/studio/src/modules/add-site/index.tsx @@ -1,15 +1,15 @@ +import { MINIMUM_WORDPRESS_VERSION } from '@studio/common/constants'; +import { extractFormValuesFromBlueprint } from '@studio/common/lib/blueprint-settings'; +import { + BlueprintPreferredVersions, + BlueprintValidationWarning, +} from '@studio/common/lib/blueprint-validation'; +import { SupportedPHPVersionsList } from '@studio/common/types/php-versions'; import { speak } from '@wordpress/a11y'; import { Navigator, useNavigator } from '@wordpress/components'; import { sprintf } from '@wordpress/i18n'; import { useI18n } from '@wordpress/react-i18n'; import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; -import { MINIMUM_WORDPRESS_VERSION } from 'common/constants'; -import { extractFormValuesFromBlueprint } from 'common/lib/blueprint-settings'; -import { - BlueprintPreferredVersions, - BlueprintValidationWarning, -} from 'common/lib/blueprint-validation'; -import { SupportedPHPVersionsList } from 'common/types/php-versions'; import Button from 'src/components/button'; import { FullscreenModal } from 'src/components/fullscreen-modal'; import { useAddSite, CreateSiteFormValues } from 'src/hooks/use-add-site'; diff --git a/src/modules/add-site/tests/add-site.test.tsx b/apps/studio/src/modules/add-site/tests/add-site.test.tsx similarity index 100% rename from src/modules/add-site/tests/add-site.test.tsx rename to apps/studio/src/modules/add-site/tests/add-site.test.tsx diff --git a/src/modules/cli/lib/cli-events-subscriber.ts b/apps/studio/src/modules/cli/lib/cli-events-subscriber.ts similarity index 94% rename from src/modules/cli/lib/cli-events-subscriber.ts rename to apps/studio/src/modules/cli/lib/cli-events-subscriber.ts index 55a0a8a46a..f5338f73af 100644 --- a/src/modules/cli/lib/cli-events-subscriber.ts +++ b/apps/studio/src/modules/cli/lib/cli-events-subscriber.ts @@ -1,6 +1,11 @@ +import { sequential } from '@studio/common/lib/sequential'; +import { + siteEventSchema, + SiteEvent, + SITE_EVENTS, + SiteDetails, +} from '@studio/common/lib/site-events'; import { z } from 'zod'; -import { sequential } from 'common/lib/sequential'; -import { siteEventSchema, SiteEvent, SITE_EVENTS, SiteDetails } from 'common/lib/site-events'; import { sendIpcEventToRenderer } from 'src/ipc-utils'; import { executeCliCommand } from 'src/modules/cli/lib/execute-command'; import { SiteServer } from 'src/site-server'; diff --git a/src/modules/cli/lib/cli-server-process.ts b/apps/studio/src/modules/cli/lib/cli-server-process.ts similarity index 97% rename from src/modules/cli/lib/cli-server-process.ts rename to apps/studio/src/modules/cli/lib/cli-server-process.ts index a7f3d24755..18d2b2f65c 100644 --- a/src/modules/cli/lib/cli-server-process.ts +++ b/apps/studio/src/modules/cli/lib/cli-server-process.ts @@ -1,5 +1,5 @@ +import { SiteCommandLoggerAction } from '@studio/common/logger-actions'; import { z } from 'zod'; -import { SiteCommandLoggerAction } from 'common/logger-actions'; import { executeCliCommand } from './execute-command'; import type { WordPressServerProcess } from 'src/lib/wordpress-server-types'; diff --git a/src/modules/cli/lib/cli-site-creator.ts b/apps/studio/src/modules/cli/lib/cli-site-creator.ts similarity index 96% rename from src/modules/cli/lib/cli-site-creator.ts rename to apps/studio/src/modules/cli/lib/cli-site-creator.ts index 0f20f8d7d3..553f123ffc 100644 --- a/src/modules/cli/lib/cli-site-creator.ts +++ b/apps/studio/src/modules/cli/lib/cli-site-creator.ts @@ -1,9 +1,9 @@ import fs from 'node:fs'; import os from 'node:os'; import path from 'node:path'; +import { isWordPressDevVersion } from '@studio/common/lib/wordpress-version-utils'; +import { SiteCommandLoggerAction } from '@studio/common/logger-actions'; import { z } from 'zod'; -import { isWordPressDevVersion } from 'common/lib/wordpress-version-utils'; -import { SiteCommandLoggerAction } from 'common/logger-actions'; import { sendIpcEventToRenderer } from 'src/ipc-utils'; import { executeCliCommand } from './execute-command'; import type { Blueprint } from '@wp-playground/blueprints'; diff --git a/src/modules/cli/lib/cli-site-editor.ts b/apps/studio/src/modules/cli/lib/cli-site-editor.ts similarity index 96% rename from src/modules/cli/lib/cli-site-editor.ts rename to apps/studio/src/modules/cli/lib/cli-site-editor.ts index a027c51a31..67da71d8fd 100644 --- a/src/modules/cli/lib/cli-site-editor.ts +++ b/apps/studio/src/modules/cli/lib/cli-site-editor.ts @@ -1,5 +1,5 @@ +import { SiteCommandLoggerAction } from '@studio/common/logger-actions'; import { z } from 'zod'; -import { SiteCommandLoggerAction } from 'common/logger-actions'; import { executeCliCommand } from './execute-command'; const cliEventSchema = z.object( { diff --git a/src/modules/cli/lib/execute-command.ts b/apps/studio/src/modules/cli/lib/execute-command.ts similarity index 100% rename from src/modules/cli/lib/execute-command.ts rename to apps/studio/src/modules/cli/lib/execute-command.ts diff --git a/src/modules/cli/lib/execute-preview-command.ts b/apps/studio/src/modules/cli/lib/execute-preview-command.ts similarity index 96% rename from src/modules/cli/lib/execute-preview-command.ts rename to apps/studio/src/modules/cli/lib/execute-preview-command.ts index 0187c8d1ad..e210f24cc3 100644 --- a/src/modules/cli/lib/execute-preview-command.ts +++ b/apps/studio/src/modules/cli/lib/execute-preview-command.ts @@ -1,6 +1,6 @@ import crypto from 'crypto'; +import { PreviewCommandLoggerAction } from '@studio/common/logger-actions'; import { z } from 'zod'; -import { PreviewCommandLoggerAction } from 'common/logger-actions'; import { sendIpcEventToRendererWithWindow } from 'src/ipc-utils'; import { executeCliCommand } from 'src/modules/cli/lib/execute-command'; diff --git a/src/modules/cli/lib/ipc-handlers.ts b/apps/studio/src/modules/cli/lib/ipc-handlers.ts similarity index 100% rename from src/modules/cli/lib/ipc-handlers.ts rename to apps/studio/src/modules/cli/lib/ipc-handlers.ts diff --git a/src/modules/cli/lib/macos-installation-manager.ts b/apps/studio/src/modules/cli/lib/macos-installation-manager.ts similarity index 98% rename from src/modules/cli/lib/macos-installation-manager.ts rename to apps/studio/src/modules/cli/lib/macos-installation-manager.ts index 2cca3adf6c..a33e317897 100644 --- a/src/modules/cli/lib/macos-installation-manager.ts +++ b/apps/studio/src/modules/cli/lib/macos-installation-manager.ts @@ -2,8 +2,8 @@ import { dialog } from 'electron'; import { mkdir, readlink, symlink, unlink, lstat } from 'node:fs/promises'; import path from 'node:path'; import * as Sentry from '@sentry/electron/main'; +import { isErrnoException } from '@studio/common/lib/is-errno-exception'; import { __, sprintf } from '@wordpress/i18n'; -import { isErrnoException } from 'common/lib/is-errno-exception'; import { sudoExec } from 'src/lib/sudo-exec'; import { getMainWindow } from 'src/main-window'; import { StudioCliInstallationManager } from 'src/modules/cli/lib/ipc-handlers'; diff --git a/src/modules/cli/lib/windows-installation-manager.ts b/apps/studio/src/modules/cli/lib/windows-installation-manager.ts similarity index 100% rename from src/modules/cli/lib/windows-installation-manager.ts rename to apps/studio/src/modules/cli/lib/windows-installation-manager.ts diff --git a/src/modules/onboarding/components/connect-to-wpcom.tsx b/apps/studio/src/modules/onboarding/components/connect-to-wpcom.tsx similarity index 100% rename from src/modules/onboarding/components/connect-to-wpcom.tsx rename to apps/studio/src/modules/onboarding/components/connect-to-wpcom.tsx diff --git a/src/modules/onboarding/hooks/use-onboarding.tsx b/apps/studio/src/modules/onboarding/hooks/use-onboarding.tsx similarity index 100% rename from src/modules/onboarding/hooks/use-onboarding.tsx rename to apps/studio/src/modules/onboarding/hooks/use-onboarding.tsx diff --git a/src/modules/onboarding/index.tsx b/apps/studio/src/modules/onboarding/index.tsx similarity index 100% rename from src/modules/onboarding/index.tsx rename to apps/studio/src/modules/onboarding/index.tsx diff --git a/src/modules/preview-site/components/create-preview-button.tsx b/apps/studio/src/modules/preview-site/components/create-preview-button.tsx similarity index 98% rename from src/modules/preview-site/components/create-preview-button.tsx rename to apps/studio/src/modules/preview-site/components/create-preview-button.tsx index ab16085558..9b8cf12ccd 100644 --- a/src/modules/preview-site/components/create-preview-button.tsx +++ b/apps/studio/src/modules/preview-site/components/create-preview-button.tsx @@ -1,6 +1,6 @@ +import { DEMO_SITE_SIZE_LIMIT_GB } from '@studio/common/constants'; import { __, sprintf } from '@wordpress/i18n'; import { useI18n } from '@wordpress/react-i18n'; -import { DEMO_SITE_SIZE_LIMIT_GB } from 'common/constants'; import { AuthContextType } from 'src/components/auth-provider'; import Button from 'src/components/button'; import offlineIcon from 'src/components/offline-icon'; diff --git a/src/modules/preview-site/components/delete-progress-row.tsx b/apps/studio/src/modules/preview-site/components/delete-progress-row.tsx similarity index 100% rename from src/modules/preview-site/components/delete-progress-row.tsx rename to apps/studio/src/modules/preview-site/components/delete-progress-row.tsx diff --git a/src/modules/preview-site/components/preview-action-buttons-menu.tsx b/apps/studio/src/modules/preview-site/components/preview-action-buttons-menu.tsx similarity index 98% rename from src/modules/preview-site/components/preview-action-buttons-menu.tsx rename to apps/studio/src/modules/preview-site/components/preview-action-buttons-menu.tsx index 4ea17ef181..b3b3d51c65 100644 --- a/src/modules/preview-site/components/preview-action-buttons-menu.tsx +++ b/apps/studio/src/modules/preview-site/components/preview-action-buttons-menu.tsx @@ -1,9 +1,9 @@ +import { Snapshot } from '@studio/common/types/snapshot'; import { DropdownMenu, MenuGroup, MenuItem } from '@wordpress/components'; import { __ } from '@wordpress/i18n'; import { moreVertical } from '@wordpress/icons'; import { useI18n } from '@wordpress/react-i18n'; import { useState } from 'react'; -import { Snapshot } from 'common/types/snapshot'; import offlineIcon from 'src/components/offline-icon'; import { Tooltip, TooltipProps } from 'src/components/tooltip'; import { useConfirmationDialog } from 'src/hooks/use-confirmation-dialog'; diff --git a/src/modules/preview-site/components/preview-site-row.tsx b/apps/studio/src/modules/preview-site/components/preview-site-row.tsx similarity index 99% rename from src/modules/preview-site/components/preview-site-row.tsx rename to apps/studio/src/modules/preview-site/components/preview-site-row.tsx index 174213ca39..d2fae0f02e 100644 --- a/src/modules/preview-site/components/preview-site-row.tsx +++ b/apps/studio/src/modules/preview-site/components/preview-site-row.tsx @@ -1,9 +1,9 @@ +import { Snapshot } from '@studio/common/types/snapshot'; import { Spinner } from '@wordpress/components'; import { sprintf } from '@wordpress/i18n'; import { Icon, published, cautionFilled } from '@wordpress/icons'; import { useI18n } from '@wordpress/react-i18n'; import { useEffect, useState, useRef } from 'react'; -import { Snapshot } from 'common/types/snapshot'; import { ArrowIcon } from 'src/components/arrow-icon'; import Button from 'src/components/button'; import { TooltipProps, Tooltip } from 'src/components/tooltip'; diff --git a/src/modules/preview-site/components/preview-sites-table-header.tsx b/apps/studio/src/modules/preview-site/components/preview-sites-table-header.tsx similarity index 100% rename from src/modules/preview-site/components/preview-sites-table-header.tsx rename to apps/studio/src/modules/preview-site/components/preview-sites-table-header.tsx diff --git a/src/modules/preview-site/components/progress-row.tsx b/apps/studio/src/modules/preview-site/components/progress-row.tsx similarity index 100% rename from src/modules/preview-site/components/progress-row.tsx rename to apps/studio/src/modules/preview-site/components/progress-row.tsx diff --git a/src/modules/preview-site/components/rename-preview-modal.tsx b/apps/studio/src/modules/preview-site/components/rename-preview-modal.tsx similarity index 100% rename from src/modules/preview-site/components/rename-preview-modal.tsx rename to apps/studio/src/modules/preview-site/components/rename-preview-modal.tsx diff --git a/src/modules/preview-site/components/tests/preview-action-buttons-menu.test.tsx b/apps/studio/src/modules/preview-site/components/tests/preview-action-buttons-menu.test.tsx similarity index 98% rename from src/modules/preview-site/components/tests/preview-action-buttons-menu.test.tsx rename to apps/studio/src/modules/preview-site/components/tests/preview-action-buttons-menu.test.tsx index d0b2031386..98744405f2 100644 --- a/src/modules/preview-site/components/tests/preview-action-buttons-menu.test.tsx +++ b/apps/studio/src/modules/preview-site/components/tests/preview-action-buttons-menu.test.tsx @@ -1,10 +1,10 @@ import { UnknownAction } from '@reduxjs/toolkit'; +import { Snapshot } from '@studio/common/types/snapshot'; import { render, screen, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { produce } from 'immer'; import { Provider } from 'react-redux'; import { vi } from 'vitest'; -import { Snapshot } from 'common/types/snapshot'; import { PreviewActionButtonsMenu } from 'src/modules/preview-site/components/preview-action-buttons-menu'; import { store, RootState } from 'src/stores'; import { testActions, testReducer } from 'src/stores/tests/utils/test-reducer'; diff --git a/src/modules/preview-site/components/tests/preview-site-row.test.tsx b/apps/studio/src/modules/preview-site/components/tests/preview-site-row.test.tsx similarity index 100% rename from src/modules/preview-site/components/tests/preview-site-row.test.tsx rename to apps/studio/src/modules/preview-site/components/tests/preview-site-row.test.tsx diff --git a/src/modules/preview-site/components/tests/rename-preview-modal.test.tsx b/apps/studio/src/modules/preview-site/components/tests/rename-preview-modal.test.tsx similarity index 100% rename from src/modules/preview-site/components/tests/rename-preview-modal.test.tsx rename to apps/studio/src/modules/preview-site/components/tests/rename-preview-modal.test.tsx diff --git a/src/modules/preview-site/hooks/use-update-button-tooltip.ts b/apps/studio/src/modules/preview-site/hooks/use-update-button-tooltip.ts similarity index 94% rename from src/modules/preview-site/hooks/use-update-button-tooltip.ts rename to apps/studio/src/modules/preview-site/hooks/use-update-button-tooltip.ts index c6d7c5ab1d..d8462dd5c5 100644 --- a/src/modules/preview-site/hooks/use-update-button-tooltip.ts +++ b/apps/studio/src/modules/preview-site/hooks/use-update-button-tooltip.ts @@ -1,8 +1,8 @@ +import { DEMO_SITE_SIZE_LIMIT_GB } from '@studio/common/constants'; import { TooltipProps } from '@wordpress/components/build-types/tooltip/types'; import { sprintf } from '@wordpress/i18n'; import { useI18n } from '@wordpress/react-i18n'; import { useMemo } from 'react'; -import { DEMO_SITE_SIZE_LIMIT_GB } from 'common/constants'; import offlineIcon from 'src/components/offline-icon'; export function useUpdateButtonTooltip( { diff --git a/src/modules/preview-site/lib/ipc-handlers.ts b/apps/studio/src/modules/preview-site/lib/ipc-handlers.ts similarity index 100% rename from src/modules/preview-site/lib/ipc-handlers.ts rename to apps/studio/src/modules/preview-site/lib/ipc-handlers.ts diff --git a/src/modules/preview-site/lib/tests/version-comparison.test.ts b/apps/studio/src/modules/preview-site/lib/tests/version-comparison.test.ts similarity index 93% rename from src/modules/preview-site/lib/tests/version-comparison.test.ts rename to apps/studio/src/modules/preview-site/lib/tests/version-comparison.test.ts index d2fbc417f8..d0615e13a7 100644 --- a/src/modules/preview-site/lib/tests/version-comparison.test.ts +++ b/apps/studio/src/modules/preview-site/lib/tests/version-comparison.test.ts @@ -1,4 +1,4 @@ -import { RecommendedPHPVersion as DEFAULT_PHP_VERSION } from 'common/types/php-versions'; +import { RecommendedPHPVersion as DEFAULT_PHP_VERSION } from '@studio/common/types/php-versions'; import { hasVersionMismatch } from 'src/modules/preview-site/lib/version-comparison'; describe( 'hasVersionMismatch', () => { diff --git a/src/modules/preview-site/lib/version-comparison.ts b/apps/studio/src/modules/preview-site/lib/version-comparison.ts similarity index 89% rename from src/modules/preview-site/lib/version-comparison.ts rename to apps/studio/src/modules/preview-site/lib/version-comparison.ts index 0df153d471..904be6e83e 100644 --- a/src/modules/preview-site/lib/version-comparison.ts +++ b/apps/studio/src/modules/preview-site/lib/version-comparison.ts @@ -1,5 +1,5 @@ +import { RecommendedPHPVersion as DEFAULT_PHP_VERSION } from '@studio/common/types/php-versions'; import semver from 'semver'; -import { RecommendedPHPVersion as DEFAULT_PHP_VERSION } from 'common/types/php-versions'; /** * Compares the WordPress and PHP versions of the current site with the versions supported by Jurassic Ninja preview sites. diff --git a/src/modules/site-settings/edit-site-details.tsx b/apps/studio/src/modules/site-settings/edit-site-details.tsx similarity index 97% rename from src/modules/site-settings/edit-site-details.tsx rename to apps/studio/src/modules/site-settings/edit-site-details.tsx index b0377d36da..bc0a189b97 100644 --- a/src/modules/site-settings/edit-site-details.tsx +++ b/apps/studio/src/modules/site-settings/edit-site-details.tsx @@ -1,12 +1,15 @@ +import { DEFAULT_PHP_VERSION } from '@studio/common/constants'; +import { + generateCustomDomainFromSiteName, + getDomainNameValidationError, +} from '@studio/common/lib/domains'; +import { siteNeedsRestart } from '@studio/common/lib/site-needs-restart'; +import { SupportedPHPVersions } from '@studio/common/types/php-versions'; import { SelectControl } from '@wordpress/components'; import { createInterpolateElement } from '@wordpress/element'; import { sprintf } from '@wordpress/i18n'; import { useI18n } from '@wordpress/react-i18n'; import { FormEvent, useCallback, useEffect, useState } from 'react'; -import { DEFAULT_PHP_VERSION } from 'common/constants'; -import { generateCustomDomainFromSiteName, getDomainNameValidationError } from 'common/lib/domains'; -import { siteNeedsRestart } from 'common/lib/site-needs-restart'; -import { SupportedPHPVersions } from 'common/types/php-versions'; import Button from 'src/components/button'; import { ErrorInformation } from 'src/components/error-information'; import { LearnMoreLink, LearnHowLink } from 'src/components/learn-more'; diff --git a/src/modules/site-settings/tests/edit-site-details.test.tsx b/apps/studio/src/modules/site-settings/tests/edit-site-details.test.tsx similarity index 100% rename from src/modules/site-settings/tests/edit-site-details.test.tsx rename to apps/studio/src/modules/site-settings/tests/edit-site-details.test.tsx diff --git a/src/modules/sync/components/connect-button.tsx b/apps/studio/src/modules/sync/components/connect-button.tsx similarity index 100% rename from src/modules/sync/components/connect-button.tsx rename to apps/studio/src/modules/sync/components/connect-button.tsx diff --git a/src/modules/sync/components/create-button.tsx b/apps/studio/src/modules/sync/components/create-button.tsx similarity index 100% rename from src/modules/sync/components/create-button.tsx rename to apps/studio/src/modules/sync/components/create-button.tsx diff --git a/src/modules/sync/components/environment-badge.tsx b/apps/studio/src/modules/sync/components/environment-badge.tsx similarity index 100% rename from src/modules/sync/components/environment-badge.tsx rename to apps/studio/src/modules/sync/components/environment-badge.tsx diff --git a/src/modules/sync/components/no-wpcom-sites-content.tsx b/apps/studio/src/modules/sync/components/no-wpcom-sites-content.tsx similarity index 100% rename from src/modules/sync/components/no-wpcom-sites-content.tsx rename to apps/studio/src/modules/sync/components/no-wpcom-sites-content.tsx diff --git a/src/modules/sync/components/no-wpcom-sites-modal.tsx b/apps/studio/src/modules/sync/components/no-wpcom-sites-modal.tsx similarity index 100% rename from src/modules/sync/components/no-wpcom-sites-modal.tsx rename to apps/studio/src/modules/sync/components/no-wpcom-sites-modal.tsx diff --git a/src/modules/sync/components/site-name-box.tsx b/apps/studio/src/modules/sync/components/site-name-box.tsx similarity index 100% rename from src/modules/sync/components/site-name-box.tsx rename to apps/studio/src/modules/sync/components/site-name-box.tsx diff --git a/src/modules/sync/components/sync-connected-sites.tsx b/apps/studio/src/modules/sync/components/sync-connected-sites.tsx similarity index 100% rename from src/modules/sync/components/sync-connected-sites.tsx rename to apps/studio/src/modules/sync/components/sync-connected-sites.tsx diff --git a/src/modules/sync/components/sync-dialog.tsx b/apps/studio/src/modules/sync/components/sync-dialog.tsx similarity index 100% rename from src/modules/sync/components/sync-dialog.tsx rename to apps/studio/src/modules/sync/components/sync-dialog.tsx diff --git a/src/modules/sync/components/sync-sites-modal-selector.tsx b/apps/studio/src/modules/sync/components/sync-sites-modal-selector.tsx similarity index 100% rename from src/modules/sync/components/sync-sites-modal-selector.tsx rename to apps/studio/src/modules/sync/components/sync-sites-modal-selector.tsx diff --git a/src/modules/sync/components/sync-tab-image.tsx b/apps/studio/src/modules/sync/components/sync-tab-image.tsx similarity index 100% rename from src/modules/sync/components/sync-tab-image.tsx rename to apps/studio/src/modules/sync/components/sync-tab-image.tsx diff --git a/src/modules/sync/components/tree-view-loading-skeleton.tsx b/apps/studio/src/modules/sync/components/tree-view-loading-skeleton.tsx similarity index 100% rename from src/modules/sync/components/tree-view-loading-skeleton.tsx rename to apps/studio/src/modules/sync/components/tree-view-loading-skeleton.tsx diff --git a/src/modules/sync/constants.ts b/apps/studio/src/modules/sync/constants.ts similarity index 100% rename from src/modules/sync/constants.ts rename to apps/studio/src/modules/sync/constants.ts diff --git a/src/modules/sync/hooks/use-selected-items-push-size.ts b/apps/studio/src/modules/sync/hooks/use-selected-items-push-size.ts similarity index 100% rename from src/modules/sync/hooks/use-selected-items-push-size.ts rename to apps/studio/src/modules/sync/hooks/use-selected-items-push-size.ts diff --git a/src/modules/sync/hooks/use-sync-dialog-texts.tsx b/apps/studio/src/modules/sync/hooks/use-sync-dialog-texts.tsx similarity index 100% rename from src/modules/sync/hooks/use-sync-dialog-texts.tsx rename to apps/studio/src/modules/sync/hooks/use-sync-dialog-texts.tsx diff --git a/src/modules/sync/hooks/use-top-level-sync-tree.tsx b/apps/studio/src/modules/sync/hooks/use-top-level-sync-tree.tsx similarity index 100% rename from src/modules/sync/hooks/use-top-level-sync-tree.tsx rename to apps/studio/src/modules/sync/hooks/use-top-level-sync-tree.tsx diff --git a/src/modules/sync/index.tsx b/apps/studio/src/modules/sync/index.tsx similarity index 100% rename from src/modules/sync/index.tsx rename to apps/studio/src/modules/sync/index.tsx diff --git a/src/modules/sync/lib/convert-tree-to-sync-options.ts b/apps/studio/src/modules/sync/lib/convert-tree-to-sync-options.ts similarity index 100% rename from src/modules/sync/lib/convert-tree-to-sync-options.ts rename to apps/studio/src/modules/sync/lib/convert-tree-to-sync-options.ts diff --git a/src/modules/sync/lib/environment-utils.ts b/apps/studio/src/modules/sync/lib/environment-utils.ts similarity index 100% rename from src/modules/sync/lib/environment-utils.ts rename to apps/studio/src/modules/sync/lib/environment-utils.ts diff --git a/src/modules/sync/lib/ipc-handlers.ts b/apps/studio/src/modules/sync/lib/ipc-handlers.ts similarity index 98% rename from src/modules/sync/lib/ipc-handlers.ts rename to apps/studio/src/modules/sync/lib/ipc-handlers.ts index 0528e5c98e..fbffc2b499 100644 --- a/src/modules/sync/lib/ipc-handlers.ts +++ b/apps/studio/src/modules/sync/lib/ipc-handlers.ts @@ -3,9 +3,11 @@ import fs from 'fs'; import fsPromises from 'fs/promises'; import path from 'node:path'; import * as Sentry from '@sentry/electron/main'; +import { isErrnoException } from '@studio/common/lib/is-errno-exception'; +import wpcomFactory from '@studio/common/lib/wpcom-factory'; +import wpcomXhrRequest from '@studio/common/lib/wpcom-xhr-request-factory'; import { Upload } from 'tus-js-client'; import { z } from 'zod'; -import { isErrnoException } from 'common/lib/is-errno-exception'; import { PullStateProgressInfo, PushStateProgressInfo, @@ -18,8 +20,6 @@ import { exportBackup } from 'src/lib/import-export/export/export-manager'; import { ExportOptions } from 'src/lib/import-export/export/types'; import { getAuthenticationToken } from 'src/lib/oauth'; import { keepSqliteIntegrationUpdated } from 'src/lib/sqlite-versions'; -import wpcomFactory from 'src/lib/wpcom-factory'; -import wpcomXhrRequest from 'src/lib/wpcom-xhr-request-factory'; import { SyncSite } from 'src/modules/sync/types'; import { SiteServer } from 'src/site-server'; import { loadUserData, lockAppdata, saveUserData, unlockAppdata } from 'src/storage/user-data'; diff --git a/src/modules/sync/lib/reconcile-connected-sites.tsx b/apps/studio/src/modules/sync/lib/reconcile-connected-sites.tsx similarity index 100% rename from src/modules/sync/lib/reconcile-connected-sites.tsx rename to apps/studio/src/modules/sync/lib/reconcile-connected-sites.tsx diff --git a/src/modules/sync/lib/sync-support.ts b/apps/studio/src/modules/sync/lib/sync-support.ts similarity index 100% rename from src/modules/sync/lib/sync-support.ts rename to apps/studio/src/modules/sync/lib/sync-support.ts diff --git a/src/modules/sync/lib/tree-utils.ts b/apps/studio/src/modules/sync/lib/tree-utils.ts similarity index 100% rename from src/modules/sync/lib/tree-utils.ts rename to apps/studio/src/modules/sync/lib/tree-utils.ts diff --git a/src/modules/sync/tests/convert-tree-to-options-to-sync.tsx b/apps/studio/src/modules/sync/tests/convert-tree-to-options-to-sync.tsx similarity index 100% rename from src/modules/sync/tests/convert-tree-to-options-to-sync.tsx rename to apps/studio/src/modules/sync/tests/convert-tree-to-options-to-sync.tsx diff --git a/src/modules/sync/tests/environment-badge.test.tsx b/apps/studio/src/modules/sync/tests/environment-badge.test.tsx similarity index 100% rename from src/modules/sync/tests/environment-badge.test.tsx rename to apps/studio/src/modules/sync/tests/environment-badge.test.tsx diff --git a/src/modules/sync/tests/index.test.tsx b/apps/studio/src/modules/sync/tests/index.test.tsx similarity index 100% rename from src/modules/sync/tests/index.test.tsx rename to apps/studio/src/modules/sync/tests/index.test.tsx diff --git a/src/modules/sync/tests/use-selected-items-push-size.test.ts b/apps/studio/src/modules/sync/tests/use-selected-items-push-size.test.ts similarity index 100% rename from src/modules/sync/tests/use-selected-items-push-size.test.ts rename to apps/studio/src/modules/sync/tests/use-selected-items-push-size.test.ts diff --git a/src/modules/sync/types.ts b/apps/studio/src/modules/sync/types.ts similarity index 100% rename from src/modules/sync/types.ts rename to apps/studio/src/modules/sync/types.ts diff --git a/src/modules/user-settings/components/account-tab.tsx b/apps/studio/src/modules/user-settings/components/account-tab.tsx similarity index 100% rename from src/modules/user-settings/components/account-tab.tsx rename to apps/studio/src/modules/user-settings/components/account-tab.tsx diff --git a/src/modules/user-settings/components/editor-picker.tsx b/apps/studio/src/modules/user-settings/components/editor-picker.tsx similarity index 100% rename from src/modules/user-settings/components/editor-picker.tsx rename to apps/studio/src/modules/user-settings/components/editor-picker.tsx diff --git a/src/modules/user-settings/components/language-picker.tsx b/apps/studio/src/modules/user-settings/components/language-picker.tsx similarity index 90% rename from src/modules/user-settings/components/language-picker.tsx rename to apps/studio/src/modules/user-settings/components/language-picker.tsx index 5cbfa56dbe..0ec9535f8a 100644 --- a/src/modules/user-settings/components/language-picker.tsx +++ b/apps/studio/src/modules/user-settings/components/language-picker.tsx @@ -1,6 +1,6 @@ +import { SupportedLocale, supportedLocaleNames } from '@studio/common/lib/locale'; import { SelectControl } from '@wordpress/components'; import { useI18n } from '@wordpress/react-i18n'; -import { SupportedLocale, supportedLocaleNames } from 'common/lib/locale'; import { SettingsFormField } from './settings-form-field'; interface LanguagePickerProps { diff --git a/src/modules/user-settings/components/non-authenticated-account-tab.tsx b/apps/studio/src/modules/user-settings/components/non-authenticated-account-tab.tsx similarity index 100% rename from src/modules/user-settings/components/non-authenticated-account-tab.tsx rename to apps/studio/src/modules/user-settings/components/non-authenticated-account-tab.tsx diff --git a/src/modules/user-settings/components/preferences-tab.tsx b/apps/studio/src/modules/user-settings/components/preferences-tab.tsx similarity index 98% rename from src/modules/user-settings/components/preferences-tab.tsx rename to apps/studio/src/modules/user-settings/components/preferences-tab.tsx index 918c6d90a3..f88d75ca89 100644 --- a/src/modules/user-settings/components/preferences-tab.tsx +++ b/apps/studio/src/modules/user-settings/components/preferences-tab.tsx @@ -1,6 +1,6 @@ +import { SupportedLocale } from '@studio/common/lib/locale'; import { useI18n } from '@wordpress/react-i18n'; import { useState } from 'react'; -import { SupportedLocale } from 'common/lib/locale'; import Button from 'src/components/button'; import { isWindowsStore } from 'src/lib/app-globals'; import { EditorPicker } from 'src/modules/user-settings/components/editor-picker'; diff --git a/src/modules/user-settings/components/prompt-info.tsx b/apps/studio/src/modules/user-settings/components/prompt-info.tsx similarity index 100% rename from src/modules/user-settings/components/prompt-info.tsx rename to apps/studio/src/modules/user-settings/components/prompt-info.tsx diff --git a/src/modules/user-settings/components/settings-form-field.tsx b/apps/studio/src/modules/user-settings/components/settings-form-field.tsx similarity index 100% rename from src/modules/user-settings/components/settings-form-field.tsx rename to apps/studio/src/modules/user-settings/components/settings-form-field.tsx diff --git a/src/modules/user-settings/components/snapshot-info.tsx b/apps/studio/src/modules/user-settings/components/snapshot-info.tsx similarity index 100% rename from src/modules/user-settings/components/snapshot-info.tsx rename to apps/studio/src/modules/user-settings/components/snapshot-info.tsx diff --git a/src/modules/user-settings/components/studio-cli-toggle.tsx b/apps/studio/src/modules/user-settings/components/studio-cli-toggle.tsx similarity index 100% rename from src/modules/user-settings/components/studio-cli-toggle.tsx rename to apps/studio/src/modules/user-settings/components/studio-cli-toggle.tsx diff --git a/src/modules/user-settings/components/terminal-picker.tsx b/apps/studio/src/modules/user-settings/components/terminal-picker.tsx similarity index 100% rename from src/modules/user-settings/components/terminal-picker.tsx rename to apps/studio/src/modules/user-settings/components/terminal-picker.tsx diff --git a/src/modules/user-settings/components/tests/terminal-picker.test.tsx b/apps/studio/src/modules/user-settings/components/tests/terminal-picker.test.tsx similarity index 100% rename from src/modules/user-settings/components/tests/terminal-picker.test.tsx rename to apps/studio/src/modules/user-settings/components/tests/terminal-picker.test.tsx diff --git a/src/modules/user-settings/components/tests/user-settings.test.tsx b/apps/studio/src/modules/user-settings/components/tests/user-settings.test.tsx similarity index 100% rename from src/modules/user-settings/components/tests/user-settings.test.tsx rename to apps/studio/src/modules/user-settings/components/tests/user-settings.test.tsx diff --git a/src/modules/user-settings/components/usage-tab.tsx b/apps/studio/src/modules/user-settings/components/usage-tab.tsx similarity index 100% rename from src/modules/user-settings/components/usage-tab.tsx rename to apps/studio/src/modules/user-settings/components/usage-tab.tsx diff --git a/src/modules/user-settings/components/user-settings.tsx b/apps/studio/src/modules/user-settings/components/user-settings.tsx similarity index 100% rename from src/modules/user-settings/components/user-settings.tsx rename to apps/studio/src/modules/user-settings/components/user-settings.tsx diff --git a/src/modules/user-settings/index.ts b/apps/studio/src/modules/user-settings/index.ts similarity index 100% rename from src/modules/user-settings/index.ts rename to apps/studio/src/modules/user-settings/index.ts diff --git a/src/modules/user-settings/lib/editor.ts b/apps/studio/src/modules/user-settings/lib/editor.ts similarity index 100% rename from src/modules/user-settings/lib/editor.ts rename to apps/studio/src/modules/user-settings/lib/editor.ts diff --git a/src/modules/user-settings/lib/ipc-handlers.ts b/apps/studio/src/modules/user-settings/lib/ipc-handlers.ts similarity index 100% rename from src/modules/user-settings/lib/ipc-handlers.ts rename to apps/studio/src/modules/user-settings/lib/ipc-handlers.ts diff --git a/src/modules/user-settings/lib/terminal.ts b/apps/studio/src/modules/user-settings/lib/terminal.ts similarity index 100% rename from src/modules/user-settings/lib/terminal.ts rename to apps/studio/src/modules/user-settings/lib/terminal.ts diff --git a/src/modules/user-settings/lib/win-editor-path.ts b/apps/studio/src/modules/user-settings/lib/win-editor-path.ts similarity index 95% rename from src/modules/user-settings/lib/win-editor-path.ts rename to apps/studio/src/modules/user-settings/lib/win-editor-path.ts index e8c54275f3..e0f52fd524 100644 --- a/src/modules/user-settings/lib/win-editor-path.ts +++ b/apps/studio/src/modules/user-settings/lib/win-editor-path.ts @@ -1,6 +1,6 @@ import fs from 'fs'; import nodePath from 'path'; -import { escapeRegex } from 'common/lib/escape-regex'; +import { escapeRegex } from '@studio/common/lib/escape-regex'; import { SupportedEditor, supportedEditorConfig } from 'src/modules/user-settings/lib/editor'; /** diff --git a/src/modules/user-settings/user-settings-types.ts b/apps/studio/src/modules/user-settings/user-settings-types.ts similarity index 100% rename from src/modules/user-settings/user-settings-types.ts rename to apps/studio/src/modules/user-settings/user-settings-types.ts diff --git a/src/modules/whats-new/assets/blueprints-illustration.svg b/apps/studio/src/modules/whats-new/assets/blueprints-illustration.svg similarity index 100% rename from src/modules/whats-new/assets/blueprints-illustration.svg rename to apps/studio/src/modules/whats-new/assets/blueprints-illustration.svg diff --git a/src/modules/whats-new/assets/cli-illustration.svg b/apps/studio/src/modules/whats-new/assets/cli-illustration.svg similarity index 100% rename from src/modules/whats-new/assets/cli-illustration.svg rename to apps/studio/src/modules/whats-new/assets/cli-illustration.svg diff --git a/src/modules/whats-new/assets/pressable-sync-illustration.svg b/apps/studio/src/modules/whats-new/assets/pressable-sync-illustration.svg similarity index 100% rename from src/modules/whats-new/assets/pressable-sync-illustration.svg rename to apps/studio/src/modules/whats-new/assets/pressable-sync-illustration.svg diff --git a/src/modules/whats-new/assets/selective-sync-illustration.svg b/apps/studio/src/modules/whats-new/assets/selective-sync-illustration.svg similarity index 100% rename from src/modules/whats-new/assets/selective-sync-illustration.svg rename to apps/studio/src/modules/whats-new/assets/selective-sync-illustration.svg diff --git a/src/modules/whats-new/assets/studio-illustration.svg b/apps/studio/src/modules/whats-new/assets/studio-illustration.svg similarity index 100% rename from src/modules/whats-new/assets/studio-illustration.svg rename to apps/studio/src/modules/whats-new/assets/studio-illustration.svg diff --git a/src/modules/whats-new/components/whats-new-modal.tsx b/apps/studio/src/modules/whats-new/components/whats-new-modal.tsx similarity index 100% rename from src/modules/whats-new/components/whats-new-modal.tsx rename to apps/studio/src/modules/whats-new/components/whats-new-modal.tsx diff --git a/src/modules/whats-new/hooks/use-last-seen-version.tsx b/apps/studio/src/modules/whats-new/hooks/use-last-seen-version.tsx similarity index 100% rename from src/modules/whats-new/hooks/use-last-seen-version.tsx rename to apps/studio/src/modules/whats-new/hooks/use-last-seen-version.tsx diff --git a/src/modules/whats-new/hooks/use-whats-new.tsx b/apps/studio/src/modules/whats-new/hooks/use-whats-new.tsx similarity index 100% rename from src/modules/whats-new/hooks/use-whats-new.tsx rename to apps/studio/src/modules/whats-new/hooks/use-whats-new.tsx diff --git a/src/modules/whats-new/index.ts b/apps/studio/src/modules/whats-new/index.ts similarity index 100% rename from src/modules/whats-new/index.ts rename to apps/studio/src/modules/whats-new/index.ts diff --git a/src/preload.ts b/apps/studio/src/preload.ts similarity index 100% rename from src/preload.ts rename to apps/studio/src/preload.ts diff --git a/src/renderer.ts b/apps/studio/src/renderer.ts similarity index 100% rename from src/renderer.ts rename to apps/studio/src/renderer.ts diff --git a/src/screenshot-window.ts b/apps/studio/src/screenshot-window.ts similarity index 100% rename from src/screenshot-window.ts rename to apps/studio/src/screenshot-window.ts diff --git a/src/setup-wp-server-files.ts b/apps/studio/src/setup-wp-server-files.ts similarity index 98% rename from src/setup-wp-server-files.ts rename to apps/studio/src/setup-wp-server-files.ts index 3bc61d1390..e745df7756 100644 --- a/src/setup-wp-server-files.ts +++ b/apps/studio/src/setup-wp-server-files.ts @@ -1,7 +1,7 @@ import path from 'path'; +import { recursiveCopyDirectory } from '@studio/common/lib/fs-utils'; import fs from 'fs-extra'; import semver from 'semver'; -import { recursiveCopyDirectory } from 'common/lib/fs-utils'; import { updateLatestWPCliVersion } from 'src/lib/download-utils'; import { getLanguagePacksPath, diff --git a/src/site-server.ts b/apps/studio/src/site-server.ts similarity index 98% rename from src/site-server.ts rename to apps/studio/src/site-server.ts index 48f9b70ac1..51953d085c 100644 --- a/src/site-server.ts +++ b/apps/studio/src/site-server.ts @@ -1,11 +1,11 @@ import fs from 'fs'; import nodePath from 'path'; import * as Sentry from '@sentry/electron/main'; +import { SQLITE_FILENAME } from '@studio/common/constants'; +import { parseJsonFromPhpOutput } from '@studio/common/lib/php-output-parser'; import fsExtra from 'fs-extra'; import { parse } from 'shell-quote'; import { z } from 'zod'; -import { SQLITE_FILENAME } from 'common/constants'; -import { parseJsonFromPhpOutput } from 'common/lib/php-output-parser'; import { WP_CLI_DEFAULT_RESPONSE_TIMEOUT, WP_CLI_IMPORT_EXPORT_RESPONSE_TIMEOUT, diff --git a/src/storage/paths.ts b/apps/studio/src/storage/paths.ts similarity index 96% rename from src/storage/paths.ts rename to apps/studio/src/storage/paths.ts index b68a9d5cfa..65d180fbf6 100644 --- a/src/storage/paths.ts +++ b/apps/studio/src/storage/paths.ts @@ -1,5 +1,5 @@ import path from 'path'; -import { LOCKFILE_NAME } from 'common/constants'; +import { LOCKFILE_NAME } from '@studio/common/constants'; function inChildProcess() { return process.env.STUDIO_IN_CHILD_PROCESS === 'true'; @@ -62,7 +62,7 @@ export function getResourcesPath(): string { export function getCliPath(): string { return process.env.NODE_ENV === 'development' - ? path.join( getResourcesPath(), 'dist', 'cli', 'main.js' ) + ? path.join( getResourcesPath(), '..', 'cli', 'dist', 'cli', 'main.js' ) : path.join( getResourcesPath(), 'cli', 'main.js' ); } diff --git a/src/storage/storage-types.ts b/apps/studio/src/storage/storage-types.ts similarity index 96% rename from src/storage/storage-types.ts rename to apps/studio/src/storage/storage-types.ts index ee37cde824..199c7b7719 100644 --- a/src/storage/storage-types.ts +++ b/apps/studio/src/storage/storage-types.ts @@ -1,4 +1,4 @@ -import { Snapshot } from 'common/types/snapshot'; +import { Snapshot } from '@studio/common/types/snapshot'; import { StoredToken } from 'src/lib/oauth'; import { SupportedEditor } from 'src/modules/user-settings/lib/editor'; import type { SyncSite } from 'src/modules/sync/types'; diff --git a/src/storage/tests/user-data.test.ts b/apps/studio/src/storage/tests/user-data.test.ts similarity index 97% rename from src/storage/tests/user-data.test.ts rename to apps/studio/src/storage/tests/user-data.test.ts index 1135a5bbe3..d684fe4551 100644 --- a/src/storage/tests/user-data.test.ts +++ b/apps/studio/src/storage/tests/user-data.test.ts @@ -2,10 +2,10 @@ * @vitest-environment node */ // To run tests, execute `npm run test -- src/storage/user-data.test.ts` from the root directory +import { platformTestSuite } from '@studio/common/lib/tests/utils/platform-test-suite'; import { readFile, writeFile } from 'atomically'; import { vi } from 'vitest'; import { loadUserData, lockAppdata, unlockAppdata, saveUserData } from 'src/storage/user-data'; -import { platformTestSuite } from 'src/tests/utils/platform-test-suite'; import { UserData } from '../storage-types'; const { diff --git a/src/storage/user-data.ts b/apps/studio/src/storage/user-data.ts similarity index 94% rename from src/storage/user-data.ts rename to apps/studio/src/storage/user-data.ts index f1fd70038f..0a6acb49f3 100644 --- a/src/storage/user-data.ts +++ b/apps/studio/src/storage/user-data.ts @@ -2,13 +2,13 @@ import { app } from 'electron'; import fs from 'fs'; import nodePath from 'node:path'; import * as Sentry from '@sentry/electron/main'; +import { LOCKFILE_STALE_TIME, LOCKFILE_WAIT_TIME } from '@studio/common/constants'; +import { isErrnoException } from '@studio/common/lib/is-errno-exception'; +import { lockFileAsync, unlockFileAsync } from '@studio/common/lib/lockfile'; +import { sortSites } from '@studio/common/lib/sort-sites'; +import { SupportedPHPVersion, SupportedPHPVersions } from '@studio/common/types/php-versions'; import { readFile, writeFile } from 'atomically'; import semver from 'semver'; -import { LOCKFILE_STALE_TIME, LOCKFILE_WAIT_TIME } from 'common/constants'; -import { isErrnoException } from 'common/lib/is-errno-exception'; -import { lockFileAsync, unlockFileAsync } from 'common/lib/lockfile'; -import { sortSites } from 'common/lib/sort-sites'; -import { SupportedPHPVersion, SupportedPHPVersions } from 'common/types/php-versions'; import { sanitizeUnstructuredData, sanitizeUserpath } from 'src/lib/sanitize-for-logging'; import { getUserDataFilePath, getUserDataLockFilePath } from 'src/storage/paths'; import type { PersistedUserData, UserData, WindowBounds } from 'src/storage/storage-types'; diff --git a/src/stores/app-version-api.ts b/apps/studio/src/stores/app-version-api.ts similarity index 100% rename from src/stores/app-version-api.ts rename to apps/studio/src/stores/app-version-api.ts diff --git a/src/stores/beta-features-slice.ts b/apps/studio/src/stores/beta-features-slice.ts similarity index 100% rename from src/stores/beta-features-slice.ts rename to apps/studio/src/stores/beta-features-slice.ts diff --git a/src/stores/certificate-trust-api.ts b/apps/studio/src/stores/certificate-trust-api.ts similarity index 100% rename from src/stores/certificate-trust-api.ts rename to apps/studio/src/stores/certificate-trust-api.ts diff --git a/src/stores/chat-slice.ts b/apps/studio/src/stores/chat-slice.ts similarity index 98% rename from src/stores/chat-slice.ts rename to apps/studio/src/stores/chat-slice.ts index 28a4c1e079..867e159e14 100644 --- a/src/stores/chat-slice.ts +++ b/apps/studio/src/stores/chat-slice.ts @@ -1,9 +1,9 @@ import { createSlice, createAsyncThunk, PayloadAction, isAnyOf } from '@reduxjs/toolkit'; import * as Sentry from '@sentry/electron/renderer'; +import { DEFAULT_PHP_VERSION } from '@studio/common/constants'; +import { parseJsonFromPhpOutput } from '@studio/common/lib/php-output-parser'; import { WPCOM } from 'wpcom/types'; import { z } from 'zod'; -import { DEFAULT_PHP_VERSION } from 'common/constants'; -import { parseJsonFromPhpOutput } from 'common/lib/php-output-parser'; import { LOCAL_STORAGE_CHAT_API_IDS_KEY, LOCAL_STORAGE_CHAT_MESSAGES_KEY } from 'src/constants'; import { getIpcApi } from 'src/lib/get-ipc-api'; import { AppDispatch, RootState } from 'src/stores'; diff --git a/src/stores/format-rtk-error.tsx b/apps/studio/src/stores/format-rtk-error.tsx similarity index 100% rename from src/stores/format-rtk-error.tsx rename to apps/studio/src/stores/format-rtk-error.tsx diff --git a/src/stores/i18n-slice.ts b/apps/studio/src/stores/i18n-slice.ts similarity index 98% rename from src/stores/i18n-slice.ts rename to apps/studio/src/stores/i18n-slice.ts index d7d1d37fa9..c5ccfb6425 100644 --- a/src/stores/i18n-slice.ts +++ b/apps/studio/src/stores/i18n-slice.ts @@ -1,11 +1,11 @@ import { createSlice, PayloadAction, createAsyncThunk } from '@reduxjs/toolkit'; -import { defaultI18n } from '@wordpress/i18n'; import { SupportedLocale, getLocaleData, DEFAULT_LOCALE, isSupportedLocale, -} from 'common/lib/locale'; +} from '@studio/common/lib/locale'; +import { defaultI18n } from '@wordpress/i18n'; import { getIpcApi } from 'src/lib/get-ipc-api'; interface I18nState { diff --git a/src/stores/index.ts b/apps/studio/src/stores/index.ts similarity index 98% rename from src/stores/index.ts rename to apps/studio/src/stores/index.ts index ff06025a95..ba0eced546 100644 --- a/src/stores/index.ts +++ b/apps/studio/src/stores/index.ts @@ -27,7 +27,7 @@ import { wpcomSitesApi } from 'src/stores/sync/wpcom-sites'; import uiReducer from 'src/stores/ui-slice'; import { wpcomApi, wpcomPublicApi } from 'src/stores/wpcom-api'; import { wordpressVersionsApi } from './wordpress-versions-api'; -import type { SupportedLocale } from 'common/lib/locale'; +import type { SupportedLocale } from '@studio/common/lib/locale'; export type RootState = { appVersionApi: ReturnType< typeof appVersionApi.reducer >; diff --git a/src/stores/installed-apps-api.ts b/apps/studio/src/stores/installed-apps-api.ts similarity index 100% rename from src/stores/installed-apps-api.ts rename to apps/studio/src/stores/installed-apps-api.ts diff --git a/src/stores/onboarding-slice.ts b/apps/studio/src/stores/onboarding-slice.ts similarity index 100% rename from src/stores/onboarding-slice.ts rename to apps/studio/src/stores/onboarding-slice.ts diff --git a/src/stores/provider-constants-slice.ts b/apps/studio/src/stores/provider-constants-slice.ts similarity index 92% rename from src/stores/provider-constants-slice.ts rename to apps/studio/src/stores/provider-constants-slice.ts index 99b5ec172d..b016936d91 100644 --- a/src/stores/provider-constants-slice.ts +++ b/apps/studio/src/stores/provider-constants-slice.ts @@ -3,8 +3,8 @@ import { DEFAULT_PHP_VERSION, DEFAULT_WORDPRESS_VERSION, MINIMUM_WORDPRESS_VERSION, -} from 'common/constants'; -import { SupportedPHPVersionsList } from 'common/types/php-versions'; +} from '@studio/common/constants'; +import { SupportedPHPVersionsList } from '@studio/common/types/php-versions'; import { RootState } from 'src/stores'; interface ProviderConstantsState { diff --git a/src/stores/snapshot-slice.ts b/apps/studio/src/stores/snapshot-slice.ts similarity index 99% rename from src/stores/snapshot-slice.ts rename to apps/studio/src/stores/snapshot-slice.ts index 5cfc9f4720..c1c5a060f9 100644 --- a/src/stores/snapshot-slice.ts +++ b/apps/studio/src/stores/snapshot-slice.ts @@ -6,10 +6,10 @@ import { isAnyOf, PayloadAction, } from '@reduxjs/toolkit'; +import { PreviewCommandLoggerAction } from '@studio/common/logger-actions'; +import { Snapshot } from '@studio/common/types/snapshot'; import { __, sprintf } from '@wordpress/i18n'; import fastDeepEqual from 'fast-deep-equal'; -import { PreviewCommandLoggerAction } from 'common/logger-actions'; -import { Snapshot } from 'common/types/snapshot'; import { LIMIT_OF_ZIP_SITES_PER_USER } from 'src/constants'; import { getIpcApi } from 'src/lib/get-ipc-api'; import { RootState, store } from 'src/stores/index'; diff --git a/src/stores/sync/connected-sites.ts b/apps/studio/src/stores/sync/connected-sites.ts similarity index 100% rename from src/stores/sync/connected-sites.ts rename to apps/studio/src/stores/sync/connected-sites.ts diff --git a/src/stores/sync/index.ts b/apps/studio/src/stores/sync/index.ts similarity index 100% rename from src/stores/sync/index.ts rename to apps/studio/src/stores/sync/index.ts diff --git a/src/stores/sync/sync-api.ts b/apps/studio/src/stores/sync/sync-api.ts similarity index 100% rename from src/stores/sync/sync-api.ts rename to apps/studio/src/stores/sync/sync-api.ts diff --git a/src/stores/sync/sync-hooks.ts b/apps/studio/src/stores/sync/sync-hooks.ts similarity index 100% rename from src/stores/sync/sync-hooks.ts rename to apps/studio/src/stores/sync/sync-hooks.ts diff --git a/src/stores/sync/sync-slice.ts b/apps/studio/src/stores/sync/sync-slice.ts similarity index 100% rename from src/stores/sync/sync-slice.ts rename to apps/studio/src/stores/sync/sync-slice.ts diff --git a/src/stores/sync/sync-types.ts b/apps/studio/src/stores/sync/sync-types.ts similarity index 100% rename from src/stores/sync/sync-types.ts rename to apps/studio/src/stores/sync/sync-types.ts diff --git a/src/stores/sync/wpcom-sites.ts b/apps/studio/src/stores/sync/wpcom-sites.ts similarity index 100% rename from src/stores/sync/wpcom-sites.ts rename to apps/studio/src/stores/sync/wpcom-sites.ts diff --git a/src/stores/tests/app-version-api.test.ts b/apps/studio/src/stores/tests/app-version-api.test.ts similarity index 100% rename from src/stores/tests/app-version-api.test.ts rename to apps/studio/src/stores/tests/app-version-api.test.ts diff --git a/src/stores/tests/chat-slice.test.ts b/apps/studio/src/stores/tests/chat-slice.test.ts similarity index 100% rename from src/stores/tests/chat-slice.test.ts rename to apps/studio/src/stores/tests/chat-slice.test.ts diff --git a/src/stores/tests/installed-apps-api.test.ts b/apps/studio/src/stores/tests/installed-apps-api.test.ts similarity index 100% rename from src/stores/tests/installed-apps-api.test.ts rename to apps/studio/src/stores/tests/installed-apps-api.test.ts diff --git a/src/stores/tests/onboarding-slice.test.ts b/apps/studio/src/stores/tests/onboarding-slice.test.ts similarity index 100% rename from src/stores/tests/onboarding-slice.test.ts rename to apps/studio/src/stores/tests/onboarding-slice.test.ts diff --git a/src/stores/tests/snapshot-slice.test.ts b/apps/studio/src/stores/tests/snapshot-slice.test.ts similarity index 97% rename from src/stores/tests/snapshot-slice.test.ts rename to apps/studio/src/stores/tests/snapshot-slice.test.ts index 494c34b69a..1d4fd5af7a 100644 --- a/src/stores/tests/snapshot-slice.test.ts +++ b/apps/studio/src/stores/tests/snapshot-slice.test.ts @@ -1,9 +1,9 @@ import crypto from 'crypto'; import { UnknownAction } from '@reduxjs/toolkit'; +import { PreviewCommandLoggerAction } from '@studio/common/logger-actions'; +import { Snapshot } from '@studio/common/types/snapshot'; import { produce } from 'immer'; import { vi } from 'vitest'; -import { PreviewCommandLoggerAction } from 'common/logger-actions'; -import { Snapshot } from 'common/types/snapshot'; import { getIpcApi } from 'src/lib/get-ipc-api'; import { RootState, store } from 'src/stores'; import { diff --git a/src/stores/tests/utils/test-reducer.ts b/apps/studio/src/stores/tests/utils/test-reducer.ts similarity index 100% rename from src/stores/tests/utils/test-reducer.ts rename to apps/studio/src/stores/tests/utils/test-reducer.ts diff --git a/src/stores/tests/wordpress-versions-api.test.ts b/apps/studio/src/stores/tests/wordpress-versions-api.test.ts similarity index 100% rename from src/stores/tests/wordpress-versions-api.test.ts rename to apps/studio/src/stores/tests/wordpress-versions-api.test.ts diff --git a/src/stores/ui-slice.ts b/apps/studio/src/stores/ui-slice.ts similarity index 100% rename from src/stores/ui-slice.ts rename to apps/studio/src/stores/ui-slice.ts diff --git a/src/stores/utils/with-offline-check.ts b/apps/studio/src/stores/utils/with-offline-check.ts similarity index 100% rename from src/stores/utils/with-offline-check.ts rename to apps/studio/src/stores/utils/with-offline-check.ts diff --git a/src/stores/wordpress-versions-api.ts b/apps/studio/src/stores/wordpress-versions-api.ts similarity index 97% rename from src/stores/wordpress-versions-api.ts rename to apps/studio/src/stores/wordpress-versions-api.ts index d87027984c..b6cc32a7be 100644 --- a/src/stores/wordpress-versions-api.ts +++ b/apps/studio/src/stores/wordpress-versions-api.ts @@ -1,8 +1,11 @@ import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'; import * as Sentry from '@sentry/electron/renderer'; +import { + isWordPressDevVersion, + isWordPressBetaVersion, +} from '@studio/common/lib/wordpress-version-utils'; import { __ } from '@wordpress/i18n'; import { z } from 'zod'; -import { isWordPressDevVersion, isWordPressBetaVersion } from 'common/lib/wordpress-version-utils'; import { withOfflineCheck } from 'src/stores/utils/with-offline-check'; const wordPressApiResponseSchema = z.object( { diff --git a/src/stores/wpcom-api.ts b/apps/studio/src/stores/wpcom-api.ts similarity index 97% rename from src/stores/wpcom-api.ts rename to apps/studio/src/stores/wpcom-api.ts index 73b271a843..5ae6f43f55 100644 --- a/src/stores/wpcom-api.ts +++ b/apps/studio/src/stores/wpcom-api.ts @@ -1,10 +1,10 @@ import { createApi, TypedUseQuery, TypedUseMutation } from '@reduxjs/toolkit/query/react'; import * as Sentry from '@sentry/electron/renderer'; +import { DAY_MS } from '@studio/common/constants'; +import wpcomFactory from '@studio/common/lib/wpcom-factory'; +import wpcomXhrRequest from '@studio/common/lib/wpcom-xhr-request-factory'; import { WPCOM } from 'wpcom/types'; import { z } from 'zod'; -import { DAY_MS } from 'common/constants'; -import wpcomFactory from 'src/lib/wpcom-factory'; -import wpcomXhrRequest from 'src/lib/wpcom-xhr-request-factory'; import { withOfflineCheck, withOfflineCheckMutation } from 'src/stores/utils/with-offline-check'; import type { BaseQueryFn, FetchBaseQueryError } from '@reduxjs/toolkit/query'; diff --git a/src/tests/execute-wp-cli.test.ts b/apps/studio/src/tests/execute-wp-cli.test.ts similarity index 100% rename from src/tests/execute-wp-cli.test.ts rename to apps/studio/src/tests/execute-wp-cli.test.ts diff --git a/src/tests/index.test.ts b/apps/studio/src/tests/index.test.ts similarity index 99% rename from src/tests/index.test.ts rename to apps/studio/src/tests/index.test.ts index 4f4364d231..c3acb1455e 100644 --- a/src/tests/index.test.ts +++ b/apps/studio/src/tests/index.test.ts @@ -17,7 +17,7 @@ vi.mock( '@sentry/electron/main', () => ( { captureMessage: vi.fn(), setUser: vi.fn(), } ) ); -vi.mock( 'common/lib/bump-stat', () => ( { +vi.mock( '@studio/common/lib/bump-stat', () => ( { bumpStat: vi.fn(), bumpAggregatedUniqueStat: vi.fn().mockResolvedValue( undefined ), } ) ); diff --git a/src/tests/ipc-handlers.test.ts b/apps/studio/src/tests/ipc-handlers.test.ts similarity index 97% rename from src/tests/ipc-handlers.test.ts rename to apps/studio/src/tests/ipc-handlers.test.ts index 94017561e4..315e22cf82 100644 --- a/src/tests/ipc-handlers.test.ts +++ b/apps/studio/src/tests/ipc-handlers.test.ts @@ -5,10 +5,10 @@ import { IpcMainInvokeEvent } from 'electron'; import fs from 'fs'; import { normalize } from 'path'; import * as Sentry from '@sentry/electron/main'; +import { bumpStat } from '@studio/common/lib/bump-stat'; +import { StatsGroup, StatsMetric } from '@studio/common/types/stats'; import { readFile } from 'atomically'; import { vi } from 'vitest'; -import { bumpStat } from 'common/lib/bump-stat'; -import { StatsGroup, StatsMetric } from 'common/types/stats'; import { createSite, isFullscreen, @@ -23,7 +23,7 @@ import { SiteServer } from 'src/site-server'; vi.mock( 'fs' ); vi.mock( 'fs-extra' ); -vi.mock( 'common/lib/fs-utils' ); +vi.mock( '@studio/common/lib/fs-utils' ); vi.mock( '@sentry/electron/main', () => ( { captureException: vi.fn(), captureMessage: vi.fn(), @@ -45,13 +45,13 @@ vi.mock( 'src/lib/wordpress-setup', () => ( { } ) ); vi.mock( 'src/main-window' ); vi.mock( 'src/lib/import-export/import/import-manager' ); -vi.mock( 'common/lib/bump-stat' ); +vi.mock( '@studio/common/lib/bump-stat' ); vi.mock( 'atomically' ); vi.mock( 'src/lib/get-image-data', () => ( { getImageData: vi.fn().mockResolvedValue( 'data:image/png;base64,mock' ), } ) ); -vi.mock( 'common/lib/port-finder', () => ( { +vi.mock( '@studio/common/lib/port-finder', () => ( { portFinder: { getOpenPort: vi.fn().mockResolvedValue( 9999 ), }, diff --git a/src/tests/main-window.test.ts b/apps/studio/src/tests/main-window.test.ts similarity index 100% rename from src/tests/main-window.test.ts rename to apps/studio/src/tests/main-window.test.ts diff --git a/src/tests/show-site-context-menu.test.ts b/apps/studio/src/tests/show-site-context-menu.test.ts similarity index 100% rename from src/tests/show-site-context-menu.test.ts rename to apps/studio/src/tests/show-site-context-menu.test.ts diff --git a/src/tests/site-server.test.ts b/apps/studio/src/tests/site-server.test.ts similarity index 90% rename from src/tests/site-server.test.ts rename to apps/studio/src/tests/site-server.test.ts index ef7250dfae..47317ab90e 100644 --- a/src/tests/site-server.test.ts +++ b/apps/studio/src/tests/site-server.test.ts @@ -5,7 +5,7 @@ import { vi } from 'vitest'; import { SiteServer } from 'src/site-server'; // Electron's Node.js environment provides `btoa`/`atob`, but Vitest's does not -vi.mock( 'common/lib/passwords' ); +vi.mock( '@studio/common/lib/passwords' ); // `SiteServer::start` uses `getPreferredSiteLanguage` to set the site language vi.mock( 'src/lib/site-language', () => ( { @@ -59,12 +59,6 @@ vi.mock( 'src/lib/wordpress-provider', () => { }; } ); -// Mock the wp-now config that the provider uses internally -const mockGetWpNowConfig = vi.fn().mockReturnValue( { mode: 'wordpress', port: 1234 } ); -vi.mock( 'vendor/wp-now/src', () => ( { - getWpNowConfig: mockGetWpNowConfig, -} ) ); - // Mock CliServerProcess with a start method that calls startServer vi.mock( 'src/modules/cli/lib/cli-server-process', () => { class MockCliServerProcess { @@ -86,8 +80,6 @@ vi.mock( 'src/storage/user-data' ); describe( 'SiteServer', () => { describe( 'start', () => { it( 'should throw if the server starts with a non-WordPress mode', async () => { - mockGetWpNowConfig.mockReturnValue( { mode: 'theme', port: 1234 } ); - mockStartServer.mockRejectedValue( new Error( "Site server started with Playground's 'theme' mode. Studio only supports 'wordpress' mode." diff --git a/src/tests/utils/style-mock.js b/apps/studio/src/tests/utils/style-mock.js similarity index 100% rename from src/tests/utils/style-mock.js rename to apps/studio/src/tests/utils/style-mock.js diff --git a/src/types.ts b/apps/studio/src/types.ts similarity index 100% rename from src/types.ts rename to apps/studio/src/types.ts diff --git a/src/updates.ts b/apps/studio/src/updates.ts similarity index 100% rename from src/updates.ts rename to apps/studio/src/updates.ts diff --git a/src/utility-types.d.ts b/apps/studio/src/utility-types.d.ts similarity index 100% rename from src/utility-types.d.ts rename to apps/studio/src/utility-types.d.ts diff --git a/tailwind.config.js b/apps/studio/tailwind.config.js similarity index 97% rename from tailwind.config.js rename to apps/studio/tailwind.config.js index 8c116db68b..930453cc59 100644 --- a/tailwind.config.js +++ b/apps/studio/tailwind.config.js @@ -1,6 +1,7 @@ /** @type {import('tailwindcss').Config} */ import palette from '@automattic/color-studio'; import plugin from 'tailwindcss/plugin'; +import path from 'node:path'; import { WINDOWS_TITLEBAR_HEIGHT, MAIN_MIN_WIDTH, APP_CHROME_SPACING } from './src/constants.ts'; const BASE_FONT_SIZE = 16; // 1 rem @@ -138,7 +139,10 @@ a8cToTailwindColors[ `${ PREFIX }-gray-100` ] = '#f0f0f0'; // Gray 100 a8cToTailwindColors[ `${ PREFIX }-gray-5` ] = '#DCDCDE'; // Gray 5 module.exports = { - content: [ './src/**/*.{html,js,jsx,ts,tsx}' ], + content: [ + path.join( __dirname, 'index.html' ), + path.join( __dirname, 'src/**/*.{html,js,jsx,ts,tsx}' ), + ], theme: { extend: { colors: { diff --git a/apps/studio/tsconfig.json b/apps/studio/tsconfig.json new file mode 100644 index 0000000000..39fb40d46b --- /dev/null +++ b/apps/studio/tsconfig.json @@ -0,0 +1,17 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "composite": true, + "baseUrl": "../..", + "paths": { + "*": [ "node_modules/*" ], + "cli/*": [ "apps/cli/*" ], + "src/*": [ "apps/studio/src/*" ], + "vendor/*": [ "vendor/*" ], + "@studio/common/*": [ "tools/common/*" ] + } + }, + "include": [ "src/**/*", "e2e/**/*" ], + "exclude": [ "**/__mocks__/**/*", "**/node_modules/**/*", "**/dist/**/*", "**/out/**/*" ], + "references": [ { "path": "../cli" }, { "path": "../../tools/common" } ] +} diff --git a/apps/studio/vitest.config.ts b/apps/studio/vitest.config.ts new file mode 100644 index 0000000000..255aefff4b --- /dev/null +++ b/apps/studio/vitest.config.ts @@ -0,0 +1,25 @@ +import path from 'path'; +import { defineProject, mergeConfig } from 'vitest/config'; +import sharedConfig from '../../vitest.shared'; + +export default mergeConfig( + sharedConfig, + defineProject( { + assetsInclude: [ '**/*.riv' ], + test: { + name: 'studio', + include: [ 'src/**/*.test.{ts,tsx}' ], + setupFiles: [ path.resolve( __dirname, './vitest.setup.ts' ) ], + }, + resolve: { + alias: { + src: path.resolve( __dirname, './src' ), + '@studio/common': path.resolve( __dirname, '../../tools/common' ), + '@wp-playground/blueprints/blueprint-schema-validator': path.resolve( + __dirname, + '../../node_modules/@wp-playground/blueprints/blueprint-schema-validator.js' + ), + }, + }, + } ) +); diff --git a/vitest.setup.ts b/apps/studio/vitest.setup.ts similarity index 74% rename from vitest.setup.ts rename to apps/studio/vitest.setup.ts index 8131bd3df5..f584083216 100644 --- a/vitest.setup.ts +++ b/apps/studio/vitest.setup.ts @@ -9,13 +9,10 @@ import { vi, beforeEach, afterEach, afterAll } from 'vitest'; // @ts-ignore - no types available for ponyfill import * as streams from 'web-streams-polyfill/dist/ponyfill.js'; -// Configure testing-library with longer timeouts for CI environments configure( { - // Default timeout for waitFor, findBy*, etc. (5 seconds instead of 1 second) asyncUtilTimeout: 5000, } ); -// Polyfill TextEncoder and TextDecoder for tests if ( typeof globalThis.TextEncoder === 'undefined' ) { globalThis.TextEncoder = TextEncoder as typeof globalThis.TextEncoder; } @@ -23,29 +20,22 @@ if ( typeof globalThis.TextDecoder === 'undefined' ) { globalThis.TextDecoder = TextDecoder as typeof globalThis.TextDecoder; } -// Polyfill crypto for Node.js environment tests if ( typeof globalThis.crypto === 'undefined' ) { globalThis.crypto = webcrypto as Crypto; } -// We need this polyfill because the `ReadableStream` class is -// used by `@php-wasm/universal` and it's not available in the Vitest environment. -// Assign to global only if not already available if ( typeof globalThis.ReadableStream === 'undefined' ) { globalThis.ReadableStream = streams.ReadableStream; globalThis.WritableStream = streams.WritableStream; globalThis.TransformStream = streams.TransformStream; } -// Mock CSS parsing to handle modern CSS selectors that JSDOM doesn't support if ( typeof window !== 'undefined' ) { - // Mock the CSS parser to ignore problematic selectors const originalGetComputedStyle = window.getComputedStyle; window.getComputedStyle = function ( element: Element, pseudoElement?: string | null ) { try { return originalGetComputedStyle.call( this, element, pseudoElement ); } catch ( error ) { - // Return a minimal computed style object to prevent crashes return { getPropertyValue: () => '', setProperty: () => {}, @@ -58,43 +48,31 @@ if ( typeof window !== 'undefined' ) { }; } -// Define global variables that were previously in vitest.config.mts ( global as typeof global & { COMMIT_HASH: string } ).COMMIT_HASH = 'mock-hash'; -// Store original console.log to restore after tests const originalConsoleLog = console.log; -// Silence console.log for all tests beforeEach( () => { console.log = vi.fn(); } ); if ( typeof window !== 'undefined' ) { - // The ipcListener global is usually defined in preload.ts window.ipcListener = { subscribe: vi.fn() }; - // Mock `matchMedia` as it's not implemented in JSDOM - // Reference: https://vitest.dev/guide/mocking#modules Object.defineProperty( window, 'matchMedia', { writable: true, value: vi.fn().mockImplementation( ( query ) => ( { matches: false, media: query, onchange: null, - addListener: vi.fn(), // deprecated - removeListener: vi.fn(), // deprecated + addListener: vi.fn(), + removeListener: vi.fn(), addEventListener: vi.fn(), removeEventListener: vi.fn(), dispatchEvent: vi.fn(), } ) ), } ); - /** - * Mock `crypto.subtle.generateKey` as it's not implemented in JSDOM - * https://github.com/jsdom/jsdom/issues/1612 - * - * `crypto.subtle.generateKey` is required by `@php-wasm/web` - */ Object.defineProperty( global.crypto, 'subtle', { value: { generateKey: vi.fn() }, } ); @@ -103,9 +81,7 @@ if ( typeof window !== 'undefined' ) { nock.disableNetConnect(); nock.enableNetConnect( 'raw.githubusercontent.com' ); -// Clean up after each test to prevent state leakage afterEach( () => { - // Restore console.log console.log = originalConsoleLog; nock.cleanAll(); try { @@ -122,11 +98,11 @@ afterAll( () => { } ); // We consider the app to be online by default. -vi.mock( './src/hooks/use-offline', () => ( { +vi.mock( 'src/hooks/use-offline', () => ( { useOffline: vi.fn().mockReturnValue( false ), } ) ); -vi.mock( './src/hooks/use-ai-icon', () => ( { +vi.mock( 'src/hooks/use-ai-icon', () => ( { __esModule: true, default: () => ( { rive: null, @@ -137,9 +113,6 @@ vi.mock( './src/hooks/use-ai-icon', () => ( { global.ResizeObserver = require( 'resize-observer-polyfill' ); -// Common mocks for Node environment tests -// These are needed when tests import from modules that depend on Electron or other native modules - vi.mock( '@sentry/electron/main', () => ( { captureException: vi.fn(), captureMessage: vi.fn(), diff --git a/cli/__mocks__/pm2.ts b/cli/__mocks__/pm2.ts deleted file mode 100644 index 1945d9dbd0..0000000000 --- a/cli/__mocks__/pm2.ts +++ /dev/null @@ -1,39 +0,0 @@ -class API { - connect( callback: ( error: Error | null ) => void ) { - setTimeout( () => { - callback( null ); - }, 0 ); - } - disconnect( callback: ( error: Error | null ) => void ) { - setTimeout( () => { - callback( null ); - }, 0 ); - } - list( callback: ( error: Error | null, processes: any[] ) => void ) { - setTimeout( () => { - callback( null, [] ); - }, 0 ); - } - launchBus( callback: ( error: Error | null, bus: any ) => void ) { - setTimeout( () => { - callback( null, {} ); - }, 0 ); - } - sendDataToProcessId( id: string, data: any, callback: ( error: Error | null ) => void ) { - setTimeout( () => { - callback( null ); - }, 0 ); - } - start( config: any, callback: ( error: Error | null, apps: any[] ) => void ) { - setTimeout( () => { - callback( null, [] ); - }, 0 ); - } - delete( callback: ( error: Error | null ) => void ) { - setTimeout( () => { - callback( null ); - }, 0 ); - } -} - -exports.custom = API; diff --git a/cli/package-lock.json b/cli/package-lock.json deleted file mode 100644 index 7d25b889bd..0000000000 --- a/cli/package-lock.json +++ /dev/null @@ -1,5705 +0,0 @@ -{ - "name": "studio-cli", - "version": "1.1.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "studio-cli", - "hasInstallScript": true, - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/universal": "^3.1.1", - "@wp-playground/blueprints": "^3.1.1", - "@wp-playground/cli": "^3.1.1", - "@wp-playground/common": "^3.1.1", - "@wp-playground/storage": "^3.1.1", - "http-proxy": "^1.18.1", - "pm2": "^6.0.14", - "pm2-axon": "^4.0.1", - "trash": "^10.0.1" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@octokit/app": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@octokit/app/-/app-14.1.0.tgz", - "integrity": "sha512-g3uEsGOQCBl1+W1rgfwoRFUIR6PtvB2T1E4RpygeUU5LrLvlOqcxrt5lfykIeRpUPpupreGJUYl70fqMDXdTpw==", - "license": "MIT", - "dependencies": { - "@octokit/auth-app": "^6.0.0", - "@octokit/auth-unauthenticated": "^5.0.0", - "@octokit/core": "^5.0.0", - "@octokit/oauth-app": "^6.0.0", - "@octokit/plugin-paginate-rest": "^9.0.0", - "@octokit/types": "^12.0.0", - "@octokit/webhooks": "^12.0.4" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/auth-app": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-6.1.4.tgz", - "integrity": "sha512-QkXkSOHZK4dA5oUqY5Dk3S+5pN2s1igPjEASNQV8/vgJgW034fQWR16u7VsNOK/EljA00eyjYF5mWNxWKWhHRQ==", - "license": "MIT", - "dependencies": { - "@octokit/auth-oauth-app": "^7.1.0", - "@octokit/auth-oauth-user": "^4.1.0", - "@octokit/request": "^8.3.1", - "@octokit/request-error": "^5.1.0", - "@octokit/types": "^13.1.0", - "deprecation": "^2.3.1", - "lru-cache": "npm:@wolfy1339/lru-cache@^11.0.2-patch.1", - "universal-github-app-jwt": "^1.1.2", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/auth-app/node_modules/@octokit/openapi-types": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", - "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", - "license": "MIT" - }, - "node_modules/@octokit/auth-app/node_modules/@octokit/types": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", - "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^24.2.0" - } - }, - "node_modules/@octokit/auth-oauth-app": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-7.1.0.tgz", - "integrity": "sha512-w+SyJN/b0l/HEb4EOPRudo7uUOSW51jcK1jwLa+4r7PA8FPFpoxEnHBHMITqCsc/3Vo2qqFjgQfz/xUUvsSQnA==", - "license": "MIT", - "dependencies": { - "@octokit/auth-oauth-device": "^6.1.0", - "@octokit/auth-oauth-user": "^4.1.0", - "@octokit/request": "^8.3.1", - "@octokit/types": "^13.0.0", - "@types/btoa-lite": "^1.0.0", - "btoa-lite": "^1.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/openapi-types": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", - "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", - "license": "MIT" - }, - "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/types": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", - "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^24.2.0" - } - }, - "node_modules/@octokit/auth-oauth-device": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-6.1.0.tgz", - "integrity": "sha512-FNQ7cb8kASufd6Ej4gnJ3f1QB5vJitkoV1O0/g6e6lUsQ7+VsSNRHRmFScN2tV4IgKA12frrr/cegUs0t+0/Lw==", - "license": "MIT", - "dependencies": { - "@octokit/oauth-methods": "^4.1.0", - "@octokit/request": "^8.3.1", - "@octokit/types": "^13.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/openapi-types": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", - "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", - "license": "MIT" - }, - "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/types": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", - "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^24.2.0" - } - }, - "node_modules/@octokit/auth-oauth-user": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-4.1.0.tgz", - "integrity": "sha512-FrEp8mtFuS/BrJyjpur+4GARteUCrPeR/tZJzD8YourzoVhRics7u7we/aDcKv+yywRNwNi/P4fRi631rG/OyQ==", - "license": "MIT", - "dependencies": { - "@octokit/auth-oauth-device": "^6.1.0", - "@octokit/oauth-methods": "^4.1.0", - "@octokit/request": "^8.3.1", - "@octokit/types": "^13.0.0", - "btoa-lite": "^1.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/auth-oauth-user/node_modules/@octokit/openapi-types": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", - "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", - "license": "MIT" - }, - "node_modules/@octokit/auth-oauth-user/node_modules/@octokit/types": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", - "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^24.2.0" - } - }, - "node_modules/@octokit/auth-token": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", - "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", - "license": "MIT", - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/auth-unauthenticated": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@octokit/auth-unauthenticated/-/auth-unauthenticated-5.0.1.tgz", - "integrity": "sha512-oxeWzmBFxWd+XolxKTc4zr+h3mt+yofn4r7OfoIkR/Cj/o70eEGmPsFbueyJE2iBAGpjgTnEOKM3pnuEGVmiqg==", - "license": "MIT", - "dependencies": { - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/core": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.2.tgz", - "integrity": "sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg==", - "license": "MIT", - "dependencies": { - "@octokit/auth-token": "^4.0.0", - "@octokit/graphql": "^7.1.0", - "@octokit/request": "^8.4.1", - "@octokit/request-error": "^5.1.1", - "@octokit/types": "^13.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/core/node_modules/@octokit/openapi-types": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", - "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", - "license": "MIT" - }, - "node_modules/@octokit/core/node_modules/@octokit/types": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", - "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^24.2.0" - } - }, - "node_modules/@octokit/endpoint": { - "version": "9.0.6", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.6.tgz", - "integrity": "sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw==", - "license": "MIT", - "dependencies": { - "@octokit/types": "^13.1.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/endpoint/node_modules/@octokit/openapi-types": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", - "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", - "license": "MIT" - }, - "node_modules/@octokit/endpoint/node_modules/@octokit/types": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", - "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^24.2.0" - } - }, - "node_modules/@octokit/graphql": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.1.tgz", - "integrity": "sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g==", - "license": "MIT", - "dependencies": { - "@octokit/request": "^8.4.1", - "@octokit/types": "^13.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/graphql/node_modules/@octokit/openapi-types": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", - "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", - "license": "MIT" - }, - "node_modules/@octokit/graphql/node_modules/@octokit/types": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", - "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^24.2.0" - } - }, - "node_modules/@octokit/oauth-app": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@octokit/oauth-app/-/oauth-app-6.1.0.tgz", - "integrity": "sha512-nIn/8eUJ/BKUVzxUXd5vpzl1rwaVxMyYbQkNZjHrF7Vk/yu98/YDF/N2KeWO7uZ0g3b5EyiFXFkZI8rJ+DH1/g==", - "license": "MIT", - "dependencies": { - "@octokit/auth-oauth-app": "^7.0.0", - "@octokit/auth-oauth-user": "^4.0.0", - "@octokit/auth-unauthenticated": "^5.0.0", - "@octokit/core": "^5.0.0", - "@octokit/oauth-authorization-url": "^6.0.2", - "@octokit/oauth-methods": "^4.0.0", - "@types/aws-lambda": "^8.10.83", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/oauth-authorization-url": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@octokit/oauth-authorization-url/-/oauth-authorization-url-6.0.2.tgz", - "integrity": "sha512-CdoJukjXXxqLNK4y/VOiVzQVjibqoj/xHgInekviUJV73y/BSIcwvJ/4aNHPBPKcPWFnd4/lO9uqRV65jXhcLA==", - "license": "MIT", - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/oauth-methods": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-4.1.0.tgz", - "integrity": "sha512-4tuKnCRecJ6CG6gr0XcEXdZtkTDbfbnD5oaHBmLERTjTMZNi2CbfEHZxPU41xXLDG4DfKf+sonu00zvKI9NSbw==", - "license": "MIT", - "dependencies": { - "@octokit/oauth-authorization-url": "^6.0.2", - "@octokit/request": "^8.3.1", - "@octokit/request-error": "^5.1.0", - "@octokit/types": "^13.0.0", - "btoa-lite": "^1.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/oauth-methods/node_modules/@octokit/openapi-types": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", - "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", - "license": "MIT" - }, - "node_modules/@octokit/oauth-methods/node_modules/@octokit/types": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", - "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^24.2.0" - } - }, - "node_modules/@octokit/openapi-types": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", - "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==", - "license": "MIT" - }, - "node_modules/@octokit/plugin-paginate-graphql": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-graphql/-/plugin-paginate-graphql-4.0.1.tgz", - "integrity": "sha512-R8ZQNmrIKKpHWC6V2gum4x9LG2qF1RxRjo27gjQcG3j+vf2tLsEfE7I/wRWEPzYMaenr1M+qDAtNcwZve1ce1A==", - "license": "MIT", - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": ">=5" - } - }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.2.tgz", - "integrity": "sha512-u3KYkGF7GcZnSD/3UP0S7K5XUFT2FkOQdcfXZGZQPGv3lm4F2Xbf71lvjldr8c1H3nNbF+33cLEkWYbokGWqiQ==", - "license": "MIT", - "dependencies": { - "@octokit/types": "^12.6.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": "5" - } - }, - "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.4.1.tgz", - "integrity": "sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg==", - "license": "MIT", - "dependencies": { - "@octokit/types": "^12.6.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": "5" - } - }, - "node_modules/@octokit/plugin-retry": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-6.1.0.tgz", - "integrity": "sha512-WrO3bvq4E1Xh1r2mT9w6SDFg01gFmP81nIG77+p/MqW1JeXXgL++6umim3t6x0Zj5pZm3rXAN+0HEjmmdhIRig==", - "license": "MIT", - "dependencies": { - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^13.0.0", - "bottleneck": "^2.15.3" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": "5" - } - }, - "node_modules/@octokit/plugin-retry/node_modules/@octokit/openapi-types": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", - "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", - "license": "MIT" - }, - "node_modules/@octokit/plugin-retry/node_modules/@octokit/types": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", - "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^24.2.0" - } - }, - "node_modules/@octokit/plugin-throttling": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-8.2.0.tgz", - "integrity": "sha512-nOpWtLayKFpgqmgD0y3GqXafMFuKcA4tRPZIfu7BArd2lEZeb1988nhWhwx4aZWmjDmUfdgVf7W+Tt4AmvRmMQ==", - "license": "MIT", - "dependencies": { - "@octokit/types": "^12.2.0", - "bottleneck": "^2.15.3" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": "^5.0.0" - } - }, - "node_modules/@octokit/request": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.1.tgz", - "integrity": "sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw==", - "license": "MIT", - "dependencies": { - "@octokit/endpoint": "^9.0.6", - "@octokit/request-error": "^5.1.1", - "@octokit/types": "^13.1.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/request-error": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.1.tgz", - "integrity": "sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g==", - "license": "MIT", - "dependencies": { - "@octokit/types": "^13.1.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/request-error/node_modules/@octokit/openapi-types": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", - "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", - "license": "MIT" - }, - "node_modules/@octokit/request-error/node_modules/@octokit/types": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", - "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^24.2.0" - } - }, - "node_modules/@octokit/request/node_modules/@octokit/openapi-types": { - "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", - "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", - "license": "MIT" - }, - "node_modules/@octokit/request/node_modules/@octokit/types": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", - "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^24.2.0" - } - }, - "node_modules/@octokit/types": { - "version": "12.6.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", - "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^20.0.0" - } - }, - "node_modules/@octokit/webhooks": { - "version": "12.3.2", - "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-12.3.2.tgz", - "integrity": "sha512-exj1MzVXoP7xnAcAB3jZ97pTvVPkQF9y6GA/dvYC47HV7vLv+24XRS6b/v/XnyikpEuvMhugEXdGtAlU086WkQ==", - "license": "MIT", - "dependencies": { - "@octokit/request-error": "^5.0.0", - "@octokit/webhooks-methods": "^4.1.0", - "@octokit/webhooks-types": "7.6.1", - "aggregate-error": "^3.1.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/webhooks-methods": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-4.1.0.tgz", - "integrity": "sha512-zoQyKw8h9STNPqtm28UGOYFE7O6D4Il8VJwhAtMHFt2C4L0VQT1qGKLeefUOqHNs1mNRYSadVv7x0z8U2yyeWQ==", - "license": "MIT", - "engines": { - "node": ">= 18" - } - }, - "node_modules/@octokit/webhooks-types": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-7.6.1.tgz", - "integrity": "sha512-S8u2cJzklBC0FgTwWVLaM8tMrDuDMVE4xiTK4EYXM9GntyvrdbSoxqDQa+Fh57CCNApyIpyeqPhhFEmHPfrXgw==", - "license": "MIT" - }, - "node_modules/@php-wasm/cli-util": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@php-wasm/cli-util/-/cli-util-3.1.1.tgz", - "integrity": "sha512-/SNxTE3ZXrxbETiYs6Zn6nUSVLl+7lomw14LU2cBx29U3dpJ/ro0kM+PmzksS6umhBiwmksVeaUf/wlTMbr++Q==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/util": "3.1.1", - "fast-xml-parser": "^5.3.4", - "jsonc-parser": "3.3.1" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@php-wasm/fs-journal": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@php-wasm/fs-journal/-/fs-journal-3.1.1.tgz", - "integrity": "sha512-qDDE8tjhst+Qqb+g9/8qUpf5ieVOEh6UX7Krt154dkqKM29H9ebquq+vBB5abWi3LfAxuNd7ihwUa1DWThCQbw==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/logger": "3.1.1", - "@php-wasm/node": "3.1.1", - "@php-wasm/universal": "3.1.1", - "@php-wasm/util": "3.1.1", - "express": "4.22.0", - "fs-ext-extra-prebuilt": "2.2.7", - "ini": "4.1.2", - "wasm-feature-detect": "1.8.0", - "ws": "8.18.3", - "yargs": "17.7.2" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@php-wasm/fs-journal/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@php-wasm/fs-journal/node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@php-wasm/logger": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@php-wasm/logger/-/logger-3.1.1.tgz", - "integrity": "sha512-azvy+GpcOd6Q7AYIWe44CZtaXroLxOGWPQiTy2ism4cYjb+Mk1kqMy5F8UKhl8DLbJn1sS74JgsMmdBbpABvEA==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/node-polyfills": "3.1.1" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@php-wasm/node": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@php-wasm/node/-/node-3.1.1.tgz", - "integrity": "sha512-em6+yfWi6oicIUHKwp3ZqOS3+JlWzaP9vWqyUw4StN3zLKpH3iiwnpf047lLI5PS09w8JU4sXAbBT2A7GBwrng==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/logger": "3.1.1", - "@php-wasm/node-7-4": "3.1.1", - "@php-wasm/node-8-0": "3.1.1", - "@php-wasm/node-8-1": "3.1.1", - "@php-wasm/node-8-2": "3.1.1", - "@php-wasm/node-8-3": "3.1.1", - "@php-wasm/node-8-4": "3.1.1", - "@php-wasm/node-8-5": "3.1.1", - "@php-wasm/node-polyfills": "3.1.1", - "@php-wasm/universal": "3.1.1", - "@php-wasm/util": "3.1.1", - "@wp-playground/common": "3.1.1", - "express": "4.22.0", - "fs-ext-extra-prebuilt": "2.2.7", - "ini": "4.1.2", - "wasm-feature-detect": "1.8.0", - "ws": "8.18.3", - "yargs": "17.7.2" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@php-wasm/node-7-4": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@php-wasm/node-7-4/-/node-7-4-3.1.1.tgz", - "integrity": "sha512-GksZ1J3UcWaxZHiKGGAfnRAONV9qZ4ft6WG6rxy6kZzzTGtX69G7qJdc8E00y3WRkVC2X25H2/ulzhMWCzFeKg==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/universal": "3.1.1", - "ini": "4.1.2", - "wasm-feature-detect": "1.8.0", - "ws": "8.18.3" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@php-wasm/node-7-4/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@php-wasm/node-7-4/node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@php-wasm/node-8-0": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-0/-/node-8-0-3.1.1.tgz", - "integrity": "sha512-/Z5pi9XAY45HBCewgHO8QqhhHyC8V5iuiedwNYoQoTluoQ9zoaiyy/WYYWLk492dGrxNdwRhjCYVQZR4J4T7Cg==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/universal": "3.1.1", - "ini": "4.1.2", - "wasm-feature-detect": "1.8.0", - "ws": "8.18.3" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@php-wasm/node-8-0/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@php-wasm/node-8-0/node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@php-wasm/node-8-1": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-1/-/node-8-1-3.1.1.tgz", - "integrity": "sha512-hGGNtCJ0cDKxPP5lEu0d9VcO+QFFLyc/2fEZGEy4YMUI4TkRUAadFHsyu5K3fPVKgNLMpYw+vv3qon+T70n0Og==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/universal": "3.1.1", - "ini": "4.1.2", - "wasm-feature-detect": "1.8.0", - "ws": "8.18.3" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@php-wasm/node-8-1/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@php-wasm/node-8-1/node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@php-wasm/node-8-2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-2/-/node-8-2-3.1.1.tgz", - "integrity": "sha512-WyexqgMliJj5XrvZLZ51bh8A1+PjyjOopSTIHVwAVUp3rJR9BoSLo8jxNlH3GALFiLuxUVQavgQasCkevV5Zpw==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/universal": "3.1.1", - "ini": "4.1.2", - "wasm-feature-detect": "1.8.0", - "ws": "8.18.3" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@php-wasm/node-8-2/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@php-wasm/node-8-2/node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@php-wasm/node-8-3": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-3/-/node-8-3-3.1.1.tgz", - "integrity": "sha512-+w3rfxhiCOl1muv69BBZa07HElcVproyTShj1e8NAbftpKYhYfm6IkJWzgSDrB3UFX0cXgnArhOQBIfCfmNpHw==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/universal": "3.1.1", - "ini": "4.1.2", - "wasm-feature-detect": "1.8.0", - "ws": "8.18.3" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@php-wasm/node-8-3/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@php-wasm/node-8-3/node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@php-wasm/node-8-4": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-4/-/node-8-4-3.1.1.tgz", - "integrity": "sha512-XCqbMXSI5T/0svyhQODFbKlPUAPMjrm8RUZhOUVECVXYX5YODI6dhbODYzarXLuhsgSs8pH8qH6WS5p4avZHPA==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/universal": "3.1.1", - "ini": "4.1.2", - "wasm-feature-detect": "1.8.0", - "ws": "8.18.3" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@php-wasm/node-8-4/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@php-wasm/node-8-4/node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@php-wasm/node-8-5": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@php-wasm/node-8-5/-/node-8-5-3.1.1.tgz", - "integrity": "sha512-WPDeXtsdPj9BvHt0cB2j81hEAEWSWSC5ia6oNyt4G2i7F9shCinb1Z3VwwzBZHGOZSS4vXLE9imwOsG+T5bD2Q==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/universal": "3.1.1", - "ini": "4.1.2", - "wasm-feature-detect": "1.8.0", - "ws": "8.18.3" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@php-wasm/node-8-5/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@php-wasm/node-8-5/node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@php-wasm/node-polyfills": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@php-wasm/node-polyfills/-/node-polyfills-3.1.1.tgz", - "integrity": "sha512-PiVIt0Oioh2AfVvATwD4FYr0EuTIFXwhwb5ENsciAkPFTePRCraX/ZkJOUJUN0N45/KG72FOmg+VuIBmXqpn1w==", - "license": "GPL-2.0-or-later" - }, - "node_modules/@php-wasm/node/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@php-wasm/node/node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@php-wasm/progress": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@php-wasm/progress/-/progress-3.1.1.tgz", - "integrity": "sha512-XmNMeRV2YMUA/jzhL7UBlaN1wV6zJdjrbWIeaO8RweHVufLI553Wao3dfs4c4sNRxucTW5GzjMkmyQOxDz/1eQ==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/logger": "3.1.1", - "@php-wasm/node-polyfills": "3.1.1" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@php-wasm/scopes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@php-wasm/scopes/-/scopes-3.1.1.tgz", - "integrity": "sha512-OrFGSVMOZMOezRA2FBfSoFW6SaUfrirGSTUODrhE9sT0S4r3ScH8uV+1Jsz/q8ba3Ekxi6DCcxXIFqqezzkepQ==", - "license": "GPL-2.0-or-later", - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@php-wasm/stream-compression": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@php-wasm/stream-compression/-/stream-compression-3.1.1.tgz", - "integrity": "sha512-PtWUGUSzE6kgdYVJAkdi0tUPyFZbvVL1+aip7IBfumCLXjZEkeIYmc9jmBL6LNKZ3agDiWZ8OC005gAWkKKeHQ==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/node-polyfills": "3.1.1", - "@php-wasm/util": "3.1.1" - } - }, - "node_modules/@php-wasm/universal": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@php-wasm/universal/-/universal-3.1.1.tgz", - "integrity": "sha512-GLaJJCi+PHHoTDIU9j7jN2PaU6R0Ar4cvNngtHm3fO8pPnpwLs2xI0Bxi7BsPkyv/dbpm6C7LkSr03dQ8ZyCPA==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/logger": "3.1.1", - "@php-wasm/node-polyfills": "3.1.1", - "@php-wasm/progress": "3.1.1", - "@php-wasm/stream-compression": "3.1.1", - "@php-wasm/util": "3.1.1", - "ini": "4.1.2" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@php-wasm/universal/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@php-wasm/util": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@php-wasm/util/-/util-3.1.1.tgz", - "integrity": "sha512-O7B0b8kMwHQsBLpooolu+zQoF1dFTR5eBfRJ21Y1DHlxHQl6Od6ZhcFzmZ4uGVhhckDlqgxoKBqn1mIFoGIL9w==", - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@php-wasm/web": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@php-wasm/web/-/web-3.1.1.tgz", - "integrity": "sha512-aOViM7wJ8XAeg4/4BSID2Nnklf8c/sB9hmemFtmuOUW53gpvozNI5QuPpTKJ33PRqioBFyg/MfTwlVo2ARA1bA==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/fs-journal": "3.1.1", - "@php-wasm/logger": "3.1.1", - "@php-wasm/universal": "3.1.1", - "@php-wasm/util": "3.1.1", - "@php-wasm/web-7-4": "3.1.1", - "@php-wasm/web-8-0": "3.1.1", - "@php-wasm/web-8-1": "3.1.1", - "@php-wasm/web-8-2": "3.1.1", - "@php-wasm/web-8-3": "3.1.1", - "@php-wasm/web-8-4": "3.1.1", - "@php-wasm/web-8-5": "3.1.1", - "@php-wasm/web-service-worker": "3.1.1", - "@wp-playground/common": "3.1.1", - "express": "4.22.0", - "fs-ext-extra-prebuilt": "2.2.7", - "ini": "4.1.2", - "wasm-feature-detect": "1.8.0", - "ws": "8.18.3", - "yargs": "17.7.2" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@php-wasm/web-7-4": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@php-wasm/web-7-4/-/web-7-4-3.1.1.tgz", - "integrity": "sha512-7e3GGL7/97S2yJDL5lsdnLM/GDbo7rHsCV2RU0h2L+Xnh1LzrHrnXf+HvejTmn921gEVa7r5qeibNXFKLOF3GQ==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/universal": "3.1.1", - "ini": "4.1.2", - "wasm-feature-detect": "1.8.0" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@php-wasm/web-7-4/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@php-wasm/web-8-0": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@php-wasm/web-8-0/-/web-8-0-3.1.1.tgz", - "integrity": "sha512-44Nca/zbSC6E9vQJmQO03IlwbdEh5414LKvm71BTLHZ7M52LfgCDu1+Bv5pcvMKwGZ+6UEdJvJZPBJhLrNYy6Q==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/universal": "3.1.1", - "ini": "4.1.2", - "wasm-feature-detect": "1.8.0" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@php-wasm/web-8-0/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@php-wasm/web-8-1": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@php-wasm/web-8-1/-/web-8-1-3.1.1.tgz", - "integrity": "sha512-QoydA9MRH+6P2bBr2SfuLaTqZwpsXoe3z20n1gQxeEhlOuPUqNZ94jGj6+jKWfGzd/4wDpocRTvsVI9dJoPhig==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/universal": "3.1.1", - "ini": "4.1.2", - "wasm-feature-detect": "1.8.0" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@php-wasm/web-8-1/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@php-wasm/web-8-2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@php-wasm/web-8-2/-/web-8-2-3.1.1.tgz", - "integrity": "sha512-isdbUSY9dB78M4R5Hlkcl0ar+LPCkpXFDpvshJwcRsgJwqU3ivWDBR2yFSLwSfd2DlpDNeTYRaZvb8hvUPrUUw==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/universal": "3.1.1", - "ini": "4.1.2", - "wasm-feature-detect": "1.8.0" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@php-wasm/web-8-2/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@php-wasm/web-8-3": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@php-wasm/web-8-3/-/web-8-3-3.1.1.tgz", - "integrity": "sha512-T8AVsB63gGfKkLABHocG1LikZYslETV1GLex9g32hTlFgWAzPpGcCyEh+7GIWO5Q2nCnIqvf4dWYH88gULAV7A==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/universal": "3.1.1", - "ini": "4.1.2", - "wasm-feature-detect": "1.8.0" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@php-wasm/web-8-3/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@php-wasm/web-8-4": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@php-wasm/web-8-4/-/web-8-4-3.1.1.tgz", - "integrity": "sha512-3LvFz5JQmi70MOLJrzzBAIDZFEakORc5rjsRcCO/BiiMdCJOD45SegqVdv1/Wix6tJbyDu+2swXxZokO46fjVQ==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/universal": "3.1.1", - "ini": "4.1.2", - "wasm-feature-detect": "1.8.0" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@php-wasm/web-8-4/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@php-wasm/web-8-5": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@php-wasm/web-8-5/-/web-8-5-3.1.1.tgz", - "integrity": "sha512-rxxvaLCQVlOiPIPbuxGjH1ITMf2p2V5uEIaVcRGgwKsig+3FpcClv1zOQyy44+0222I0k4FoUAh3SAWIySeyrA==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/universal": "3.1.1", - "ini": "4.1.2", - "wasm-feature-detect": "1.8.0" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@php-wasm/web-8-5/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@php-wasm/web-service-worker": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@php-wasm/web-service-worker/-/web-service-worker-3.1.1.tgz", - "integrity": "sha512-+sAuqB1dQ5NaBj+T0qO1hZEUUyx1xRqE7OB66qjIpYua+7TA9NjcbCobIK57y99sM+g2nW9Pf1aBh0tgWZq/1w==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/scopes": "3.1.1" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@php-wasm/web/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@php-wasm/web/node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@php-wasm/xdebug-bridge": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@php-wasm/xdebug-bridge/-/xdebug-bridge-3.1.1.tgz", - "integrity": "sha512-lZwdvUDviz+bFk+GStwpW+JLO5IMnM+un0VYTeA5j3ztqYqDtFJpplCjKWjlGORqoBT6VLj+kCoLBv/GVjHXIQ==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/logger": "3.1.1", - "@php-wasm/node": "3.1.1", - "@php-wasm/universal": "3.1.1", - "@wp-playground/common": "3.1.1", - "express": "4.22.0", - "fs-ext-extra-prebuilt": "2.2.7", - "ini": "4.1.2", - "wasm-feature-detect": "1.8.0", - "ws": "8.18.3", - "xml2js": "0.6.2", - "yargs": "17.7.2" - }, - "bin": { - "xdebug-bridge": "xdebug-bridge.js" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@php-wasm/xdebug-bridge/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@php-wasm/xdebug-bridge/node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@pm2/agent": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@pm2/agent/-/agent-2.1.1.tgz", - "integrity": "sha512-0V9ckHWd/HSC8BgAbZSoq8KXUG81X97nSkAxmhKDhmF8vanyaoc1YXwc2KVkbWz82Rg4gjd2n9qiT3i7bdvGrQ==", - "license": "AGPL-3.0", - "dependencies": { - "async": "~3.2.0", - "chalk": "~3.0.0", - "dayjs": "~1.8.24", - "debug": "~4.3.1", - "eventemitter2": "~5.0.1", - "fast-json-patch": "^3.1.0", - "fclone": "~1.0.11", - "pm2-axon": "~4.0.1", - "pm2-axon-rpc": "~0.7.0", - "proxy-agent": "~6.4.0", - "semver": "~7.5.0", - "ws": "~7.5.10" - } - }, - "node_modules/@pm2/agent/node_modules/dayjs": { - "version": "1.8.36", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.36.tgz", - "integrity": "sha512-3VmRXEtw7RZKAf+4Tv1Ym9AGeo8r8+CjDi26x+7SYQil1UqtqdaokhzoEJohqlzt0m5kacJSDhJQkG/LWhpRBw==", - "license": "MIT" - }, - "node_modules/@pm2/agent/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@pm2/agent/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@pm2/agent/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@pm2/blessed": { - "version": "0.1.81", - "resolved": "https://registry.npmjs.org/@pm2/blessed/-/blessed-0.1.81.tgz", - "integrity": "sha512-ZcNHqQjMuNRcQ7Z1zJbFIQZO/BDKV3KbiTckWdfbUaYhj7uNmUwb+FbdDWSCkvxNr9dBJQwvV17o6QBkAvgO0g==", - "license": "MIT", - "bin": { - "blessed": "bin/tput.js" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/@pm2/io": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@pm2/io/-/io-6.1.0.tgz", - "integrity": "sha512-IxHuYURa3+FQ6BKePlgChZkqABUKFYH6Bwbw7V/pWU1pP6iR1sCI26l7P9ThUEB385ruZn/tZS3CXDUF5IA1NQ==", - "license": "Apache-2", - "dependencies": { - "async": "~2.6.1", - "debug": "~4.3.1", - "eventemitter2": "^6.3.1", - "require-in-the-middle": "^5.0.0", - "semver": "~7.5.4", - "shimmer": "^1.2.0", - "signal-exit": "^3.0.3", - "tslib": "1.9.3" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/@pm2/io/node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/@pm2/io/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@pm2/io/node_modules/eventemitter2": { - "version": "6.4.9", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", - "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==", - "license": "MIT" - }, - "node_modules/@pm2/io/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@pm2/io/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@pm2/js-api": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@pm2/js-api/-/js-api-0.8.0.tgz", - "integrity": "sha512-nmWzrA/BQZik3VBz+npRcNIu01kdBhWL0mxKmP1ciF/gTcujPTQqt027N9fc1pK9ERM8RipFhymw7RcmCyOEYA==", - "license": "Apache-2", - "dependencies": { - "async": "^2.6.3", - "debug": "~4.3.1", - "eventemitter2": "^6.3.1", - "extrareqp2": "^1.0.0", - "ws": "^7.0.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@pm2/js-api/node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/@pm2/js-api/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@pm2/js-api/node_modules/eventemitter2": { - "version": "6.4.9", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", - "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==", - "license": "MIT" - }, - "node_modules/@pm2/pm2-version-check": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@pm2/pm2-version-check/-/pm2-version-check-1.0.4.tgz", - "integrity": "sha512-SXsM27SGH3yTWKc2fKR4SYNxsmnvuBQ9dd6QHtEWmiZ/VqaOYPAIlS8+vMcn27YLtAEBGvNRSh3TPNvtjZgfqA==", - "license": "MIT", - "dependencies": { - "debug": "^4.3.1" - } - }, - "node_modules/@sindresorhus/df": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@sindresorhus/df/-/df-3.1.1.tgz", - "integrity": "sha512-SME/vtXaJcnQ/HpeV6P82Egy+jThn11IKfwW8+/XVoRD0rmPHVTeKMtww1oWdVnMykzVPjmrDN9S8NBndPEHCQ==", - "license": "MIT", - "dependencies": { - "execa": "^2.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sindresorhus/merge-streams": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", - "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@stroncium/procfs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@stroncium/procfs/-/procfs-1.2.1.tgz", - "integrity": "sha512-X1Iui3FUNZP18EUvysTHxt+Avu2nlVzyf90YM8OYgP6SGzTzzX/0JgObfO1AQQDzuZtNNz29bVh8h5R97JrjxA==", - "license": "CC0-1.0", - "engines": { - "node": ">=8" - } - }, - "node_modules/@tootallnate/quickjs-emscripten": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", - "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", - "license": "MIT" - }, - "node_modules/@types/aws-lambda": { - "version": "8.10.159", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.159.tgz", - "integrity": "sha512-SAP22WSGNN12OQ8PlCzGzRCZ7QDCwI85dQZbmpz7+mAk+L7j+wI7qnvmdKh+o7A5LaOp6QnOZ2NJphAZQTTHQg==", - "license": "MIT" - }, - "node_modules/@types/btoa-lite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/btoa-lite/-/btoa-lite-1.0.2.tgz", - "integrity": "sha512-ZYbcE2x7yrvNFJiU7xJGrpF/ihpkM7zKgw8bha3LNJSesvTtUNxbpzaT7WXBIryf6jovisrxTBvymxMeLLj1Mg==", - "license": "MIT" - }, - "node_modules/@types/jsonwebtoken": { - "version": "9.0.10", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.10.tgz", - "integrity": "sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==", - "license": "MIT", - "dependencies": { - "@types/ms": "*", - "@types/node": "*" - } - }, - "node_modules/@types/ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "24.10.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", - "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", - "license": "MIT", - "dependencies": { - "undici-types": "~7.16.0" - } - }, - "node_modules/@wp-playground/blueprints": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@wp-playground/blueprints/-/blueprints-3.1.1.tgz", - "integrity": "sha512-PMA0di/4A5OiUXdQ0wa+H+FJETeUv7WcSt6QoDzpjU0GQ2E+NBy/7e8mOhN7V644AG2ySuFf1znIK8SbluYzXA==", - "dependencies": { - "@php-wasm/logger": "3.1.1", - "@php-wasm/node": "3.1.1", - "@php-wasm/node-polyfills": "3.1.1", - "@php-wasm/progress": "3.1.1", - "@php-wasm/scopes": "3.1.1", - "@php-wasm/stream-compression": "3.1.1", - "@php-wasm/universal": "3.1.1", - "@php-wasm/util": "3.1.1", - "@php-wasm/web-service-worker": "3.1.1", - "@wp-playground/common": "3.1.1", - "@wp-playground/storage": "3.1.1", - "@wp-playground/wordpress": "3.1.1", - "@zip.js/zip.js": "2.7.57", - "ajv": "8.12.0", - "async-lock": "1.4.1", - "clean-git-ref": "2.0.1", - "crc-32": "1.2.2", - "diff3": "0.0.4", - "express": "4.22.0", - "fs-ext-extra-prebuilt": "2.2.7", - "ignore": "5.3.2", - "ini": "4.1.2", - "minimisted": "2.0.1", - "octokit": "3.1.2", - "pako": "1.0.10", - "pify": "2.3.0", - "readable-stream": "3.6.2", - "sha.js": "2.4.12", - "simple-get": "4.0.1", - "wasm-feature-detect": "1.8.0", - "ws": "8.18.3", - "yargs": "17.7.2" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@wp-playground/blueprints/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@wp-playground/blueprints/node_modules/pako": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", - "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", - "license": "(MIT AND Zlib)" - }, - "node_modules/@wp-playground/blueprints/node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@wp-playground/cli": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@wp-playground/cli/-/cli-3.1.1.tgz", - "integrity": "sha512-BRDiKTNTAo5PjY7SG1om7pfx1QAuPPjP5ZW1RXp7e/pgM2dr6pciiNZkSMYZ/Qo45BEYeb3McAXawh/EMRfIgA==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/cli-util": "3.1.1", - "@php-wasm/logger": "3.1.1", - "@php-wasm/node": "3.1.1", - "@php-wasm/progress": "3.1.1", - "@php-wasm/universal": "3.1.1", - "@php-wasm/util": "3.1.1", - "@php-wasm/xdebug-bridge": "3.1.1", - "@wp-playground/blueprints": "3.1.1", - "@wp-playground/common": "3.1.1", - "@wp-playground/storage": "3.1.1", - "@wp-playground/tools": "3.1.1", - "@wp-playground/wordpress": "3.1.1", - "@zip.js/zip.js": "2.7.57", - "ajv": "8.12.0", - "async-lock": "1.4.1", - "clean-git-ref": "2.0.1", - "crc-32": "1.2.2", - "diff3": "0.0.4", - "express": "4.22.0", - "fast-xml-parser": "^5.3.4", - "fs-ext-extra-prebuilt": "2.2.7", - "fs-extra": "11.1.1", - "ignore": "5.3.2", - "ini": "4.1.2", - "jsonc-parser": "3.3.1", - "minimisted": "2.0.1", - "octokit": "3.1.2", - "pako": "1.0.10", - "pify": "2.3.0", - "ps-man": "1.1.8", - "readable-stream": "3.6.2", - "sha.js": "2.4.12", - "simple-get": "4.0.1", - "tmp-promise": "3.0.3", - "wasm-feature-detect": "1.8.0", - "ws": "8.18.3", - "xml2js": "0.6.2", - "yargs": "17.7.2" - }, - "bin": { - "wp-playground-cli": "wp-playground.js" - } - }, - "node_modules/@wp-playground/cli/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@wp-playground/cli/node_modules/pako": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", - "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", - "license": "(MIT AND Zlib)" - }, - "node_modules/@wp-playground/cli/node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@wp-playground/common": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@wp-playground/common/-/common-3.1.1.tgz", - "integrity": "sha512-RL89y7KppahForbsYM43tf7naRw2zwCj+bBnXjB4iscvQ+zFyJyxpsS4o1hpRzWJ99rT9n4v6HmnPg+PiUbloQ==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/universal": "3.1.1", - "@php-wasm/util": "3.1.1", - "ini": "4.1.2" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@wp-playground/common/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@wp-playground/storage": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@wp-playground/storage/-/storage-3.1.1.tgz", - "integrity": "sha512-wiuICDuHAk4uORKEBgBWRPNiVdItyI6aQykK2qvlIg5/Awzd9sllxMGMrcTQKSp8E9hl/ZRo/UPRjM7n9I/d+A==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/stream-compression": "3.1.1", - "@php-wasm/universal": "3.1.1", - "@php-wasm/util": "3.1.1", - "@php-wasm/web": "3.1.1", - "@zip.js/zip.js": "2.7.57", - "async-lock": "^1.4.1", - "clean-git-ref": "^2.0.1", - "crc-32": "^1.2.0", - "diff3": "0.0.3", - "express": "4.22.0", - "fs-ext-extra-prebuilt": "2.2.7", - "ignore": "^5.1.4", - "ini": "4.1.2", - "minimisted": "^2.0.0", - "octokit": "3.1.2", - "pako": "^1.0.10", - "pify": "^4.0.1", - "readable-stream": "^3.4.0", - "sha.js": "^2.4.9", - "simple-get": "^4.0.1", - "wasm-feature-detect": "1.8.0", - "ws": "8.18.3", - "yargs": "17.7.2" - } - }, - "node_modules/@wp-playground/storage/node_modules/diff3": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/diff3/-/diff3-0.0.3.tgz", - "integrity": "sha512-iSq8ngPOt0K53A6eVr4d5Kn6GNrM2nQZtC740pzIriHtn4pOQ2lyzEXQMBeVcWERN0ye7fhBsk9PbLLQOnUx/g==", - "license": "MIT" - }, - "node_modules/@wp-playground/storage/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@wp-playground/storage/node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "license": "(MIT AND Zlib)" - }, - "node_modules/@wp-playground/storage/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/@wp-playground/storage/node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@wp-playground/tools": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@wp-playground/tools/-/tools-3.1.1.tgz", - "integrity": "sha512-bVokza3mdVwjhnp9x1A3RMVsRb8ICcGuoDbCpgstdaHjQuf09Ox4PbuayRqOoaPeqN3LSeEOryM/F0T7H9cfcw==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@wp-playground/blueprints": "3.1.1", - "@zip.js/zip.js": "2.7.57", - "ajv": "8.12.0", - "async-lock": "1.4.1", - "clean-git-ref": "2.0.1", - "crc-32": "1.2.2", - "diff3": "0.0.4", - "express": "4.22.0", - "fs-ext-extra-prebuilt": "2.2.7", - "ignore": "5.3.2", - "ini": "4.1.2", - "minimisted": "2.0.1", - "octokit": "3.1.2", - "pako": "1.0.10", - "pify": "2.3.0", - "readable-stream": "3.6.2", - "sha.js": "2.4.12", - "simple-get": "4.0.1", - "wasm-feature-detect": "1.8.0", - "ws": "8.18.3", - "yargs": "17.7.2" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@wp-playground/tools/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@wp-playground/tools/node_modules/pako": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", - "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", - "license": "(MIT AND Zlib)" - }, - "node_modules/@wp-playground/tools/node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@wp-playground/wordpress": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@wp-playground/wordpress/-/wordpress-3.1.1.tgz", - "integrity": "sha512-1zYmhzEc++jMfsTGOBGRHlpFw/IaXqvwlDP75F+1pk0InDVVC44nQ+AB+Clewjp7B0aBnXea8C6+PtaK8ogDdQ==", - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/logger": "3.1.1", - "@php-wasm/node": "3.1.1", - "@php-wasm/universal": "3.1.1", - "@php-wasm/util": "3.1.1", - "@wp-playground/common": "3.1.1", - "express": "4.22.0", - "fs-ext-extra-prebuilt": "2.2.7", - "ini": "4.1.2", - "wasm-feature-detect": "1.8.0", - "ws": "8.18.3", - "yargs": "17.7.2" - }, - "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" - } - }, - "node_modules/@wp-playground/wordpress/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@wp-playground/wordpress/node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@zip.js/zip.js": { - "version": "2.7.57", - "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.7.57.tgz", - "integrity": "sha512-BtonQ1/jDnGiMed6OkV6rZYW78gLmLswkHOzyMrMb+CAR7CZO8phOHO6c2qw6qb1g1betN7kwEHhhZk30dv+NA==", - "license": "BSD-3-Clause", - "engines": { - "bun": ">=0.7.0", - "deno": ">=1.0.0", - "node": ">=16.5.0" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/amp": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/amp/-/amp-0.3.1.tgz", - "integrity": "sha512-OwIuC4yZaRogHKiuU5WlMR5Xk/jAcpPtawWL05Gj8Lvm2F6mwoJt4O/bHI+DHwG79vWd+8OFYM4/BzYqyRd3qw==", - "license": "MIT" - }, - "node_modules/amp-message": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/amp-message/-/amp-message-0.1.2.tgz", - "integrity": "sha512-JqutcFwoU1+jhv7ArgW38bqrE+LQdcRv4NxNw0mp0JHQyB6tXesWRjtYKlDgHRY2o3JE5UTaBGUK8kSWUdxWUg==", - "license": "MIT", - "dependencies": { - "amp": "0.3.1" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ansis": { - "version": "4.0.0-node10", - "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.0.0-node10.tgz", - "integrity": "sha512-BRrU0Bo1X9dFGw6KgGz6hWrqQuOlVEDOzkb0QSLZY9sXHqA7pNj7yHPVJRz7y/rj4EOJ3d/D5uxH+ee9leYgsg==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "license": "Python-2.0" - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "license": "MIT" - }, - "node_modules/ast-types": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", - "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ast-types/node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "license": "MIT" - }, - "node_modules/async-lock": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.4.1.tgz", - "integrity": "sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==", - "license": "MIT" - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/basic-ftp": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", - "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/before-after-hook": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", - "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", - "license": "Apache-2.0" - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bodec": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/bodec/-/bodec-0.1.0.tgz", - "integrity": "sha512-Ylo+MAo5BDUq1KA3f3R/MFhh+g8cnHmo8bz3YPGhI1znrMaf77ol1sfvYJzsw3nTE+Y2GryfDxBaR+AqpAkEHQ==", - "license": "MIT" - }, - "node_modules/body-parser": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", - "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", - "license": "MIT", - "dependencies": { - "bytes": "~3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "~1.2.0", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "on-finished": "~2.4.1", - "qs": "~6.14.0", - "raw-body": "~2.5.3", - "type-is": "~1.6.18", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/bottleneck": { - "version": "2.19.5", - "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", - "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==", - "license": "MIT" - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/btoa-lite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA==", - "license": "MIT" - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "license": "BSD-3-Clause" - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "license": "MIT" - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/charm": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/charm/-/charm-0.1.2.tgz", - "integrity": "sha512-syedaZ9cPe7r3hoQA9twWYKu5AIyCswN5+szkmPBe9ccdLrj4bYaCnLVPTLd2kgVRc7+zoX4tyPgRnFKCj5YjQ==", - "license": "MIT/X11" - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chunkify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/chunkify/-/chunkify-5.0.0.tgz", - "integrity": "sha512-G8dj/3/Gm+1yL4oWSdwIxihZWFlgC4V2zYtIApacI0iPIRKBHlBGOGAiDUBZgrj4H8MBA8g8fPFwnJrWF3wl7Q==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clean-git-ref": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/clean-git-ref/-/clean-git-ref-2.0.1.tgz", - "integrity": "sha512-bLSptAy2P0s6hU4PzuIMKmMJJSE6gLXGH1cntDu7bWJUksvuM+7ReOK61mozULErYvP6a15rnYl0zFDef+pyPw==", - "license": "Apache-2.0" - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-tableau": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/cli-tableau/-/cli-tableau-2.0.1.tgz", - "integrity": "sha512-he+WTicka9cl0Fg/y+YyxcN6/bfQ/1O3QmgxRXDhABKqLzvoOSM4fMzp39uMyLBulAFuywD2N7UaoQE7WaADxQ==", - "dependencies": { - "chalk": "3.0.0" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "license": "MIT" - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", - "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", - "license": "MIT" - }, - "node_modules/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "license": "Apache-2.0", - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/croner": { - "version": "4.1.97", - "resolved": "https://registry.npmjs.org/croner/-/croner-4.1.97.tgz", - "integrity": "sha512-/f6gpQuxDaqXu+1kwQYSckUglPaOrHdbIlBAu0YuW8/Cdb45XwXYNUBXg3r/9Mo6n540Kn/smKcZWko5x99KrQ==", - "license": "MIT" - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/culvert": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/culvert/-/culvert-0.1.2.tgz", - "integrity": "sha512-yi1x3EAWKjQTreYWeSd98431AV+IEE0qoDyOoaHJ7KJ21gv6HtBXHVLX74opVSGqcR8/AbjJBHAHpcOy2bj5Gg==", - "license": "MIT" - }, - "node_modules/data-uri-to-buffer": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", - "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/dayjs": { - "version": "1.11.15", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.15.tgz", - "integrity": "sha512-MC+DfnSWiM9APs7fpiurHGCoeIx0Gdl6QZBy+5lu8MbYKN5FZEXqOgrundfibdfhGZ15o9hzmZ2xJjZnbvgKXQ==", - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "license": "MIT", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/degenerator": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", - "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", - "license": "MIT", - "dependencies": { - "ast-types": "^0.13.4", - "escodegen": "^2.1.0", - "esprima": "^4.0.1" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "license": "ISC" - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/diff3": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/diff3/-/diff3-0.0.4.tgz", - "integrity": "sha512-f1rQ7jXDn/3i37hdwRk9ohqcvLRH3+gEIgmA6qEM280WUOh7cOr3GXV8Jm5sPwUs46Nzl48SE8YNLGJoaLuodg==", - "license": "MIT" - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "license": "BSD-2-Clause", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter2": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-5.0.1.tgz", - "integrity": "sha512-5EM1GHXycJBS6mauYAbVKT1cVs7POKWb2NXD4Vyt8dDqeZa7LaDK1/sjtL+Zb0lzTpSNil4596Dyu97hz37QLg==", - "license": "MIT" - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "license": "MIT" - }, - "node_modules/execa": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-2.1.0.tgz", - "integrity": "sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw==", - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^3.0.0", - "onetime": "^5.1.0", - "p-finally": "^2.0.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": "^8.12.0 || >=9.7.0" - } - }, - "node_modules/express": { - "version": "4.22.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.22.0.tgz", - "integrity": "sha512-c2iPh3xp5vvCLgaHK03+mWLFPhox7j1LwyxcZwFVApEv5i0X+IjPpbT50SJJwwLpdBVfp45AkK/v+AFgv/XlfQ==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "~1.20.3", - "content-disposition": "~0.5.4", - "content-type": "~1.0.4", - "cookie": "~0.7.1", - "cookie-signature": "~1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.3.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "~0.1.12", - "proxy-addr": "~2.0.7", - "qs": "~6.14.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "~0.19.0", - "serve-static": "~1.16.2", - "setprototypeof": "1.2.0", - "statuses": "~2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/extrareqp2": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/extrareqp2/-/extrareqp2-1.0.0.tgz", - "integrity": "sha512-Gum0g1QYb6wpPJCVypWP3bbIuaibcFiJcpuPM10YSXp/tzqi84x9PJageob+eN4xVRIOto4wjSGNLyMD54D2xA==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.14.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-patch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz", - "integrity": "sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==", - "license": "MIT" - }, - "node_modules/fast-xml-parser": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.3.6.tgz", - "integrity": "sha512-QNI3sAvSvaOiaMl8FYU4trnEzCwiRr8XMWgAHzlrWpTSj+QaCSvOf1h82OEP1s4hiAXhnbXSyFWCf4ldZzZRVA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "dependencies": { - "strnum": "^2.1.2" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/fastq": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", - "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fclone": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fclone/-/fclone-1.0.11.tgz", - "integrity": "sha512-GDqVQezKzRABdeqflsgMr7ktzgF9CyS+p2oe0jJqUY6izSSbhPIQJDpoU4PtGcD7VPM9xh/dVrTu6z1nwgmEGw==", - "license": "MIT" - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", - "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", - "statuses": "~2.0.2", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-ext-extra-prebuilt": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/fs-ext-extra-prebuilt/-/fs-ext-extra-prebuilt-2.2.7.tgz", - "integrity": "sha512-Q7rayYRBDIvDF01HWOwSSjoaP+05N1g+o3BXL1Zf8Frw2JkjSmi4EtvCBITuW30l6hB2m2TW1pehdh8wyU/+gw==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "nan": "^2.24.0" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-uri": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", - "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", - "license": "MIT", - "dependencies": { - "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "^6.0.2", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/git-node-fs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/git-node-fs/-/git-node-fs-1.0.0.tgz", - "integrity": "sha512-bLQypt14llVXBg0S0u8q8HmU7g9p3ysH+NvVlae5vILuUvs759665HvmR5+wb04KjHyjFcDRxdYb4kyNnluMUQ==", - "license": "MIT" - }, - "node_modules/git-sha1": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/git-sha1/-/git-sha1-0.1.2.tgz", - "integrity": "sha512-2e/nZezdVlyCopOCYHeW0onkbZg7xP1Ad6pndPy1rCygeRykefUS6r7oA5cJRGEFvseiaz5a/qUHFVX1dd6Isg==", - "license": "MIT" - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globby": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", - "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", - "license": "MIT", - "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.3", - "ignore": "^7.0.3", - "path-type": "^6.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.3.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "license": "ISC" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "license": "MIT", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "license": "ISC" - }, - "node_modules/ip-address": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", - "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", - "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "license": "MIT", - "dependencies": { - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/js-git": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/js-git/-/js-git-0.7.8.tgz", - "integrity": "sha512-+E5ZH/HeRnoc/LW0AmAyhU+mNcWBzAKE+30+IDMLSLbbK+Tdt02AdkOKq9u15rlJsDEGFqtgckc8ZM59LhhiUA==", - "license": "MIT", - "dependencies": { - "bodec": "^0.1.0", - "culvert": "^0.1.2", - "git-sha1": "^0.1.2", - "pako": "^0.2.5" - } - }, - "node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "license": "ISC", - "optional": true - }, - "node_modules/jsonc-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", - "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonwebtoken": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", - "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==", - "license": "MIT", - "dependencies": { - "jws": "^4.0.1", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jwa": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", - "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", - "license": "MIT", - "dependencies": { - "buffer-equal-constant-time": "^1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", - "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", - "license": "MIT", - "dependencies": { - "jwa": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/lodash": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", - "license": "MIT" - }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", - "license": "MIT" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", - "license": "MIT" - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", - "license": "MIT" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "license": "MIT" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", - "license": "MIT" - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "license": "MIT" - }, - "node_modules/lru-cache": { - "name": "@wolfy1339/lru-cache", - "version": "11.0.2-patch.1", - "resolved": "https://registry.npmjs.org/@wolfy1339/lru-cache/-/lru-cache-11.0.2-patch.1.tgz", - "integrity": "sha512-BgYZfL2ADCXKOw2wJtkM3slhHotawWkgIRRxq4wEybnZQPjvAp71SPX35xepMykTw8gXlzWcWPTY31hlbnRsDA==", - "license": "ISC", - "engines": { - "node": "18 >=18.20 || 20 || >=22" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minimisted": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/minimisted/-/minimisted-2.0.1.tgz", - "integrity": "sha512-1oPjfuLQa2caorJUM8HV8lGgWCc0qqAO1MNv/k05G4qslmsndV/5WdNZrqCiyqiz3wohia2Ij2B7w2Dr7/IyrA==", - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/module-details-from-path": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.4.tgz", - "integrity": "sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==", - "license": "MIT" - }, - "node_modules/mount-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mount-point/-/mount-point-3.0.0.tgz", - "integrity": "sha512-jAhfD7ZCG+dbESZjcY1SdFVFqSJkh/yGbdsifHcPkvuLRO5ugK0Ssmd9jdATu29BTd4JiN+vkpMzVvsUgP3SZA==", - "license": "MIT", - "dependencies": { - "@sindresorhus/df": "^1.0.1", - "pify": "^2.3.0", - "pinkie-promise": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mount-point/node_modules/@sindresorhus/df": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@sindresorhus/df/-/df-1.0.1.tgz", - "integrity": "sha512-1Hyp7NQnD/u4DSxR2DGW78TF9k7R0wZ8ev0BpMAIzA6yTQSHqNb5wTuvtcPYf4FWbVse2rW7RgDsyL8ua2vXHw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/move-file": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/move-file/-/move-file-3.1.0.tgz", - "integrity": "sha512-4aE3U7CCBWgrQlQDMq8da4woBWDGHioJFiOZ8Ie6Yq2uwYQ9V2kGhTz4x3u6Wc+OU17nw0yc3rJ/lQ4jIiPe3A==", - "license": "MIT", - "dependencies": { - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "license": "ISC" - }, - "node_modules/nan": { - "version": "2.25.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.25.0.tgz", - "integrity": "sha512-0M90Ag7Xn5KMLLZ7zliPWP3rT90P6PN+IzVFS0VqmnPktBk3700xUVv8Ikm9EUaUE5SDWdp/BIxdENzVznpm1g==", - "license": "MIT" - }, - "node_modules/needle": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz", - "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", - "license": "MIT", - "dependencies": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } - }, - "node_modules/needle/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/netmask": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-3.1.0.tgz", - "integrity": "sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==", - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/octokit": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/octokit/-/octokit-3.1.2.tgz", - "integrity": "sha512-MG5qmrTL5y8KYwFgE1A4JWmgfQBaIETE/lOlfwNYx1QOtCQHGVxkRJmdUJltFc1HVn73d61TlMhMyNTOtMl+ng==", - "license": "MIT", - "dependencies": { - "@octokit/app": "^14.0.2", - "@octokit/core": "^5.0.0", - "@octokit/oauth-app": "^6.0.0", - "@octokit/plugin-paginate-graphql": "^4.0.0", - "@octokit/plugin-paginate-rest": "^9.0.0", - "@octokit/plugin-rest-endpoint-methods": "^10.0.0", - "@octokit/plugin-retry": "^6.0.0", - "@octokit/plugin-throttling": "^8.0.0", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-finally": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", - "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/p-map": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", - "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pac-proxy-agent": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", - "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", - "license": "MIT", - "dependencies": { - "@tootallnate/quickjs-emscripten": "^0.23.0", - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "get-uri": "^6.0.1", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.6", - "pac-resolver": "^7.0.1", - "socks-proxy-agent": "^8.0.5" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/pac-resolver": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", - "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", - "license": "MIT", - "dependencies": { - "degenerator": "^5.0.0", - "netmask": "^2.0.2" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", - "license": "MIT" - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "license": "MIT" - }, - "node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "license": "MIT" - }, - "node_modules/path-type": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", - "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pidusage": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pidusage/-/pidusage-3.0.2.tgz", - "integrity": "sha512-g0VU+y08pKw5M8EZ2rIGiEBaB8wrQMjYGFfW2QVIfyT8V+fq8YFLkvlz4bz5ljvFDJYNFCWT3PWqcRr2FKO81w==", - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "license": "MIT", - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pm2": { - "version": "6.0.14", - "resolved": "https://registry.npmjs.org/pm2/-/pm2-6.0.14.tgz", - "integrity": "sha512-wX1FiFkzuT2H/UUEA8QNXDAA9MMHDsK/3UHj6Dkd5U7kxyigKDA5gyDw78ycTQZAuGCLWyUX5FiXEuVQWafukA==", - "license": "AGPL-3.0", - "dependencies": { - "@pm2/agent": "~2.1.1", - "@pm2/blessed": "0.1.81", - "@pm2/io": "~6.1.0", - "@pm2/js-api": "~0.8.0", - "@pm2/pm2-version-check": "^1.0.4", - "ansis": "4.0.0-node10", - "async": "3.2.6", - "chokidar": "3.6.0", - "cli-tableau": "2.0.1", - "commander": "2.15.1", - "croner": "4.1.97", - "dayjs": "1.11.15", - "debug": "4.4.3", - "enquirer": "2.3.6", - "eventemitter2": "5.0.1", - "fclone": "1.0.11", - "js-yaml": "4.1.1", - "mkdirp": "1.0.4", - "needle": "2.4.0", - "pidusage": "3.0.2", - "pm2-axon": "~4.0.1", - "pm2-axon-rpc": "~0.7.1", - "pm2-deploy": "~1.0.2", - "pm2-multimeter": "^0.1.2", - "promptly": "2.2.0", - "semver": "7.7.2", - "source-map-support": "0.5.21", - "sprintf-js": "1.1.2", - "vizion": "~2.2.1" - }, - "bin": { - "pm2": "bin/pm2", - "pm2-dev": "bin/pm2-dev", - "pm2-docker": "bin/pm2-docker", - "pm2-runtime": "bin/pm2-runtime" - }, - "engines": { - "node": ">=16.0.0" - }, - "optionalDependencies": { - "pm2-sysmonit": "^1.2.8" - } - }, - "node_modules/pm2-axon": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pm2-axon/-/pm2-axon-4.0.1.tgz", - "integrity": "sha512-kES/PeSLS8orT8dR5jMlNl+Yu4Ty3nbvZRmaAtROuVm9nYYGiaoXqqKQqQYzWQzMYWUKHMQTvBlirjE5GIIxqg==", - "license": "MIT", - "dependencies": { - "amp": "~0.3.1", - "amp-message": "~0.1.1", - "debug": "^4.3.1", - "escape-string-regexp": "^4.0.0" - }, - "engines": { - "node": ">=5" - } - }, - "node_modules/pm2-axon-rpc": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/pm2-axon-rpc/-/pm2-axon-rpc-0.7.1.tgz", - "integrity": "sha512-FbLvW60w+vEyvMjP/xom2UPhUN/2bVpdtLfKJeYM3gwzYhoTEEChCOICfFzxkxuoEleOlnpjie+n1nue91bDQw==", - "license": "MIT", - "dependencies": { - "debug": "^4.3.1" - }, - "engines": { - "node": ">=5" - } - }, - "node_modules/pm2-deploy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pm2-deploy/-/pm2-deploy-1.0.2.tgz", - "integrity": "sha512-YJx6RXKrVrWaphEYf++EdOOx9EH18vM8RSZN/P1Y+NokTKqYAca/ejXwVLyiEpNju4HPZEk3Y2uZouwMqUlcgg==", - "license": "MIT", - "dependencies": { - "run-series": "^1.1.8", - "tv4": "^1.3.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/pm2-multimeter": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/pm2-multimeter/-/pm2-multimeter-0.1.2.tgz", - "integrity": "sha512-S+wT6XfyKfd7SJIBqRgOctGxaBzUOmVQzTAS+cg04TsEUObJVreha7lvCfX8zzGVr871XwCSnHUU7DQQ5xEsfA==", - "license": "MIT/X11", - "dependencies": { - "charm": "~0.1.1" - } - }, - "node_modules/pm2-sysmonit": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/pm2-sysmonit/-/pm2-sysmonit-1.2.8.tgz", - "integrity": "sha512-ACOhlONEXdCTVwKieBIQLSi2tQZ8eKinhcr9JpZSUAL8Qy0ajIgRtsLxG/lwPOW3JEKqPyw/UaHmTWhUzpP4kA==", - "license": "Apache", - "optional": true, - "dependencies": { - "async": "^3.2.0", - "debug": "^4.3.1", - "pidusage": "^2.0.21", - "systeminformation": "^5.7", - "tx2": "~1.0.4" - } - }, - "node_modules/pm2-sysmonit/node_modules/pidusage": { - "version": "2.0.21", - "resolved": "https://registry.npmjs.org/pidusage/-/pidusage-2.0.21.tgz", - "integrity": "sha512-cv3xAQos+pugVX+BfXpHsbyz/dLzX+lr44zNMsYiGxUw+kV5sgQCIcLd1z+0vq+KyC7dJ+/ts2PsfgWfSC3WXA==", - "license": "MIT", - "optional": true, - "dependencies": { - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/promptly": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/promptly/-/promptly-2.2.0.tgz", - "integrity": "sha512-aC9j+BZsRSSzEsXBNBwDnAxujdx19HycZoKgRgzWnS8eOHg1asuf9heuLprfbe739zY3IdUQx+Egv6Jn135WHA==", - "license": "MIT", - "dependencies": { - "read": "^1.0.4" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-agent": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", - "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", - "license": "MIT", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "^4.3.4", - "http-proxy-agent": "^7.0.1", - "https-proxy-agent": "^7.0.3", - "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.0.1", - "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.2" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/proxy-agent/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT" - }, - "node_modules/ps-man": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ps-man/-/ps-man-1.1.8.tgz", - "integrity": "sha512-ZKDPZwHLYVWIk/Q75N7jCFbuQyokSg2+3WBlt8l35S/uBvxoc+LiRUbb3RUt83pwW82dzwiCpoQIHd9PAxUzHg==", - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", - "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.14.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", - "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", - "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", - "license": "MIT", - "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", - "license": "ISC", - "dependencies": { - "mute-stream": "~0.0.4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-in-the-middle": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-5.2.0.tgz", - "integrity": "sha512-efCx3b+0Z69/LGJmm9Yvi4cqEdxnoGnxYxGxBghkkTTFeXRtTCmmhO0AnAfHz59k957uTSuy8WaHqOs8wbYUWg==", - "license": "MIT", - "dependencies": { - "debug": "^4.1.1", - "module-details-from-path": "^1.0.3", - "resolve": "^1.22.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/run-series": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-series/-/run-series-1.1.9.tgz", - "integrity": "sha512-Arc4hUN896vjkqCYrUXquBFtRZdv1PfLbTYP71efP6butxyQ0kWpiNJyAgsxscmQg1cqvHY32/UCBzXedTpU2g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/sax": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.3.tgz", - "integrity": "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==", - "license": "BlueOak-1.0.0" - }, - "node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", - "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.1", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "~2.4.1", - "range-parser": "~1.2.1", - "statuses": "~2.0.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/serve-static": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", - "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", - "license": "MIT", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "~0.19.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, - "node_modules/sha.js": { - "version": "2.4.12", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", - "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", - "license": "(MIT AND BSD-3-Clause)", - "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1", - "to-buffer": "^1.2.0" - }, - "bin": { - "sha.js": "bin.js" - }, - "engines": { - "node": ">= 0.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/shimmer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", - "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==", - "license": "BSD-2-Clause" - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "license": "MIT", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", - "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", - "license": "MIT", - "dependencies": { - "ip-address": "^10.0.1", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", - "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "socks": "^2.8.3" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "license": "BSD-3-Clause" - }, - "node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/strnum": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.2.tgz", - "integrity": "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT" - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/systeminformation": { - "version": "5.27.14", - "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.27.14.tgz", - "integrity": "sha512-3DoNDYSZBLxBwaJtQGWNpq0fonga/VZ47HY1+7/G3YoIPaPz93Df6egSzzTKbEMmlzUpy3eQ0nR9REuYIycXGg==", - "license": "MIT", - "optional": true, - "os": [ - "darwin", - "linux", - "win32", - "freebsd", - "openbsd", - "netbsd", - "sunos", - "android" - ], - "bin": { - "systeminformation": "lib/cli.js" - }, - "engines": { - "node": ">=8.0.0" - }, - "funding": { - "type": "Buy me a coffee", - "url": "https://www.buymeacoffee.com/systeminfo" - } - }, - "node_modules/tmp": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", - "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", - "license": "MIT", - "engines": { - "node": ">=14.14" - } - }, - "node_modules/tmp-promise": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", - "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", - "license": "MIT", - "dependencies": { - "tmp": "^0.2.0" - } - }, - "node_modules/to-buffer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", - "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", - "license": "MIT", - "dependencies": { - "isarray": "^2.0.5", - "safe-buffer": "^5.2.1", - "typed-array-buffer": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/trash": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/trash/-/trash-10.0.1.tgz", - "integrity": "sha512-WSh7WXBRkudzQMXRh61vyT/f3mjVnn+3conu5DdvMGzRPsc3mtviPLIwCK1OtwfgR2gr4+9+EE/eWwPlDj5NcA==", - "license": "MIT", - "dependencies": { - "@stroncium/procfs": "^1.2.1", - "chunkify": "^5.0.0", - "globby": "^14.1.0", - "is-path-inside": "^4.0.0", - "move-file": "^3.1.0", - "p-map": "^7.0.3", - "xdg-trashdir": "^3.1.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", - "license": "Apache-2.0" - }, - "node_modules/tv4": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/tv4/-/tv4-1.3.0.tgz", - "integrity": "sha512-afizzfpJgvPr+eDkREK4MxJ/+r8nEEHcmitwgnPUqpaP+FpwQyadnxNoSACbgc/b1LsZYtODGoPiFxQrgJgjvw==", - "license": [ - { - "type": "Public Domain", - "url": "http://geraintluff.github.io/tv4/LICENSE.txt" - }, - { - "type": "MIT", - "url": "http://jsonary.com/LICENSE.txt" - } - ], - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/tx2": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tx2/-/tx2-1.0.5.tgz", - "integrity": "sha512-sJ24w0y03Md/bxzK4FU8J8JveYYUbSs2FViLJ2D/8bytSiyPRbuE3DyL/9UKYXTZlV3yXq0L8GLlhobTnekCVg==", - "license": "MIT", - "optional": true, - "dependencies": { - "json-stringify-safe": "^5.0.1" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", - "license": "MIT" - }, - "node_modules/unicorn-magic": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", - "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/universal-github-app-jwt": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-1.2.0.tgz", - "integrity": "sha512-dncpMpnsKBk0eetwfN8D8OUHGfiDhhJ+mtsbMl+7PfW7mYjiH8LIcqRmYMtzYLgSh47HjfdBtrBwIQ/gizKR3g==", - "license": "MIT", - "dependencies": { - "@types/jsonwebtoken": "^9.0.0", - "jsonwebtoken": "^9.0.2" - } - }, - "node_modules/universal-user-agent": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", - "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", - "license": "ISC" - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/user-home": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", - "integrity": "sha512-KMWqdlOcjCYdtIJpicDSFBQ8nFwS2i9sslAd6f4+CBGcU4gist2REnr2fxj2YocvJFxSF3ZOHLYLVZnUxv4BZQ==", - "license": "MIT", - "dependencies": { - "os-homedir": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vizion": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vizion/-/vizion-2.2.1.tgz", - "integrity": "sha512-sfAcO2yeSU0CSPFI/DmZp3FsFE9T+8913nv1xWBOyzODv13fwkn6Vl7HqxGpkr9F608M+8SuFId3s+BlZqfXww==", - "license": "Apache-2.0", - "dependencies": { - "async": "^2.6.3", - "git-node-fs": "^1.0.0", - "ini": "^1.3.5", - "js-git": "^0.7.8" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/vizion/node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/wasm-feature-detect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/wasm-feature-detect/-/wasm-feature-detect-1.8.0.tgz", - "integrity": "sha512-zksaLKM2fVlnB5jQQDqKXXwYHLQUVH9es+5TOOHwGOVJOCeRBCiPjwSg+3tN2AdTCzjgli4jijCH290kXb/zWQ==", - "license": "Apache-2.0" - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "for-each": "^0.3.5", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" - }, - "node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "license": "MIT", - "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 - } - } - }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/xdg-trashdir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/xdg-trashdir/-/xdg-trashdir-3.1.0.tgz", - "integrity": "sha512-N1XQngeqMBoj9wM4ZFadVV2MymImeiFfYD+fJrNlcVcOHsJFFQe7n3b+aBoTPwARuq2HQxukfzVpQmAk1gN4sQ==", - "license": "MIT", - "dependencies": { - "@sindresorhus/df": "^3.1.1", - "mount-point": "^3.0.0", - "user-home": "^2.0.0", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/xml2js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", - "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", - "license": "MIT", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "license": "MIT", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "license": "ISC", - "engines": { - "node": ">=12" - } - } - } -} diff --git a/cli/package.json b/cli/package.json deleted file mode 100644 index a6fe66f9e6..0000000000 --- a/cli/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "studio-cli", - "author": "Automattic Inc.", - "private": true, - "productName": "Studio CLI", - "description": "WordPress Studio CLI", - "license": "GPL-2.0-or-later", - "main": "index.js", - "dependencies": { - "@php-wasm/universal": "^3.1.1", - "@wp-playground/blueprints": "^3.1.1", - "@wp-playground/cli": "^3.1.1", - "@wp-playground/common": "^3.1.1", - "@wp-playground/storage": "^3.1.1", - "http-proxy": "^1.18.1", - "pm2": "^6.0.14", - "pm2-axon": "^4.0.1", - "trash": "^10.0.1" - }, - "scripts": { - "postinstall": "patch-package" - } -} diff --git a/cli/patches/@wp-playground+wordpress+3.0.53.patch b/cli/patches/@wp-playground+wordpress+3.0.53.patch deleted file mode 100644 index 172f90bc5b..0000000000 --- a/cli/patches/@wp-playground+wordpress+3.0.53.patch +++ /dev/null @@ -1,25 +0,0 @@ -diff --git a/node_modules/@wp-playground/wordpress/index.cjs b/node_modules/@wp-playground/wordpress/index.cjs -index 9c468e3..3e5ab08 100644 ---- a/node_modules/@wp-playground/wordpress/index.cjs -+++ b/node_modules/@wp-playground/wordpress/index.cjs -@@ -352,7 +352,7 @@ function skip_whitespace($tokens) { - ob_clean(); - echo false === $return_value ? '0' : '1'; - ob_end_flush(); -- `})).text!=="1")throw new Error("Failed to rewrite constants in wp-config.php.")}async function $(e,n){const t=a.joinPaths(n,"wp-config.php"),i={DB_NAME:"wordpress"};!e.fileExists(t)&&e.fileExists(a.joinPaths(n,"wp-config-sample.php"))&&await e.writeFile(t,await e.readFileAsBuffer(a.joinPaths(n,"wp-config-sample.php"))),await g(e,t,i,"skip")}async function I(e){const n=await m(e);return await w(n,e),n}async function w(e,n){var d,s;const t=await e.getPrimaryPhp();if((d=n.hooks)!=null&&d.beforeWordPressFiles&&await n.hooks.beforeWordPressFiles(t),n.wordPressZip&&await S(t,await n.wordPressZip),n.constants)for(const l in n.constants)t.defineConstant(l,n.constants[l]);n.dataSqlPath&&(t.defineConstant("DB_DIR",a.dirname(n.dataSqlPath)),t.defineConstant("DB_FILE",a.basename(n.dataSqlPath))),t.defineConstant("WP_HOME",n.siteUrl),t.defineConstant("WP_SITEURL",n.siteUrl),await $(t,e.documentRoot),(s=n.hooks)!=null&&s.beforeDatabaseSetup&&await n.hooks.beforeDatabaseSetup(t);let i=!1;n.sqliteIntegrationPluginZip&&(i=!0,await T(t,await n.sqliteIntegrationPluginZip));const r=n.wordpressInstallMode??"download-and-install",o=!!n.dataSqlPath;if(["download-and-install","install-from-existing-files"].includes(r)){await f(e,{usesSqlite:i,hasCustomDatabasePath:o});try{await _(t)}catch(l){throw o||await p(e),l}o||await p(e)}else if(r==="install-from-existing-files-if-needed"){if(await f(e,{usesSqlite:i,hasCustomDatabasePath:o}),!await b(t))try{await _(t)}catch(l){throw o||await p(e),l}o||await p(e)}return e}async function f(e,{usesSqlite:n,hasCustomDatabasePath:t}){const i=await e.getPrimaryPhp();if(i.isFile("/internal/shared/preload/0-sqlite.php"))return;const r=a.joinPaths(e.documentRoot,"wp-content/mu-plugins/sqlite-database-integration");if(!i.isDir(r)&&!n&&!t)throw new Error("Error connecting to the MySQL database.")}async function p(e){const n=await e.getPrimaryPhp();if(await L(n))return;if(n.isFile("/internal/shared/preload/0-sqlite.php"))throw new Error("Error connecting to the SQLite database.");const i=a.joinPaths(e.documentRoot,"wp-content/mu-plugins/sqlite-database-integration");throw n.isDir(i)?new Error("Error connecting to the SQLite database."):new Error("Error connecting to the MySQL database.")}async function m(e){const n=e.spawnHandler??u.sandboxedSpawnHandlerFactory;async function t(r,o=!1){const d=await e.createPhpRuntime(o),s=new u.PHP(d);if(e.sapiName&&s.setSapiName(e.sapiName),r&&(s.requestHandler=r),e.phpIniEntries&&u.setPhpIniEntries(s,e.phpIniEntries),s.defineConstant("WP_SQLITE_AST_DRIVER",!0),e.constants)for(const l in e.constants)s.defineConstant(l,e.constants[l]);return o&&!s.isFile("/internal/.boot-files-written")&&(await E(s),await u.writeFiles(s,"/",e.createFiles||{}),await R(s,a.joinPaths(new URL(e.siteUrl).pathname,"phpinfo.php")),await u.writeFiles(s,"/internal",{".boot-files-written":""})),n&&await s.setSpawnHandler(n(r?()=>r.instanceManager.acquirePHPInstance():void 0)),s.enableRuntimeRotation({recreateRuntime:e.createPhpRuntime,maxRequests:400}),e.onPHPInstanceCreated&&await e.onPHPInstanceCreated(s,{isPrimary:o}),s}const i=new u.PHPRequestHandler({documentRoot:e.documentRoot||"/wordpress",absoluteUrl:e.siteUrl,rewriteRules:k,pathAliases:e.pathAliases,getFileNotFoundAction:e.getFileNotFoundAction??P,cookieStore:e.cookieStore,php:e.maxPhpInstances===1?await t(void 0,!0):void 0,phpFactory:e.maxPhpInstances!==1?async({isPrimary:r})=>t(i,r):void 0,maxPhpInstances:e.maxPhpInstances});return i}async function b(e){return(await e.run({code:`r.instanceManager.acquirePHPInstance():void 0)),s.enableRuntimeRotation({recreateRuntime:e.createPhpRuntime,maxRequests:400}),e.onPHPInstanceCreated&&await e.onPHPInstanceCreated(s,{isPrimary:o}),s}const i=new u.PHPRequestHandler({documentRoot:e.documentRoot||"/wordpress",absoluteUrl:e.siteUrl,rewriteRules:k,pathAliases:e.pathAliases,getFileNotFoundAction:e.getFileNotFoundAction??P,cookieStore:e.cookieStore,php:e.maxPhpInstances===1?await t(void 0,!0):void 0,phpFactory:e.maxPhpInstances!==1?async({isPrimary:r})=>t(i,r):void 0,maxPhpInstances:e.maxPhpInstances});return i}async function b(e){return(await e.run({code:`"` in separate terminal session. @@ -198,6 +204,7 @@ npm run package After building, the executable will be located at `out/Studio-linux-x64/studio`. **Important considerations:** + - The auto-update feature is not currently supported on Linux builds. - For Wayland systems, you may need to use additional flags when running the application. - Some features may not work as expected due to platform-specific implementations. @@ -214,6 +221,6 @@ See [Versioning and Updates](./versioning-and-updates.md) documentation. ## Design Docs - - [Custom Domains and SSL](./design-docs/custom-domains-and-ssl.md) - - [What's New modal](./design-docs/whats-new-modal.md) - - [Sync](./design-docs/sync.md) +- [Custom Domains and SSL](./design-docs/custom-domains-and-ssl.md) +- [What's New modal](./design-docs/whats-new-modal.md) +- [Sync](./design-docs/sync.md) diff --git a/docs/design-docs/cli.md b/docs/design-docs/cli.md index ba41ad5960..fd1a82f8ae 100644 --- a/docs/design-docs/cli.md +++ b/docs/design-docs/cli.md @@ -19,20 +19,22 @@ The first iteration of the CLI shipped commands to create, read, update, and del ## Data flow 1. When calling the CLI: - - `yargs` is used to parse commands and options and to auto-generate help pages. - - The appropriate command is called. - - Progress is pretty-printed and the command runs until completion or failure. + + - `yargs` is used to parse commands and options and to auto-generate help pages. + - The appropriate command is called. + - Progress is pretty-printed and the command runs until completion or failure. 2. When Studio instantiates the CLI: - - The node.js `child_process` module is used to fork a process that runs the CLI. - - When running in forked mode, the CLI process uses the `process.send` API to communicate back to Studio. - - IPC messages received from the CLI are parsed and validated. The results are emitted as Electron IPC events to the renderer process. - - The renderer process uses "logger action" definitions from the `common` folder to determine command progress based on incoming IPC events. + + - The node.js `child_process` module is used to fork a process that runs the CLI. + - When running in forked mode, the CLI process uses the `process.send` API to communicate back to Studio. + - IPC messages received from the CLI are parsed and validated. The results are emitted as Electron IPC events to the renderer process. + - The renderer process uses "logger action" definitions from the `common` folder to determine command progress based on incoming IPC events. 3. Studio reacts when the CLI modifies preview sites: - - `src/lib/user-data-watcher.ts` watches the Studio config file and emits `user-data-updated` IPC renderer events. - - State handlers (primarily Redux slices) listen to `user-data-updated` events and update the state accordingly. - - Because state changes trigger writes to the Studio config file, event handlers have to first run a deep diff on the incoming payload to ensure that the data has truly changed. Without this, there'd be infinite watch/write loops. + - `src/lib/user-data-watcher.ts` watches the Studio config file and emits `user-data-updated` IPC renderer events. + - State handlers (primarily Redux slices) listen to `user-data-updated` events and update the state accordingly. + - Because state changes trigger writes to the Studio config file, event handlers have to first run a deep diff on the incoming payload to ensure that the data has truly changed. Without this, there'd be infinite watch/write loops. ## Implementation details diff --git a/docs/testing-with-local-playground.md b/docs/testing-with-local-playground.md index 0b0ecbfc65..1749428dea 100644 --- a/docs/testing-with-local-playground.md +++ b/docs/testing-with-local-playground.md @@ -33,7 +33,7 @@ npm run build ### 2. Update CLI's package.json -Replace the existing Playground dependencies in `cli/package.json` with local file references: +Replace the existing Playground dependencies in `apps/cli/package.json` with local file references: ```json { @@ -73,8 +73,8 @@ done ```bash cd /path/to/studio -rm -rf cli/node_modules -cd cli && npm install && cd .. +rm -rf apps/cli/node_modules +npm --prefix apps/cli install npm install ``` @@ -115,14 +115,14 @@ After making changes to Playground: To go back to using the published npm packages: -1. Restore `cli/package.json`: +1. Restore `apps/cli/package.json`: ```bash - git checkout cli/package.json + git checkout apps/cli/package.json ``` 2. Reinstall CLI dependencies: ```bash - rm -rf cli/node_modules - cd cli && npm install && cd .. + rm -rf apps/cli/node_modules + npm --prefix apps/cli install ``` 3. In the Playground repo, restore the original `node_modules` symlinks: ```bash diff --git a/eslint.config.mjs b/eslint.config.mjs index f7f9699084..65df187f4c 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -12,12 +12,12 @@ import path from 'node:path'; export default defineConfig( globalIgnores( [ '**/node_modules/', + '**/__mocks__', + 'apps/cli/dist/', 'dist/', 'out/', - 'wp-files/', 'vendor/', - 'cli/__mocks__', - 'src/__mocks__', + 'wp-files/', ] ), js.configs.recommended, tsEslint.configs.recommended, @@ -45,7 +45,12 @@ export default defineConfig( 'import/resolver': { typescript: { alwaysTryTypes: true, - project: path.join( import.meta.dirname, 'tsconfig.json' ), + project: [ + path.join( import.meta.dirname, 'tsconfig.json' ), + path.join( import.meta.dirname, 'apps/cli/tsconfig.json' ), + path.join( import.meta.dirname, 'apps/studio/tsconfig.json' ), + path.join( import.meta.dirname, 'tools/common/tsconfig.json' ), + ], }, }, }, diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 706c207648..05796bf74e 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -12,7 +12,7 @@ UI.user_error!('Please run fastlane via `bundle exec`') unless FastlaneCore::Hel ######################################################################## PROJECT_ROOT_FOLDER = File.dirname(File.expand_path(__dir__)) SECRETS_FOLDER = File.join(Dir.home, '.configure', 'studio', 'secrets') -BUILDS_FOLDER = File.join(PROJECT_ROOT_FOLDER, 'out') +BUILDS_FOLDER = File.join(PROJECT_ROOT_FOLDER, 'apps', 'studio', 'out') # Enable dry run mode through environment variable DRY_RUN = ENV['DRY_RUN'] == 'true' diff --git a/package-lock.json b/package-lock.json index 0d9dff52b7..c0692175ce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,14 +1,87 @@ { "name": "studio", - "version": "1.7.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "studio", - "version": "1.7.4", "hasInstallScript": true, "license": "GPL-2.0-or-later", + "workspaces": [ + "apps/*", + "tools/*" + ], + "devDependencies": { + "@automattic/wp-babel-makepot": "^1.2.0", + "@eslint/js": "^9.39.2", + "@playwright/test": "^1.58.2", + "@testing-library/jest-dom": "^6.9.1", + "@testing-library/react": "^16.3.2", + "@testing-library/user-event": "^14.6.1", + "@types/fs-extra": "^11.0.4", + "@vitest/ui": "^4.0.18", + "@yao-pkg/pkg": "^6.13.1", + "electron-playwright-helpers": "^2.1.0", + "eslint": "^9.39.2", + "eslint-config-prettier": "^9.1.2", + "eslint-import-resolver-typescript": "^4.4.4", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jest-dom": "^5.5.0", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-react-hooks": "^7.0.1", + "eslint-plugin-studio": "file:tools/eslint-plugin-studio", + "fs-extra": "^11.3.3", + "isomorphic-fetch": "^3.0.0", + "jsdom": "^24.0.0", + "nock": "^13.5.6", + "patch-package": "^8.0.1", + "prettier": "npm:wp-prettier@3.0.3", + "rimraf": "^6.1.2", + "ts-node": "^10.9.2", + "typescript": "~5.9.3", + "typescript-eslint": "^8.53.0", + "vitest": "^4.0.18", + "web-streams-polyfill": "^4.2.0" + }, + "engines": { + "node": ">=22.0.0", + "npm": ">=10.0.0" + } + }, + "apps/cli": { + "name": "studio-cli", + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/universal": "3.1.1", + "@studio/common": "file:../../tools/common", + "@vscode/sudo-prompt": "^9.3.2", + "@wp-playground/blueprints": "3.1.1", + "@wp-playground/cli": "3.1.1", + "@wp-playground/common": "3.1.1", + "@wp-playground/storage": "3.1.1", + "cli-table3": "^0.6.5", + "http-proxy": "^1.18.1", + "node-forge": "^1.3.3", + "pm2": "^6.0.14", + "pm2-axon": "^4.0.1", + "trash": "^10.0.1", + "yargs": "^18.0.0", + "yargs-parser": "^22.0.0" + }, + "devDependencies": { + "@types/archiver": "^6.0.4", + "@types/http-proxy": "^1.17.17", + "@types/node-forge": "^1.3.14", + "@types/yargs": "^17.0.35", + "patch-package": "^8.0.1", + "vite": "^7.3.1", + "vite-plugin-static-copy": "^3.1.5" + } + }, + "apps/studio": { + "name": "studio-app", + "version": "1.7.4", + "license": "GPL-2.0-or-later", "dependencies": { "@automattic/generate-password": "^0.1.0", "@automattic/interpolate-components": "^1.2.1", @@ -18,11 +91,16 @@ "@reduxjs/toolkit": "^2.11.2", "@rive-app/react-canvas": "^4.12.0", "@sentry/electron": "^6.5.0", - "@vscode/sudo-prompt": "^9.3.2", + "@sentry/react": "^7.120.3", + "@studio/common": "file:../../tools/common", + "@vscode/sudo-prompt": "^9.3.1", + "@wordpress/components": "32.1.0", "@wordpress/compose": "^7.36.0", "@wordpress/dataviews": "^11.3.0", + "@wordpress/element": "^6.39.0", "@wordpress/i18n": "^6.9.0", "@wordpress/icons": "^11.4.0", + "@wordpress/react-i18n": "^4.39.0", "archiver": "^6.0.2", "atomically": "^2.1.0", "cli-table3": "^0.6.5", @@ -32,8 +110,7 @@ "date-fns": "^3.3.1", "electron-squirrel-startup": "^1.0.1", "electron2appx": "^2.1.2", - "eslint-config-prettier": "^10.1.8", - "express": "4.21.2", + "express": "4.22.1", "fast-deep-equal": "^3.1.3", "file-stream-rotator": "^1.0.0", "follow-redirects": "^1.15.11", @@ -41,21 +118,20 @@ "hpagent": "1.2.0", "http-proxy": "^1.18.1", "lockfile": "^1.0.4", - "node-forge": "^1.3.3", "ora": "^8.2.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", "react-markdown": "^9.0.1", "react-redux": "^9.2.0", "rehype-raw": "^7.0.0", "remark-gfm": "^4.0.1", + "resize-observer-polyfill": "^1.5.1", "semver": "^7.7.3", "shell-quote": "^1.8.3", "strip-ansi": "^7.1.2", - "tar": "^7.5.8", - "ts-node": "^10.9.2", + "tar": "^7.5.9", "tus-js-client": "^4.3.1", "winreg": "1.2.4", - "wpcom": "^7.1.1", - "wpcom-xhr-request": "^1.3.0", "yargs": "^18.0.0", "yargs-parser": "^22.0.0", "yauzl": "^3.2.0", @@ -63,74 +139,35 @@ }, "devDependencies": { "@automattic/color-studio": "^4.1.0", - "@automattic/wp-babel-makepot": "^1.2.0", "@electron-forge/cli": "^7.11.1", "@electron-forge/maker-deb": "^7.11.1", "@electron-forge/maker-dmg": "^7.11.1", "@electron-forge/maker-squirrel": "^7.11.1", "@electron-forge/maker-zip": "^7.11.1", "@electron-forge/plugin-auto-unpack-natives": "^7.11.1", - "@eslint/js": "^9.39.2", - "@playwright/test": "^1.58.2", - "@sentry/react": "^7.120.3", "@sentry/vite-plugin": "^4.3.0", - "@testing-library/jest-dom": "^6.9.1", - "@testing-library/react": "^16.3.2", - "@testing-library/user-event": "^14.6.1", "@types/archiver": "^6.0.4", "@types/follow-redirects": "^1.14.4", "@types/fs-extra": "^11.0.4", "@types/http-proxy": "^1.17.17", - "@types/lockfile": "^1.0.4", - "@types/node-forge": "^1.3.14", "@types/react": "^18.3.27", "@types/react-dom": "^18.3.7", "@types/semver": "^7.7.1", "@types/shell-quote": "^1.7.5", "@types/winreg": "^1.2.36", - "@types/yargs": "^17.0.35", "@types/yauzl": "^2.10.3", "@vitejs/plugin-react": "^5.1.4", - "@vitest/ui": "^4.0.18", - "@wordpress/components": "^32.1.0", - "@wordpress/element": "^6.39.0", - "@wordpress/react-i18n": "^4.39.0", - "@wp-playground/blueprints": "^3.1.1", - "@yao-pkg/pkg": "^6.3.2", + "@wp-playground/blueprints": "3.1.1", "electron": "^40.4.1", "electron-devtools-installer": "^4.0.0", - "electron-playwright-helpers": "^2.1.0", "electron-vite": "^5.0.0", - "eslint": "^9.39.2", - "eslint-import-resolver-typescript": "^4.4.4", - "eslint-plugin-import": "^2.32.0", - "eslint-plugin-jest-dom": "^5.5.0", - "eslint-plugin-prettier": "^5.5.4", - "eslint-plugin-react-hooks": "^7.0.1", - "eslint-plugin-studio": "file:packages/eslint-plugin-studio", - "isomorphic-fetch": "^3.0.0", - "jsdom": "^24.0.0", - "nock": "^13.5.6", - "patch-package": "^8.0.0", + "patch-package": "^8.0.1", "postcss": "^8.4.32", - "prettier": "npm:wp-prettier@3.0.3", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "resize-observer-polyfill": "^1.5.1", - "rimraf": "^6.1.2", "tailwindcss": "^3.3.6", - "typescript": "~5.9.3", - "typescript-eslint": "^8.53.0", "vite": "^7.3.1", "vite-plugin-static-copy": "^3.1.5", "vite-plugin-top-level-await": "^1.6.0", - "vite-plugin-wasm": "^3.5.0", - "vitest": "^4.0.18", - "web-streams-polyfill": "^4.2.0" - }, - "engines": { - "node": ">=22.0.0", - "npm": ">=10.0.0" + "vite-plugin-wasm": "^3.5.0" }, "optionalDependencies": { "@rollup/rollup-linux-x64-gnu": "^4.50.2", @@ -138,306 +175,693 @@ "appdmg": "^0.6.6" } }, - "node_modules/@adobe/css-tools": { - "version": "4.4.4", + "apps/studio/node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/@alloc/quick-lru": { - "version": "5.2.0", + "apps/studio/node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", "dev": true, "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6.9.0" } }, - "node_modules/@ariakit/core": { - "version": "0.4.15", - "license": "MIT" - }, - "node_modules/@ariakit/react": { - "version": "0.4.17", + "apps/studio/node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, "license": "MIT", "dependencies": { - "@ariakit/react-core": "0.4.17" + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/ariakit" - }, - "peerDependencies": { - "react": "^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + "url": "https://opencollective.com/babel" } }, - "node_modules/@ariakit/react-core": { - "version": "0.4.17", + "apps/studio/node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "apps/studio/node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, "license": "MIT", "dependencies": { - "@ariakit/core": "0.4.15", - "@floating-ui/dom": "^1.0.0", - "use-sync-external-store": "^1.2.0" + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" }, - "peerDependencies": { - "react": "^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@asamuzakjp/css-color": { - "version": "3.2.0", + "apps/studio/node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "dev": true, "license": "MIT", "dependencies": { - "@csstools/css-calc": "^2.1.3", - "@csstools/css-color-parser": "^3.0.9", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "lru-cache": "^10.4.3" + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { - "version": "10.4.3", + "apps/studio/node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "license": "ISC" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } }, - "node_modules/@automattic/babel-plugin-i18n-calypso": { - "version": "1.2.0", + "apps/studio/node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", "dev": true, - "license": "GPL-2.0-or-later", + "license": "MIT", "dependencies": { - "gettext-parser": "^4.0.3", - "lodash": "^4.17.15" + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@automattic/babel-plugin-i18n-calypso/node_modules/gettext-parser": { - "version": "4.2.0", + "apps/studio/node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", "dev": true, "license": "MIT", "dependencies": { - "content-type": "^1.0.4", - "encoding": "^0.1.13", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.1" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "node_modules/@automattic/babel-plugin-i18n-calypso/node_modules/safe-buffer": { - "version": "5.2.1", + "apps/studio/node_modules/@babel/helpers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/@automattic/color-studio": { - "version": "4.1.0", - "dev": true, - "license": "SEE LICENSE IN LICENSE.md" - }, - "node_modules/@automattic/generate-password": { - "version": "0.1.0", - "license": "GPL-2.0-or-later" - }, - "node_modules/@automattic/interpolate-components": { - "version": "1.2.1", - "license": "GPL-2.0-or-later", - "peerDependencies": { - "@types/react": ">=16.14.23", - "react": ">=16.2.0" + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@automattic/wp-babel-makepot": { - "version": "1.2.0", + "apps/studio/node_modules/@babel/parser": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", "dev": true, - "license": "GPL-2.0-or-later", + "license": "MIT", "dependencies": { - "@automattic/babel-plugin-i18n-calypso": "^1.2.0", - "@babel/cli": "^7.23.4", - "@babel/core": "^7.23.7", - "@babel/plugin-proposal-decorators": "^7.23.7", - "@babel/preset-env": "^7.23.8", - "@babel/preset-react": "^7.23.3", - "@babel/preset-typescript": "^7.23.3", - "commander": "^5.1.0", - "gettext-parser": "^4.0.3", - "glob": "^7.1.6", - "lodash.mergewith": "^4.6.2" + "@babel/types": "^7.29.0" }, "bin": { - "wp-babel-makepot": "cli.js" + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@automattic/wp-babel-makepot/node_modules/commander": { - "version": "5.1.0", + "apps/studio/node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, "engines": { - "node": ">= 6" + "node": ">=6.9.0" } }, - "node_modules/@automattic/wp-babel-makepot/node_modules/gettext-parser": { - "version": "4.2.0", + "apps/studio/node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", "dev": true, "license": "MIT", "dependencies": { - "content-type": "^1.0.4", - "encoding": "^0.1.13", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.1" + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@automattic/wp-babel-makepot/node_modules/safe-buffer": { - "version": "5.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/@babel/cli": { - "version": "7.27.2", + "apps/studio/node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "commander": "^6.2.0", - "convert-source-map": "^2.0.0", - "fs-readdir-recursive": "^1.1.0", - "glob": "^7.2.0", - "make-dir": "^2.1.0", - "slash": "^2.0.0" - }, - "bin": { - "babel": "bin/babel.js", - "babel-external-helpers": "bin/babel-external-helpers.js" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { "node": ">=6.9.0" - }, - "optionalDependencies": { - "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3", - "chokidar": "^3.6.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/cli/node_modules/commander": { - "version": "6.2.1", + "apps/studio/node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.3", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.3.tgz", + "integrity": "sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } + "license": "MIT" }, - "node_modules/@babel/cli/node_modules/make-dir": { - "version": "2.1.0", + "apps/studio/node_modules/@vitejs/plugin-react": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.4.tgz", + "integrity": "sha512-VIcFLdRi/VYRU8OL/puL7QXMYafHmqOnwTZY50U1JPlCNj30PxCMx65c494b1K9be9hX83KVt0+gTEwTWLqToA==", "dev": true, "license": "MIT", "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" + "@babel/core": "^7.29.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-rc.3", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.18.0" }, "engines": { - "node": ">=6" + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, - "node_modules/@babel/cli/node_modules/pify": { - "version": "4.0.1", - "dev": true, - "license": "MIT", + "apps/studio/node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/cli/node_modules/semver": { - "version": "5.7.2", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "node": ">=18" } }, - "node_modules/@babel/cli/node_modules/slash": { + "apps/studio/node_modules/encodeurl": { "version": "2.0.0", - "dev": true, + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 0.8" } }, - "node_modules/@babel/code-frame": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", - "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "apps/studio/node_modules/express": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.12", + "proxy-addr": "~2.0.7", + "qs": "~6.14.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "engines": { - "node": ">=6.9.0" + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/@babel/compat-data": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", - "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", - "dev": true, + "apps/studio/node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "apps/studio/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "engines": { - "node": ">=6.9.0" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/@babel/core": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", - "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", - "dev": true, + "apps/studio/node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-compilation-targets": "^7.28.6", - "@babel/helper-module-transforms": "^7.28.6", - "@babel/helpers": "^7.28.6", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/traverse": "^7.29.0", - "@babel/types": "^7.29.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "apps/studio/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "apps/studio/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "apps/studio/node_modules/tar": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.9.tgz", + "integrity": "sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "apps/studio/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.4.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ariakit/core": { + "version": "0.4.15", + "license": "MIT" + }, + "node_modules/@ariakit/react": { + "version": "0.4.17", + "license": "MIT", + "dependencies": { + "@ariakit/react-core": "0.4.17" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ariakit" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@ariakit/react-core": { + "version": "0.4.17", + "license": "MIT", + "dependencies": { + "@ariakit/core": "0.4.15", + "@floating-ui/dom": "^1.0.0", + "use-sync-external-store": "^1.2.0" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@asamuzakjp/css-color": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.3", + "@csstools/css-color-parser": "^3.0.9", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^10.4.3" + } + }, + "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { + "version": "10.4.3", + "dev": true, + "license": "ISC" + }, + "node_modules/@automattic/babel-plugin-i18n-calypso": { + "version": "1.2.0", + "dev": true, + "license": "GPL-2.0-or-later", + "dependencies": { + "gettext-parser": "^4.0.3", + "lodash": "^4.17.15" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@automattic/babel-plugin-i18n-calypso/node_modules/gettext-parser": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "content-type": "^1.0.4", + "encoding": "^0.1.13", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.1" + } + }, + "node_modules/@automattic/babel-plugin-i18n-calypso/node_modules/safe-buffer": { + "version": "5.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/@automattic/color-studio": { + "version": "4.1.0", + "dev": true, + "license": "SEE LICENSE IN LICENSE.md" + }, + "node_modules/@automattic/generate-password": { + "version": "0.1.0", + "license": "GPL-2.0-or-later" + }, + "node_modules/@automattic/interpolate-components": { + "version": "1.2.1", + "license": "GPL-2.0-or-later", + "peerDependencies": { + "@types/react": ">=16.14.23", + "react": ">=16.2.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@automattic/wp-babel-makepot": { + "version": "1.2.0", + "dev": true, + "license": "GPL-2.0-or-later", + "dependencies": { + "@automattic/babel-plugin-i18n-calypso": "^1.2.0", + "@babel/cli": "^7.23.4", + "@babel/core": "^7.23.7", + "@babel/plugin-proposal-decorators": "^7.23.7", + "@babel/preset-env": "^7.23.8", + "@babel/preset-react": "^7.23.3", + "@babel/preset-typescript": "^7.23.3", + "commander": "^5.1.0", + "gettext-parser": "^4.0.3", + "glob": "^7.1.6", + "lodash.mergewith": "^4.6.2" + }, + "bin": { + "wp-babel-makepot": "cli.js" + } + }, + "node_modules/@automattic/wp-babel-makepot/node_modules/commander": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@automattic/wp-babel-makepot/node_modules/gettext-parser": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "content-type": "^1.0.4", + "encoding": "^0.1.13", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.1" + } + }, + "node_modules/@automattic/wp-babel-makepot/node_modules/safe-buffer": { + "version": "5.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/@babel/cli": { + "version": "7.27.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "commander": "^6.2.0", + "convert-source-map": "^2.0.0", + "fs-readdir-recursive": "^1.1.0", + "glob": "^7.2.0", + "make-dir": "^2.1.0", + "slash": "^2.0.0" + }, + "bin": { + "babel": "bin/babel.js", + "babel-external-helpers": "bin/babel-external-helpers.js" + }, + "engines": { + "node": ">=6.9.0" + }, + "optionalDependencies": { + "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3", + "chokidar": "^3.6.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/cli/node_modules/commander": { + "version": "6.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@babel/cli/node_modules/make-dir": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/cli/node_modules/pify": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/cli/node_modules/semver": { + "version": "5.7.2", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@babel/cli/node_modules/slash": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -462,13 +886,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.29.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", - "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "version": "7.28.5", "license": "MIT", "dependencies": { - "@babel/parser": "^7.29.0", - "@babel/types": "^7.29.0", + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -489,13 +911,11 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", - "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "version": "7.27.2", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.28.6", + "@babel/compat-data": "^7.27.2", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -600,28 +1020,24 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", - "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "version": "7.27.1", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", - "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "version": "7.28.3", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.6" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" @@ -729,26 +1145,22 @@ } }, "node_modules/@babel/helpers": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", - "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", + "version": "7.28.4", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", - "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "version": "7.28.5", "license": "MIT", "dependencies": { - "@babel/types": "^7.29.0" + "@babel/types": "^7.28.5" }, "bin": { "parser": "bin/babel-parser.js" @@ -1943,31 +2355,27 @@ } }, "node_modules/@babel/template": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", - "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "version": "7.27.2", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } - }, - "node_modules/@babel/traverse": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", - "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + }, + "node_modules/@babel/traverse": { + "version": "7.28.5", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.5", "debug": "^4.3.1" }, "engines": { @@ -1975,9 +2383,7 @@ } }, "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "version": "7.28.5", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", @@ -3418,9 +3824,7 @@ } }, "node_modules/@electron/windows-sign": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@electron/windows-sign/-/windows-sign-1.2.2.tgz", - "integrity": "sha512-dfZeox66AvdPtb2lD8OsIIQh12Tp0GNCRUDfBHIKGpbmopZto2/A8nSpYYLoedPIHpqkeblZ/k8OV0Gy7PYuyQ==", + "version": "1.1.2", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -3510,111 +3914,400 @@ "stylis": "4.2.0" } }, - "node_modules/@emotion/css": { - "version": "11.11.2", + "node_modules/@emotion/css": { + "version": "11.11.2", + "license": "MIT", + "dependencies": { + "@emotion/babel-plugin": "^11.11.0", + "@emotion/cache": "^11.11.0", + "@emotion/serialize": "^1.1.2", + "@emotion/sheet": "^1.2.2", + "@emotion/utils": "^1.2.1" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.1", + "license": "MIT" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.8.1" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "license": "MIT" + }, + "node_modules/@emotion/react": { + "version": "11.11.3", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/cache": "^11.11.0", + "@emotion/serialize": "^1.1.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1", + "@emotion/weak-memoize": "^0.3.1", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.1.3", + "license": "MIT", + "dependencies": { + "@emotion/hash": "^0.9.1", + "@emotion/memoize": "^0.8.1", + "@emotion/unitless": "^0.8.1", + "@emotion/utils": "^1.2.1", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.2.2", + "license": "MIT" + }, + "node_modules/@emotion/styled": { + "version": "11.11.0", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.11.0", + "@emotion/is-prop-valid": "^1.2.1", + "@emotion/serialize": "^1.1.2", + "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", + "@emotion/utils": "^1.2.1" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.8.1", + "license": "MIT" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.0.1", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.2.1", + "license": "MIT" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.3.1", + "license": "MIT" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", + "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", + "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", + "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", + "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", + "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", + "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", + "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", + "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", + "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", + "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", + "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", + "cpu": [ + "loong64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@emotion/babel-plugin": "^11.11.0", - "@emotion/cache": "^11.11.0", - "@emotion/serialize": "^1.1.2", - "@emotion/sheet": "^1.2.2", - "@emotion/utils": "^1.2.1" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@emotion/hash": { - "version": "0.9.1", - "license": "MIT" - }, - "node_modules/@emotion/is-prop-valid": { - "version": "1.2.1", + "node_modules/@esbuild/linux-mips64el": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", + "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", + "cpu": [ + "mips64el" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@emotion/memoize": "^0.8.1" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@emotion/memoize": { - "version": "0.8.1", - "license": "MIT" - }, - "node_modules/@emotion/react": { - "version": "11.11.3", + "node_modules/@esbuild/linux-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", + "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", + "cpu": [ + "ppc64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.11.0", - "@emotion/cache": "^11.11.0", - "@emotion/serialize": "^1.1.3", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", - "@emotion/utils": "^1.2.1", - "@emotion/weak-memoize": "^0.3.1", - "hoist-non-react-statics": "^3.3.1" - }, - "peerDependencies": { - "react": ">=16.8.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@emotion/serialize": { - "version": "1.1.3", + "node_modules/@esbuild/linux-riscv64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", + "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", + "cpu": [ + "riscv64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@emotion/hash": "^0.9.1", - "@emotion/memoize": "^0.8.1", - "@emotion/unitless": "^0.8.1", - "@emotion/utils": "^1.2.1", - "csstype": "^3.0.2" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@emotion/sheet": { - "version": "1.2.2", - "license": "MIT" - }, - "node_modules/@emotion/styled": { - "version": "11.11.0", + "node_modules/@esbuild/linux-s390x": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", + "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", + "cpu": [ + "s390x" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.11.0", - "@emotion/is-prop-valid": "^1.2.1", - "@emotion/serialize": "^1.1.2", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", - "@emotion/utils": "^1.2.1" - }, - "peerDependencies": { - "@emotion/react": "^11.0.0-rc.0", - "react": ">=16.8.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@emotion/unitless": { - "version": "0.8.1", - "license": "MIT" - }, - "node_modules/@emotion/use-insertion-effect-with-fallbacks": { - "version": "1.0.1", + "node_modules/@esbuild/linux-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", + "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "peerDependencies": { - "react": ">=16.8.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, - "node_modules/@emotion/utils": { - "version": "1.2.1", - "license": "MIT" - }, - "node_modules/@emotion/weak-memoize": { - "version": "0.3.1", - "license": "MIT" - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.12", + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", + "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", "cpu": [ "arm64" ], @@ -3622,18 +4315,18 @@ "license": "MIT", "optional": true, "os": [ - "darwin" + "netbsd" ], "engines": { "node": ">=18" } }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", - "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "node_modules/@esbuild/netbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", + "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", "cpu": [ - "arm64" + "x64" ], "dev": true, "license": "MIT", @@ -3646,9 +4339,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", - "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", + "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", "cpu": [ "arm64" ], @@ -3662,6 +4355,23 @@ "node": ">=18" } }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", + "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/openharmony-arm64": { "version": "0.25.12", "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", @@ -3679,6 +4389,74 @@ "node": ">=18" } }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", + "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", + "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", + "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", + "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.9.1", "license": "MIT", @@ -4272,7 +5050,9 @@ } }, "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.1.tgz", + "integrity": "sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4284,6 +5064,8 @@ }, "node_modules/@isaacs/cliui": { "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, "license": "ISC", "dependencies": { @@ -4299,7 +5081,9 @@ } }, "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", "engines": { @@ -4311,11 +5095,15 @@ }, "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "license": "MIT", "dependencies": { @@ -4332,6 +5120,8 @@ }, "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4408,6 +5198,21 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@kwsites/file-exists": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", + "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.1" + } + }, + "node_modules/@kwsites/promise-deferred": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", + "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", + "license": "MIT" + }, "node_modules/@listr2/prompt-adapter-inquirer": { "version": "2.0.22", "dev": true, @@ -4493,7 +5298,6 @@ }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", @@ -4505,7 +5309,6 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "dev": true, "license": "MIT", "engines": { "node": ">= 8" @@ -4513,7 +5316,6 @@ }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", @@ -4563,9 +5365,6 @@ }, "node_modules/@octokit/app": { "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@octokit/app/-/app-14.1.0.tgz", - "integrity": "sha512-g3uEsGOQCBl1+W1rgfwoRFUIR6PtvB2T1E4RpygeUU5LrLvlOqcxrt5lfykIeRpUPpupreGJUYl70fqMDXdTpw==", - "dev": true, "license": "MIT", "dependencies": { "@octokit/auth-app": "^6.0.0", @@ -4582,9 +5381,6 @@ }, "node_modules/@octokit/auth-app": { "version": "6.1.4", - "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-6.1.4.tgz", - "integrity": "sha512-QkXkSOHZK4dA5oUqY5Dk3S+5pN2s1igPjEASNQV8/vgJgW034fQWR16u7VsNOK/EljA00eyjYF5mWNxWKWhHRQ==", - "dev": true, "license": "MIT", "dependencies": { "@octokit/auth-oauth-app": "^7.1.0", @@ -4603,16 +5399,10 @@ }, "node_modules/@octokit/auth-app/node_modules/@octokit/openapi-types": { "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", - "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", - "dev": true, "license": "MIT" }, "node_modules/@octokit/auth-app/node_modules/@octokit/types": { "version": "13.10.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", - "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", - "dev": true, "license": "MIT", "dependencies": { "@octokit/openapi-types": "^24.2.0" @@ -4621,9 +5411,6 @@ "node_modules/@octokit/auth-app/node_modules/lru-cache": { "name": "@wolfy1339/lru-cache", "version": "11.0.2-patch.1", - "resolved": "https://registry.npmjs.org/@wolfy1339/lru-cache/-/lru-cache-11.0.2-patch.1.tgz", - "integrity": "sha512-BgYZfL2ADCXKOw2wJtkM3slhHotawWkgIRRxq4wEybnZQPjvAp71SPX35xepMykTw8gXlzWcWPTY31hlbnRsDA==", - "dev": true, "license": "ISC", "engines": { "node": "18 >=18.20 || 20 || >=22" @@ -4631,9 +5418,6 @@ }, "node_modules/@octokit/auth-oauth-app": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-7.1.0.tgz", - "integrity": "sha512-w+SyJN/b0l/HEb4EOPRudo7uUOSW51jcK1jwLa+4r7PA8FPFpoxEnHBHMITqCsc/3Vo2qqFjgQfz/xUUvsSQnA==", - "dev": true, "license": "MIT", "dependencies": { "@octokit/auth-oauth-device": "^6.1.0", @@ -4650,16 +5434,10 @@ }, "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/openapi-types": { "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", - "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", - "dev": true, "license": "MIT" }, "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/types": { "version": "13.10.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", - "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", - "dev": true, "license": "MIT", "dependencies": { "@octokit/openapi-types": "^24.2.0" @@ -4667,9 +5445,6 @@ }, "node_modules/@octokit/auth-oauth-device": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-6.1.0.tgz", - "integrity": "sha512-FNQ7cb8kASufd6Ej4gnJ3f1QB5vJitkoV1O0/g6e6lUsQ7+VsSNRHRmFScN2tV4IgKA12frrr/cegUs0t+0/Lw==", - "dev": true, "license": "MIT", "dependencies": { "@octokit/oauth-methods": "^4.1.0", @@ -4683,16 +5458,10 @@ }, "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/openapi-types": { "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", - "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", - "dev": true, "license": "MIT" }, "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/types": { "version": "13.10.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", - "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", - "dev": true, "license": "MIT", "dependencies": { "@octokit/openapi-types": "^24.2.0" @@ -4700,9 +5469,6 @@ }, "node_modules/@octokit/auth-oauth-user": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-4.1.0.tgz", - "integrity": "sha512-FrEp8mtFuS/BrJyjpur+4GARteUCrPeR/tZJzD8YourzoVhRics7u7we/aDcKv+yywRNwNi/P4fRi631rG/OyQ==", - "dev": true, "license": "MIT", "dependencies": { "@octokit/auth-oauth-device": "^6.1.0", @@ -4718,16 +5484,10 @@ }, "node_modules/@octokit/auth-oauth-user/node_modules/@octokit/openapi-types": { "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", - "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", - "dev": true, "license": "MIT" }, "node_modules/@octokit/auth-oauth-user/node_modules/@octokit/types": { "version": "13.10.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", - "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", - "dev": true, "license": "MIT", "dependencies": { "@octokit/openapi-types": "^24.2.0" @@ -4735,9 +5495,6 @@ }, "node_modules/@octokit/auth-token": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", - "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", - "dev": true, "license": "MIT", "engines": { "node": ">= 18" @@ -4745,9 +5502,6 @@ }, "node_modules/@octokit/auth-unauthenticated": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@octokit/auth-unauthenticated/-/auth-unauthenticated-5.0.1.tgz", - "integrity": "sha512-oxeWzmBFxWd+XolxKTc4zr+h3mt+yofn4r7OfoIkR/Cj/o70eEGmPsFbueyJE2iBAGpjgTnEOKM3pnuEGVmiqg==", - "dev": true, "license": "MIT", "dependencies": { "@octokit/request-error": "^5.0.0", @@ -4759,9 +5513,6 @@ }, "node_modules/@octokit/core": { "version": "5.2.2", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.2.tgz", - "integrity": "sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg==", - "dev": true, "license": "MIT", "dependencies": { "@octokit/auth-token": "^4.0.0", @@ -4778,16 +5529,10 @@ }, "node_modules/@octokit/core/node_modules/@octokit/openapi-types": { "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", - "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", - "dev": true, "license": "MIT" }, "node_modules/@octokit/core/node_modules/@octokit/types": { "version": "13.10.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", - "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", - "dev": true, "license": "MIT", "dependencies": { "@octokit/openapi-types": "^24.2.0" @@ -4795,9 +5540,6 @@ }, "node_modules/@octokit/endpoint": { "version": "9.0.6", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.6.tgz", - "integrity": "sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw==", - "dev": true, "license": "MIT", "dependencies": { "@octokit/types": "^13.1.0", @@ -4809,16 +5551,10 @@ }, "node_modules/@octokit/endpoint/node_modules/@octokit/openapi-types": { "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", - "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", - "dev": true, "license": "MIT" }, "node_modules/@octokit/endpoint/node_modules/@octokit/types": { "version": "13.10.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", - "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", - "dev": true, "license": "MIT", "dependencies": { "@octokit/openapi-types": "^24.2.0" @@ -4826,9 +5562,6 @@ }, "node_modules/@octokit/graphql": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.1.tgz", - "integrity": "sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g==", - "dev": true, "license": "MIT", "dependencies": { "@octokit/request": "^8.4.1", @@ -4841,16 +5574,10 @@ }, "node_modules/@octokit/graphql/node_modules/@octokit/openapi-types": { "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", - "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", - "dev": true, "license": "MIT" }, "node_modules/@octokit/graphql/node_modules/@octokit/types": { "version": "13.10.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", - "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", - "dev": true, "license": "MIT", "dependencies": { "@octokit/openapi-types": "^24.2.0" @@ -4858,9 +5585,6 @@ }, "node_modules/@octokit/oauth-app": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@octokit/oauth-app/-/oauth-app-6.1.0.tgz", - "integrity": "sha512-nIn/8eUJ/BKUVzxUXd5vpzl1rwaVxMyYbQkNZjHrF7Vk/yu98/YDF/N2KeWO7uZ0g3b5EyiFXFkZI8rJ+DH1/g==", - "dev": true, "license": "MIT", "dependencies": { "@octokit/auth-oauth-app": "^7.0.0", @@ -4878,9 +5602,6 @@ }, "node_modules/@octokit/oauth-authorization-url": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@octokit/oauth-authorization-url/-/oauth-authorization-url-6.0.2.tgz", - "integrity": "sha512-CdoJukjXXxqLNK4y/VOiVzQVjibqoj/xHgInekviUJV73y/BSIcwvJ/4aNHPBPKcPWFnd4/lO9uqRV65jXhcLA==", - "dev": true, "license": "MIT", "engines": { "node": ">= 18" @@ -4888,9 +5609,6 @@ }, "node_modules/@octokit/oauth-methods": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-4.1.0.tgz", - "integrity": "sha512-4tuKnCRecJ6CG6gr0XcEXdZtkTDbfbnD5oaHBmLERTjTMZNi2CbfEHZxPU41xXLDG4DfKf+sonu00zvKI9NSbw==", - "dev": true, "license": "MIT", "dependencies": { "@octokit/oauth-authorization-url": "^6.0.2", @@ -4905,16 +5623,10 @@ }, "node_modules/@octokit/oauth-methods/node_modules/@octokit/openapi-types": { "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", - "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", - "dev": true, "license": "MIT" }, "node_modules/@octokit/oauth-methods/node_modules/@octokit/types": { "version": "13.10.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", - "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", - "dev": true, "license": "MIT", "dependencies": { "@octokit/openapi-types": "^24.2.0" @@ -4922,16 +5634,10 @@ }, "node_modules/@octokit/openapi-types": { "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", - "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==", - "dev": true, "license": "MIT" }, "node_modules/@octokit/plugin-paginate-graphql": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-graphql/-/plugin-paginate-graphql-4.0.1.tgz", - "integrity": "sha512-R8ZQNmrIKKpHWC6V2gum4x9LG2qF1RxRjo27gjQcG3j+vf2tLsEfE7I/wRWEPzYMaenr1M+qDAtNcwZve1ce1A==", - "dev": true, "license": "MIT", "engines": { "node": ">= 18" @@ -4942,9 +5648,6 @@ }, "node_modules/@octokit/plugin-paginate-rest": { "version": "9.2.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.2.tgz", - "integrity": "sha512-u3KYkGF7GcZnSD/3UP0S7K5XUFT2FkOQdcfXZGZQPGv3lm4F2Xbf71lvjldr8c1H3nNbF+33cLEkWYbokGWqiQ==", - "dev": true, "license": "MIT", "dependencies": { "@octokit/types": "^12.6.0" @@ -4958,9 +5661,6 @@ }, "node_modules/@octokit/plugin-rest-endpoint-methods": { "version": "10.4.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.4.1.tgz", - "integrity": "sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg==", - "dev": true, "license": "MIT", "dependencies": { "@octokit/types": "^12.6.0" @@ -4974,9 +5674,6 @@ }, "node_modules/@octokit/plugin-retry": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-6.1.0.tgz", - "integrity": "sha512-WrO3bvq4E1Xh1r2mT9w6SDFg01gFmP81nIG77+p/MqW1JeXXgL++6umim3t6x0Zj5pZm3rXAN+0HEjmmdhIRig==", - "dev": true, "license": "MIT", "dependencies": { "@octokit/request-error": "^5.0.0", @@ -4992,16 +5689,10 @@ }, "node_modules/@octokit/plugin-retry/node_modules/@octokit/openapi-types": { "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", - "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", - "dev": true, "license": "MIT" }, "node_modules/@octokit/plugin-retry/node_modules/@octokit/types": { "version": "13.10.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", - "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", - "dev": true, "license": "MIT", "dependencies": { "@octokit/openapi-types": "^24.2.0" @@ -5009,9 +5700,6 @@ }, "node_modules/@octokit/plugin-throttling": { "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-8.2.0.tgz", - "integrity": "sha512-nOpWtLayKFpgqmgD0y3GqXafMFuKcA4tRPZIfu7BArd2lEZeb1988nhWhwx4aZWmjDmUfdgVf7W+Tt4AmvRmMQ==", - "dev": true, "license": "MIT", "dependencies": { "@octokit/types": "^12.2.0", @@ -5026,9 +5714,6 @@ }, "node_modules/@octokit/request": { "version": "8.4.1", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.1.tgz", - "integrity": "sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw==", - "dev": true, "license": "MIT", "dependencies": { "@octokit/endpoint": "^9.0.6", @@ -5042,9 +5727,6 @@ }, "node_modules/@octokit/request-error": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.1.tgz", - "integrity": "sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g==", - "dev": true, "license": "MIT", "dependencies": { "@octokit/types": "^13.1.0", @@ -5057,16 +5739,10 @@ }, "node_modules/@octokit/request-error/node_modules/@octokit/openapi-types": { "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", - "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", - "dev": true, "license": "MIT" }, "node_modules/@octokit/request-error/node_modules/@octokit/types": { "version": "13.10.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", - "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", - "dev": true, "license": "MIT", "dependencies": { "@octokit/openapi-types": "^24.2.0" @@ -5074,16 +5750,10 @@ }, "node_modules/@octokit/request/node_modules/@octokit/openapi-types": { "version": "24.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", - "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", - "dev": true, "license": "MIT" }, "node_modules/@octokit/request/node_modules/@octokit/types": { "version": "13.10.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", - "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", - "dev": true, "license": "MIT", "dependencies": { "@octokit/openapi-types": "^24.2.0" @@ -5091,9 +5761,6 @@ }, "node_modules/@octokit/types": { "version": "12.6.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", - "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", - "dev": true, "license": "MIT", "dependencies": { "@octokit/openapi-types": "^20.0.0" @@ -5101,9 +5768,6 @@ }, "node_modules/@octokit/webhooks": { "version": "12.3.2", - "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-12.3.2.tgz", - "integrity": "sha512-exj1MzVXoP7xnAcAB3jZ97pTvVPkQF9y6GA/dvYC47HV7vLv+24XRS6b/v/XnyikpEuvMhugEXdGtAlU086WkQ==", - "dev": true, "license": "MIT", "dependencies": { "@octokit/request-error": "^5.0.0", @@ -5117,9 +5781,6 @@ }, "node_modules/@octokit/webhooks-methods": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-4.1.0.tgz", - "integrity": "sha512-zoQyKw8h9STNPqtm28UGOYFE7O6D4Il8VJwhAtMHFt2C4L0VQT1qGKLeefUOqHNs1mNRYSadVv7x0z8U2yyeWQ==", - "dev": true, "license": "MIT", "engines": { "node": ">= 18" @@ -5127,9 +5788,6 @@ }, "node_modules/@octokit/webhooks-types": { "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-7.6.1.tgz", - "integrity": "sha512-S8u2cJzklBC0FgTwWVLaM8tMrDuDMVE4xiTK4EYXM9GntyvrdbSoxqDQa+Fh57CCNApyIpyeqPhhFEmHPfrXgw==", - "dev": true, "license": "MIT" }, "node_modules/@opentelemetry/api": { @@ -5604,11 +6262,25 @@ "@noble/hashes": "^1.1.5" } }, + "node_modules/@php-wasm/cli-util": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@php-wasm/cli-util/-/cli-util-3.1.1.tgz", + "integrity": "sha512-/SNxTE3ZXrxbETiYs6Zn6nUSVLl+7lomw14LU2cBx29U3dpJ/ro0kM+PmzksS6umhBiwmksVeaUf/wlTMbr++Q==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/util": "3.1.1", + "fast-xml-parser": "^5.3.4", + "jsonc-parser": "3.3.1" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, "node_modules/@php-wasm/fs-journal": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@php-wasm/fs-journal/-/fs-journal-3.1.1.tgz", "integrity": "sha512-qDDE8tjhst+Qqb+g9/8qUpf5ieVOEh6UX7Krt154dkqKM29H9ebquq+vBB5abWi3LfAxuNd7ihwUa1DWThCQbw==", - "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@php-wasm/logger": "3.1.1", @@ -5631,7 +6303,6 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -5642,116 +6313,19 @@ "node": ">=12" } }, - "node_modules/@php-wasm/fs-journal/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/@php-wasm/fs-journal/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/@php-wasm/fs-journal/node_modules/express": { - "version": "4.22.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.22.0.tgz", - "integrity": "sha512-c2iPh3xp5vvCLgaHK03+mWLFPhox7j1LwyxcZwFVApEv5i0X+IjPpbT50SJJwwLpdBVfp45AkK/v+AFgv/XlfQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "~1.20.3", - "content-disposition": "~0.5.4", - "content-type": "~1.0.4", - "cookie": "~0.7.1", - "cookie-signature": "~1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.3.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "~0.1.12", - "proxy-addr": "~2.0.7", - "qs": "~6.14.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "~0.19.0", - "serve-static": "~1.16.2", - "setprototypeof": "1.2.0", - "statuses": "~2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/@php-wasm/fs-journal/node_modules/ini": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "dev": true, "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@php-wasm/fs-journal/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/@php-wasm/fs-journal/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/@php-wasm/fs-journal/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -5764,7 +6338,6 @@ "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, "license": "MIT", "dependencies": { "cliui": "^8.0.1", @@ -5783,7 +6356,6 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -5793,7 +6365,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@php-wasm/logger/-/logger-3.1.1.tgz", "integrity": "sha512-azvy+GpcOd6Q7AYIWe44CZtaXroLxOGWPQiTy2ism4cYjb+Mk1kqMy5F8UKhl8DLbJn1sS74JgsMmdBbpABvEA==", - "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@php-wasm/node-polyfills": "3.1.1" @@ -5807,7 +6378,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@php-wasm/node/-/node-3.1.1.tgz", "integrity": "sha512-em6+yfWi6oicIUHKwp3ZqOS3+JlWzaP9vWqyUw4StN3zLKpH3iiwnpf047lLI5PS09w8JU4sXAbBT2A7GBwrng==", - "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@php-wasm/logger": "3.1.1", @@ -5838,7 +6408,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@php-wasm/node-7-4/-/node-7-4-3.1.1.tgz", "integrity": "sha512-GksZ1J3UcWaxZHiKGGAfnRAONV9qZ4ft6WG6rxy6kZzzTGtX69G7qJdc8E00y3WRkVC2X25H2/ulzhMWCzFeKg==", - "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@php-wasm/universal": "3.1.1", @@ -5855,7 +6424,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "dev": true, "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -5865,7 +6433,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@php-wasm/node-8-0/-/node-8-0-3.1.1.tgz", "integrity": "sha512-/Z5pi9XAY45HBCewgHO8QqhhHyC8V5iuiedwNYoQoTluoQ9zoaiyy/WYYWLk492dGrxNdwRhjCYVQZR4J4T7Cg==", - "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@php-wasm/universal": "3.1.1", @@ -5882,7 +6449,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "dev": true, "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -5892,7 +6458,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@php-wasm/node-8-1/-/node-8-1-3.1.1.tgz", "integrity": "sha512-hGGNtCJ0cDKxPP5lEu0d9VcO+QFFLyc/2fEZGEy4YMUI4TkRUAadFHsyu5K3fPVKgNLMpYw+vv3qon+T70n0Og==", - "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@php-wasm/universal": "3.1.1", @@ -5909,7 +6474,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "dev": true, "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -5919,7 +6483,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@php-wasm/node-8-2/-/node-8-2-3.1.1.tgz", "integrity": "sha512-WyexqgMliJj5XrvZLZ51bh8A1+PjyjOopSTIHVwAVUp3rJR9BoSLo8jxNlH3GALFiLuxUVQavgQasCkevV5Zpw==", - "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@php-wasm/universal": "3.1.1", @@ -5936,7 +6499,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "dev": true, "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -5946,7 +6508,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@php-wasm/node-8-3/-/node-8-3-3.1.1.tgz", "integrity": "sha512-+w3rfxhiCOl1muv69BBZa07HElcVproyTShj1e8NAbftpKYhYfm6IkJWzgSDrB3UFX0cXgnArhOQBIfCfmNpHw==", - "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@php-wasm/universal": "3.1.1", @@ -5963,7 +6524,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "dev": true, "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -5973,7 +6533,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@php-wasm/node-8-4/-/node-8-4-3.1.1.tgz", "integrity": "sha512-XCqbMXSI5T/0svyhQODFbKlPUAPMjrm8RUZhOUVECVXYX5YODI6dhbODYzarXLuhsgSs8pH8qH6WS5p4avZHPA==", - "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@php-wasm/universal": "3.1.1", @@ -5990,7 +6549,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "dev": true, "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -6000,7 +6558,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@php-wasm/node-8-5/-/node-8-5-3.1.1.tgz", "integrity": "sha512-WPDeXtsdPj9BvHt0cB2j81hEAEWSWSC5ia6oNyt4G2i7F9shCinb1Z3VwwzBZHGOZSS4vXLE9imwOsG+T5bD2Q==", - "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@php-wasm/universal": "3.1.1", @@ -6017,7 +6574,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "dev": true, "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -6027,14 +6583,12 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@php-wasm/node-polyfills/-/node-polyfills-3.1.1.tgz", "integrity": "sha512-PiVIt0Oioh2AfVvATwD4FYr0EuTIFXwhwb5ENsciAkPFTePRCraX/ZkJOUJUN0N45/KG72FOmg+VuIBmXqpn1w==", - "dev": true, "license": "GPL-2.0-or-later" }, "node_modules/@php-wasm/node/node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -6045,116 +6599,19 @@ "node": ">=12" } }, - "node_modules/@php-wasm/node/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/@php-wasm/node/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/@php-wasm/node/node_modules/express": { - "version": "4.22.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.22.0.tgz", - "integrity": "sha512-c2iPh3xp5vvCLgaHK03+mWLFPhox7j1LwyxcZwFVApEv5i0X+IjPpbT50SJJwwLpdBVfp45AkK/v+AFgv/XlfQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "~1.20.3", - "content-disposition": "~0.5.4", - "content-type": "~1.0.4", - "cookie": "~0.7.1", - "cookie-signature": "~1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.3.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "~0.1.12", - "proxy-addr": "~2.0.7", - "qs": "~6.14.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "~0.19.0", - "serve-static": "~1.16.2", - "setprototypeof": "1.2.0", - "statuses": "~2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/@php-wasm/node/node_modules/ini": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "dev": true, "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@php-wasm/node/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/@php-wasm/node/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/@php-wasm/node/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -6167,7 +6624,6 @@ "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, "license": "MIT", "dependencies": { "cliui": "^8.0.1", @@ -6186,7 +6642,6 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -6196,7 +6651,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@php-wasm/progress/-/progress-3.1.1.tgz", "integrity": "sha512-XmNMeRV2YMUA/jzhL7UBlaN1wV6zJdjrbWIeaO8RweHVufLI553Wao3dfs4c4sNRxucTW5GzjMkmyQOxDz/1eQ==", - "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@php-wasm/logger": "3.1.1", @@ -6211,7 +6665,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@php-wasm/scopes/-/scopes-3.1.1.tgz", "integrity": "sha512-OrFGSVMOZMOezRA2FBfSoFW6SaUfrirGSTUODrhE9sT0S4r3ScH8uV+1Jsz/q8ba3Ekxi6DCcxXIFqqezzkepQ==", - "dev": true, "license": "GPL-2.0-or-later", "engines": { "node": ">=20.10.0", @@ -6222,7 +6675,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@php-wasm/stream-compression/-/stream-compression-3.1.1.tgz", "integrity": "sha512-PtWUGUSzE6kgdYVJAkdi0tUPyFZbvVL1+aip7IBfumCLXjZEkeIYmc9jmBL6LNKZ3agDiWZ8OC005gAWkKKeHQ==", - "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@php-wasm/node-polyfills": "3.1.1", @@ -6233,7 +6685,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@php-wasm/universal/-/universal-3.1.1.tgz", "integrity": "sha512-GLaJJCi+PHHoTDIU9j7jN2PaU6R0Ar4cvNngtHm3fO8pPnpwLs2xI0Bxi7BsPkyv/dbpm6C7LkSr03dQ8ZyCPA==", - "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@php-wasm/logger": "3.1.1", @@ -6252,7 +6703,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "dev": true, "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -6262,7 +6712,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@php-wasm/util/-/util-3.1.1.tgz", "integrity": "sha512-O7B0b8kMwHQsBLpooolu+zQoF1dFTR5eBfRJ21Y1DHlxHQl6Od6ZhcFzmZ4uGVhhckDlqgxoKBqn1mIFoGIL9w==", - "dev": true, "engines": { "node": ">=20.10.0", "npm": ">=10.2.3" @@ -6272,7 +6721,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@php-wasm/web/-/web-3.1.1.tgz", "integrity": "sha512-aOViM7wJ8XAeg4/4BSID2Nnklf8c/sB9hmemFtmuOUW53gpvozNI5QuPpTKJ33PRqioBFyg/MfTwlVo2ARA1bA==", - "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@php-wasm/fs-journal": "3.1.1", @@ -6304,7 +6752,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@php-wasm/web-7-4/-/web-7-4-3.1.1.tgz", "integrity": "sha512-7e3GGL7/97S2yJDL5lsdnLM/GDbo7rHsCV2RU0h2L+Xnh1LzrHrnXf+HvejTmn921gEVa7r5qeibNXFKLOF3GQ==", - "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@php-wasm/universal": "3.1.1", @@ -6320,7 +6767,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "dev": true, "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -6330,7 +6776,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@php-wasm/web-8-0/-/web-8-0-3.1.1.tgz", "integrity": "sha512-44Nca/zbSC6E9vQJmQO03IlwbdEh5414LKvm71BTLHZ7M52LfgCDu1+Bv5pcvMKwGZ+6UEdJvJZPBJhLrNYy6Q==", - "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@php-wasm/universal": "3.1.1", @@ -6346,7 +6791,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "dev": true, "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -6356,7 +6800,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@php-wasm/web-8-1/-/web-8-1-3.1.1.tgz", "integrity": "sha512-QoydA9MRH+6P2bBr2SfuLaTqZwpsXoe3z20n1gQxeEhlOuPUqNZ94jGj6+jKWfGzd/4wDpocRTvsVI9dJoPhig==", - "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@php-wasm/universal": "3.1.1", @@ -6372,7 +6815,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "dev": true, "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -6382,7 +6824,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@php-wasm/web-8-2/-/web-8-2-3.1.1.tgz", "integrity": "sha512-isdbUSY9dB78M4R5Hlkcl0ar+LPCkpXFDpvshJwcRsgJwqU3ivWDBR2yFSLwSfd2DlpDNeTYRaZvb8hvUPrUUw==", - "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@php-wasm/universal": "3.1.1", @@ -6398,7 +6839,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "dev": true, "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -6408,7 +6848,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@php-wasm/web-8-3/-/web-8-3-3.1.1.tgz", "integrity": "sha512-T8AVsB63gGfKkLABHocG1LikZYslETV1GLex9g32hTlFgWAzPpGcCyEh+7GIWO5Q2nCnIqvf4dWYH88gULAV7A==", - "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@php-wasm/universal": "3.1.1", @@ -6416,282 +6855,572 @@ "wasm-feature-detect": "1.8.0" }, "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@php-wasm/web-8-3/node_modules/ini": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", + "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@php-wasm/web-8-4": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@php-wasm/web-8-4/-/web-8-4-3.1.1.tgz", + "integrity": "sha512-3LvFz5JQmi70MOLJrzzBAIDZFEakORc5rjsRcCO/BiiMdCJOD45SegqVdv1/Wix6tJbyDu+2swXxZokO46fjVQ==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/universal": "3.1.1", + "ini": "4.1.2", + "wasm-feature-detect": "1.8.0" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@php-wasm/web-8-4/node_modules/ini": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", + "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@php-wasm/web-8-5": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@php-wasm/web-8-5/-/web-8-5-3.1.1.tgz", + "integrity": "sha512-rxxvaLCQVlOiPIPbuxGjH1ITMf2p2V5uEIaVcRGgwKsig+3FpcClv1zOQyy44+0222I0k4FoUAh3SAWIySeyrA==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/universal": "3.1.1", + "ini": "4.1.2", + "wasm-feature-detect": "1.8.0" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@php-wasm/web-8-5/node_modules/ini": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", + "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@php-wasm/web-service-worker": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@php-wasm/web-service-worker/-/web-service-worker-3.1.1.tgz", + "integrity": "sha512-+sAuqB1dQ5NaBj+T0qO1hZEUUyx1xRqE7OB66qjIpYua+7TA9NjcbCobIK57y99sM+g2nW9Pf1aBh0tgWZq/1w==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/scopes": "3.1.1" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@php-wasm/web/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@php-wasm/web/node_modules/ini": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", + "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@php-wasm/web/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@php-wasm/web/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@php-wasm/web/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/@php-wasm/xdebug-bridge": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@php-wasm/xdebug-bridge/-/xdebug-bridge-3.1.1.tgz", + "integrity": "sha512-lZwdvUDviz+bFk+GStwpW+JLO5IMnM+un0VYTeA5j3ztqYqDtFJpplCjKWjlGORqoBT6VLj+kCoLBv/GVjHXIQ==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/logger": "3.1.1", + "@php-wasm/node": "3.1.1", + "@php-wasm/universal": "3.1.1", + "@wp-playground/common": "3.1.1", + "express": "4.22.0", + "fs-ext-extra-prebuilt": "2.2.7", + "ini": "4.1.2", + "wasm-feature-detect": "1.8.0", + "ws": "8.18.3", + "xml2js": "0.6.2", + "yargs": "17.7.2" + }, + "bin": { + "xdebug-bridge": "xdebug-bridge.js" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@php-wasm/xdebug-bridge/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@php-wasm/xdebug-bridge/node_modules/ini": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", + "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@php-wasm/xdebug-bridge/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@php-wasm/xdebug-bridge/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@php-wasm/xdebug-bridge/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/@playwright/test": { + "version": "1.58.2", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.58.2.tgz", + "integrity": "sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.58.2" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" } }, - "node_modules/@php-wasm/web-8-3/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "dev": true, - "license": "ISC", + "node_modules/@pm2/agent": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@pm2/agent/-/agent-2.1.1.tgz", + "integrity": "sha512-0V9ckHWd/HSC8BgAbZSoq8KXUG81X97nSkAxmhKDhmF8vanyaoc1YXwc2KVkbWz82Rg4gjd2n9qiT3i7bdvGrQ==", + "license": "AGPL-3.0", + "dependencies": { + "async": "~3.2.0", + "chalk": "~3.0.0", + "dayjs": "~1.8.24", + "debug": "~4.3.1", + "eventemitter2": "~5.0.1", + "fast-json-patch": "^3.1.0", + "fclone": "~1.0.11", + "pm2-axon": "~4.0.1", + "pm2-axon-rpc": "~0.7.0", + "proxy-agent": "~6.4.0", + "semver": "~7.5.0", + "ws": "~7.5.10" + } + }, + "node_modules/@pm2/agent/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/@php-wasm/web-8-4": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@php-wasm/web-8-4/-/web-8-4-3.1.1.tgz", - "integrity": "sha512-3LvFz5JQmi70MOLJrzzBAIDZFEakORc5rjsRcCO/BiiMdCJOD45SegqVdv1/Wix6tJbyDu+2swXxZokO46fjVQ==", - "dev": true, - "license": "GPL-2.0-or-later", + "node_modules/@pm2/agent/node_modules/dayjs": { + "version": "1.8.36", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.36.tgz", + "integrity": "sha512-3VmRXEtw7RZKAf+4Tv1Ym9AGeo8r8+CjDi26x+7SYQil1UqtqdaokhzoEJohqlzt0m5kacJSDhJQkG/LWhpRBw==", + "license": "MIT" + }, + "node_modules/@pm2/agent/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", "dependencies": { - "@php-wasm/universal": "3.1.1", - "ini": "4.1.2", - "wasm-feature-detect": "1.8.0" + "ms": "^2.1.3" }, "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@php-wasm/web-8-4/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "dev": true, + "node_modules/@pm2/agent/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/@php-wasm/web-8-5": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@php-wasm/web-8-5/-/web-8-5-3.1.1.tgz", - "integrity": "sha512-rxxvaLCQVlOiPIPbuxGjH1ITMf2p2V5uEIaVcRGgwKsig+3FpcClv1zOQyy44+0222I0k4FoUAh3SAWIySeyrA==", - "dev": true, - "license": "GPL-2.0-or-later", + "node_modules/@pm2/agent/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "license": "ISC", "dependencies": { - "@php-wasm/universal": "3.1.1", - "ini": "4.1.2", - "wasm-feature-detect": "1.8.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" + "node": ">=10" } }, - "node_modules/@php-wasm/web-8-5/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "dev": true, - "license": "ISC", + "node_modules/@pm2/agent/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/@php-wasm/web-service-worker": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@php-wasm/web-service-worker/-/web-service-worker-3.1.1.tgz", - "integrity": "sha512-+sAuqB1dQ5NaBj+T0qO1hZEUUyx1xRqE7OB66qjIpYua+7TA9NjcbCobIK57y99sM+g2nW9Pf1aBh0tgWZq/1w==", - "dev": true, - "license": "GPL-2.0-or-later", - "dependencies": { - "@php-wasm/scopes": "3.1.1" + "node_modules/@pm2/agent/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/@pm2/blessed": { + "version": "0.1.81", + "resolved": "https://registry.npmjs.org/@pm2/blessed/-/blessed-0.1.81.tgz", + "integrity": "sha512-ZcNHqQjMuNRcQ7Z1zJbFIQZO/BDKV3KbiTckWdfbUaYhj7uNmUwb+FbdDWSCkvxNr9dBJQwvV17o6QBkAvgO0g==", + "license": "MIT", + "bin": { + "blessed": "bin/tput.js" }, "engines": { - "node": ">=20.10.0", - "npm": ">=10.2.3" + "node": ">= 0.8.0" } }, - "node_modules/@php-wasm/web/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "license": "ISC", + "node_modules/@pm2/io": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@pm2/io/-/io-6.1.0.tgz", + "integrity": "sha512-IxHuYURa3+FQ6BKePlgChZkqABUKFYH6Bwbw7V/pWU1pP6iR1sCI26l7P9ThUEB385ruZn/tZS3CXDUF5IA1NQ==", + "license": "Apache-2", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "async": "~2.6.1", + "debug": "~4.3.1", + "eventemitter2": "^6.3.1", + "require-in-the-middle": "^5.0.0", + "semver": "~7.5.4", + "shimmer": "^1.2.0", + "signal-exit": "^3.0.3", + "tslib": "1.9.3" }, "engines": { - "node": ">=12" + "node": ">=6.0" } }, - "node_modules/@php-wasm/web/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, + "node_modules/@pm2/io/node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "license": "MIT", "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/@php-wasm/web/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" + "lodash": "^4.17.14" } }, - "node_modules/@php-wasm/web/node_modules/express": { - "version": "4.22.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.22.0.tgz", - "integrity": "sha512-c2iPh3xp5vvCLgaHK03+mWLFPhox7j1LwyxcZwFVApEv5i0X+IjPpbT50SJJwwLpdBVfp45AkK/v+AFgv/XlfQ==", - "dev": true, + "node_modules/@pm2/io/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "license": "MIT", "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "~1.20.3", - "content-disposition": "~0.5.4", - "content-type": "~1.0.4", - "cookie": "~0.7.1", - "cookie-signature": "~1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.3.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "~0.1.12", - "proxy-addr": "~2.0.7", - "qs": "~6.14.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "~0.19.0", - "serve-static": "~1.16.2", - "setprototypeof": "1.2.0", - "statuses": "~2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "ms": "^2.1.3" }, "engines": { - "node": ">= 0.10.0" + "node": ">=6.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@php-wasm/web/node_modules/ini": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", - "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "dev": true, + "node_modules/@pm2/io/node_modules/eventemitter2": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", + "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==", + "license": "MIT" + }, + "node_modules/@pm2/io/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/@php-wasm/web/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/@php-wasm/web/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/@php-wasm/web/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, + "node_modules/@pm2/io/node_modules/require-in-the-middle": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-5.2.0.tgz", + "integrity": "sha512-efCx3b+0Z69/LGJmm9Yvi4cqEdxnoGnxYxGxBghkkTTFeXRtTCmmhO0AnAfHz59k957uTSuy8WaHqOs8wbYUWg==", "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "debug": "^4.1.1", + "module-details-from-path": "^1.0.3", + "resolve": "^1.22.1" }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/@php-wasm/web/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "license": "MIT", + "node_modules/@pm2/io/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "license": "ISC", "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@pm2/io/node_modules/tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "license": "Apache-2.0" + }, + "node_modules/@pm2/io/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/@pm2/js-api": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@pm2/js-api/-/js-api-0.8.0.tgz", + "integrity": "sha512-nmWzrA/BQZik3VBz+npRcNIu01kdBhWL0mxKmP1ciF/gTcujPTQqt027N9fc1pK9ERM8RipFhymw7RcmCyOEYA==", + "license": "Apache-2", + "dependencies": { + "async": "^2.6.3", + "debug": "~4.3.1", + "eventemitter2": "^6.3.1", + "extrareqp2": "^1.0.0", + "ws": "^7.0.0" }, "engines": { - "node": ">=12" + "node": ">=4.0" } }, - "node_modules/@php-wasm/web/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" + "node_modules/@pm2/js-api/node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.14" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "dev": true, + "node_modules/@pm2/js-api/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "license": "MIT", - "optional": true, + "dependencies": { + "ms": "^2.1.3" + }, "engines": { - "node": ">=14" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@pkgr/core": { - "version": "0.2.9", - "dev": true, + "node_modules/@pm2/js-api/node_modules/eventemitter2": { + "version": "6.4.9", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.9.tgz", + "integrity": "sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==", + "license": "MIT" + }, + "node_modules/@pm2/js-api/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "license": "MIT", "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + "node": ">=8.3.0" }, - "funding": { - "url": "https://opencollective.com/pkgr" + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/@playwright/test": { - "version": "1.58.2", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.58.2.tgz", - "integrity": "sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA==", - "dev": true, - "license": "Apache-2.0", + "node_modules/@pm2/pm2-version-check": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@pm2/pm2-version-check/-/pm2-version-check-1.0.4.tgz", + "integrity": "sha512-SXsM27SGH3yTWKc2fKR4SYNxsmnvuBQ9dd6QHtEWmiZ/VqaOYPAIlS8+vMcn27YLtAEBGvNRSh3TPNvtjZgfqA==", + "license": "MIT", "dependencies": { - "playwright": "1.58.2" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" + "debug": "^4.3.1" } }, "node_modules/@polka/url": { @@ -6747,13 +7476,6 @@ "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.3.tgz", - "integrity": "sha512-eybk3TjzzzV97Dlj5c+XrBFW57eTNhzod66y9HrBlzJ6NsCrWCp/2kaPS3K9wJmurBC0Tdw4yPjXKZqlznim3Q==", - "dev": true, - "license": "MIT" - }, "node_modules/@rollup/plugin-virtual": { "version": "3.0.2", "dev": true, @@ -7098,7 +7820,6 @@ }, "node_modules/@sentry-internal/replay-canvas": { "version": "7.120.3", - "dev": true, "license": "MIT", "dependencies": { "@sentry/core": "7.120.3", @@ -7112,7 +7833,6 @@ }, "node_modules/@sentry-internal/replay-canvas/node_modules/@sentry-internal/tracing": { "version": "7.120.3", - "dev": true, "license": "MIT", "dependencies": { "@sentry/core": "7.120.3", @@ -7125,7 +7845,6 @@ }, "node_modules/@sentry-internal/replay-canvas/node_modules/@sentry/core": { "version": "7.120.3", - "dev": true, "license": "MIT", "dependencies": { "@sentry/types": "7.120.3", @@ -7137,7 +7856,6 @@ }, "node_modules/@sentry-internal/replay-canvas/node_modules/@sentry/replay": { "version": "7.120.3", - "dev": true, "license": "MIT", "dependencies": { "@sentry-internal/tracing": "7.120.3", @@ -7151,7 +7869,6 @@ }, "node_modules/@sentry-internal/replay-canvas/node_modules/@sentry/types": { "version": "7.120.3", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -7159,7 +7876,6 @@ }, "node_modules/@sentry-internal/replay-canvas/node_modules/@sentry/utils": { "version": "7.120.3", - "dev": true, "license": "MIT", "dependencies": { "@sentry/types": "7.120.3" @@ -7307,135 +8023,6 @@ "node": ">=10" } }, - "node_modules/@sentry/cli-linux-arm": { - "version": "2.54.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-2.54.0.tgz", - "integrity": "sha512-Brx/MsIBXmMuP/rRZos8pMxW5mSZoYmR0tDO483RR9hfE6PnyxhvNOTkLLm6fMd3pGmiG4sr25jYeYQglhIpRA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "os": [ - "linux", - "freebsd", - "android" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@sentry/cli-linux-arm64": { - "version": "2.54.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-2.54.0.tgz", - "integrity": "sha512-ocE6gBD2GiMH8Vm0OdlD8tz9eq4uiTmG2Nb0sQshcTDZ7DkOGEmtbg2Je2F1Eug6wR/zQWzD/t0bMUm6L0X0Rg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "os": [ - "linux", - "freebsd", - "android" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@sentry/cli-linux-i686": { - "version": "2.54.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-2.54.0.tgz", - "integrity": "sha512-GZyLbZjDX8e635O8iVbzkHs9KGUo5UK0PGbTsjxlKHNgWAf1SY+y+wtWLrF46AhxUveeV/ydEUOJJjcDgXW3+g==", - "cpu": [ - "x86", - "ia32" - ], - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "os": [ - "linux", - "freebsd", - "android" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@sentry/cli-linux-x64": { - "version": "2.54.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-2.54.0.tgz", - "integrity": "sha512-NyTM6dp+/cFiULUTGlxlaa83pL+FdWHwPE5IkQ6EiqpsO0auacVwWJIIvj4EbFS7XQ8bgjUA3Rf83lZeI+ZPvQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "os": [ - "linux", - "freebsd", - "android" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@sentry/cli-win32-arm64": { - "version": "2.54.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-win32-arm64/-/cli-win32-arm64-2.54.0.tgz", - "integrity": "sha512-oVsdo7yWAokGtnl2cbuxvPv3Pu3ge8n9Oyp+iNT1S98XJ/QtRGT8L2ZClNllzEeVFFoZWlK7RVT5xh7OI4ge/w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@sentry/cli-win32-i686": { - "version": "2.54.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-2.54.0.tgz", - "integrity": "sha512-YvBUq5ky80j2fulllft6ZCtLslwrNc5s8dXV7Jr7IUUmTcVcvkOdgWwAsGRjTmZxXZbfaRaYE2fEvfFwjmciTA==", - "cpu": [ - "x86", - "ia32" - ], - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@sentry/cli-win32-x64": { - "version": "2.54.0", - "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-2.54.0.tgz", - "integrity": "sha512-Jn5abpRrbdcQrec+8QTgGdX8wxTdQr4bm81I/suJ3bXpID+fsiAnp+yclKlq8LWlj5q7uATnGJ4QpajDT9qBRQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, "node_modules/@sentry/core": { "version": "9.46.0", "license": "MIT", @@ -7564,7 +8151,6 @@ }, "node_modules/@sentry/react": { "version": "7.120.3", - "dev": true, "license": "MIT", "dependencies": { "@sentry/browser": "7.120.3", @@ -7582,7 +8168,6 @@ }, "node_modules/@sentry/react/node_modules/@sentry-internal/feedback": { "version": "7.120.3", - "dev": true, "license": "MIT", "dependencies": { "@sentry/core": "7.120.3", @@ -7595,7 +8180,6 @@ }, "node_modules/@sentry/react/node_modules/@sentry-internal/tracing": { "version": "7.120.3", - "dev": true, "license": "MIT", "dependencies": { "@sentry/core": "7.120.3", @@ -7608,7 +8192,6 @@ }, "node_modules/@sentry/react/node_modules/@sentry/browser": { "version": "7.120.3", - "dev": true, "license": "MIT", "dependencies": { "@sentry-internal/feedback": "7.120.3", @@ -7626,7 +8209,6 @@ }, "node_modules/@sentry/react/node_modules/@sentry/core": { "version": "7.120.3", - "dev": true, "license": "MIT", "dependencies": { "@sentry/types": "7.120.3", @@ -7638,7 +8220,6 @@ }, "node_modules/@sentry/react/node_modules/@sentry/integrations": { "version": "7.120.3", - "dev": true, "license": "MIT", "dependencies": { "@sentry/core": "7.120.3", @@ -7652,7 +8233,6 @@ }, "node_modules/@sentry/react/node_modules/@sentry/replay": { "version": "7.120.3", - "dev": true, "license": "MIT", "dependencies": { "@sentry-internal/tracing": "7.120.3", @@ -7666,7 +8246,6 @@ }, "node_modules/@sentry/react/node_modules/@sentry/types": { "version": "7.120.3", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -7674,7 +8253,6 @@ }, "node_modules/@sentry/react/node_modules/@sentry/utils": { "version": "7.120.3", - "dev": true, "license": "MIT", "dependencies": { "@sentry/types": "7.120.3" @@ -7695,15 +8273,107 @@ "node": ">= 14" } }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "dev": true, + "node_modules/@sindresorhus/df": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/df/-/df-3.1.1.tgz", + "integrity": "sha512-SME/vtXaJcnQ/HpeV6P82Egy+jThn11IKfwW8+/XVoRD0rmPHVTeKMtww1oWdVnMykzVPjmrDN9S8NBndPEHCQ==", + "license": "MIT", + "dependencies": { + "execa": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sindresorhus/df/node_modules/execa": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-2.1.0.tgz", + "integrity": "sha512-Y/URAVapfbYy2Xp/gb6A0E7iR8xeqOCXsuuaoMn7A5PzrXUK84E1gyiEfq0wQd/GHA6GsoHWwhNq8anb0mleIw==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^3.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": "^8.12.0 || >=9.7.0" + } + }, + "node_modules/@sindresorhus/df/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@sindresorhus/df/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@sindresorhus/df/node_modules/npm-run-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-3.1.0.tgz", + "integrity": "sha512-Dbl4A/VfiVGLgQv29URL9xshU8XDY1GeLy+fsaZ1AA8JDSfjvr5P5+pzRbWqRSBxk6/DW7MIh8lTM/PaGnP2kg==", + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sindresorhus/df/node_modules/p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", "license": "MIT", "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@standard-schema/spec": { @@ -7714,6 +8384,19 @@ "version": "0.3.0", "license": "MIT" }, + "node_modules/@stroncium/procfs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@stroncium/procfs/-/procfs-1.2.1.tgz", + "integrity": "sha512-X1Iui3FUNZP18EUvysTHxt+Avu2nlVzyf90YM8OYgP6SGzTzzX/0JgObfO1AQQDzuZtNNz29bVh8h5R97JrjxA==", + "license": "CC0-1.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/@studio/common": { + "resolved": "tools/common", + "link": true + }, "node_modules/@swc/core": { "version": "1.13.5", "devOptional": true, @@ -7756,7 +8439,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -7773,7 +8455,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -7790,7 +8471,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "Apache-2.0", "optional": true, "os": [ @@ -7807,7 +8487,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -7824,7 +8503,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -7841,7 +8519,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -7858,7 +8535,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -7875,7 +8551,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -7892,7 +8567,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -7909,7 +8583,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "Apache-2.0 AND MIT", "optional": true, "os": [ @@ -8065,6 +8738,12 @@ "node": ">= 10" } }, + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", + "license": "MIT" + }, "node_modules/@tsconfig/node10": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", @@ -8119,9 +8798,6 @@ }, "node_modules/@types/aws-lambda": { "version": "8.10.160", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.160.tgz", - "integrity": "sha512-uoO4QVQNWFPJMh26pXtmtrRfGshPUSpMZGUyUQY20FhfHEElEBOPKgVmFs1z+kbpyBsRs2JnoOPT7++Z4GA9pA==", - "dev": true, "license": "MIT" }, "node_modules/@types/babel__core": { @@ -8163,9 +8839,6 @@ }, "node_modules/@types/btoa-lite": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/btoa-lite/-/btoa-lite-1.0.2.tgz", - "integrity": "sha512-ZYbcE2x7yrvNFJiU7xJGrpF/ihpkM7zKgw8bha3LNJSesvTtUNxbpzaT7WXBIryf6jovisrxTBvymxMeLLj1Mg==", - "dev": true, "license": "MIT" }, "node_modules/@types/cacheable-request": { @@ -8250,6 +8923,8 @@ }, "node_modules/@types/fs-extra": { "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz", + "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8257,6 +8932,16 @@ "@types/node": "*" } }, + "node_modules/@types/glob": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, "node_modules/@types/gradient-parser": { "version": "1.1.0", "license": "MIT" @@ -8298,6 +8983,8 @@ }, "node_modules/@types/jsonfile": { "version": "6.1.4", + "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz", + "integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8306,9 +8993,6 @@ }, "node_modules/@types/jsonwebtoken": { "version": "9.0.10", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.10.tgz", - "integrity": "sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==", - "dev": true, "license": "MIT", "dependencies": { "@types/ms": "*", @@ -8335,6 +9019,12 @@ "@types/unist": "*" } }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "optional": true + }, "node_modules/@types/mousetrap": { "version": "1.6.15", "license": "MIT" @@ -8369,6 +9059,8 @@ }, "node_modules/@types/node-forge": { "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.14.tgz", + "integrity": "sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==", "dev": true, "license": "MIT", "dependencies": { @@ -9016,27 +9708,6 @@ "react": ">= 16.8.0" } }, - "node_modules/@vitejs/plugin-react": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.4.tgz", - "integrity": "sha512-VIcFLdRi/VYRU8OL/puL7QXMYafHmqOnwTZY50U1JPlCNj30PxCMx65c494b1K9be9hX83KVt0+gTEwTWLqToA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.29.0", - "@babel/plugin-transform-react-jsx-self": "^7.27.1", - "@babel/plugin-transform-react-jsx-source": "^7.27.1", - "@rolldown/pluginutils": "1.0.0-rc.3", - "@types/babel__core": "^7.20.5", - "react-refresh": "^0.18.0" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" - } - }, "node_modules/@vitest/expect": { "version": "4.0.18", "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.18.tgz", @@ -9413,7 +10084,9 @@ } }, "node_modules/@wordpress/components/node_modules/path-to-regexp": { - "version": "6.2.1", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", "license": "MIT" }, "node_modules/@wordpress/compose": { @@ -9688,7 +10361,6 @@ "version": "4.39.0", "resolved": "https://registry.npmjs.org/@wordpress/react-i18n/-/react-i18n-4.39.0.tgz", "integrity": "sha512-HWtv+KgBbiWbqVIGdNOUXMjI+fW0/ZARfHXIKGJnKLOHza/a0paulRmtYV6JazcNXs1kWNGG4GVKycM5kdNsLA==", - "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@wordpress/element": "^6.39.0", @@ -9821,7 +10493,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@wp-playground/blueprints/-/blueprints-3.1.1.tgz", "integrity": "sha512-PMA0di/4A5OiUXdQ0wa+H+FJETeUv7WcSt6QoDzpjU0GQ2E+NBy/7e8mOhN7V644AG2ySuFf1znIK8SbluYzXA==", - "dev": true, "dependencies": { "@php-wasm/logger": "3.1.1", "@php-wasm/node": "3.1.1", @@ -9863,7 +10534,8 @@ }, "node_modules/@wp-playground/blueprints/node_modules/ajv": { "version": "8.12.0", - "dev": true, + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -9878,7 +10550,8 @@ }, "node_modules/@wp-playground/blueprints/node_modules/cliui": { "version": "8.0.1", - "dev": true, + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -9889,112 +10562,184 @@ "node": ">=12" } }, - "node_modules/@wp-playground/blueprints/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "node_modules/@wp-playground/blueprints/node_modules/ini": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", + "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@wp-playground/blueprints/node_modules/encodeurl": { - "version": "2.0.0", - "dev": true, + "node_modules/@wp-playground/blueprints/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/@wp-playground/blueprints/node_modules/pako": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", + "license": "(MIT AND Zlib)" + }, + "node_modules/@wp-playground/blueprints/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, "engines": { - "node": ">= 0.8" + "node": ">=8" } }, - "node_modules/@wp-playground/blueprints/node_modules/express": { - "version": "4.22.0", - "dev": true, + "node_modules/@wp-playground/blueprints/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "license": "MIT", "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "~1.20.3", - "content-disposition": "~0.5.4", - "content-type": "~1.0.4", - "cookie": "~0.7.1", - "cookie-signature": "~1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.3.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "~0.1.12", - "proxy-addr": "~2.0.7", - "qs": "~6.14.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "~0.19.0", - "serve-static": "~1.16.2", - "setprototypeof": "1.2.0", - "statuses": "~2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" }, "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "node": ">=12" } }, - "node_modules/@wp-playground/blueprints/node_modules/ini": { - "version": "4.1.2", - "dev": true, + "node_modules/@wp-playground/blueprints/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=12" } }, - "node_modules/@wp-playground/blueprints/node_modules/json-schema-traverse": { - "version": "1.0.0", - "dev": true, - "license": "MIT" + "node_modules/@wp-playground/cli": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@wp-playground/cli/-/cli-3.1.1.tgz", + "integrity": "sha512-BRDiKTNTAo5PjY7SG1om7pfx1QAuPPjP5ZW1RXp7e/pgM2dr6pciiNZkSMYZ/Qo45BEYeb3McAXawh/EMRfIgA==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@php-wasm/cli-util": "3.1.1", + "@php-wasm/logger": "3.1.1", + "@php-wasm/node": "3.1.1", + "@php-wasm/progress": "3.1.1", + "@php-wasm/universal": "3.1.1", + "@php-wasm/util": "3.1.1", + "@php-wasm/xdebug-bridge": "3.1.1", + "@wp-playground/blueprints": "3.1.1", + "@wp-playground/common": "3.1.1", + "@wp-playground/storage": "3.1.1", + "@wp-playground/tools": "3.1.1", + "@wp-playground/wordpress": "3.1.1", + "@zip.js/zip.js": "2.7.57", + "ajv": "8.12.0", + "async-lock": "1.4.1", + "clean-git-ref": "2.0.1", + "crc-32": "1.2.2", + "diff3": "0.0.4", + "express": "4.22.0", + "fast-xml-parser": "^5.3.4", + "fs-ext-extra-prebuilt": "2.2.7", + "fs-extra": "11.1.1", + "ignore": "5.3.2", + "ini": "4.1.2", + "jsonc-parser": "3.3.1", + "minimisted": "2.0.1", + "octokit": "3.1.2", + "pako": "1.0.10", + "pify": "2.3.0", + "ps-man": "1.1.8", + "readable-stream": "3.6.2", + "sha.js": "2.4.12", + "simple-get": "4.0.1", + "tmp-promise": "3.0.3", + "wasm-feature-detect": "1.8.0", + "ws": "8.18.3", + "xml2js": "0.6.2", + "yargs": "17.7.2" + }, + "bin": { + "wp-playground-cli": "wp-playground.js" + } }, - "node_modules/@wp-playground/blueprints/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" + "node_modules/@wp-playground/cli/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } }, - "node_modules/@wp-playground/blueprints/node_modules/pako": { - "version": "1.0.10", - "dev": true, - "license": "(MIT AND Zlib)" + "node_modules/@wp-playground/cli/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } }, - "node_modules/@wp-playground/blueprints/node_modules/safe-buffer": { - "version": "5.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/@wp-playground/cli/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@wp-playground/cli/node_modules/ini": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", + "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@wp-playground/cli/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, - "node_modules/@wp-playground/blueprints/node_modules/strip-ansi": { + "node_modules/@wp-playground/cli/node_modules/pako": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", + "license": "(MIT AND Zlib)" + }, + "node_modules/@wp-playground/cli/node_modules/strip-ansi": { "version": "6.0.1", - "dev": true, + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -10003,9 +10748,10 @@ "node": ">=8" } }, - "node_modules/@wp-playground/blueprints/node_modules/yargs": { + "node_modules/@wp-playground/cli/node_modules/yargs": { "version": "17.7.2", - "dev": true, + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "license": "MIT", "dependencies": { "cliui": "^8.0.1", @@ -10020,9 +10766,10 @@ "node": ">=12" } }, - "node_modules/@wp-playground/blueprints/node_modules/yargs-parser": { + "node_modules/@wp-playground/cli/node_modules/yargs-parser": { "version": "21.1.1", - "dev": true, + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "license": "ISC", "engines": { "node": ">=12" @@ -10032,7 +10779,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@wp-playground/common/-/common-3.1.1.tgz", "integrity": "sha512-RL89y7KppahForbsYM43tf7naRw2zwCj+bBnXjB4iscvQ+zFyJyxpsS4o1hpRzWJ99rT9n4v6HmnPg+PiUbloQ==", - "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@php-wasm/universal": "3.1.1", @@ -10048,7 +10794,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "dev": true, "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" @@ -10058,7 +10803,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@wp-playground/storage/-/storage-3.1.1.tgz", "integrity": "sha512-wiuICDuHAk4uORKEBgBWRPNiVdItyI6aQykK2qvlIg5/Awzd9sllxMGMrcTQKSp8E9hl/ZRo/UPRjM7n9I/d+A==", - "dev": true, "license": "GPL-2.0-or-later", "dependencies": { "@php-wasm/stream-compression": "3.1.1", @@ -10090,7 +10834,6 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -10101,133 +10844,34 @@ "node": ">=12" } }, - "node_modules/@wp-playground/storage/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, "node_modules/@wp-playground/storage/node_modules/diff3": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/diff3/-/diff3-0.0.3.tgz", "integrity": "sha512-iSq8ngPOt0K53A6eVr4d5Kn6GNrM2nQZtC740pzIriHtn4pOQ2lyzEXQMBeVcWERN0ye7fhBsk9PbLLQOnUx/g==", - "dev": true, "license": "MIT" }, - "node_modules/@wp-playground/storage/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/@wp-playground/storage/node_modules/express": { - "version": "4.22.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.22.0.tgz", - "integrity": "sha512-c2iPh3xp5vvCLgaHK03+mWLFPhox7j1LwyxcZwFVApEv5i0X+IjPpbT50SJJwwLpdBVfp45AkK/v+AFgv/XlfQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "~1.20.3", - "content-disposition": "~0.5.4", - "content-type": "~1.0.4", - "cookie": "~0.7.1", - "cookie-signature": "~1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.3.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "~0.1.12", - "proxy-addr": "~2.0.7", - "qs": "~6.14.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "~0.19.0", - "serve-static": "~1.16.2", - "setprototypeof": "1.2.0", - "statuses": "~2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/@wp-playground/storage/node_modules/ini": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "dev": true, "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@wp-playground/storage/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, "node_modules/@wp-playground/storage/node_modules/pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/@wp-playground/storage/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/@wp-playground/storage/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -10240,7 +10884,6 @@ "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, "license": "MIT", "dependencies": { "cliui": "^8.0.1", @@ -10259,27 +10902,35 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, "license": "ISC", "engines": { "node": ">=12" } }, - "node_modules/@wp-playground/wordpress": { + "node_modules/@wp-playground/tools": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@wp-playground/wordpress/-/wordpress-3.1.1.tgz", - "integrity": "sha512-1zYmhzEc++jMfsTGOBGRHlpFw/IaXqvwlDP75F+1pk0InDVVC44nQ+AB+Clewjp7B0aBnXea8C6+PtaK8ogDdQ==", - "dev": true, + "resolved": "https://registry.npmjs.org/@wp-playground/tools/-/tools-3.1.1.tgz", + "integrity": "sha512-bVokza3mdVwjhnp9x1A3RMVsRb8ICcGuoDbCpgstdaHjQuf09Ox4PbuayRqOoaPeqN3LSeEOryM/F0T7H9cfcw==", "license": "GPL-2.0-or-later", "dependencies": { - "@php-wasm/logger": "3.1.1", - "@php-wasm/node": "3.1.1", - "@php-wasm/universal": "3.1.1", - "@php-wasm/util": "3.1.1", - "@wp-playground/common": "3.1.1", + "@wp-playground/blueprints": "3.1.1", + "@zip.js/zip.js": "2.7.57", + "ajv": "8.12.0", + "async-lock": "1.4.1", + "clean-git-ref": "2.0.1", + "crc-32": "1.2.2", + "diff3": "0.0.4", "express": "4.22.0", "fs-ext-extra-prebuilt": "2.2.7", + "ignore": "5.3.2", "ini": "4.1.2", + "minimisted": "2.0.1", + "octokit": "3.1.2", + "pako": "1.0.10", + "pify": "2.3.0", + "readable-stream": "3.6.2", + "sha.js": "2.4.12", + "simple-get": "4.0.1", "wasm-feature-detect": "1.8.0", "ws": "8.18.3", "yargs": "17.7.2" @@ -10289,11 +10940,26 @@ "npm": ">=10.2.3" } }, - "node_modules/@wp-playground/wordpress/node_modules/cliui": { + "node_modules/@wp-playground/tools/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@wp-playground/tools/node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -10304,116 +10970,116 @@ "node": ">=12" } }, - "node_modules/@wp-playground/wordpress/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, + "node_modules/@wp-playground/tools/node_modules/ini": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", + "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@wp-playground/tools/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/@wp-playground/tools/node_modules/pako": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", + "license": "(MIT AND Zlib)" + }, + "node_modules/@wp-playground/tools/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "license": "MIT", "dependencies": { - "ms": "2.0.0" + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@wp-playground/wordpress/node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "dev": true, + "node_modules/@wp-playground/tools/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, "engines": { - "node": ">= 0.8" + "node": ">=12" } }, - "node_modules/@wp-playground/wordpress/node_modules/express": { - "version": "4.22.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.22.0.tgz", - "integrity": "sha512-c2iPh3xp5vvCLgaHK03+mWLFPhox7j1LwyxcZwFVApEv5i0X+IjPpbT50SJJwwLpdBVfp45AkK/v+AFgv/XlfQ==", - "dev": true, - "license": "MIT", + "node_modules/@wp-playground/tools/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/@wp-playground/wordpress": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@wp-playground/wordpress/-/wordpress-3.1.1.tgz", + "integrity": "sha512-1zYmhzEc++jMfsTGOBGRHlpFw/IaXqvwlDP75F+1pk0InDVVC44nQ+AB+Clewjp7B0aBnXea8C6+PtaK8ogDdQ==", + "license": "GPL-2.0-or-later", "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "~1.20.3", - "content-disposition": "~0.5.4", - "content-type": "~1.0.4", - "cookie": "~0.7.1", - "cookie-signature": "~1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.3.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "~0.1.12", - "proxy-addr": "~2.0.7", - "qs": "~6.14.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "~0.19.0", - "serve-static": "~1.16.2", - "setprototypeof": "1.2.0", - "statuses": "~2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "@php-wasm/logger": "3.1.1", + "@php-wasm/node": "3.1.1", + "@php-wasm/universal": "3.1.1", + "@php-wasm/util": "3.1.1", + "@wp-playground/common": "3.1.1", + "express": "4.22.0", + "fs-ext-extra-prebuilt": "2.2.7", + "ini": "4.1.2", + "wasm-feature-detect": "1.8.0", + "ws": "8.18.3", + "yargs": "17.7.2" }, "engines": { - "node": ">= 0.10.0" + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@wp-playground/wordpress/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "engines": { + "node": ">=12" } }, "node_modules/@wp-playground/wordpress/node_modules/ini": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.2.tgz", "integrity": "sha512-AMB1mvwR1pyBFY/nSevUX6y8nJWS63/SzUKD3JyQn97s4xgIdgQPT75IRouIiBAN4yLQBUShNYVW0+UG25daCw==", - "dev": true, "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@wp-playground/wordpress/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/@wp-playground/wordpress/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/@wp-playground/wordpress/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -10426,7 +11092,6 @@ "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, "license": "MIT", "dependencies": { "cliui": "^8.0.1", @@ -10445,7 +11110,6 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -10470,16 +11134,18 @@ "license": "Apache-2.0" }, "node_modules/@yao-pkg/pkg": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/@yao-pkg/pkg/-/pkg-6.12.0.tgz", - "integrity": "sha512-yXdr5XTnEUm+AuBWPvMdv1z6dCcuKLUPYGZKPwb0pS8YE+P/Jspb47QjutcjfA31tIkGU6JTsOhlGxDxrO/A2w==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/@yao-pkg/pkg/-/pkg-6.13.1.tgz", + "integrity": "sha512-HZGrjKngYUpCAHUjBHb9VMb0V7FsJtoMHtw0tfSS4GeS/Ur8ZK/EGDWtdj+apGERyScc3QLOyg1mXYuv01gqvw==", "dev": true, "license": "MIT", "dependencies": { "@babel/generator": "^7.23.0", "@babel/parser": "^7.23.0", + "@babel/traverse": "^7.23.0", "@babel/types": "^7.23.0", "@yao-pkg/pkg-fetch": "3.5.32", + "esbuild": "^0.24.0", "into-stream": "^6.0.0", "minimist": "^1.2.6", "multistream": "^4.1.0", @@ -10487,8 +11153,9 @@ "picomatch": "^4.0.2", "prebuild-install": "^7.1.1", "resolve": "^1.22.10", + "resolve.exports": "^2.0.3", "stream-meter": "^1.0.4", - "tar": "^7.4.3", + "tar": "^7.5.6", "tinyglobby": "^0.2.11", "unzipper": "^0.12.3" }, @@ -10572,6 +11239,64 @@ "node": ">=10" } }, + "node_modules/@yao-pkg/pkg/node_modules/@esbuild/darwin-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", + "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@yao-pkg/pkg/node_modules/esbuild": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz", + "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.24.2", + "@esbuild/android-arm": "0.24.2", + "@esbuild/android-arm64": "0.24.2", + "@esbuild/android-x64": "0.24.2", + "@esbuild/darwin-arm64": "0.24.2", + "@esbuild/darwin-x64": "0.24.2", + "@esbuild/freebsd-arm64": "0.24.2", + "@esbuild/freebsd-x64": "0.24.2", + "@esbuild/linux-arm": "0.24.2", + "@esbuild/linux-arm64": "0.24.2", + "@esbuild/linux-ia32": "0.24.2", + "@esbuild/linux-loong64": "0.24.2", + "@esbuild/linux-mips64el": "0.24.2", + "@esbuild/linux-ppc64": "0.24.2", + "@esbuild/linux-riscv64": "0.24.2", + "@esbuild/linux-s390x": "0.24.2", + "@esbuild/linux-x64": "0.24.2", + "@esbuild/netbsd-arm64": "0.24.2", + "@esbuild/netbsd-x64": "0.24.2", + "@esbuild/openbsd-arm64": "0.24.2", + "@esbuild/openbsd-x64": "0.24.2", + "@esbuild/sunos-x64": "0.24.2", + "@esbuild/win32-arm64": "0.24.2", + "@esbuild/win32-ia32": "0.24.2", + "@esbuild/win32-x64": "0.24.2" + } + }, "node_modules/@yao-pkg/pkg/node_modules/picomatch": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", @@ -10592,9 +11317,6 @@ }, "node_modules/@zip.js/zip.js": { "version": "2.7.57", - "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.7.57.tgz", - "integrity": "sha512-BtonQ1/jDnGiMed6OkV6rZYW78gLmLswkHOzyMrMb+CAR7CZO8phOHO6c2qw6qb1g1betN7kwEHhhZk30dv+NA==", - "dev": true, "license": "BSD-3-Clause", "engines": { "bun": ">=0.7.0", @@ -10684,7 +11406,6 @@ }, "node_modules/aggregate-error": { "version": "3.1.0", - "dev": true, "license": "MIT", "dependencies": { "clean-stack": "^2.0.0", @@ -10744,6 +11465,30 @@ "dev": true, "license": "MIT" }, + "node_modules/amp": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/amp/-/amp-0.3.1.tgz", + "integrity": "sha512-OwIuC4yZaRogHKiuU5WlMR5Xk/jAcpPtawWL05Gj8Lvm2F6mwoJt4O/bHI+DHwG79vWd+8OFYM4/BzYqyRd3qw==", + "license": "MIT" + }, + "node_modules/amp-message": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/amp-message/-/amp-message-0.1.2.tgz", + "integrity": "sha512-JqutcFwoU1+jhv7ArgW38bqrE+LQdcRv4NxNw0mp0JHQyB6tXesWRjtYKlDgHRY2o3JE5UTaBGUK8kSWUdxWUg==", + "license": "MIT", + "dependencies": { + "amp": "0.3.1" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/ansi-escapes": { "version": "4.3.2", "dev": true, @@ -10789,6 +11534,15 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/ansis": { + "version": "4.0.0-node10", + "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.0.0-node10.tgz", + "integrity": "sha512-BRrU0Bo1X9dFGw6KgGz6hWrqQuOlVEDOzkb0QSLZY9sXHqA7pNj7yHPVJRz7y/rj4EOJ3d/D5uxH+ee9leYgsg==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, "node_modules/any-promise": { "version": "1.3.0", "dev": true, @@ -10796,7 +11550,6 @@ }, "node_modules/anymatch": { "version": "3.1.3", - "dev": true, "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", @@ -11038,6 +11791,36 @@ "version": "2.0.6", "license": "MIT" }, + "node_modules/asar": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "chromium-pickle-js": "^0.2.0", + "commander": "^5.0.0", + "glob": "^7.1.6", + "minimatch": "^3.0.4" + }, + "bin": { + "asar": "bin/asar.js" + }, + "engines": { + "node": ">=10.12.0" + }, + "optionalDependencies": { + "@types/glob": "^7.1.1" + } + }, + "node_modules/asar/node_modules/commander": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/assertion-error": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", @@ -11048,15 +11831,24 @@ "node": ">=12" } }, + "node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/async": { "version": "3.2.5", "license": "MIT" }, "node_modules/async-lock": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.4.1.tgz", - "integrity": "sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==", - "dev": true, "license": "MIT" }, "node_modules/asynckit": { @@ -11089,7 +11881,6 @@ }, "node_modules/available-typed-arrays": { "version": "1.0.7", - "dev": true, "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" @@ -11189,9 +11980,9 @@ } }, "node_modules/bare-fs": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.3.tgz", - "integrity": "sha512-9+kwVx8QYvt3hPWnmb19tPnh38c6Nihz8Lx3t0g9+4GoIf3/fTgYwM4Z6NxgI+B9elLQA7mLE9PpqcWtOMRDiQ==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.5.4.tgz", + "integrity": "sha512-POK4oplfA7P7gqvetNmCs4CNtm9fNsx+IAh7jH7GgU0OJdge2rso0R20TNWVq6VoWcCvsTdlNDaleLHGaKx8CA==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -11305,16 +12096,25 @@ "baseline-browser-mapping": "dist/cli.js" } }, + "node_modules/basic-ftp": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.1.0.tgz", + "integrity": "sha512-RkaJzeJKDbaDWTIPiJwubyljaEPwpVWkm9Rt5h9Nd6h7tEXTJ3VB4qxdZBioV7JO5yLUaOKwz7vDOzlncUsegw==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/before-after-hook": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", - "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", - "dev": true, "license": "Apache-2.0" }, + "node_modules/benchmark-site-editor": { + "resolved": "tools/benchmark-site-editor", + "link": true + }, "node_modules/binary-extensions": { "version": "2.2.0", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -11335,22 +12135,30 @@ "dev": true, "license": "MIT" }, + "node_modules/bodec": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bodec/-/bodec-0.1.0.tgz", + "integrity": "sha512-Ylo+MAo5BDUq1KA3f3R/MFhh+g8cnHmo8bz3YPGhI1znrMaf77ol1sfvYJzsw3nTE+Y2GryfDxBaR+AqpAkEHQ==", + "license": "MIT" + }, "node_modules/body-parser": { - "version": "1.20.3", + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", + "bytes": "~3.1.2", "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", "type-is": "~1.6.18", - "unpipe": "1.0.0" + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8", @@ -11364,21 +12172,37 @@ "ms": "2.0.0" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.13.0", - "license": "BSD-3-Clause", + "node_modules/body-parser/node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", "dependencies": { - "side-channel": "^1.0.6" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { - "node": ">=0.6" + "node": ">= 0.8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/body-parser/node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, "node_modules/boolean": { @@ -11389,9 +12213,6 @@ }, "node_modules/bottleneck": { "version": "2.19.5", - "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", - "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==", - "dev": true, "license": "MIT" }, "node_modules/bplist-creator": { @@ -11412,7 +12233,6 @@ }, "node_modules/braces": { "version": "3.0.3", - "dev": true, "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -11455,9 +12275,6 @@ }, "node_modules/btoa-lite": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA==", - "dev": true, "license": "MIT" }, "node_modules/buffer": { @@ -11492,9 +12309,6 @@ }, "node_modules/buffer-equal-constant-time": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "dev": true, "license": "BSD-3-Clause" }, "node_modules/buffer-from": { @@ -11716,7 +12530,6 @@ }, "node_modules/call-bind": { "version": "1.0.8", - "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.0", @@ -11893,9 +12706,14 @@ "version": "0.7.0", "license": "MIT" }, + "node_modules/charm": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/charm/-/charm-0.1.2.tgz", + "integrity": "sha512-syedaZ9cPe7r3hoQA9twWYKu5AIyCswN5+szkmPBe9ccdLrj4bYaCnLVPTLd2kgVRc7+zoX4tyPgRnFKCj5YjQ==", + "license": "MIT/X11" + }, "node_modules/chokidar": { "version": "3.6.0", - "dev": true, "license": "MIT", "dependencies": { "anymatch": "~3.1.2", @@ -11918,7 +12736,6 @@ }, "node_modules/chokidar/node_modules/glob-parent": { "version": "5.1.2", - "dev": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -11943,6 +12760,24 @@ "node": ">=6.0" } }, + "node_modules/chromium-pickle-js": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/chunkify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chunkify/-/chunkify-5.0.0.tgz", + "integrity": "sha512-G8dj/3/Gm+1yL4oWSdwIxihZWFlgC4V2zYtIApacI0iPIRKBHlBGOGAiDUBZgrj4H8MBA8g8fPFwnJrWF3wl7Q==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ci-info": { "version": "3.9.0", "dev": true, @@ -11963,14 +12798,10 @@ }, "node_modules/clean-git-ref": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/clean-git-ref/-/clean-git-ref-2.0.1.tgz", - "integrity": "sha512-bLSptAy2P0s6hU4PzuIMKmMJJSE6gLXGH1cntDu7bWJUksvuM+7ReOK61mozULErYvP6a15rnYl0zFDef+pyPw==", - "dev": true, "license": "Apache-2.0" }, "node_modules/clean-stack": { "version": "2.2.0", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -12013,6 +12844,30 @@ "@colors/colors": "1.5.0" } }, + "node_modules/cli-tableau": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/cli-tableau/-/cli-tableau-2.0.1.tgz", + "integrity": "sha512-he+WTicka9cl0Fg/y+YyxcN6/bfQ/1O3QmgxRXDhABKqLzvoOSM4fMzp39uMyLBulAFuywD2N7UaoQE7WaADxQ==", + "dependencies": { + "chalk": "3.0.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/cli-tableau/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/cli-truncate": { "version": "3.1.0", "dev": true, @@ -12208,6 +13063,10 @@ "node": ">=16" } }, + "node_modules/compare-perf": { + "resolved": "tools/compare-perf", + "link": true + }, "node_modules/compare-version": { "version": "0.1.2", "dev": true, @@ -12353,7 +13212,6 @@ }, "node_modules/cookie": { "version": "0.7.2", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -12429,6 +13287,12 @@ "version": "1.1.1", "license": "MIT" }, + "node_modules/croner": { + "version": "4.1.97", + "resolved": "https://registry.npmjs.org/croner/-/croner-4.1.97.tgz", + "integrity": "sha512-/f6gpQuxDaqXu+1kwQYSckUglPaOrHdbIlBAu0YuW8/Cdb45XwXYNUBXg3r/9Mo6n540Kn/smKcZWko5x99KrQ==", + "license": "MIT" + }, "node_modules/cross-dirname": { "version": "0.1.0", "dev": true, @@ -12512,10 +13376,25 @@ "version": "3.2.3", "license": "MIT" }, + "node_modules/culvert": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/culvert/-/culvert-0.1.2.tgz", + "integrity": "sha512-yi1x3EAWKjQTreYWeSd98431AV+IEE0qoDyOoaHJ7KJ21gv6HtBXHVLX74opVSGqcR8/AbjJBHAHpcOy2bj5Gg==", + "license": "MIT" + }, "node_modules/custom-error-instance": { "version": "2.1.1", "license": "ISC" }, + "node_modules/data-uri-to-buffer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, "node_modules/data-urls": { "version": "5.0.0", "dev": true, @@ -12588,6 +13467,12 @@ "version": "4.1.0-0", "license": "MIT" }, + "node_modules/dayjs": { + "version": "1.11.15", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.15.tgz", + "integrity": "sha512-MC+DfnSWiM9APs7fpiurHGCoeIx0Gdl6QZBy+5lu8MbYKN5FZEXqOgrundfibdfhGZ15o9hzmZ2xJjZnbvgKXQ==", + "license": "MIT" + }, "node_modules/debug": { "version": "4.4.3", "license": "MIT", @@ -12621,7 +13506,6 @@ }, "node_modules/decompress-response": { "version": "6.0.0", - "dev": true, "license": "MIT", "dependencies": { "mimic-response": "^3.1.0" @@ -12635,7 +13519,6 @@ }, "node_modules/decompress-response/node_modules/mimic-response": { "version": "3.1.0", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -12686,7 +13569,6 @@ }, "node_modules/define-data-property": { "version": "1.1.4", - "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", @@ -12716,6 +13598,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "license": "MIT", + "dependencies": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "license": "MIT", @@ -12736,9 +13632,6 @@ }, "node_modules/deprecation": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "dev": true, "license": "ISC" }, "node_modules/dequal": { @@ -12795,7 +13688,9 @@ "license": "Apache-2.0" }, "node_modules/diff": { - "version": "4.0.2", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" @@ -12803,7 +13698,6 @@ }, "node_modules/diff3": { "version": "0.0.4", - "dev": true, "license": "MIT" }, "node_modules/dir-compare": { @@ -12917,9 +13811,6 @@ }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dev": true, "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" @@ -12957,15 +13848,13 @@ } }, "node_modules/electron-installer-common": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/electron-installer-common/-/electron-installer-common-0.10.4.tgz", - "integrity": "sha512-8gMNPXfAqUE5CfXg8RL0vXpLE9HAaPkgLXVoHE3BMUzogMWenf4LmwQ27BdCUrEhkjrKl+igs2IHJibclR3z3Q==", + "version": "0.10.3", "dev": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "@electron/asar": "^3.2.5", "@malept/cross-spawn-promise": "^1.0.0", + "asar": "^3.0.0", "debug": "^4.1.1", "fs-extra": "^9.0.0", "glob": "^7.1.4", @@ -13190,9 +14079,7 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.286", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", - "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", + "version": "1.5.267", "dev": true, "license": "ISC" }, @@ -13233,9 +14120,7 @@ } }, "node_modules/electron-winstaller": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/electron-winstaller/-/electron-winstaller-5.4.0.tgz", - "integrity": "sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==", + "version": "5.3.1", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -13510,7 +14395,6 @@ }, "node_modules/end-of-stream": { "version": "1.4.4", - "devOptional": true, "license": "MIT", "dependencies": { "once": "^1.4.0" @@ -13528,6 +14412,18 @@ "node": ">=10.13.0" } }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/entities": { "version": "6.0.1", "license": "BSD-2-Clause", @@ -14018,6 +14914,23 @@ "node": ">=18" } }, + "node_modules/esbuild/node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/esbuild/node_modules/@esbuild/netbsd-x64": { "version": "0.25.12", "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", @@ -14035,6 +14948,23 @@ "node": ">=18" } }, + "node_modules/esbuild/node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/esbuild/node_modules/@esbuild/openbsd-x64": { "version": "0.25.12", "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", @@ -14141,6 +15071,36 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, "node_modules/eslint": { "version": "9.39.2", "license": "MIT", @@ -14199,14 +15159,14 @@ } }, "node_modules/eslint-config-prettier": { - "version": "10.1.8", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.2.tgz", + "integrity": "sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ==", + "dev": true, "license": "MIT", "bin": { "eslint-config-prettier": "bin/cli.js" }, - "funding": { - "url": "https://opencollective.com/eslint-config-prettier" - }, "peerDependencies": { "eslint": ">=7.0.0" } @@ -14392,12 +15352,14 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "5.5.4", + "version": "5.5.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.5.tgz", + "integrity": "sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==", "dev": true, "license": "MIT", "dependencies": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.11.7" + "prettier-linter-helpers": "^1.0.1", + "synckit": "^0.11.12" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -14450,7 +15412,7 @@ } }, "node_modules/eslint-plugin-studio": { - "resolved": "packages/eslint-plugin-studio", + "resolved": "tools/eslint-plugin-studio", "link": true }, "node_modules/eslint-scope": { @@ -14531,6 +15493,19 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/esquery": { "version": "1.5.0", "license": "BSD-3-Clause", @@ -14605,6 +15580,12 @@ "node": ">= 0.6" } }, + "node_modules/eventemitter2": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-5.0.1.tgz", + "integrity": "sha512-5EM1GHXycJBS6mauYAbVKT1cVs7POKWb2NXD4Vyt8dDqeZa7LaDK1/sjtL+Zb0lzTpSNil4596Dyu97hz37QLg==", + "license": "MIT" + }, "node_modules/eventemitter3": { "version": "4.0.7", "license": "MIT" @@ -14716,6 +15697,8 @@ }, "node_modules/expect-type": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -14728,37 +15711,39 @@ "license": "Apache-2.0" }, "node_modules/express": { - "version": "4.21.2", + "version": "4.22.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.0.tgz", + "integrity": "sha512-c2iPh3xp5vvCLgaHK03+mWLFPhox7j1LwyxcZwFVApEv5i0X+IjPpbT50SJJwwLpdBVfp45AkK/v+AFgv/XlfQ==", "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", "debug": "2.6.9", "depd": "2.0.0", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", "merge-descriptors": "1.0.3", "methods": "~1.1.2", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", + "path-to-regexp": "~0.1.12", "proxy-addr": "~2.0.7", - "qs": "6.13.0", + "qs": "~6.14.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", + "send": "~0.19.0", + "serve-static": "~1.16.2", "setprototypeof": "1.2.0", - "statuses": "2.0.1", + "statuses": "~2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" @@ -14771,15 +15756,10 @@ "url": "https://opencollective.com/express" } }, - "node_modules/express/node_modules/cookie": { - "version": "0.7.1", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/express/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -14787,46 +15767,23 @@ }, "node_modules/express/node_modules/encodeurl": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/express/node_modules/finalhandler": { - "version": "1.3.1", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/express/node_modules/ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, - "node_modules/express/node_modules/qs": { - "version": "6.13.0", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/express/node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", @@ -14911,12 +15868,23 @@ "fd-slicer": "~1.1.0" } }, + "node_modules/extrareqp2": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/extrareqp2/-/extrareqp2-1.0.0.tgz", + "integrity": "sha512-Gum0g1QYb6wpPJCVypWP3bbIuaibcFiJcpuPM10YSXp/tzqi84x9PJageob+eN4xVRIOto4wjSGNLyMD54D2xA==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "license": "MIT" }, "node_modules/fast-diff": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", "dev": true, "license": "Apache-2.0" }, @@ -14925,15 +15893,16 @@ "license": "MIT" }, "node_modules/fast-glob": { - "version": "3.3.2", - "dev": true, + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" @@ -14941,7 +15910,6 @@ }, "node_modules/fast-glob/node_modules/glob-parent": { "version": "5.1.2", - "dev": true, "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -14950,6 +15918,12 @@ "node": ">= 6" } }, + "node_modules/fast-json-patch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz", + "integrity": "sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==", + "license": "MIT" + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "license": "MIT" @@ -14977,14 +15951,37 @@ ], "license": "BSD-3-Clause" }, + "node_modules/fast-xml-parser": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.3.6.tgz", + "integrity": "sha512-QNI3sAvSvaOiaMl8FYU4trnEzCwiRr8XMWgAHzlrWpTSj+QaCSvOf1h82OEP1s4hiAXhnbXSyFWCf4ldZzZRVA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "strnum": "^2.1.2" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, "node_modules/fastq": { "version": "1.16.0", - "dev": true, "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, + "node_modules/fclone": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fclone/-/fclone-1.0.11.tgz", + "integrity": "sha512-GDqVQezKzRABdeqflsgMr7ktzgF9CyS+p2oe0jJqUY6izSSbhPIQJDpoU4PtGcD7VPM9xh/dVrTu6z1nwgmEGw==", + "license": "MIT" + }, "node_modules/fd-slicer": { "version": "1.1.0", "dev": true, @@ -15055,7 +16052,6 @@ }, "node_modules/fill-range": { "version": "7.1.1", - "dev": true, "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -15066,7 +16062,6 @@ }, "node_modules/finalhandler": { "version": "1.3.2", - "dev": true, "license": "MIT", "dependencies": { "debug": "2.6.9", @@ -15083,7 +16078,6 @@ }, "node_modules/finalhandler/node_modules/debug": { "version": "2.6.9", - "dev": true, "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -15091,7 +16085,6 @@ }, "node_modules/finalhandler/node_modules/encodeurl": { "version": "2.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -15099,12 +16092,10 @@ }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", - "dev": true, "license": "MIT" }, "node_modules/finalhandler/node_modules/statuses": { "version": "2.0.2", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -15204,7 +16195,6 @@ }, "node_modules/for-each": { "version": "0.3.5", - "dev": true, "license": "MIT", "dependencies": { "is-callable": "^1.2.7" @@ -15369,7 +16359,6 @@ "version": "2.2.7", "resolved": "https://registry.npmjs.org/fs-ext-extra-prebuilt/-/fs-ext-extra-prebuilt-2.2.7.tgz", "integrity": "sha512-Q7rayYRBDIvDF01HWOwSSjoaP+05N1g+o3BXL1Zf8Frw2JkjSmi4EtvCBITuW30l6hB2m2TW1pehdh8wyU/+gw==", - "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -15380,7 +16369,9 @@ } }, "node_modules/fs-extra": { - "version": "11.3.2", + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", + "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -15433,7 +16424,6 @@ }, "node_modules/fsevents": { "version": "2.3.3", - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -15661,6 +16651,20 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, + "node_modules/get-uri": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.5.tgz", + "integrity": "sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==", + "license": "MIT", + "dependencies": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/gettext-parser": { "version": "1.4.0", "license": "MIT", @@ -15669,6 +16673,18 @@ "safe-buffer": "^5.1.1" } }, + "node_modules/git-node-fs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/git-node-fs/-/git-node-fs-1.0.0.tgz", + "integrity": "sha512-bLQypt14llVXBg0S0u8q8HmU7g9p3ysH+NvVlae5vILuUvs759665HvmR5+wb04KjHyjFcDRxdYb4kyNnluMUQ==", + "license": "MIT" + }, + "node_modules/git-sha1": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/git-sha1/-/git-sha1-0.1.2.tgz", + "integrity": "sha512-2e/nZezdVlyCopOCYHeW0onkbZg7xP1Ad6pndPy1rCygeRykefUS6r7oA5cJRGEFvseiaz5a/qUHFVX1dd6Isg==", + "license": "MIT" + }, "node_modules/github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", @@ -15766,6 +16782,47 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/globby": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", + "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.3", + "path-type": "^6.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/globby/node_modules/path-type": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", + "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/good-listener": { "version": "1.2.2", "license": "MIT", @@ -15834,7 +16891,6 @@ }, "node_modules/has-property-descriptors": { "version": "1.0.2", - "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" @@ -16230,7 +17286,6 @@ }, "node_modules/immediate": { "version": "3.0.6", - "dev": true, "license": "MIT" }, "node_modules/immer": { @@ -16282,7 +17337,6 @@ }, "node_modules/indent-string": { "version": "4.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -16557,7 +17611,6 @@ }, "node_modules/ip-address": { "version": "10.1.0", - "dev": true, "license": "MIT", "engines": { "node": ">= 12" @@ -16643,7 +17696,6 @@ }, "node_modules/is-binary-path": { "version": "2.1.0", - "dev": true, "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" @@ -16677,7 +17729,6 @@ }, "node_modules/is-callable": { "version": "1.2.7", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -16815,6 +17866,39 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container/node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-interactive": { "version": "2.0.0", "license": "MIT", @@ -16871,7 +17955,6 @@ }, "node_modules/is-number": { "version": "7.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">=0.12.0" @@ -16892,6 +17975,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-path-inside": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", + "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-plain-object": { "version": "5.0.0", "license": "MIT", @@ -16996,7 +18091,6 @@ }, "node_modules/is-typed-array": { "version": "1.1.15", - "dev": true, "license": "MIT", "dependencies": { "which-typed-array": "^1.1.16" @@ -17072,7 +18166,6 @@ }, "node_modules/isarray": { "version": "2.0.5", - "dev": true, "license": "MIT" }, "node_modules/isbinaryfile": { @@ -17100,15 +18193,14 @@ } }, "node_modules/jackspeak": { - "version": "2.3.6", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, - "engines": { - "node": ">=14" - }, "funding": { "url": "https://github.com/sponsors/isaacs" }, @@ -17128,6 +18220,24 @@ "version": "3.7.8", "license": "BSD-3-Clause" }, + "node_modules/js-git": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/js-git/-/js-git-0.7.8.tgz", + "integrity": "sha512-+E5ZH/HeRnoc/LW0AmAyhU+mNcWBzAKE+30+IDMLSLbbK+Tdt02AdkOKq9u15rlJsDEGFqtgckc8ZM59LhhiUA==", + "license": "MIT", + "dependencies": { + "bodec": "^0.1.0", + "culvert": "^0.1.2", + "git-sha1": "^0.1.2", + "pako": "^0.2.5" + } + }, + "node_modules/js-git/node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "license": "MIT" + }, "node_modules/js-tokens": { "version": "4.0.0", "license": "MIT" @@ -17143,7 +18253,9 @@ } }, "node_modules/jsdom": { - "version": "24.0.0", + "version": "24.1.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.3.tgz", + "integrity": "sha512-MyL55p3Ut3cXbeBEG7Hcv0mVM8pp8PBNWxRqchZnSfAiES1v1mRnMeFfaHWIPULpwsYfvO+ZmMZz5tGCnjzDUQ==", "dev": true, "license": "MIT", "dependencies": { @@ -17152,21 +18264,21 @@ "decimal.js": "^10.4.3", "form-data": "^4.0.0", "html-encoding-sniffer": "^4.0.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.2", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.5", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.7", + "nwsapi": "^2.2.12", "parse5": "^7.1.2", - "rrweb-cssom": "^0.6.0", + "rrweb-cssom": "^0.7.1", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.3", + "tough-cookie": "^4.1.4", "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^7.0.0", "whatwg-encoding": "^3.1.1", "whatwg-mimetype": "^4.0.0", "whatwg-url": "^14.0.0", - "ws": "^8.16.0", + "ws": "^8.18.0", "xml-name-validator": "^5.0.0" }, "engines": { @@ -17258,7 +18370,7 @@ }, "node_modules/json-stringify-safe": { "version": "5.0.1", - "dev": true, + "devOptional": true, "license": "ISC" }, "node_modules/json5": { @@ -17272,6 +18384,12 @@ "node": ">=6" } }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "license": "MIT" + }, "node_modules/jsonfile": { "version": "6.1.0", "license": "MIT", @@ -17300,9 +18418,6 @@ }, "node_modules/jsonwebtoken": { "version": "9.0.3", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", - "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==", - "dev": true, "license": "MIT", "dependencies": { "jws": "^4.0.1", @@ -17369,9 +18484,6 @@ }, "node_modules/jwa": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", - "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", - "dev": true, "license": "MIT", "dependencies": { "buffer-equal-constant-time": "^1.0.1", @@ -17381,9 +18493,6 @@ }, "node_modules/jws": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", - "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", - "dev": true, "license": "MIT", "dependencies": { "jwa": "^2.0.1", @@ -17586,7 +18695,6 @@ }, "node_modules/localforage": { "version": "1.10.0", - "dev": true, "license": "Apache-2.0", "dependencies": { "lie": "3.1.1" @@ -17594,7 +18702,6 @@ }, "node_modules/localforage/node_modules/lie": { "version": "3.1.1", - "dev": true, "license": "MIT", "dependencies": { "immediate": "~3.0.5" @@ -17621,7 +18728,9 @@ } }, "node_modules/lodash": { - "version": "4.17.21", + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", "license": "MIT" }, "node_modules/lodash._baseiteratee": { @@ -17674,44 +18783,26 @@ }, "node_modules/lodash.includes": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", - "dev": true, "license": "MIT" }, "node_modules/lodash.isboolean": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", - "dev": true, "license": "MIT" }, "node_modules/lodash.isinteger": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", - "dev": true, "license": "MIT" }, "node_modules/lodash.isnumber": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", - "dev": true, "license": "MIT" }, "node_modules/lodash.isplainobject": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true, "license": "MIT" }, "node_modules/lodash.isstring": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", - "dev": true, "license": "MIT" }, "node_modules/lodash.merge": { @@ -17725,9 +18816,6 @@ }, "node_modules/lodash.once": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "dev": true, "license": "MIT" }, "node_modules/lodash.throttle": { @@ -18280,12 +19368,10 @@ }, "node_modules/merge-stream": { "version": "2.0.0", - "dev": true, "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", - "dev": true, "license": "MIT", "engines": { "node": ">= 8" @@ -18807,7 +19893,6 @@ }, "node_modules/micromatch": { "version": "4.0.8", - "dev": true, "license": "MIT", "dependencies": { "braces": "^3.0.3", @@ -18846,7 +19931,6 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -18890,7 +19974,6 @@ }, "node_modules/minimist": { "version": "1.2.8", - "devOptional": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -18898,9 +19981,6 @@ }, "node_modules/minimisted": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/minimisted/-/minimisted-2.0.1.tgz", - "integrity": "sha512-1oPjfuLQa2caorJUM8HV8lGgWCc0qqAO1MNv/k05G4qslmsndV/5WdNZrqCiyqiz3wohia2Ij2B7w2Dr7/IyrA==", - "dev": true, "license": "MIT", "dependencies": { "minimist": "^1.2.5" @@ -19001,7 +20081,6 @@ }, "node_modules/mkdirp": { "version": "1.0.4", - "dev": true, "license": "MIT", "bin": { "mkdirp": "bin/cmd.js" @@ -19049,10 +20128,45 @@ "version": "11.18.1", "license": "MIT" }, + "node_modules/mount-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mount-point/-/mount-point-3.0.0.tgz", + "integrity": "sha512-jAhfD7ZCG+dbESZjcY1SdFVFqSJkh/yGbdsifHcPkvuLRO5ugK0Ssmd9jdATu29BTd4JiN+vkpMzVvsUgP3SZA==", + "license": "MIT", + "dependencies": { + "@sindresorhus/df": "^1.0.1", + "pify": "^2.3.0", + "pinkie-promise": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mount-point/node_modules/@sindresorhus/df": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/df/-/df-1.0.1.tgz", + "integrity": "sha512-1Hyp7NQnD/u4DSxR2DGW78TF9k7R0wZ8ev0BpMAIzA6yTQSHqNb5wTuvtcPYf4FWbVse2rW7RgDsyL8ua2vXHw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/mousetrap": { "version": "1.6.5", "license": "Apache-2.0 WITH LLVM-exception" }, + "node_modules/move-file": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/move-file/-/move-file-4.1.0.tgz", + "integrity": "sha512-YE06K9XLIvMlqSfoZTl32qvbZLPgL70Za41wS8pEhsSOhy71xz2fn8J07nuz/LEEtPSuUzLUFGAJSx499eKDSw==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/mrmime": { "version": "2.0.1", "dev": true, @@ -19133,7 +20247,6 @@ }, "node_modules/nan": { "version": "2.24.0", - "devOptional": true, "license": "MIT" }, "node_modules/nanoid": { @@ -19178,6 +20291,32 @@ "version": "1.4.0", "license": "MIT" }, + "node_modules/needle": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz", + "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", + "license": "MIT", + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, "node_modules/negotiator": { "version": "0.6.3", "license": "MIT", @@ -19190,6 +20329,15 @@ "dev": true, "license": "MIT" }, + "node_modules/netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/nice-try": { "version": "1.0.5", "devOptional": true, @@ -19482,9 +20630,6 @@ }, "node_modules/octokit": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/octokit/-/octokit-3.1.2.tgz", - "integrity": "sha512-MG5qmrTL5y8KYwFgE1A4JWmgfQBaIETE/lOlfwNYx1QOtCQHGVxkRJmdUJltFc1HVn73d61TlMhMyNTOtMl+ng==", - "dev": true, "license": "MIT", "dependencies": { "@octokit/app": "^14.0.2", @@ -19528,7 +20673,6 @@ }, "node_modules/onetime": { "version": "5.1.2", - "dev": true, "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" @@ -19689,6 +20833,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/os-tmpdir": { "version": "1.0.2", "license": "MIT", @@ -19784,6 +20937,87 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/pac-proxy-agent": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.2.0.tgz", + "integrity": "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==", + "license": "MIT", + "dependencies": { + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.6", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.5" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-proxy-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-proxy-agent/node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-proxy-agent/node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-resolver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "license": "MIT", + "dependencies": { + "degenerator": "^5.0.0", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/package-json-from-dist": { "version": "1.0.1", "dev": true, @@ -19791,7 +21025,6 @@ }, "node_modules/pako": { "version": "1.0.11", - "dev": true, "license": "(MIT AND Zlib)" }, "node_modules/param-case": { @@ -19900,6 +21133,8 @@ }, "node_modules/patch-package": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.1.tgz", + "integrity": "sha512-VsKRIA8f5uqHQ7NGhwIna6Bx6D9s/1iXlA1hthBVBEbkq+t4kXD0HHt+rJhf/Z+Ci0F/HCB2hvn0qLdLG+Qxlw==", "dev": true, "license": "MIT", "dependencies": { @@ -20093,7 +21328,6 @@ }, "node_modules/picomatch": { "version": "2.3.1", - "dev": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -20102,14 +21336,66 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pidusage": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pidusage/-/pidusage-3.0.2.tgz", + "integrity": "sha512-g0VU+y08pKw5M8EZ2rIGiEBaB8wrQMjYGFfW2QVIfyT8V+fq8YFLkvlz4bz5ljvFDJYNFCWT3PWqcRr2FKO81w==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pidusage/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/pify": { "version": "2.3.0", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "license": "MIT", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/pirates": { "version": "4.0.7", "dev": true, @@ -20122,7 +21408,6 @@ "version": "1.58.2", "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.2.tgz", "integrity": "sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==", - "dev": true, "license": "Apache-2.0", "dependencies": { "playwright-core": "1.58.2" @@ -20141,7 +21426,6 @@ "version": "1.58.2", "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.2.tgz", "integrity": "sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==", - "dev": true, "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" @@ -20154,33 +21438,207 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, - "os": [ - "darwin" - ], + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/plist": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@xmldom/xmldom": "^0.8.8", + "base64-js": "^1.5.1", + "xmlbuilder": "^15.1.1" + }, + "engines": { + "node": ">=10.4.0" + } + }, + "node_modules/pm2": { + "version": "6.0.14", + "resolved": "https://registry.npmjs.org/pm2/-/pm2-6.0.14.tgz", + "integrity": "sha512-wX1FiFkzuT2H/UUEA8QNXDAA9MMHDsK/3UHj6Dkd5U7kxyigKDA5gyDw78ycTQZAuGCLWyUX5FiXEuVQWafukA==", + "license": "AGPL-3.0", + "dependencies": { + "@pm2/agent": "~2.1.1", + "@pm2/blessed": "0.1.81", + "@pm2/io": "~6.1.0", + "@pm2/js-api": "~0.8.0", + "@pm2/pm2-version-check": "^1.0.4", + "ansis": "4.0.0-node10", + "async": "3.2.6", + "chokidar": "3.6.0", + "cli-tableau": "2.0.1", + "commander": "2.15.1", + "croner": "4.1.97", + "dayjs": "1.11.15", + "debug": "4.4.3", + "enquirer": "2.3.6", + "eventemitter2": "5.0.1", + "fclone": "1.0.11", + "js-yaml": "4.1.1", + "mkdirp": "1.0.4", + "needle": "2.4.0", + "pidusage": "3.0.2", + "pm2-axon": "~4.0.1", + "pm2-axon-rpc": "~0.7.1", + "pm2-deploy": "~1.0.2", + "pm2-multimeter": "^0.1.2", + "promptly": "2.2.0", + "semver": "7.7.2", + "source-map-support": "0.5.21", + "sprintf-js": "1.1.2", + "vizion": "~2.2.1" + }, + "bin": { + "pm2": "bin/pm2", + "pm2-dev": "bin/pm2-dev", + "pm2-docker": "bin/pm2-docker", + "pm2-runtime": "bin/pm2-runtime" + }, + "engines": { + "node": ">=16.0.0" + }, + "optionalDependencies": { + "pm2-sysmonit": "^1.2.8" + } + }, + "node_modules/pm2-axon": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pm2-axon/-/pm2-axon-4.0.1.tgz", + "integrity": "sha512-kES/PeSLS8orT8dR5jMlNl+Yu4Ty3nbvZRmaAtROuVm9nYYGiaoXqqKQqQYzWQzMYWUKHMQTvBlirjE5GIIxqg==", + "license": "MIT", + "dependencies": { + "amp": "~0.3.1", + "amp-message": "~0.1.1", + "debug": "^4.3.1", + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=5" + } + }, + "node_modules/pm2-axon-rpc": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/pm2-axon-rpc/-/pm2-axon-rpc-0.7.1.tgz", + "integrity": "sha512-FbLvW60w+vEyvMjP/xom2UPhUN/2bVpdtLfKJeYM3gwzYhoTEEChCOICfFzxkxuoEleOlnpjie+n1nue91bDQw==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.1" + }, + "engines": { + "node": ">=5" + } + }, + "node_modules/pm2-deploy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pm2-deploy/-/pm2-deploy-1.0.2.tgz", + "integrity": "sha512-YJx6RXKrVrWaphEYf++EdOOx9EH18vM8RSZN/P1Y+NokTKqYAca/ejXwVLyiEpNju4HPZEk3Y2uZouwMqUlcgg==", + "license": "MIT", + "dependencies": { + "run-series": "^1.1.8", + "tv4": "^1.3.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pm2-multimeter": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/pm2-multimeter/-/pm2-multimeter-0.1.2.tgz", + "integrity": "sha512-S+wT6XfyKfd7SJIBqRgOctGxaBzUOmVQzTAS+cg04TsEUObJVreha7lvCfX8zzGVr871XwCSnHUU7DQQ5xEsfA==", + "license": "MIT/X11", + "dependencies": { + "charm": "~0.1.1" + } + }, + "node_modules/pm2-sysmonit": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/pm2-sysmonit/-/pm2-sysmonit-1.2.8.tgz", + "integrity": "sha512-ACOhlONEXdCTVwKieBIQLSi2tQZ8eKinhcr9JpZSUAL8Qy0ajIgRtsLxG/lwPOW3JEKqPyw/UaHmTWhUzpP4kA==", + "license": "Apache", + "optional": true, + "dependencies": { + "async": "^3.2.0", + "debug": "^4.3.1", + "pidusage": "^2.0.21", + "systeminformation": "^5.7", + "tx2": "~1.0.4" + } + }, + "node_modules/pm2-sysmonit/node_modules/pidusage": { + "version": "2.0.21", + "resolved": "https://registry.npmjs.org/pidusage/-/pidusage-2.0.21.tgz", + "integrity": "sha512-cv3xAQos+pugVX+BfXpHsbyz/dLzX+lr44zNMsYiGxUw+kV5sgQCIcLd1z+0vq+KyC7dJ+/ts2PsfgWfSC3WXA==", + "license": "MIT", + "optional": true, + "dependencies": { + "safe-buffer": "^5.2.1" + }, "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=8" } }, - "node_modules/plist": { - "version": "3.1.0", - "dev": true, + "node_modules/pm2-sysmonit/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT", - "dependencies": { - "@xmldom/xmldom": "^0.8.8", - "base64-js": "^1.5.1", - "xmlbuilder": "^15.1.1" + "optional": true + }, + "node_modules/pm2/node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, + "node_modules/pm2/node_modules/commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "license": "MIT" + }, + "node_modules/pm2/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=10.4.0" + "node": ">=10" } }, + "node_modules/pm2/node_modules/sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "license": "BSD-3-Clause" + }, "node_modules/possible-typed-array-names": { "version": "1.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -20377,6 +21835,18 @@ "node": "^12.20.0 || >=14" } }, + "node_modules/powershell-utils": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.2.0.tgz", + "integrity": "sha512-ZlsFlG7MtSFCoc5xreOvBAozCJ6Pf06opgJjh9ONEv418xpZSAzNjstD36C6+JwOnfSqOW/9uDkqKjezTdxZhw==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/prebuild-install": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", @@ -20464,7 +21934,9 @@ } }, "node_modules/prettier-linter-helpers": { - "version": "1.0.0", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz", + "integrity": "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==", "dev": true, "license": "MIT", "dependencies": { @@ -20543,6 +22015,15 @@ "node": ">=10" } }, + "node_modules/promptly": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/promptly/-/promptly-2.2.0.tgz", + "integrity": "sha512-aC9j+BZsRSSzEsXBNBwDnAxujdx19HycZoKgRgzWnS8eOHg1asuf9heuLprfbe739zY3IdUQx+Egv6Jn135WHA==", + "license": "MIT", + "dependencies": { + "read": "^1.0.4" + } + }, "node_modules/propagate": { "version": "2.0.1", "dev": true, @@ -20579,9 +22060,91 @@ "node": ">= 0.10" } }, + "node_modules/proxy-agent": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", + "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.3", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.0.1", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/proxy-agent/node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", - "dev": true, + "license": "MIT" + }, + "node_modules/ps-man": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ps-man/-/ps-man-1.1.8.tgz", + "integrity": "sha512-ZKDPZwHLYVWIk/Q75N7jCFbuQyokSg2+3WBlt8l35S/uBvxoc+LiRUbb3RUt83pwW82dzwiCpoQIHd9PAxUzHg==", "license": "MIT" }, "node_modules/psl": { @@ -20597,7 +22160,6 @@ }, "node_modules/pump": { "version": "3.0.0", - "devOptional": true, "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", @@ -20612,7 +22174,9 @@ } }, "node_modules/qs": { - "version": "6.14.0", + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", + "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" @@ -20630,7 +22194,6 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", - "dev": true, "funding": [ { "type": "github", @@ -20683,14 +22246,45 @@ } }, "node_modules/raw-body": { - "version": "2.5.2", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/raw-body/node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -20849,6 +22443,18 @@ "node": ">=0.10.0" } }, + "node_modules/read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", + "license": "ISC", + "dependencies": { + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/read-binary-file-arch": { "version": "1.0.6", "dev": true, @@ -21003,7 +22609,6 @@ }, "node_modules/readdirp": { "version": "3.6.0", - "dev": true, "license": "MIT", "dependencies": { "picomatch": "^2.2.1" @@ -21238,7 +22843,6 @@ }, "node_modules/require-directory": { "version": "2.1.1", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -21246,7 +22850,6 @@ }, "node_modules/require-from-string": { "version": "2.0.2", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -21298,7 +22901,6 @@ }, "node_modules/resize-observer-polyfill": { "version": "1.5.1", - "dev": true, "license": "MIT" }, "node_modules/resolve": { @@ -21339,6 +22941,16 @@ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, + "node_modules/resolve.exports": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/responselike": { "version": "2.0.1", "dev": true, @@ -21374,7 +22986,6 @@ }, "node_modules/reusify": { "version": "1.0.4", - "dev": true, "license": "MIT", "engines": { "iojs": ">=1.0.0", @@ -21550,7 +23161,9 @@ ] }, "node_modules/rrweb-cssom": { - "version": "0.6.0", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", + "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", "dev": true, "license": "MIT" }, @@ -21563,7 +23176,6 @@ }, "node_modules/run-parallel": { "version": "1.2.0", - "dev": true, "funding": [ { "type": "github", @@ -21583,10 +23195,39 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/run-series": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/run-series/-/run-series-1.1.9.tgz", + "integrity": "sha512-Arc4hUN896vjkqCYrUXquBFtRZdv1PfLbTYP71efP6butxyQ0kWpiNJyAgsxscmQg1cqvHY32/UCBzXedTpU2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/rungen": { "version": "0.3.2", "license": "MIT" }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/safe-array-concat": { "version": "1.1.3", "dev": true, @@ -21644,6 +23285,15 @@ "version": "2.1.2", "license": "MIT" }, + "node_modules/sax": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.4.tgz", + "integrity": "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, "node_modules/saxes": { "version": "6.0.0", "dev": true, @@ -21830,7 +23480,6 @@ }, "node_modules/set-function-length": { "version": "1.2.2", - "dev": true, "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", @@ -21882,9 +23531,6 @@ }, "node_modules/sha.js": { "version": "2.4.12", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", - "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", - "dev": true, "license": "(MIT AND BSD-3-Clause)", "dependencies": { "inherits": "^2.0.4", @@ -21903,9 +23549,6 @@ }, "node_modules/sha.js/node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, "funding": [ { "type": "github", @@ -22019,6 +23662,8 @@ }, "node_modules/siginfo": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", "dev": true, "license": "ISC" }, @@ -22028,7 +23673,6 @@ }, "node_modules/simple-concat": { "version": "1.0.1", - "dev": true, "funding": [ { "type": "github", @@ -22047,7 +23691,6 @@ }, "node_modules/simple-get": { "version": "4.0.1", - "dev": true, "funding": [ { "type": "github", @@ -22069,6 +23712,21 @@ "simple-concat": "^1.0.0" } }, + "node_modules/simple-git": { + "version": "3.30.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.30.0.tgz", + "integrity": "sha512-q6lxyDsCmEal/MEGhP1aVyQ3oxnagGlBDOVSIB4XUVLl1iZh0Pah6ebC9V4xBap/RfgP2WlI8EKs0WS0rMEJHg==", + "license": "MIT", + "dependencies": { + "@kwsites/file-exists": "^1.1.1", + "@kwsites/promise-deferred": "^1.1.1", + "debug": "^4.4.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/steveukx/git-js?sponsor=1" + } + }, "node_modules/sirv": { "version": "3.0.2", "dev": true, @@ -22082,6 +23740,18 @@ "node": ">=18" } }, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/slice-ansi": { "version": "5.0.0", "dev": true, @@ -22121,7 +23791,6 @@ }, "node_modules/smart-buffer": { "version": "4.2.0", - "dev": true, "license": "MIT", "engines": { "node": ">= 6.0.0", @@ -22138,7 +23807,6 @@ }, "node_modules/socks": { "version": "2.8.7", - "dev": true, "license": "MIT", "dependencies": { "ip-address": "^10.0.1", @@ -22164,7 +23832,6 @@ }, "node_modules/source-map": { "version": "0.6.1", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -22180,7 +23847,6 @@ }, "node_modules/source-map-support": { "version": "0.5.21", - "dev": true, "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", @@ -22250,6 +23916,8 @@ }, "node_modules/stackback": { "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", "dev": true, "license": "MIT" }, @@ -22262,6 +23930,8 @@ }, "node_modules/std-env": { "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", "dev": true, "license": "MIT" }, @@ -22389,6 +24059,8 @@ "node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -22402,6 +24074,8 @@ }, "node_modules/string-width-cjs/node_modules/strip-ansi": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { @@ -22502,6 +24176,8 @@ "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { @@ -22529,6 +24205,15 @@ "node": ">=0.10.0" } }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/strip-indent": { "version": "3.0.0", "dev": true, @@ -22569,6 +24254,18 @@ "node": ">=0.8.0" } }, + "node_modules/strnum": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.2.tgz", + "integrity": "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, "node_modules/stubborn-fs": { "version": "2.0.0", "license": "MIT", @@ -22580,6 +24277,14 @@ "version": "1.0.2", "license": "MIT" }, + "node_modules/studio-app": { + "resolved": "apps/studio", + "link": true + }, + "node_modules/studio-cli": { + "resolved": "apps/cli", + "link": true + }, "node_modules/style-to-object": { "version": "1.0.6", "license": "MIT", @@ -22614,6 +24319,8 @@ }, "node_modules/sucrase/node_modules/brace-expansion": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -22629,28 +24336,31 @@ } }, "node_modules/sucrase/node_modules/glob": { - "version": "10.3.10", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/sucrase/node_modules/minimatch": { - "version": "9.0.3", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -22664,7 +24374,9 @@ } }, "node_modules/sucrase/node_modules/minipass": { - "version": "7.0.4", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, "license": "ISC", "engines": { @@ -22736,17 +24448,46 @@ "license": "MIT" }, "node_modules/synckit": { - "version": "0.11.11", + "version": "0.11.12", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", + "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==", "dev": true, "license": "MIT", "dependencies": { "@pkgr/core": "^0.2.9" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" + } + }, + "node_modules/systeminformation": { + "version": "5.30.7", + "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.30.7.tgz", + "integrity": "sha512-33B/cftpaWdpvH+Ho9U1b08ss8GQuLxrWHelbJT1yw4M48Taj8W3ezcPuaLoIHZz5V6tVHuQPr5BprEfnBLBMw==", + "license": "MIT", + "optional": true, + "os": [ + "darwin", + "linux", + "win32", + "freebsd", + "openbsd", + "netbsd", + "sunos", + "android" + ], + "bin": { + "systeminformation": "lib/cli.js" + }, + "engines": { + "node": ">=8.0.0" }, "funding": { - "url": "https://opencollective.com/synckit" + "type": "Buy me a coffee", + "url": "https://www.buymeacoffee.com/systeminfo" } }, "node_modules/tabbable": { @@ -22809,9 +24550,10 @@ } }, "node_modules/tar": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.8.tgz", - "integrity": "sha512-SYkBtK99u0yXa+IWL0JRzzcl7RxNpvX/U08Z+8DKnysfno7M+uExnTZH8K+VGgShf2qFPKtbNr9QBl8n7WBP6Q==", + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.7.tgz", + "integrity": "sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==", + "dev": true, "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/fs-minipass": "^4.0.0", @@ -22850,6 +24592,7 @@ }, "node_modules/tar/node_modules/chownr": { "version": "3.0.0", + "dev": true, "license": "BlueOak-1.0.0", "engines": { "node": ">=18" @@ -22857,6 +24600,7 @@ }, "node_modules/tar/node_modules/minipass": { "version": "7.1.2", + "dev": true, "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" @@ -22864,6 +24608,7 @@ }, "node_modules/tar/node_modules/minizlib": { "version": "3.1.0", + "dev": true, "license": "MIT", "dependencies": { "minipass": "^7.1.2" @@ -22874,6 +24619,7 @@ }, "node_modules/tar/node_modules/yallist": { "version": "5.0.0", + "dev": true, "license": "BlueOak-1.0.0", "engines": { "node": ">=18" @@ -23042,6 +24788,8 @@ }, "node_modules/tinybench": { "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", "dev": true, "license": "MIT" }, @@ -23109,7 +24857,6 @@ }, "node_modules/tmp": { "version": "0.2.5", - "dev": true, "license": "MIT", "engines": { "node": ">=14.14" @@ -23117,9 +24864,7 @@ }, "node_modules/tmp-promise": { "version": "3.0.3", - "dev": true, "license": "MIT", - "optional": true, "dependencies": { "tmp": "^0.2.0" } @@ -23137,9 +24882,6 @@ }, "node_modules/to-buffer": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", - "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", - "dev": true, "license": "MIT", "dependencies": { "isarray": "^2.0.5", @@ -23152,9 +24894,6 @@ }, "node_modules/to-buffer/node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, "funding": [ { "type": "github", @@ -23178,7 +24917,6 @@ }, "node_modules/to-regex-range": { "version": "5.0.1", - "dev": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -23235,6 +24973,41 @@ "node": ">=18" } }, + "node_modules/trash": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/trash/-/trash-10.1.0.tgz", + "integrity": "sha512-gOs9Hd1XMiJfORccP8KJNDmrSJ7YqO1CNt9lGOiBiydyBJab7Eaefkc/wj50b8lTtpB/4/VgezREs9NULOm42A==", + "license": "MIT", + "dependencies": { + "@stroncium/procfs": "^1.2.1", + "chunkify": "^5.0.0", + "globby": "^14.1.0", + "is-path-inside": "^4.0.0", + "move-file": "^4.1.0", + "p-map": "^7.0.3", + "powershell-utils": "^0.2.0", + "wsl-utils": "^0.4.0", + "xdg-trashdir": "^3.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/trash/node_modules/p-map": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", + "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/trim-lines": { "version": "3.0.1", "license": "MIT", @@ -23288,6 +25061,8 @@ }, "node_modules/ts-node": { "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", @@ -23404,6 +25179,34 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/tv4": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tv4/-/tv4-1.3.0.tgz", + "integrity": "sha512-afizzfpJgvPr+eDkREK4MxJ/+r8nEEHcmitwgnPUqpaP+FpwQyadnxNoSACbgc/b1LsZYtODGoPiFxQrgJgjvw==", + "license": [ + { + "type": "Public Domain", + "url": "http://geraintluff.github.io/tv4/LICENSE.txt" + }, + { + "type": "MIT", + "url": "http://jsonary.com/LICENSE.txt" + } + ], + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/tx2": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tx2/-/tx2-1.0.5.tgz", + "integrity": "sha512-sJ24w0y03Md/bxzK4FU8J8JveYYUbSs2FViLJ2D/8bytSiyPRbuE3DyL/9UKYXTZlV3yXq0L8GLlhobTnekCVg==", + "license": "MIT", + "optional": true, + "dependencies": { + "json-stringify-safe": "^5.0.1" + } + }, "node_modules/type-check": { "version": "0.4.0", "license": "MIT", @@ -23427,7 +25230,6 @@ }, "node_modules/typed-array-buffer": { "version": "1.0.3", - "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.3", @@ -23585,6 +25387,18 @@ "node": ">=4" } }, + "node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/unified": { "version": "11.0.4", "license": "MIT", @@ -23706,9 +25520,6 @@ }, "node_modules/universal-github-app-jwt": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-1.2.0.tgz", - "integrity": "sha512-dncpMpnsKBk0eetwfN8D8OUHGfiDhhJ+mtsbMl+7PfW7mYjiH8LIcqRmYMtzYLgSh47HjfdBtrBwIQ/gizKR3g==", - "dev": true, "license": "MIT", "dependencies": { "@types/jsonwebtoken": "^9.0.0", @@ -23717,9 +25528,6 @@ }, "node_modules/universal-user-agent": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", - "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", - "dev": true, "license": "ISC" }, "node_modules/universalify": { @@ -23909,6 +25717,18 @@ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, + "node_modules/user-home": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", + "integrity": "sha512-KMWqdlOcjCYdtIJpicDSFBQ8nFwS2i9sslAd6f4+CBGcU4gist2REnr2fxj2YocvJFxSF3ZOHLYLVZnUxv4BZQ==", + "license": "MIT", + "dependencies": { + "os-homedir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/username": { "version": "5.1.0", "dev": true, @@ -23927,7 +25747,6 @@ }, "node_modules/utility-types": { "version": "3.11.0", - "dev": true, "license": "MIT", "engines": { "node": ">= 4" @@ -24755,6 +26574,36 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/vizion": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vizion/-/vizion-2.2.1.tgz", + "integrity": "sha512-sfAcO2yeSU0CSPFI/DmZp3FsFE9T+8913nv1xWBOyzODv13fwkn6Vl7HqxGpkr9F608M+8SuFId3s+BlZqfXww==", + "license": "Apache-2.0", + "dependencies": { + "async": "^2.6.3", + "git-node-fs": "^1.0.0", + "ini": "^1.3.5", + "js-git": "^0.7.8" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/vizion/node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/vizion/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, "node_modules/w3c-xmlserializer": { "version": "5.0.0", "dev": true, @@ -24768,9 +26617,6 @@ }, "node_modules/wasm-feature-detect": { "version": "1.8.0", - "resolved": "https://registry.npmjs.org/wasm-feature-detect/-/wasm-feature-detect-1.8.0.tgz", - "integrity": "sha512-zksaLKM2fVlnB5jQQDqKXXwYHLQUVH9es+5TOOHwGOVJOCeRBCiPjwSg+3tN2AdTCzjgli4jijCH290kXb/zWQ==", - "dev": true, "license": "Apache-2.0" }, "node_modules/watchpack": { @@ -25014,7 +26860,6 @@ }, "node_modules/which-typed-array": { "version": "1.1.19", - "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", @@ -25034,6 +26879,8 @@ }, "node_modules/why-is-node-running": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", "dev": true, "license": "MIT", "dependencies": { @@ -25133,7 +26980,6 @@ }, "node_modules/wrap-ansi": { "version": "7.0.0", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -25150,6 +26996,8 @@ "node_modules/wrap-ansi-cjs": { "name": "wrap-ansi", "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", "dependencies": { @@ -25166,6 +27014,8 @@ }, "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { @@ -25177,7 +27027,6 @@ }, "node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "6.0.1", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -25192,7 +27041,6 @@ }, "node_modules/ws": { "version": "8.18.3", - "dev": true, "license": "MIT", "engines": { "node": ">=10.0.0" @@ -25210,6 +27058,73 @@ } } }, + "node_modules/wsl-utils": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.4.0.tgz", + "integrity": "sha512-9YmF+2sFEd+T7TkwlmE337F0IVzfDvDknhtpBQxxXzEOfgPphGlFYpyx0cTuCIFj8/p+sqwBYAeGxOMNSzPPDA==", + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0", + "powershell-utils": "^0.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wsl-utils/node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wsl-utils/node_modules/powershell-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.1.0.tgz", + "integrity": "sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/xdg-trashdir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/xdg-trashdir/-/xdg-trashdir-3.1.0.tgz", + "integrity": "sha512-N1XQngeqMBoj9wM4ZFadVV2MymImeiFfYD+fJrNlcVcOHsJFFQe7n3b+aBoTPwARuq2HQxukfzVpQmAk1gN4sQ==", + "license": "MIT", + "dependencies": { + "@sindresorhus/df": "^3.1.1", + "mount-point": "^3.0.0", + "user-home": "^2.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/xml-name-validator": { "version": "5.0.0", "dev": true, @@ -25218,6 +27133,28 @@ "node": ">=18" } }, + "node_modules/xml2js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", + "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", + "license": "MIT", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xml2js/node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, "node_modules/xmlbuilder": { "version": "15.1.1", "dev": true, @@ -25358,7 +27295,9 @@ } }, "node_modules/zod": { - "version": "4.3.5", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" @@ -25372,9 +27311,146 @@ "url": "https://github.com/sponsors/wooorm" } }, - "packages/eslint-plugin-studio": { - "version": "1.0.0", + "tools/benchmark-site-editor": { + "version": "0.0.1", + "license": "GPLv2", + "dependencies": { + "@wp-playground/cli": "3.1.1", + "chalk": "^5.3.0", + "playwright": "^1.58.1", + "ts-node": "^10.9.2" + }, + "devDependencies": { + "@types/node": "^20.0.0", + "typescript": "^5.0.0" + } + }, + "tools/benchmark-site-editor/node_modules/@types/node": { + "version": "20.19.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.33.tgz", + "integrity": "sha512-Rs1bVAIdBs5gbTIKza/tgpMuG1k3U/UMJLWecIMxNdJFDMzcM5LOiLVRYh3PilWEYDIeUDv7bpiHPLPsbydGcw==", "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "tools/benchmark-site-editor/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "tools/common": { + "name": "@studio/common", + "version": "1.0.0", + "dependencies": { + "@automattic/generate-password": "^0.1.0", + "@wordpress/i18n": "^6.9.0", + "@wp-playground/wordpress": "3.1.1", + "cross-port-killer": "^1.4.0", + "date-fns": "^3.3.1", + "fast-deep-equal": "^3.1.3", + "fs-extra": "^11.3.2", + "lockfile": "^1.0.4", + "wpcom": "^7.1.1", + "wpcom-xhr-request": "^1.3.0", + "yauzl": "^3.2.0", + "zod": "^4.0.0" + }, + "devDependencies": { + "@types/fs-extra": "^11.0.4", + "@types/lockfile": "^1.0.4", + "@types/yauzl": "^2.10.3", + "@wp-playground/blueprints": "3.1.1" + } + }, + "tools/compare-perf": { + "version": "0.0.1", + "license": "GPLv2", + "dependencies": { + "chalk": "^4.1.2", + "commander": "^13.1.0", + "inquirer": "^12.5.0", + "simple-git": "^3.27.0", + "ts-node": "^10.9.2" + }, + "devDependencies": { + "@types/node": "^20.0.0", + "typescript": "^5.0.0" + } + }, + "tools/compare-perf/node_modules/@types/node": { + "version": "20.19.33", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.33.tgz", + "integrity": "sha512-Rs1bVAIdBs5gbTIKza/tgpMuG1k3U/UMJLWecIMxNdJFDMzcM5LOiLVRYh3PilWEYDIeUDv7bpiHPLPsbydGcw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "tools/compare-perf/node_modules/commander": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", + "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "tools/compare-perf/node_modules/inquirer": { + "version": "12.11.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-12.11.1.tgz", + "integrity": "sha512-9VF7mrY+3OmsAfjH3yKz/pLbJ5z22E23hENKw3/LNSaA/sAt3v49bDRY+Ygct1xwuKT+U+cBfTzjCPySna69Qw==", + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/prompts": "^7.10.1", + "@inquirer/type": "^3.0.10", + "mute-stream": "^2.0.0", + "run-async": "^4.0.6", + "rxjs": "^7.8.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "tools/compare-perf/node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "tools/compare-perf/node_modules/run-async": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-4.0.6.tgz", + "integrity": "sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "tools/eslint-plugin-studio": { + "version": "1.0.0", "dependencies": { "eslint": "^9.0.0" } diff --git a/package.json b/package.json index 5c66fa25a5..a416e0c788 100644 --- a/package.json +++ b/package.json @@ -3,10 +3,8 @@ "author": "Automattic Inc.", "private": true, "productName": "Studio", - "version": "1.7.4", "description": "Local WordPress development environment using Playgrounds", "license": "GPL-2.0-or-later", - "main": "dist/main/index.js", "packageManager": "npm@10.9.4", "engines": { "npm": ">=10.0.0", @@ -17,158 +15,67 @@ "url": "https://github.com/Automattic/studio.git", "directory": "/" }, + "workspaces": [ + "apps/*", + "tools/*" + ], "scripts": { - "prestart": "npm run cli:build", - "start": "electron-vite dev --outDir=dist --watch", - "start-wayland": "npm run prestart && electron-forge start -- --enable-features=UseOzonePlatform --ozone-platform=wayland .", - "postinstall": "cd cli && npm install && cd .. && patch-package && ts-node ./scripts/download-wp-server-files.ts && node ./scripts/download-available-site-translations.mjs && npx @electron/rebuild -o fs-ext", - "package": "electron-vite build --outDir=dist && electron-forge package", - "make": "electron-vite build --outDir=dist && electron-forge make", - "make:windows-x64": "electron-vite build --outDir=dist && electron-forge make --arch=x64 --platform=win32", - "make:windows-arm64": "electron-vite build --outDir=dist && electron-forge make --arch=arm64 --platform=win32", - "make:macos-x64": "electron-vite build --outDir=dist && SKIP_DMG=true FILE_ARCHITECTURE=x64 electron-forge make --arch=x64 --platform=darwin", - "make:macos-arm64": "electron-vite build --outDir=dist && SKIP_DMG=true FILE_ARCHITECTURE=arm64 electron-forge make --arch=arm64 --platform=darwin", + "start": "npm -w studio-app run start", + "start-wayland": "npm -w studio-app run start-wayland", + "postinstall": "patch-package --patch-dir apps/cli/patches && patch-package --patch-dir apps/studio/patches && ts-node ./scripts/download-wp-server-files.ts && node ./scripts/download-available-site-translations.mjs", + "package": "ts-node ./scripts/package-in-isolation.ts package", + "make": "ts-node ./scripts/package-in-isolation.ts make", + "make:windows-x64": "ts-node ./scripts/package-in-isolation.ts make:windows-x64", + "make:windows-arm64": "ts-node ./scripts/package-in-isolation.ts make:windows-arm64", + "make:macos-x64": "ts-node ./scripts/package-in-isolation.ts make:macos-x64", + "make:macos-arm64": "ts-node ./scripts/package-in-isolation.ts make:macos-arm64", "make:dmg-x64": "FILE_ARCHITECTURE=x64 node ./scripts/make-dmg.mjs", "make:dmg-arm64": "FILE_ARCHITECTURE=arm64 node ./scripts/make-dmg.mjs", - "publish": "electron-forge publish", - "cli:build": "vite build --config vite.cli.config.ts", - "cli:watch": "vite build --config vite.cli.config.ts --watch", - "lint": "eslint {cli,common,src,e2e}", - "format": "prettier . --write", + "publish": "npm -w studio-app run publish", + "cli:build": "npm -w studio-cli run build", + "cli:package": "npm -w studio-cli run package", + "cli:watch": "npm -w studio-cli run watch", + "app:install:bundle": "npm -w studio-app run install:bundle", + "compare:perf": "npm -w compare-perf run compare", + "lint": "eslint {apps/cli,apps/studio/src,apps/studio/e2e,tools/common}", + "format": "npm run lint -- --fix", "test": "vitest run", "test:watch": "vitest", "e2e": "npx playwright install && npx playwright test", - "test:metrics": "npx playwright test --config=./metrics/playwright.metrics.config.ts", + "test:metrics": "npx playwright test --config=./tools/metrics/playwright.metrics.config.ts", "make-pot": "node ./scripts/make-pot.mjs", "download-language-packs": "ts-node ./scripts/download-language-packs.ts" }, "devDependencies": { - "@automattic/color-studio": "^4.1.0", "@automattic/wp-babel-makepot": "^1.2.0", - "@electron-forge/cli": "^7.11.1", - "@electron-forge/maker-deb": "^7.11.1", - "@electron-forge/maker-dmg": "^7.11.1", - "@electron-forge/maker-squirrel": "^7.11.1", - "@electron-forge/maker-zip": "^7.11.1", - "@electron-forge/plugin-auto-unpack-natives": "^7.11.1", "@eslint/js": "^9.39.2", "@playwright/test": "^1.58.2", - "@sentry/react": "^7.120.3", - "@sentry/vite-plugin": "^4.3.0", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.2", "@testing-library/user-event": "^14.6.1", - "@types/archiver": "^6.0.4", - "@types/follow-redirects": "^1.14.4", "@types/fs-extra": "^11.0.4", - "@types/http-proxy": "^1.17.17", - "@types/lockfile": "^1.0.4", - "@types/node-forge": "^1.3.14", - "@types/react": "^18.3.27", - "@types/react-dom": "^18.3.7", - "@types/semver": "^7.7.1", - "@types/shell-quote": "^1.7.5", - "@types/winreg": "^1.2.36", - "@types/yargs": "^17.0.35", - "@types/yauzl": "^2.10.3", - "@vitejs/plugin-react": "^5.1.4", "@vitest/ui": "^4.0.18", - "@wordpress/components": "^32.1.0", - "@wordpress/element": "^6.39.0", - "@wordpress/react-i18n": "^4.39.0", - "@wp-playground/blueprints": "^3.1.1", - "@yao-pkg/pkg": "^6.3.2", - "electron": "^40.4.1", - "electron-devtools-installer": "^4.0.0", + "@yao-pkg/pkg": "^6.13.1", "electron-playwright-helpers": "^2.1.0", - "electron-vite": "^5.0.0", "eslint": "^9.39.2", + "eslint-config-prettier": "^9.1.2", "eslint-import-resolver-typescript": "^4.4.4", "eslint-plugin-import": "^2.32.0", "eslint-plugin-jest-dom": "^5.5.0", - "eslint-plugin-prettier": "^5.5.4", + "eslint-plugin-prettier": "^5.5.5", "eslint-plugin-react-hooks": "^7.0.1", - "eslint-plugin-studio": "file:packages/eslint-plugin-studio", + "eslint-plugin-studio": "file:tools/eslint-plugin-studio", + "fs-extra": "^11.3.3", "isomorphic-fetch": "^3.0.0", "jsdom": "^24.0.0", "nock": "^13.5.6", - "patch-package": "^8.0.0", - "postcss": "^8.4.32", + "patch-package": "^8.0.1", "prettier": "npm:wp-prettier@3.0.3", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "resize-observer-polyfill": "^1.5.1", "rimraf": "^6.1.2", - "tailwindcss": "^3.3.6", + "ts-node": "^10.9.2", "typescript": "~5.9.3", "typescript-eslint": "^8.53.0", - "vite": "^7.3.1", - "vite-plugin-static-copy": "^3.1.5", - "vite-plugin-top-level-await": "^1.6.0", - "vite-plugin-wasm": "^3.5.0", "vitest": "^4.0.18", "web-streams-polyfill": "^4.2.0" - }, - "dependencies": { - "@automattic/generate-password": "^0.1.0", - "@automattic/interpolate-components": "^1.2.1", - "@formatjs/intl-locale": "^3.4.5", - "@formatjs/intl-localematcher": "^0.5.4", - "@inquirer/prompts": "^7.10.1", - "@reduxjs/toolkit": "^2.11.2", - "@rive-app/react-canvas": "^4.12.0", - "@sentry/electron": "^6.5.0", - "@vscode/sudo-prompt": "^9.3.2", - "@wordpress/compose": "^7.36.0", - "@wordpress/dataviews": "^11.3.0", - "@wordpress/i18n": "^6.9.0", - "@wordpress/icons": "^11.4.0", - "archiver": "^6.0.2", - "atomically": "^2.1.0", - "cli-table3": "^0.6.5", - "compressible": "2.0.18", - "compression": "^1.8.1", - "cross-port-killer": "^1.4.0", - "date-fns": "^3.3.1", - "electron-squirrel-startup": "^1.0.1", - "electron2appx": "^2.1.2", - "eslint-config-prettier": "^10.1.8", - "express": "4.21.2", - "fast-deep-equal": "^3.1.3", - "file-stream-rotator": "^1.0.0", - "follow-redirects": "^1.15.11", - "fs-extra": "^11.3.2", - "hpagent": "1.2.0", - "http-proxy": "^1.18.1", - "lockfile": "^1.0.4", - "node-forge": "^1.3.3", - "ora": "^8.2.0", - "react-markdown": "^9.0.1", - "react-redux": "^9.2.0", - "rehype-raw": "^7.0.0", - "remark-gfm": "^4.0.1", - "semver": "^7.7.3", - "shell-quote": "^1.8.3", - "strip-ansi": "^7.1.2", - "tar": "^7.5.8", - "ts-node": "^10.9.2", - "tus-js-client": "^4.3.1", - "winreg": "1.2.4", - "wpcom": "^7.1.1", - "wpcom-xhr-request": "^1.3.0", - "yargs": "^18.0.0", - "yargs-parser": "^22.0.0", - "yauzl": "^3.2.0", - "zod": "^4.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-linux-x64-gnu": "^4.50.2", - "@rollup/rollup-win32-x64-msvc": "^4.50.2", - "appdmg": "^0.6.6" - }, - "overrides": { - "fs-ext": { - "nan": "2.25.0" - } } } diff --git a/playwright.config.ts b/playwright.config.ts index 784c677243..a1ca088201 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -1,7 +1,7 @@ import { defineConfig } from '@playwright/test'; export default defineConfig( { - testDir: './e2e', + testDir: './apps/studio/e2e', snapshotPathTemplate: '{testDir}/__screenshots__/{testFilePath}/{arg}{ext}', // The app only allows a single instance to be running at a time, so we can diff --git a/postcss.config.js b/postcss.config.js deleted file mode 100644 index b0c1e3b539..0000000000 --- a/postcss.config.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - plugins: { - tailwindcss: {}, - }, -}; diff --git a/scripts/benchmark-site-editor/.gitignore b/scripts/benchmark-site-editor/.gitignore deleted file mode 100644 index 2c4d248c80..0000000000 --- a/scripts/benchmark-site-editor/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules/ -package-lock.json -dist/ -results-*.json diff --git a/scripts/benchmark-site-editor/tsconfig.json b/scripts/benchmark-site-editor/tsconfig.json deleted file mode 100644 index 8f21fe7532..0000000000 --- a/scripts/benchmark-site-editor/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2022", - "module": "ES2022", - "moduleResolution": "bundler", - "esModuleInterop": true, - "strict": true, - "skipLibCheck": true, - "outDir": "./dist", - "rootDir": ".", - "declaration": false, - "sourceMap": false - }, - "include": [ "*.ts" ] -} diff --git a/scripts/compare-perf/package-lock.json b/scripts/compare-perf/package-lock.json deleted file mode 100644 index 4a1b607478..0000000000 --- a/scripts/compare-perf/package-lock.json +++ /dev/null @@ -1,886 +0,0 @@ -{ - "name": "compare-perf", - "version": "0.0.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "compare-perf", - "version": "0.0.1", - "license": "GPLv2", - "dependencies": { - "chalk": "^4.1.2", - "commander": "^13.1.0", - "inquirer": "^12.5.0", - "simple-git": "^3.27.0", - "ts-node": "^10.9.2" - }, - "devDependencies": { - "@types/node": "^20.0.0", - "typescript": "^5.0.0" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@inquirer/checkbox": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.1.4.tgz", - "integrity": "sha512-d30576EZdApjAMceijXA5jDzRQHT/MygbC+J8I7EqA6f/FRpYxlRtRJbHF8gHeWYeSdOuTEJqonn7QLB1ELezA==", - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.9", - "@inquirer/figures": "^1.0.11", - "@inquirer/type": "^3.0.5", - "ansi-escapes": "^4.3.2", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/confirm": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.8.tgz", - "integrity": "sha512-dNLWCYZvXDjO3rnQfk2iuJNL4Ivwz/T2+C3+WnNfJKsNGSuOs3wAo2F6e0p946gtSAk31nZMfW+MRmYaplPKsg==", - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.9", - "@inquirer/type": "^3.0.5" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/core": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.2.0.tgz", - "integrity": "sha512-NyDSjPqhSvpZEMZrLCYUquWNl+XC/moEcVFqS55IEYIYsY0a1cUCevSqk7ctOlnm/RaSBU5psFryNlxcmGrjaA==", - "license": "MIT", - "dependencies": { - "@inquirer/figures": "^1.0.13", - "@inquirer/type": "^3.0.8", - "ansi-escapes": "^4.3.2", - "cli-width": "^4.1.0", - "mute-stream": "^2.0.0", - "signal-exit": "^4.1.0", - "wrap-ansi": "^6.2.0", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/editor": { - "version": "4.2.18", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.18.tgz", - "integrity": "sha512-yeQN3AXjCm7+Hmq5L6Dm2wEDeBRdAZuyZ4I7tWSSanbxDzqM0KqzoDbKM7p4ebllAYdoQuPJS6N71/3L281i6w==", - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.2.0", - "@inquirer/external-editor": "^1.0.1", - "@inquirer/type": "^3.0.8" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/expand": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.11.tgz", - "integrity": "sha512-OZSUW4hFMW2TYvX/Sv+NnOZgO8CHT2TU1roUCUIF2T+wfw60XFRRp9MRUPCT06cRnKL+aemt2YmTWwt7rOrNEA==", - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.9", - "@inquirer/type": "^3.0.5", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/external-editor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.1.tgz", - "integrity": "sha512-Oau4yL24d2B5IL4ma4UpbQigkVhzPDXLoqy1ggK4gnHg/stmkffJE4oOXHXF3uz0UEpywG68KcyXsyYpA1Re/Q==", - "license": "MIT", - "dependencies": { - "chardet": "^2.1.0", - "iconv-lite": "^0.6.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/figures": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.13.tgz", - "integrity": "sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/input": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.1.8.tgz", - "integrity": "sha512-WXJI16oOZ3/LiENCAxe8joniNp8MQxF6Wi5V+EBbVA0ZIOpFcL4I9e7f7cXse0HJeIPCWO8Lcgnk98juItCi7Q==", - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.9", - "@inquirer/type": "^3.0.5" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/number": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.11.tgz", - "integrity": "sha512-pQK68CsKOgwvU2eA53AG/4npRTH2pvs/pZ2bFvzpBhrznh8Mcwt19c+nMO7LHRr3Vreu1KPhNBF3vQAKrjIulw==", - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.9", - "@inquirer/type": "^3.0.5" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/password": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.11.tgz", - "integrity": "sha512-dH6zLdv+HEv1nBs96Case6eppkRggMe8LoOTl30+Gq5Wf27AO/vHFgStTVz4aoevLdNXqwE23++IXGw4eiOXTg==", - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.9", - "@inquirer/type": "^3.0.5", - "ansi-escapes": "^4.3.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/prompts": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.4.0.tgz", - "integrity": "sha512-EZiJidQOT4O5PYtqnu1JbF0clv36oW2CviR66c7ma4LsupmmQlUwmdReGKRp456OWPWMz3PdrPiYg3aCk3op2w==", - "license": "MIT", - "dependencies": { - "@inquirer/checkbox": "^4.1.4", - "@inquirer/confirm": "^5.1.8", - "@inquirer/editor": "^4.2.9", - "@inquirer/expand": "^4.0.11", - "@inquirer/input": "^4.1.8", - "@inquirer/number": "^3.0.11", - "@inquirer/password": "^4.0.11", - "@inquirer/rawlist": "^4.0.11", - "@inquirer/search": "^3.0.11", - "@inquirer/select": "^4.1.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/rawlist": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.0.11.tgz", - "integrity": "sha512-uAYtTx0IF/PqUAvsRrF3xvnxJV516wmR6YVONOmCWJbbt87HcDHLfL9wmBQFbNJRv5kCjdYKrZcavDkH3sVJPg==", - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.9", - "@inquirer/type": "^3.0.5", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/search": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.0.11.tgz", - "integrity": "sha512-9CWQT0ikYcg6Ls3TOa7jljsD7PgjcsYEM0bYE+Gkz+uoW9u8eaJCRHJKkucpRE5+xKtaaDbrND+nPDoxzjYyew==", - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.9", - "@inquirer/figures": "^1.0.11", - "@inquirer/type": "^3.0.5", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/select": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.1.0.tgz", - "integrity": "sha512-z0a2fmgTSRN+YBuiK1ROfJ2Nvrpij5lVN3gPDkQGhavdvIVGHGW29LwYZfM/j42Ai2hUghTI/uoBuTbrJk42bA==", - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.9", - "@inquirer/figures": "^1.0.11", - "@inquirer/type": "^3.0.5", - "ansi-escapes": "^4.3.2", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/type": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.8.tgz", - "integrity": "sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@kwsites/file-exists": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", - "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", - "license": "MIT", - "dependencies": { - "debug": "^4.1.1" - } - }, - "node_modules/@kwsites/promise-deferred": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", - "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", - "license": "MIT" - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "20.19.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.19.tgz", - "integrity": "sha512-pb1Uqj5WJP7wrcbLU7Ru4QtA0+3kAXrkutGiD26wUKzSMgNNaPARTUDQmElUXp64kh3cWdou3Q0C7qwwxqSFmg==", - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/acorn": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "license": "MIT", - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "license": "MIT" - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chardet": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.0.tgz", - "integrity": "sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==", - "license": "MIT" - }, - "node_modules/cli-width": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", - "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", - "license": "ISC", - "engines": { - "node": ">= 12" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/commander": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", - "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/diff": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", - "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/inquirer": { - "version": "12.5.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-12.5.0.tgz", - "integrity": "sha512-aiBBq5aKF1k87MTxXDylLfwpRwToShiHrSv4EmB07EYyLgmnjEz5B3rn0aGw1X3JA/64Ngf2T54oGwc+BCsPIQ==", - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.9", - "@inquirer/prompts": "^7.4.0", - "@inquirer/type": "^3.0.5", - "ansi-escapes": "^4.3.2", - "mute-stream": "^2.0.0", - "run-async": "^3.0.0", - "rxjs": "^7.8.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "license": "ISC" - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/mute-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", - "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/run-async": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", - "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/rxjs": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/simple-git": { - "version": "3.27.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.27.0.tgz", - "integrity": "sha512-ivHoFS9Yi9GY49ogc6/YAi3Fl9ROnF4VyubNylgCkA+RVqLaKWnDSzXOVzya8csELIaWaYNutsEuAhZrtOjozA==", - "license": "MIT", - "dependencies": { - "@kwsites/file-exists": "^1.1.1", - "@kwsites/promise-deferred": "^1.1.1", - "debug": "^4.3.5" - }, - "funding": { - "type": "github", - "url": "https://github.com/steveukx/git-js?sponsor=1" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "license": "MIT", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", - "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "license": "MIT" - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "license": "MIT" - }, - "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/yoctocolors-cjs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", - "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/scripts/confirm-tag-matches-version.mjs b/scripts/confirm-tag-matches-version.mjs index febe6a2d80..8550c8dc96 100644 --- a/scripts/confirm-tag-matches-version.mjs +++ b/scripts/confirm-tag-matches-version.mjs @@ -1,11 +1,7 @@ // Fails (thus halting the build) if the git tag doesn't match the version in package.json. // This safety measure is part of the release build process. -import fs from 'fs/promises'; -import path from 'path'; -import { fileURLToPath } from 'url'; - -const __dirname = path.dirname( fileURLToPath( import.meta.url ) ); +import packageJson from '../apps/studio/package.json' with { type: 'json' }; const tagTriggeringBuild = process.env.BUILDKITE_TAG; @@ -17,17 +13,13 @@ if ( ! tagTriggeringBuild ) { throw new Error( 'Build was not triggered by a new tag' ); } -const packageJsonPath = path.resolve( __dirname, '../package.json' ); -const packageJsonText = await fs.readFile( packageJsonPath, 'utf-8' ); -const { version: packageVersion } = JSON.parse( packageJsonText ); - -if ( tagTriggeringBuild === packageVersion ) { +if ( tagTriggeringBuild === packageJson.version ) { throw new Error( 'The git tag used to trigger a release build must start with "v"' ); } -if ( tagTriggeringBuild !== 'v' + packageVersion ) { +if ( tagTriggeringBuild !== 'v' + packageJson.version ) { throw new Error( - `Tag which triggered the build (${ tagTriggeringBuild }) does not match version in package.json (${ packageVersion })` + `Tag which triggered the build (${ tagTriggeringBuild }) does not match version in package.json (${ packageJson.version })` ); } diff --git a/scripts/download-language-packs.ts b/scripts/download-language-packs.ts index 1434b62665..158f730fe5 100644 --- a/scripts/download-language-packs.ts +++ b/scripts/download-language-packs.ts @@ -1,8 +1,8 @@ import os from 'os'; import path from 'path'; import fs from 'fs-extra'; -import { extractZip } from '../common/lib/extract-zip'; -import { WP_LOCALES } from '../common/lib/wp-locales'; +import { extractZip } from '../tools/common/lib/extract-zip'; +import { WP_LOCALES } from '../tools/common/lib/wp-locales'; const WP_SERVER_FILES_PATH = path.join( __dirname, '..', 'wp-files' ); diff --git a/scripts/download-node-binary.ts b/scripts/download-node-binary.ts index 0a71939e0b..ea1402bc6c 100644 --- a/scripts/download-node-binary.ts +++ b/scripts/download-node-binary.ts @@ -9,7 +9,7 @@ import fs from 'fs'; import path from 'path'; import os from 'os'; import { extract } from 'tar'; -import { extractZip } from '../common/lib/extract-zip'; +import { extractZip } from '../tools/common/lib/extract-zip'; const LTS_FALLBACK = 'v24.13.1'; @@ -53,7 +53,7 @@ if ( ! nodeArch ) { process.exit( 1 ); } -const binDir = path.join( __dirname, '..', 'bin' ); +const binDir = path.join( __dirname, '..', 'apps', 'studio', 'bin' ); const tmpDir = os.tmpdir(); if ( ! fs.existsSync( binDir ) ) { diff --git a/scripts/download-wp-server-files.ts b/scripts/download-wp-server-files.ts index d79fbafa29..48973a317c 100644 --- a/scripts/download-wp-server-files.ts +++ b/scripts/download-wp-server-files.ts @@ -1,9 +1,9 @@ import os from 'os'; import path from 'path'; import fs from 'fs-extra'; -import { extractZip } from '../common/lib/extract-zip'; -import { getLatestSQLiteCommandRelease } from '../src/lib/sqlite-command-release'; -import { SQLITE_DATABASE_INTEGRATION_RELEASE_URL } from '../src/constants'; +import { extractZip } from '../tools/common/lib/extract-zip'; +import { getLatestSQLiteCommandRelease } from '../apps/studio/src/lib/sqlite-command-release'; +import { SQLITE_DATABASE_INTEGRATION_RELEASE_URL } from '../apps/studio/src/constants'; const WP_SERVER_FILES_PATH = path.join( __dirname, '..', 'wp-files' ); diff --git a/scripts/make-dmg.mjs b/scripts/make-dmg.mjs index 3ecbf36885..cc18d9252a 100644 --- a/scripts/make-dmg.mjs +++ b/scripts/make-dmg.mjs @@ -2,25 +2,32 @@ import child_process from 'child_process'; import * as fs from 'fs'; import * as path from 'path'; import { fileURLToPath } from 'url'; -import packageJson from '../package.json' with { type: 'json' }; +import packageJson from '../apps/studio/package.json' with { type: 'json' }; const __dirname = path.dirname( fileURLToPath( import.meta.url ) ); +const fileArchitecture = process.env.FILE_ARCHITECTURE; + +if ( ! fileArchitecture ) { + throw new Error( + 'FILE_ARCHITECTURE environment variable is required (for example: x64 or arm64).' + ); +} + +const outDir = path.resolve( __dirname, '../apps/studio/out' ); const appPath = path.resolve( - __dirname, - '../out', - `${ packageJson.productName }-darwin-${ process.env.FILE_ARCHITECTURE }`, + outDir, + `${ packageJson.productName }-darwin-${ fileArchitecture }`, `${ packageJson.productName }.app` ); const dmgPath = path.resolve( - __dirname, - '../out', - `${ packageJson.productName }-darwin-${ process.env.FILE_ARCHITECTURE }.dmg` + outDir, + `${ packageJson.productName }-darwin-${ fileArchitecture }.dmg` ); -const volumeIconPath = path.resolve( __dirname, '../assets/studio-app-icon.icns' ); -const backgroundPath = path.resolve( __dirname, '../assets/dmg-background.png' ); +const volumeIconPath = path.resolve( __dirname, '../apps/studio/assets/studio-app-icon.icns' ); +const backgroundPath = path.resolve( __dirname, '../apps/studio/assets/dmg-background.png' ); const dmgSpecs = { title: packageJson.productName, @@ -41,6 +48,7 @@ const dmgSpecs = { if ( fs.existsSync( dmgPath ) ) { fs.unlinkSync( dmgPath ); } +fs.mkdirSync( path.dirname( dmgPath ), { recursive: true } ); const specsFile = path.resolve( __dirname, '..', 'appdmg-specs.json' ); fs.writeFileSync( specsFile, JSON.stringify( dmgSpecs ) ); diff --git a/scripts/make-pot.mjs b/scripts/make-pot.mjs index 5b337f4732..079c784765 100755 --- a/scripts/make-pot.mjs +++ b/scripts/make-pot.mjs @@ -6,7 +6,8 @@ const __filename = fileURLToPath( import.meta.url ); const __dirname = dirname( __filename ); const projectRoot = dirname( __dirname ); -const POT_FILE = join( projectRoot, 'out', 'pots', 'bundle-strings.pot' ); +const POT_DIR = join( projectRoot, 'apps', 'studio', 'out', 'pots' ); +const POT_FILE = join( POT_DIR, 'bundle-strings.pot' ); const IMPORT_PAGE = 'https://translate.wordpress.com/projects/studio/import-originals/'; function executeCommand( command, description ) { @@ -25,12 +26,12 @@ console.log( '✨ Starting pot files generation...\n' ); const commands = [ { - command: 'rm -rf ./out/pots', + command: 'rm -rf ./apps/studio/out/pots', description: 'Removing existing pot files', }, { command: - 'npx wp-babel-makepot "{src,cli,common}/**/*.{js,jsx,ts,tsx}" --ignore "cli/node_modules/**/*,**/*.d.ts" --base "." --dir "./out/pots" --output "./out/pots/bundle-strings.pot"', + 'npx wp-babel-makepot "{apps/studio/src,apps/cli,tools/common}/**/*.{js,jsx,ts,tsx}" --ignore "apps/cli/node_modules/**/*,**/*.d.ts" --base "." --dir "./apps/studio/out/pots" --output "./apps/studio/out/pots/bundle-strings.pot"', description: 'Generating pot file with wp-babel-makepot', }, { diff --git a/scripts/package-appx.mjs b/scripts/package-appx.mjs index 5c88bafeee..0c6cd38ad1 100644 --- a/scripts/package-appx.mjs +++ b/scripts/package-appx.mjs @@ -2,6 +2,7 @@ import fs from 'fs/promises'; import path from 'path'; import { fileURLToPath } from 'url'; import convertToWindowsStore from 'electron2appx'; +import packageJson from '../apps/studio/package.json' with { type: 'json' }; console.log( '--- :electron: Packaging AppX' ); @@ -44,12 +45,8 @@ try { process.exit( 1 ); } -const packageJsonPath = path.resolve( __dirname, '..', 'package.json' ); -const packageJsonText = await fs.readFile( packageJsonPath, 'utf-8' ); -const packageJson = JSON.parse( packageJsonText ); - -const outPath = path.join( __dirname, '..', 'out' ); -const assetsPath = path.join( __dirname, '..', 'assets', 'appx' ); +const outPath = path.join( __dirname, '..', 'apps', 'studio', 'out' ); +const assetsPath = path.join( __dirname, '..', 'apps', 'studio', 'assets', 'appx' ); console.log( `~~~ Packaging AppX for architecture: ${ architecture }` ); diff --git a/scripts/package-in-isolation.ts b/scripts/package-in-isolation.ts new file mode 100644 index 0000000000..6e88c56018 --- /dev/null +++ b/scripts/package-in-isolation.ts @@ -0,0 +1,133 @@ +/** + * This script packages the Studio app in isolation by copying the repo to a temporary directory, + * installing dependencies, running the relevant make/package script, copying the output back to + * the repo and then cleaning up. + * + * Why is this needed? With npm workspaces, most dependencies are hoisted to the top-level + * `node_modules` directory, but there's no guarantee that all of them are. This behavior conflicts + * with our requirement of having self-contained `node_modules` directories for each package that + * are copied to the package output. + * + * In other words, when we run `npm run install:bundle` in `apps/studio`, that mutates the + * `apps/studio/node_modules` directory so the npm workspace-powered dependency tree gets messed + * up. We can't avoid running `npm run install:bundle`, because we need that self-contained + * `node_modules` directory for packaging, so that's why we do it in isolation. + * + * In CI, where we have a clean, ephemeral environment, we short-circuit the behavior and run the + * relevant script in place. + */ + +import fs from 'fs'; +import os from 'os'; +import path from 'path'; +import { spawnSync, type SpawnSyncOptions } from 'child_process'; +import { z } from 'zod'; + +const REPO_ROOT = path.resolve( __dirname, '..' ); +const STUDIO_APP_PACKAGE_JSON = path.join( REPO_ROOT, 'apps', 'studio', 'package.json' ); + +const STUDIO_APP_PACKAGE_JSON_SCHEMA = z.object( { + scripts: z.record( z.string(), z.string() ), +} ); + +function getStudioAppScripts(): Record< string, string > { + const studioAppPackage = JSON.parse( fs.readFileSync( STUDIO_APP_PACKAGE_JSON, 'utf-8' ) ); + const parsedPackage = STUDIO_APP_PACKAGE_JSON_SCHEMA.parse( studioAppPackage ); + return Object.fromEntries( + Object.entries( parsedPackage.scripts ).filter( + ( [ scriptName ] ) => scriptName === 'package' || scriptName.startsWith( 'make' ) + ) + ); +} + +function runOrFail( command: string, args: string[], cwd: string ) { + const options: SpawnSyncOptions = { + cwd, + stdio: 'inherit', + shell: process.platform === 'win32', + }; + + const result = spawnSync( command, args, options ); + if ( result.status !== 0 ) { + process.exit( result.status ?? 1 ); + } +} + +function shouldCopyToStaging( sourcePath: string ): boolean { + const relativePath = path.relative( REPO_ROOT, sourcePath ); + if ( relativePath === '' ) return true; + + const pathSegments = relativePath.split( path.sep ); + if ( pathSegments.includes( '.git' ) ) return false; + if ( pathSegments.includes( 'node_modules' ) ) return false; + + const topLevelDir = pathSegments[ 0 ]; + return topLevelDir !== 'out' && topLevelDir !== 'dist' && topLevelDir !== 'test-results'; +} + +function copyArtifactsBack( stagingRoot: string ) { + const artifactPaths = [ + [ path.join( stagingRoot, 'out' ), path.join( REPO_ROOT, 'out' ) ], + [ + path.join( stagingRoot, 'apps', 'studio', 'out' ), + path.join( REPO_ROOT, 'apps', 'studio', 'out' ), + ], + [ + path.join( stagingRoot, 'apps', 'studio', 'dist' ), + path.join( REPO_ROOT, 'apps', 'studio', 'dist' ), + ], + ] as const; + + for ( const [ from, to ] of artifactPaths ) { + if ( ! fs.existsSync( from ) ) continue; + fs.rmSync( to, { recursive: true, force: true } ); + fs.mkdirSync( path.dirname( to ), { recursive: true } ); + fs.cpSync( from, to, { recursive: true, force: true, verbatimSymlinks: true } ); + } +} + +function main() { + const studioAppScripts = getStudioAppScripts(); + const scriptName = process.argv[ 2 ]; + + if ( ! studioAppScripts.hasOwnProperty( scriptName ) ) { + throw new Error( + `Unsupported script "${ scriptName }". Supported studio-app packaging scripts: ${ Object.keys( + studioAppScripts + ).join( ', ' ) }` + ); + } + + const isCi = process.env.CI && process.env.CI !== 'false'; + if ( isCi ) { + console.log( `Detected CI environment; running script "${ scriptName }" in place.` ); + runOrFail( 'npm', [ '-w', 'studio-app', 'run', scriptName ], REPO_ROOT ); + return; + } + + const stagingParent = fs.mkdtempSync( path.join( os.tmpdir(), 'studio-package-' ) ); + const stagingRoot = path.join( stagingParent, 'repo' ); + + try { + console.log( `Creating packaging directory at ${ stagingRoot }` ); + fs.mkdirSync( stagingRoot, { recursive: true } ); + fs.cpSync( REPO_ROOT, stagingRoot, { + recursive: true, + filter: shouldCopyToStaging, + } ); + + console.log( 'Installing workspace dependencies in packaging directory ...' ); + runOrFail( 'npm', [ 'ci' ], stagingRoot ); + + console.log( `Running script "${ scriptName }" in packaging directory ...` ); + runOrFail( 'npm', [ '-w', 'studio-app', 'run', scriptName ], stagingRoot ); + + console.log( 'Syncing packaging artifacts back to workspace ...' ); + copyArtifactsBack( stagingRoot ); + } finally { + console.log( `Removing packaging directory ${ stagingParent }` ); + fs.rmSync( stagingParent, { recursive: true, force: true } ); + } +} + +main(); diff --git a/scripts/prepare-dev-build-version.mjs b/scripts/prepare-dev-build-version.mjs index 9617cc9e62..adc63b0d49 100644 --- a/scripts/prepare-dev-build-version.mjs +++ b/scripts/prepare-dev-build-version.mjs @@ -2,11 +2,9 @@ import fs from 'fs/promises'; import path from 'path'; -import { fileURLToPath } from 'url'; import semver from 'semver'; import { getLatestTag, getCommitCount } from './lib/git-utils.mjs'; - -const __dirname = path.dirname( fileURLToPath( import.meta.url ) ); +import packageJson from '../apps/studio/package.json' with { type: 'json' }; const latestTag = getLatestTag(); const commitCount = getCommitCount( latestTag ); @@ -19,12 +17,8 @@ if ( ! commitCount && commitCount !== 0 ) { throw new Error( 'Missing commit count' ); } -const packageJsonPath = path.resolve( __dirname, '../package.json' ); -const packageJsonText = await fs.readFile( packageJsonPath, 'utf-8' ); -const packageJson = JSON.parse( packageJsonText ); - // Use version from latestTag (strip leading 'v' if present) -const tagVersion = latestTag.startsWith('v') ? latestTag.slice(1) : latestTag; +const tagVersion = latestTag.startsWith( 'v' ) ? latestTag.slice( 1 ) : latestTag; const parsedVersion = semver.parse( tagVersion ); if ( ! parsedVersion ) { throw new Error( `Invalid version in latestTag: ${ latestTag }` ); @@ -35,4 +29,5 @@ const devVersion = `${ parsedVersion.major }.${ parsedVersion.minor }.${ parsedV packageJson.version = devVersion; +const packageJsonPath = path.resolve( 'apps', 'studio', 'package.json' ); await fs.writeFile( packageJsonPath, JSON.stringify( packageJson, null, '\t' ) + '\n' ); diff --git a/src/about-menu/about-menu.html b/src/about-menu/about-menu.html deleted file mode 100644 index 9cc4ba9c05..0000000000 --- a/src/about-menu/about-menu.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - About WordPress Studio - - -
- - Studio App Icon -

WordPress Studio

-

x.y.z (...)

- -
-
-

Preview sites powered by
WordPress.com hosting ↗

-
-
-

Local sites powered by
WordPress Playground ↗

-
- - \ No newline at end of file diff --git a/src/components/wordpress-styles.tsx b/src/components/wordpress-styles.tsx deleted file mode 100644 index 8b6173d7d3..0000000000 --- a/src/components/wordpress-styles.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { useI18n } from '@wordpress/react-i18n'; -import { DynamicStylesheet } from 'src/components/dynamic-stylesheet'; - -const WORDPRESS_STYLES_ID = 'wordpress-components-style'; - -// @ts-expect-error - import.meta syntax is not supported by TypeScript's commonjs module setting, -// but Vite handles this at build time and replaces it with the actual value -const isDevelopment = import.meta.env.DEV; - -const WORDPRESS_STYLES_LTR = isDevelopment - ? '/node_modules/@wordpress/components/build-style/style.css' - : './main_window/styles/wordpress-components-style.css'; - -const WORDPRESS_STYLES_RTL = isDevelopment - ? '/node_modules/@wordpress/components/build-style/style-rtl.css' - : './main_window/styles/wordpress-components-style-rtl.css'; - -export const WordPressStyles = () => { - const { isRTL } = useI18n(); - const isRtl = isRTL(); - - const href = isRtl ? WORDPRESS_STYLES_RTL : WORDPRESS_STYLES_LTR; - - return ; -}; diff --git a/scripts/benchmark-site-editor/README.md b/tools/benchmark-site-editor/README.md similarity index 100% rename from scripts/benchmark-site-editor/README.md rename to tools/benchmark-site-editor/README.md diff --git a/scripts/benchmark-site-editor/benchmark.ts b/tools/benchmark-site-editor/benchmark.ts similarity index 97% rename from scripts/benchmark-site-editor/benchmark.ts rename to tools/benchmark-site-editor/benchmark.ts index 2d4b665c77..7fb11d097f 100644 --- a/scripts/benchmark-site-editor/benchmark.ts +++ b/tools/benchmark-site-editor/benchmark.ts @@ -1,5 +1,5 @@ #!/usr/bin/env tsx -/* eslint-disable no-console */ + /** * Site Editor Performance Benchmark — Orchestration Script * @@ -27,14 +27,14 @@ import fs from 'fs'; import os from 'os'; import path from 'path'; import chalk from 'chalk'; -import { measureSiteEditor, METRIC_NAMES, type MeasurementResult } from './measure-site-editor.js'; +import { measureSiteEditor, METRIC_NAMES, type MeasurementResult } from './measure-site-editor.ts'; // --------------------------------------------------------------------------- // Configuration // --------------------------------------------------------------------------- const STUDIO_ROOT = path.resolve( import.meta.dirname, '../..' ); -const STUDIO_CLI_PATH = path.resolve( STUDIO_ROOT, 'dist/cli/main.js' ); +const STUDIO_CLI_PATH = path.resolve( STUDIO_ROOT, 'apps/cli/dist/cli/main.js' ); const PLAYGROUND_CLI_BIN = process.platform === 'win32' ? 'wp-playground-cli.cmd' : 'wp-playground-cli'; const PLAYGROUND_CLI_PATH = path.resolve( @@ -620,21 +620,6 @@ function saveResultsSummary( results: BenchmarkResult[] ): void { // --------------------------------------------------------------------------- async function ensureStudioCLIBuilt(): Promise< boolean > { - // Ensure CLI dependencies are installed (required for the Vite build to resolve pm2-axon, etc.) - const cliNodeModules = path.resolve( STUDIO_ROOT, 'cli', 'node_modules' ); - if ( ! fs.existsSync( cliNodeModules ) ) { - console.log( chalk.yellow( ' Installing CLI dependencies...' ) ); - try { - execSync( 'npm install', { - cwd: path.resolve( STUDIO_ROOT, 'cli' ), - stdio: 'inherit', - } ); - } catch { - console.error( chalk.red( ' Failed to install CLI dependencies' ) ); - return false; - } - } - if ( ! fs.existsSync( STUDIO_CLI_PATH ) ) { console.log( chalk.yellow( ' Building Studio CLI...' ) ); try { diff --git a/scripts/benchmark-site-editor/measure-site-editor.ts b/tools/benchmark-site-editor/measure-site-editor.ts similarity index 100% rename from scripts/benchmark-site-editor/measure-site-editor.ts rename to tools/benchmark-site-editor/measure-site-editor.ts diff --git a/scripts/benchmark-site-editor/package.json b/tools/benchmark-site-editor/package.json similarity index 80% rename from scripts/benchmark-site-editor/package.json rename to tools/benchmark-site-editor/package.json index c6024ce753..a9a95881cb 100644 --- a/scripts/benchmark-site-editor/package.json +++ b/tools/benchmark-site-editor/package.json @@ -6,13 +6,13 @@ "license": "GPLv2", "type": "module", "scripts": { - "benchmark": "tsx benchmark.ts" + "benchmark": "ts-node ./benchmark.ts" }, "dependencies": { - "@wp-playground/cli": "^3.0.22", + "@wp-playground/cli": "3.1.1", "chalk": "^5.3.0", "playwright": "^1.58.1", - "tsx": "^4.7.0" + "ts-node": "^10.9.2" }, "devDependencies": { "@types/node": "^20.0.0", diff --git a/scripts/benchmark-site-editor/plugins-blueprint.json b/tools/benchmark-site-editor/plugins-blueprint.json similarity index 100% rename from scripts/benchmark-site-editor/plugins-blueprint.json rename to tools/benchmark-site-editor/plugins-blueprint.json diff --git a/tools/benchmark-site-editor/tsconfig.json b/tools/benchmark-site-editor/tsconfig.json new file mode 100644 index 0000000000..776319fecb --- /dev/null +++ b/tools/benchmark-site-editor/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "composite": true, + "baseUrl": "../..", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "allowImportingTsExtensions": true, + "outDir": "dist", + "declaration": true, + "emitDeclarationOnly": true + }, + "include": [ "**/*" ], + "exclude": [ "**/__mocks__/**/*", "**/node_modules/**/*", "**/dist/**/*", "**/out/**/*" ] +} diff --git a/common/constants.ts b/tools/common/constants.ts similarity index 100% rename from common/constants.ts rename to tools/common/constants.ts diff --git a/common/lib/blueprint-settings.ts b/tools/common/lib/blueprint-settings.ts similarity index 100% rename from common/lib/blueprint-settings.ts rename to tools/common/lib/blueprint-settings.ts diff --git a/common/lib/blueprint-validation.ts b/tools/common/lib/blueprint-validation.ts similarity index 100% rename from common/lib/blueprint-validation.ts rename to tools/common/lib/blueprint-validation.ts diff --git a/common/lib/bump-stat.ts b/tools/common/lib/bump-stat.ts similarity index 97% rename from common/lib/bump-stat.ts rename to tools/common/lib/bump-stat.ts index 65e513c684..d312208fe5 100644 --- a/common/lib/bump-stat.ts +++ b/tools/common/lib/bump-stat.ts @@ -1,5 +1,5 @@ +import { AggregateInterval, StatsGroup, StatsMetric } from '@studio/common/types/stats'; import { isSameDay, isSameMonth, isSameWeek } from 'date-fns'; -import { AggregateInterval, StatsGroup, StatsMetric } from 'common/types/stats'; // Database columns are varchar(32). Group limit is 27 to account for the '-a11n' suffix // added by the backend for Automattic requests (27 + 5 = 32). diff --git a/common/lib/cache-function-ttl.ts b/tools/common/lib/cache-function-ttl.ts similarity index 100% rename from common/lib/cache-function-ttl.ts rename to tools/common/lib/cache-function-ttl.ts diff --git a/common/lib/cli-error.ts b/tools/common/lib/cli-error.ts similarity index 100% rename from common/lib/cli-error.ts rename to tools/common/lib/cli-error.ts diff --git a/common/lib/domains.ts b/tools/common/lib/domains.ts similarity index 94% rename from common/lib/domains.ts rename to tools/common/lib/domains.ts index 195691345c..c954f1eeb6 100644 --- a/common/lib/domains.ts +++ b/tools/common/lib/domains.ts @@ -1,5 +1,5 @@ +import { DEFAULT_CUSTOM_DOMAIN_SUFFIX } from '@studio/common/constants'; import { __ } from '@wordpress/i18n'; -import { DEFAULT_CUSTOM_DOMAIN_SUFFIX } from 'common/constants'; import { sanitizeFolderName } from './sanitize-folder-name'; const DOMAIN_PATTERN = diff --git a/common/lib/escape-regex.ts b/tools/common/lib/escape-regex.ts similarity index 100% rename from common/lib/escape-regex.ts rename to tools/common/lib/escape-regex.ts diff --git a/common/lib/extract-zip.ts b/tools/common/lib/extract-zip.ts similarity index 100% rename from common/lib/extract-zip.ts rename to tools/common/lib/extract-zip.ts diff --git a/common/lib/fs-utils.ts b/tools/common/lib/fs-utils.ts similarity index 100% rename from common/lib/fs-utils.ts rename to tools/common/lib/fs-utils.ts diff --git a/common/lib/get-wordpress-version.ts b/tools/common/lib/get-wordpress-version.ts similarity index 100% rename from common/lib/get-wordpress-version.ts rename to tools/common/lib/get-wordpress-version.ts diff --git a/common/lib/is-errno-exception.ts b/tools/common/lib/is-errno-exception.ts similarity index 100% rename from common/lib/is-errno-exception.ts rename to tools/common/lib/is-errno-exception.ts diff --git a/common/lib/locale.ts b/tools/common/lib/locale.ts similarity index 94% rename from common/lib/locale.ts rename to tools/common/lib/locale.ts index c827b14e04..ba3a1c0072 100644 --- a/common/lib/locale.ts +++ b/tools/common/lib/locale.ts @@ -1,5 +1,5 @@ // This file can be used in React and Node -import { localeDataDictionary } from 'common/translations'; +import { localeDataDictionary } from '@studio/common/translations'; export const DEFAULT_LOCALE = 'en'; diff --git a/common/lib/lockfile.ts b/tools/common/lib/lockfile.ts similarity index 100% rename from common/lib/lockfile.ts rename to tools/common/lib/lockfile.ts diff --git a/common/lib/mu-plugins.ts b/tools/common/lib/mu-plugins.ts similarity index 100% rename from common/lib/mu-plugins.ts rename to tools/common/lib/mu-plugins.ts diff --git a/common/lib/network-utils.ts b/tools/common/lib/network-utils.ts similarity index 100% rename from common/lib/network-utils.ts rename to tools/common/lib/network-utils.ts diff --git a/common/lib/oauth.ts b/tools/common/lib/oauth.ts similarity index 79% rename from common/lib/oauth.ts rename to tools/common/lib/oauth.ts index 3407e99413..c935fa1c50 100644 --- a/common/lib/oauth.ts +++ b/tools/common/lib/oauth.ts @@ -1,5 +1,5 @@ -import { PROTOCOL_PREFIX, CLIENT_ID } from 'common/constants'; -import { SupportedLocale } from 'common/lib/locale'; +import { PROTOCOL_PREFIX, CLIENT_ID } from '@studio/common/constants'; +import { SupportedLocale } from '@studio/common/lib/locale'; const SCOPES = 'global'; const REDIRECT_URI = `${ PROTOCOL_PREFIX }://auth`; diff --git a/common/lib/passwords.ts b/tools/common/lib/passwords.ts similarity index 100% rename from common/lib/passwords.ts rename to tools/common/lib/passwords.ts diff --git a/common/lib/php-output-parser.ts b/tools/common/lib/php-output-parser.ts similarity index 100% rename from common/lib/php-output-parser.ts rename to tools/common/lib/php-output-parser.ts diff --git a/common/lib/playground-cli-messages.ts b/tools/common/lib/playground-cli-messages.ts similarity index 100% rename from common/lib/playground-cli-messages.ts rename to tools/common/lib/playground-cli-messages.ts diff --git a/common/lib/port-finder.ts b/tools/common/lib/port-finder.ts similarity index 100% rename from common/lib/port-finder.ts rename to tools/common/lib/port-finder.ts diff --git a/src/migrations/remove-default-db-constants.ts b/tools/common/lib/remove-default-db-constants.ts similarity index 100% rename from src/migrations/remove-default-db-constants.ts rename to tools/common/lib/remove-default-db-constants.ts diff --git a/common/lib/sanitize-folder-name.ts b/tools/common/lib/sanitize-folder-name.ts similarity index 100% rename from common/lib/sanitize-folder-name.ts rename to tools/common/lib/sanitize-folder-name.ts diff --git a/common/lib/sequential.ts b/tools/common/lib/sequential.ts similarity index 100% rename from common/lib/sequential.ts rename to tools/common/lib/sequential.ts diff --git a/common/lib/site-events.ts b/tools/common/lib/site-events.ts similarity index 100% rename from common/lib/site-events.ts rename to tools/common/lib/site-events.ts diff --git a/common/lib/site-needs-restart.ts b/tools/common/lib/site-needs-restart.ts similarity index 100% rename from common/lib/site-needs-restart.ts rename to tools/common/lib/site-needs-restart.ts diff --git a/common/lib/sort-sites.ts b/tools/common/lib/sort-sites.ts similarity index 100% rename from common/lib/sort-sites.ts rename to tools/common/lib/sort-sites.ts diff --git a/common/lib/sqlite-integration.ts b/tools/common/lib/sqlite-integration.ts similarity index 100% rename from common/lib/sqlite-integration.ts rename to tools/common/lib/sqlite-integration.ts diff --git a/common/lib/suppress-punycode-warning.ts b/tools/common/lib/suppress-punycode-warning.ts similarity index 100% rename from common/lib/suppress-punycode-warning.ts rename to tools/common/lib/suppress-punycode-warning.ts diff --git a/common/lib/tests/blueprint-settings.test.ts b/tools/common/lib/tests/blueprint-settings.test.ts similarity index 100% rename from common/lib/tests/blueprint-settings.test.ts rename to tools/common/lib/tests/blueprint-settings.test.ts diff --git a/common/lib/tests/blueprint-validation.test.ts b/tools/common/lib/tests/blueprint-validation.test.ts similarity index 100% rename from common/lib/tests/blueprint-validation.test.ts rename to tools/common/lib/tests/blueprint-validation.test.ts diff --git a/common/lib/tests/cache-function-ttl.test.ts b/tools/common/lib/tests/cache-function-ttl.test.ts similarity index 99% rename from common/lib/tests/cache-function-ttl.test.ts rename to tools/common/lib/tests/cache-function-ttl.test.ts index ac4060c2d0..3633065c44 100644 --- a/common/lib/tests/cache-function-ttl.test.ts +++ b/tools/common/lib/tests/cache-function-ttl.test.ts @@ -1,5 +1,5 @@ +import { cacheFunctionTTL, clearCache } from '@studio/common/lib/cache-function-ttl'; import { vi } from 'vitest'; -import { cacheFunctionTTL, clearCache } from 'common/lib/cache-function-ttl'; describe( 'cacheFunctionTTL', () => { beforeEach( () => { diff --git a/common/lib/tests/oauth.test.ts b/tools/common/lib/tests/oauth.test.ts similarity index 100% rename from common/lib/tests/oauth.test.ts rename to tools/common/lib/tests/oauth.test.ts diff --git a/common/lib/tests/passwords.test.ts b/tools/common/lib/tests/passwords.test.ts similarity index 89% rename from common/lib/tests/passwords.test.ts rename to tools/common/lib/tests/passwords.test.ts index 0eabd17567..2a0bd1da0a 100644 --- a/common/lib/tests/passwords.test.ts +++ b/tools/common/lib/tests/passwords.test.ts @@ -1,5 +1,5 @@ // Removed: globals are now available via vitest/globals in tsconfig -import { createPassword, decodePassword } from 'common/lib/passwords'; +import { createPassword, decodePassword } from '@studio/common/lib/passwords'; describe( 'createPassword', () => { it( 'should return a Base64-encoded string', () => { diff --git a/src/migrations/tests/remove-default-db-constants.test.ts b/tools/common/lib/tests/remove-default-db-constants.test.ts similarity index 99% rename from src/migrations/tests/remove-default-db-constants.test.ts rename to tools/common/lib/tests/remove-default-db-constants.test.ts index e033165d26..d858169a87 100644 --- a/src/migrations/tests/remove-default-db-constants.test.ts +++ b/tools/common/lib/tests/remove-default-db-constants.test.ts @@ -2,7 +2,7 @@ import { hasDefaultDbBlock, normalizeLineEndings, removeDbConstants, -} from 'src/migrations/remove-default-db-constants'; +} from '../remove-default-db-constants'; const WP_CONFIG_WITH_DEFAULTS = normalizeLineEndings( ` { describe( 'concurrency', () => { diff --git a/common/lib/tests/site-needs-restart.test.ts b/tools/common/lib/tests/site-needs-restart.test.ts similarity index 100% rename from common/lib/tests/site-needs-restart.test.ts rename to tools/common/lib/tests/site-needs-restart.test.ts diff --git a/common/lib/tests/sort-sites.test.ts b/tools/common/lib/tests/sort-sites.test.ts similarity index 89% rename from common/lib/tests/sort-sites.test.ts rename to tools/common/lib/tests/sort-sites.test.ts index d8e487e0e4..bf89b88f24 100644 --- a/common/lib/tests/sort-sites.test.ts +++ b/tools/common/lib/tests/sort-sites.test.ts @@ -2,7 +2,7 @@ * @vitest-environment node */ // To run tests, execute `npm run test -- common/lib/tests/sort-sites.test.ts` from the root directory -import { sortSites } from 'common/lib/sort-sites'; +import { sortSites } from '@studio/common/lib/sort-sites'; describe( 'sortSites', () => { it( 'should sort sites by name in ascending order', () => { diff --git a/common/lib/tests/sqlite-integration.test.ts b/tools/common/lib/tests/sqlite-integration.test.ts similarity index 95% rename from common/lib/tests/sqlite-integration.test.ts rename to tools/common/lib/tests/sqlite-integration.test.ts index aa05b9a43b..30f50d2361 100644 --- a/common/lib/tests/sqlite-integration.test.ts +++ b/tools/common/lib/tests/sqlite-integration.test.ts @@ -1,16 +1,12 @@ import fs from 'fs-extra'; import { vi } from 'vitest'; -import { SqliteIntegrationProvider } from 'common/lib/sqlite-integration'; -import { platformTestSuite } from 'src/tests/utils/platform-test-suite'; +import { SqliteIntegrationProvider } from '../sqlite-integration'; +import { platformTestSuite } from './utils/platform-test-suite'; const SQLITE_DIRNAME = 'sqlite-database-integration'; const MOCK_SITE_PATH = 'mock-site-path'; -// Use the global fs-extra mock from src/__mocks__/fs-extra.ts -vi.mock( 'fs-extra', async () => { - const mockModule = await import( 'src/__mocks__/fs-extra' ); - return mockModule; -} ); +vi.mock( 'fs-extra', async () => await import( './utils/fs-extra-mock' ) ); // Import the mock helpers directly from the mocked fs-extra module const mockFs = fs as typeof fs & { diff --git a/tools/common/lib/tests/utils/fs-extra-mock.ts b/tools/common/lib/tests/utils/fs-extra-mock.ts new file mode 100644 index 0000000000..c6d488edd2 --- /dev/null +++ b/tools/common/lib/tests/utils/fs-extra-mock.ts @@ -0,0 +1,78 @@ +import { vi } from 'vitest'; + +// Extend globalThis to include our mock file system +declare global { + var __fsExtraMockFiles: Record< string, string | string[] > | undefined; +} + +// Use globalThis to share state between mock and tests +// This allows tests to directly access and modify the mock file system +if ( ! globalThis.__fsExtraMockFiles ) { + globalThis.__fsExtraMockFiles = {}; +} +const mockFiles = globalThis.__fsExtraMockFiles; + +const readFile = vi.fn( async ( path: string ): Promise< string > => { + const fileContents = mockFiles[ path ]; + if ( typeof fileContents === 'string' ) { + return fileContents; + } + return ''; +} ); + +const readFileSync = vi.fn( ( path: string ): string => { + const fileContents = mockFiles[ path ]; + if ( typeof fileContents === 'string' ) { + return fileContents; + } + return ''; +} ); + +const readdir = vi.fn( async ( path: string ): Promise< Array< string > > => { + const dirContents = mockFiles[ path ]; + if ( Array.isArray( dirContents ) ) { + return dirContents; + } + return []; +} ); + +const pathExists = vi.fn( async ( path: string ): Promise< boolean > => { + return !! mockFiles[ path ]; +} ); + +const mkdir = vi.fn(); +const writeFile = vi.fn(); +const copy = vi.fn(); + +const __setFileContents = ( path: string, fileContents: string | string[] ) => { + mockFiles[ path ] = fileContents; +}; + +const __clearMockFiles = () => { + Object.keys( mockFiles ).forEach( ( key ) => delete mockFiles[ key ] ); +}; + +export default { + __mockFiles: mockFiles, + __setFileContents, + __clearMockFiles, + readFile, + readFileSync, + readdir, + pathExists, + mkdir, + writeFile, + copy, +}; + +export { + readFile, + readFileSync, + readdir, + pathExists, + mkdir, + writeFile, + copy, + __setFileContents, + __clearMockFiles, +}; diff --git a/src/tests/utils/platform-test-suite.ts b/tools/common/lib/tests/utils/platform-test-suite.ts similarity index 100% rename from src/tests/utils/platform-test-suite.ts rename to tools/common/lib/tests/utils/platform-test-suite.ts diff --git a/common/lib/tests/wordpress-version-utils.test.ts b/tools/common/lib/tests/wordpress-version-utils.test.ts similarity index 100% rename from common/lib/tests/wordpress-version-utils.test.ts rename to tools/common/lib/tests/wordpress-version-utils.test.ts diff --git a/common/lib/wordpress-version-utils.ts b/tools/common/lib/wordpress-version-utils.ts similarity index 100% rename from common/lib/wordpress-version-utils.ts rename to tools/common/lib/wordpress-version-utils.ts diff --git a/common/lib/wp-locales.ts b/tools/common/lib/wp-locales.ts similarity index 100% rename from common/lib/wp-locales.ts rename to tools/common/lib/wp-locales.ts diff --git a/src/lib/wpcom-factory.ts b/tools/common/lib/wpcom-factory.ts similarity index 100% rename from src/lib/wpcom-factory.ts rename to tools/common/lib/wpcom-factory.ts diff --git a/src/lib/wpcom-xhr-request-factory.ts b/tools/common/lib/wpcom-xhr-request-factory.ts similarity index 100% rename from src/lib/wpcom-xhr-request-factory.ts rename to tools/common/lib/wpcom-xhr-request-factory.ts diff --git a/common/logger-actions.ts b/tools/common/logger-actions.ts similarity index 100% rename from common/logger-actions.ts rename to tools/common/logger-actions.ts diff --git a/tools/common/package.json b/tools/common/package.json new file mode 100644 index 0000000000..879f3f7f02 --- /dev/null +++ b/tools/common/package.json @@ -0,0 +1,30 @@ +{ + "name": "@studio/common", + "private": true, + "version": "1.0.0", + "description": "Shared code between Studio app and CLI", + "scripts": { + "build": "tsc -p tsconfig.json", + "typecheck": "tsc -p tsconfig.json --noEmit" + }, + "dependencies": { + "@automattic/generate-password": "^0.1.0", + "@wordpress/i18n": "^6.9.0", + "@wp-playground/wordpress": "3.1.1", + "cross-port-killer": "^1.4.0", + "date-fns": "^3.3.1", + "fast-deep-equal": "^3.1.3", + "fs-extra": "^11.3.2", + "lockfile": "^1.0.4", + "wpcom": "^7.1.1", + "wpcom-xhr-request": "^1.3.0", + "yauzl": "^3.2.0", + "zod": "^4.0.0" + }, + "devDependencies": { + "@types/fs-extra": "^11.0.4", + "@types/lockfile": "^1.0.4", + "@types/yauzl": "^2.10.3", + "@wp-playground/blueprints": "3.1.1" + } +} diff --git a/tools/common/translations/index.ts b/tools/common/translations/index.ts new file mode 100644 index 0000000000..b7ced55645 --- /dev/null +++ b/tools/common/translations/index.ts @@ -0,0 +1,44 @@ +import { locale_data as ar } from '@studio/common/translations/studio-ar.jed.json'; +import { locale_data as de } from '@studio/common/translations/studio-de.jed.json'; +import { locale_data as es } from '@studio/common/translations/studio-es.jed.json'; +import { locale_data as fr } from '@studio/common/translations/studio-fr.jed.json'; +import { locale_data as he } from '@studio/common/translations/studio-he.jed.json'; +import { locale_data as hu } from '@studio/common/translations/studio-hu.jed.json'; +import { locale_data as id } from '@studio/common/translations/studio-id.jed.json'; +import { locale_data as it } from '@studio/common/translations/studio-it.jed.json'; +import { locale_data as ja } from '@studio/common/translations/studio-ja.jed.json'; +import { locale_data as ko } from '@studio/common/translations/studio-ko.jed.json'; +import { locale_data as nl } from '@studio/common/translations/studio-nl.jed.json'; +import { locale_data as pl } from '@studio/common/translations/studio-pl.jed.json'; +import { locale_data as ptBR } from '@studio/common/translations/studio-pt-br.jed.json'; +import { locale_data as ru } from '@studio/common/translations/studio-ru.jed.json'; +import { locale_data as sv } from '@studio/common/translations/studio-sv.jed.json'; +import { locale_data as tr } from '@studio/common/translations/studio-tr.jed.json'; +import { locale_data as uk } from '@studio/common/translations/studio-uk.jed.json'; +import { locale_data as vi } from '@studio/common/translations/studio-vi.jed.json'; +import { locale_data as zhCN } from '@studio/common/translations/studio-zh-cn.jed.json'; +import { locale_data as zhTW } from '@studio/common/translations/studio-zh-tw.jed.json'; + +export const localeDataDictionary = { + ar, + de, + en: null, + es, + fr, + he, + hu, + id, + it, + ja, + ko, + nl, + pl, + 'pt-br': ptBR, + ru, + sv, + tr, + uk, + vi, + 'zh-cn': zhCN, + 'zh-tw': zhTW, +} as const; diff --git a/common/translations/studio-ar.jed.json b/tools/common/translations/studio-ar.jed.json similarity index 100% rename from common/translations/studio-ar.jed.json rename to tools/common/translations/studio-ar.jed.json diff --git a/common/translations/studio-de.jed.json b/tools/common/translations/studio-de.jed.json similarity index 100% rename from common/translations/studio-de.jed.json rename to tools/common/translations/studio-de.jed.json diff --git a/common/translations/studio-es.jed.json b/tools/common/translations/studio-es.jed.json similarity index 100% rename from common/translations/studio-es.jed.json rename to tools/common/translations/studio-es.jed.json diff --git a/common/translations/studio-fr.jed.json b/tools/common/translations/studio-fr.jed.json similarity index 100% rename from common/translations/studio-fr.jed.json rename to tools/common/translations/studio-fr.jed.json diff --git a/common/translations/studio-he.jed.json b/tools/common/translations/studio-he.jed.json similarity index 100% rename from common/translations/studio-he.jed.json rename to tools/common/translations/studio-he.jed.json diff --git a/common/translations/studio-hu.jed.json b/tools/common/translations/studio-hu.jed.json similarity index 100% rename from common/translations/studio-hu.jed.json rename to tools/common/translations/studio-hu.jed.json diff --git a/common/translations/studio-id.jed.json b/tools/common/translations/studio-id.jed.json similarity index 100% rename from common/translations/studio-id.jed.json rename to tools/common/translations/studio-id.jed.json diff --git a/common/translations/studio-it.jed.json b/tools/common/translations/studio-it.jed.json similarity index 100% rename from common/translations/studio-it.jed.json rename to tools/common/translations/studio-it.jed.json diff --git a/common/translations/studio-ja.jed.json b/tools/common/translations/studio-ja.jed.json similarity index 100% rename from common/translations/studio-ja.jed.json rename to tools/common/translations/studio-ja.jed.json diff --git a/common/translations/studio-ko.jed.json b/tools/common/translations/studio-ko.jed.json similarity index 100% rename from common/translations/studio-ko.jed.json rename to tools/common/translations/studio-ko.jed.json diff --git a/common/translations/studio-nl.jed.json b/tools/common/translations/studio-nl.jed.json similarity index 100% rename from common/translations/studio-nl.jed.json rename to tools/common/translations/studio-nl.jed.json diff --git a/common/translations/studio-pl.jed.json b/tools/common/translations/studio-pl.jed.json similarity index 100% rename from common/translations/studio-pl.jed.json rename to tools/common/translations/studio-pl.jed.json diff --git a/common/translations/studio-pt-br.jed.json b/tools/common/translations/studio-pt-br.jed.json similarity index 100% rename from common/translations/studio-pt-br.jed.json rename to tools/common/translations/studio-pt-br.jed.json diff --git a/common/translations/studio-ru.jed.json b/tools/common/translations/studio-ru.jed.json similarity index 100% rename from common/translations/studio-ru.jed.json rename to tools/common/translations/studio-ru.jed.json diff --git a/common/translations/studio-sv.jed.json b/tools/common/translations/studio-sv.jed.json similarity index 100% rename from common/translations/studio-sv.jed.json rename to tools/common/translations/studio-sv.jed.json diff --git a/common/translations/studio-tr.jed.json b/tools/common/translations/studio-tr.jed.json similarity index 100% rename from common/translations/studio-tr.jed.json rename to tools/common/translations/studio-tr.jed.json diff --git a/common/translations/studio-uk.jed.json b/tools/common/translations/studio-uk.jed.json similarity index 100% rename from common/translations/studio-uk.jed.json rename to tools/common/translations/studio-uk.jed.json diff --git a/common/translations/studio-vi.jed.json b/tools/common/translations/studio-vi.jed.json similarity index 100% rename from common/translations/studio-vi.jed.json rename to tools/common/translations/studio-vi.jed.json diff --git a/common/translations/studio-zh-cn.jed.json b/tools/common/translations/studio-zh-cn.jed.json similarity index 100% rename from common/translations/studio-zh-cn.jed.json rename to tools/common/translations/studio-zh-cn.jed.json diff --git a/common/translations/studio-zh-tw.jed.json b/tools/common/translations/studio-zh-tw.jed.json similarity index 100% rename from common/translations/studio-zh-tw.jed.json rename to tools/common/translations/studio-zh-tw.jed.json diff --git a/tools/common/tsconfig.json b/tools/common/tsconfig.json new file mode 100644 index 0000000000..ee0df91243 --- /dev/null +++ b/tools/common/tsconfig.json @@ -0,0 +1,19 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "composite": true, + "baseUrl": "../..", + "paths": { + "*": [ "node_modules/*" ], + "cli/*": [ "apps/cli/*" ], + "src/*": [ "apps/studio/src/*" ], + "vendor/*": [ "vendor/*" ], + "@studio/common/*": [ "tools/common/*" ] + }, + "outDir": "dist", + "declaration": true, + "emitDeclarationOnly": true + }, + "include": [ "**/*" ], + "exclude": [ "**/__mocks__/**/*", "**/node_modules/**/*", "**/dist/**/*", "**/out/**/*" ] +} diff --git a/common/types/php-versions.ts b/tools/common/types/php-versions.ts similarity index 100% rename from common/types/php-versions.ts rename to tools/common/types/php-versions.ts diff --git a/common/types/snapshot.ts b/tools/common/types/snapshot.ts similarity index 100% rename from common/types/snapshot.ts rename to tools/common/types/snapshot.ts diff --git a/common/types/stats.ts b/tools/common/types/stats.ts similarity index 100% rename from common/types/stats.ts rename to tools/common/types/stats.ts diff --git a/tools/common/vitest.config.ts b/tools/common/vitest.config.ts new file mode 100644 index 0000000000..a774d708ea --- /dev/null +++ b/tools/common/vitest.config.ts @@ -0,0 +1,22 @@ +import path from 'path'; +import { defineProject, mergeConfig } from 'vitest/config'; +import sharedConfig from '../../vitest.shared'; + +export default mergeConfig( + sharedConfig, + defineProject( { + test: { + name: 'common', + include: [ '**/*.{test,spec}.{ts,tsx}' ], + }, + resolve: { + alias: { + '@studio/common': path.resolve( __dirname, '.' ), + '@wp-playground/blueprints/blueprint-schema-validator': path.resolve( + __dirname, + '../../node_modules/@wp-playground/blueprints/blueprint-schema-validator.js' + ), + }, + }, + } ) +); diff --git a/scripts/compare-perf/config.ts b/tools/compare-perf/config.ts similarity index 66% rename from scripts/compare-perf/config.ts rename to tools/compare-perf/config.ts index 767d53a5c9..6c52d25005 100644 --- a/scripts/compare-perf/config.ts +++ b/tools/compare-perf/config.ts @@ -1,14 +1,15 @@ import path from 'path'; -const metricsPath = path.resolve( __dirname, '../../metrics' ); +const metricsPath = path.resolve( __dirname, '../metrics' ); const artifactsPath = process.env.ARTIFACTS_PATH ?? path.join( metricsPath, 'artifacts' ); const config = { gitRepositoryURL: 'https://github.com/Automattic/studio.git', setupTestRunner: 'npm ci && npx playwright install chromium', testCommand: 'npm run test:metrics', - setupCommand: 'npm ci && npm ci --prefix cli && npm run package', - testsPath: 'metrics/tests', + setupCommand: + 'npm ci && npm -w studio-cli run install:bundle && npm -w studio-app run install:bundle && npm run package', + testsPath: 'tools/metrics/tests', testFileSuffix: '.test.ts', artifactsPath, resultsFileSuffix: '.results.json', diff --git a/scripts/compare-perf/index.ts b/tools/compare-perf/index.ts similarity index 100% rename from scripts/compare-perf/index.ts rename to tools/compare-perf/index.ts diff --git a/scripts/compare-perf/log-to-codevitals.ts b/tools/compare-perf/log-to-codevitals.ts similarity index 100% rename from scripts/compare-perf/log-to-codevitals.ts rename to tools/compare-perf/log-to-codevitals.ts diff --git a/scripts/compare-perf/package.json b/tools/compare-perf/package.json similarity index 97% rename from scripts/compare-perf/package.json rename to tools/compare-perf/package.json index 741aa7b978..cc74482cc9 100644 --- a/scripts/compare-perf/package.json +++ b/tools/compare-perf/package.json @@ -1,5 +1,6 @@ { "name": "compare-perf", + "private": true, "version": "0.0.1", "description": "A tool to compare performance accross tow branches in Studio Monorepo.", "author": "Automattic", diff --git a/scripts/compare-perf/performance.ts b/tools/compare-perf/performance.ts similarity index 100% rename from scripts/compare-perf/performance.ts rename to tools/compare-perf/performance.ts diff --git a/scripts/compare-perf/post-to-github.ts b/tools/compare-perf/post-to-github.ts similarity index 100% rename from scripts/compare-perf/post-to-github.ts rename to tools/compare-perf/post-to-github.ts diff --git a/scripts/compare-perf/tsconfig.json b/tools/compare-perf/tsconfig.json similarity index 67% rename from scripts/compare-perf/tsconfig.json rename to tools/compare-perf/tsconfig.json index d8adec6c0d..b964aa883b 100644 --- a/scripts/compare-perf/tsconfig.json +++ b/tools/compare-perf/tsconfig.json @@ -1,17 +1,15 @@ { "compilerOptions": { "target": "ES2017", - "lib": ["ES2017"], + "lib": [ "ES2017" ], "module": "commonjs", "moduleResolution": "node", "esModuleInterop": true, "skipLibCheck": true, "strict": true, "resolveJsonModule": true, - "types": ["node"] + "types": [ "node" ] }, - "include": ["*.ts"], - "exclude": ["node_modules"] + "include": [ "*.ts" ], + "exclude": [ "node_modules" ] } - - diff --git a/scripts/compare-perf/utils.ts b/tools/compare-perf/utils.ts similarity index 100% rename from scripts/compare-perf/utils.ts rename to tools/compare-perf/utils.ts diff --git a/packages/eslint-plugin-studio/package.json b/tools/eslint-plugin-studio/package.json similarity index 100% rename from packages/eslint-plugin-studio/package.json rename to tools/eslint-plugin-studio/package.json diff --git a/packages/eslint-plugin-studio/src/index.js b/tools/eslint-plugin-studio/src/index.js similarity index 100% rename from packages/eslint-plugin-studio/src/index.js rename to tools/eslint-plugin-studio/src/index.js diff --git a/packages/eslint-plugin-studio/src/rules/require-lock-before-save.js b/tools/eslint-plugin-studio/src/rules/require-lock-before-save.js similarity index 100% rename from packages/eslint-plugin-studio/src/rules/require-lock-before-save.js rename to tools/eslint-plugin-studio/src/rules/require-lock-before-save.js diff --git a/packages/eslint-plugin-studio/tests/require-lock-before-save.test.ts b/tools/eslint-plugin-studio/tests/require-lock-before-save.test.ts similarity index 100% rename from packages/eslint-plugin-studio/tests/require-lock-before-save.test.ts rename to tools/eslint-plugin-studio/tests/require-lock-before-save.test.ts diff --git a/metrics/README.md b/tools/metrics/README.md similarity index 90% rename from metrics/README.md rename to tools/metrics/README.md index be95dcb15c..0ffddf57e5 100644 --- a/metrics/README.md +++ b/tools/metrics/README.md @@ -18,7 +18,7 @@ This will: 1. Package the application (to ensure testing against the production build) 2. Run the performance tests using Playwright -3. Generate a performance reports in `artifacts/performance-metrics.json` at the project root and output the results to the console +3. Generate a performance reports in `tools/metrics/artifacts/performance-metrics.json` and output the results to the console ## How It Works @@ -33,7 +33,7 @@ The performance tests simulate key user workflows and measure the time they take You can compare performance metrics between different commits or branches: ```bash -cd scripts/compare-perf && npm run compare -- perf +npm -w compare-perf run compare -- perf ``` This tool is useful for: @@ -60,7 +60,7 @@ The `performance-metrics.json` output file contains a summary of the results, ex ```json { "siteCreation": 6150, - "siteStartup": 3946, + "siteStartup": 3946 } ``` diff --git a/metrics/performance-reporter.ts b/tools/metrics/performance-reporter.ts similarity index 100% rename from metrics/performance-reporter.ts rename to tools/metrics/performance-reporter.ts diff --git a/metrics/playwright.metrics.config.ts b/tools/metrics/playwright.metrics.config.ts similarity index 100% rename from metrics/playwright.metrics.config.ts rename to tools/metrics/playwright.metrics.config.ts diff --git a/metrics/tests/site-editor.test.ts b/tools/metrics/tests/site-editor.test.ts similarity index 81% rename from metrics/tests/site-editor.test.ts rename to tools/metrics/tests/site-editor.test.ts index 35587e668a..77c2bdfaa1 100644 --- a/metrics/tests/site-editor.test.ts +++ b/tools/metrics/tests/site-editor.test.ts @@ -1,9 +1,9 @@ import { test, expect, chromium } from '@playwright/test'; -import { E2ESession } from '../../e2e/e2e-helpers'; -import Onboarding from '../../e2e/page-objects/onboarding'; -import SiteContent from '../../e2e/page-objects/site-content'; -import WhatsNewModal from '../../e2e/page-objects/whats-new-modal'; -import { getUrlWithAutoLogin } from '../../e2e/utils'; +import { E2ESession } from '../../../apps/studio/e2e/e2e-helpers'; +import Onboarding from '../../../apps/studio/e2e/page-objects/onboarding'; +import SiteContent from '../../../apps/studio/e2e/page-objects/site-content'; +import WhatsNewModal from '../../../apps/studio/e2e/page-objects/whats-new-modal'; +import { getUrlWithAutoLogin } from '../../../apps/studio/e2e/utils'; import { median } from '../utils'; test.describe( 'Site Editor Load Metrics', () => { @@ -72,7 +72,7 @@ test.describe( 'Site Editor Load Metrics', () => { // First wait for the iframe to appear with explicit timeout await page.waitForSelector( 'iframe[name="editor-canvas"]', { state: 'visible', - timeout: 120_000 // 2 minutes, half of the default action timeout + timeout: 120_000, // 2 minutes, half of the default action timeout } ); const frame = page.frame( { name: 'editor-canvas' } ); if ( ! frame ) { @@ -84,14 +84,17 @@ test.describe( 'Site Editor Load Metrics', () => { await frame.waitForSelector( '[data-block]', { timeout: 60_000 } ); // Make sure blocks are loaded and spinners are gone - await frame.waitForFunction( () => { - return ( - document.querySelectorAll( '[data-block]' ).length > 0 && - ! document.querySelector( '.components-spinner' ) && - ! document.querySelector( '.is-loading' ) && - ! document.querySelector( '.wp-block-editor__loading' ) - ); - }, { timeout: 60_000 } ); + await frame.waitForFunction( + () => { + return ( + document.querySelectorAll( '[data-block]' ).length > 0 && + ! document.querySelector( '.components-spinner' ) && + ! document.querySelector( '.is-loading' ) && + ! document.querySelector( '.wp-block-editor__loading' ) + ); + }, + { timeout: 60_000 } + ); const endTime = Date.now(); const duration = endTime - startTime; diff --git a/metrics/tests/site-startup.test.ts b/tools/metrics/tests/site-startup.test.ts similarity index 90% rename from metrics/tests/site-startup.test.ts rename to tools/metrics/tests/site-startup.test.ts index 16cf057054..440385efb4 100644 --- a/metrics/tests/site-startup.test.ts +++ b/tools/metrics/tests/site-startup.test.ts @@ -1,8 +1,8 @@ import { test, expect } from '@playwright/test'; -import { E2ESession } from '../../e2e/e2e-helpers'; -import Onboarding from '../../e2e/page-objects/onboarding'; -import SiteContent from '../../e2e/page-objects/site-content'; -import WhatsNewModal from '../../e2e/page-objects/whats-new-modal'; +import { E2ESession } from '../../../apps/studio/e2e/e2e-helpers'; +import Onboarding from '../../../apps/studio/e2e/page-objects/onboarding'; +import SiteContent from '../../../apps/studio/e2e/page-objects/site-content'; +import WhatsNewModal from '../../../apps/studio/e2e/page-objects/whats-new-modal'; import { median } from '../utils'; test.describe( 'Startup Metrics', () => { diff --git a/metrics/utils.ts b/tools/metrics/utils.ts similarity index 100% rename from metrics/utils.ts rename to tools/metrics/utils.ts diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 0000000000..9ffafd5b42 --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES6", + "allowJs": true, + "module": "commonjs", + "skipLibCheck": true, + "esModuleInterop": true, + "noImplicitAny": true, + "sourceMap": true, + "moduleResolution": "node", + "resolveJsonModule": true, + "jsx": "react-jsx", + "strict": true, + "types": [ "vitest/globals", "node" ] + } +} diff --git a/tsconfig.json b/tsconfig.json index 526747147a..d7640d6da2 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,27 +1,22 @@ { + "extends": "./tsconfig.base.json", "compilerOptions": { - "target": "ES6", - "allowJs": true, - "module": "commonjs", - "skipLibCheck": true, - "esModuleInterop": true, - "noImplicitAny": true, - "sourceMap": true, "baseUrl": ".", "outDir": "dist", - "moduleResolution": "node", - "resolveJsonModule": true, - "jsx": "react-jsx", - "strict": true, - "types": [ "vitest/globals" ], "paths": { "*": [ "node_modules/*" ], - "cli/*": [ "cli/*" ], - "src/*": [ "src/*" ], + "cli/*": [ "apps/cli/*" ], + "src/*": [ "apps/studio/src/*" ], "vendor/*": [ "vendor/*" ], - "common/*": [ "common/*" ] + "@studio/common/*": [ "tools/common/*" ] } }, - "include": [ "src/**/*", "cli/**/*", "common/**/*", "e2e/**/*", "./vitest.setup.ts" ], + "include": [ + "apps/studio/src/**/*", + "apps/studio/e2e/**/*", + "apps/cli/**/*", + "tools/common/**/*", + "./vitest.global-setup.ts" + ], "exclude": [ "**/__mocks__/**/*", "**/node_modules/**/*", "**/dist/**/*", "**/out/**/*" ] } diff --git a/vitest.config.mts b/vitest.config.mts deleted file mode 100644 index 831dffe7fe..0000000000 --- a/vitest.config.mts +++ /dev/null @@ -1,49 +0,0 @@ -import { defineConfig } from 'vitest/config'; -import path from 'path'; - -export default defineConfig( { - test: { - pool: 'threads', - maxThreads: 8, - minThreads: 1, - globals: true, - environment: 'jsdom', - environmentOptions: { - customExportConditions: [ 'node', 'node-addons' ], - }, - include: [ - 'src/**/*.{test,spec}.{ts,tsx}', - 'cli/**/*.{test,spec}.{ts,tsx}', - 'common/**/*.{test,spec}.{ts,tsx}', - 'packages/**/*.{test,spec}.{ts,tsx,js}', - ], - exclude: [ - '**/node_modules/**', - '**/tests/utils/**', - '**/stores/tests/utils/**', - '**/vendor/**', - ], - globalSetup: './vitest.global-setup.ts', - setupFiles: [ './vitest.setup.ts' ], - server: { - deps: { - inline: [ '@php-wasm', '@wp-playground' ], - external: [ 'electron' ], - }, - }, - css: false, - }, - resolve: { - alias: { - pm2: path.resolve( __dirname, './__mocks__/pm2.ts' ), - cli: path.resolve( __dirname, './cli' ), - src: path.resolve( __dirname, './src' ), - vendor: path.resolve( __dirname, './vendor' ), - common: path.resolve( __dirname, './common' ), - '@wp-playground/blueprints/blueprint-schema-validator': path.resolve( - __dirname, - './node_modules/@wp-playground/blueprints/blueprint-schema-validator.js' - ), - }, - }, -} ); diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 0000000000..cc38ca2d01 --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,11 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig( { + test: { + projects: [ + './apps/cli/vitest.config.ts', + './apps/studio/vitest.config.ts', + './tools/common/vitest.config.ts', + ], + }, +} ); diff --git a/vitest.shared.ts b/vitest.shared.ts new file mode 100644 index 0000000000..ce71a12dcc --- /dev/null +++ b/vitest.shared.ts @@ -0,0 +1,27 @@ +import path from 'path'; +import { defineConfig } from 'vitest/config'; + +export default defineConfig( { + test: { + pool: 'threads', + globals: true, + environment: 'jsdom', + environmentOptions: { + customExportConditions: [ 'node', 'node-addons' ], + }, + exclude: [ + '**/node_modules/**', + '**/tests/utils/**', + '**/stores/tests/utils/**', + '**/vendor/**', + ], + globalSetup: path.resolve( __dirname, './vitest.global-setup.ts' ), + server: { + deps: { + inline: [ '@php-wasm', '@wp-playground' ], + external: [ 'electron' ], + }, + }, + css: false, + }, +} );