diff --git a/.depcheckrc.yml b/.depcheckrc.yml index 5485f3391..a4f46bc4d 100644 --- a/.depcheckrc.yml +++ b/.depcheckrc.yml @@ -38,6 +38,9 @@ ignores: - 'typedoc' - 'typescript' + # Used by @ocap/nodejs to build the sqlite3 bindings + - 'node-gyp' + # These are peer dependencies of various modules we actually do # depend on, which have been elevated to full dependencies (even # though we don't actually depend on them) in order to work around a diff --git a/.github/workflows/lint-build-test.yml b/.github/workflows/lint-build-test.yml index 755587aed..dc0206b60 100644 --- a/.github/workflows/lint-build-test.yml +++ b/.github/workflows/lint-build-test.yml @@ -173,7 +173,7 @@ jobs: node-version: ${{ matrix.node-version }} cache: yarn - run: yarn --immutable - - run: yarn build + - run: yarn build -f - run: yarn test:e2e:ci - name: Require clean working directory shell: bash diff --git a/package.json b/package.json index 44d76ac66..80787a494 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "build:clean": "yarn clean && yarn build", "build:docs": "yarn workspaces foreach --all --exclude @ocap/monorepo --exclude @ocap/extension --parallel --interlaced --verbose run build:docs", "build:source": "ts-bridge --project tsconfig.build.json --verbose && yarn build:special", - "build:special": "yarn workspace @ocap/shims run build && yarn workspace @ocap/extension run build", + "build:special": "yarn workspace @ocap/shims run build && yarn workspace @ocap/extension run build && yarn workspace @ocap/nodejs run build:sqlite3", "bundle": "node ./scripts/bundle-vat.js", "changelog:update": "yarn workspaces foreach --all --no-private --parallel --interlaced --verbose run changelog:update", "changelog:validate": "yarn workspaces foreach --all --no-private --parallel --interlaced --verbose run changelog:validate", @@ -33,6 +33,7 @@ "test": "vitest run", "test:clean": "yarn test --no-cache --coverage.clean", "test:dev": "yarn test --coverage false", + "test:e2e:ci": "yarn workspaces foreach -A run test:e2e:ci --no-silent", "test:verbose": "yarn test --reporter verbose", "test:watch": "vitest", "why:batch": "./scripts/why-batch.sh" @@ -66,7 +67,8 @@ "@typescript-eslint/eslint-plugin": "^8.8.1", "@typescript-eslint/parser": "^8.8.1", "@typescript-eslint/utils": "^8.8.1", - "@vitest/coverage-istanbul": "2.1.3", + "@vitest/browser": "2.1.4", + "@vitest/coverage-istanbul": "2.1.4", "@vitest/eslint-plugin": "^1.1.7", "@yarnpkg/types": "^4.0.0", "depcheck": "^1.4.7", @@ -91,7 +93,7 @@ "typescript-eslint": "^8.8.1", "vite": "^5.3.5", "vite-tsconfig-paths": "^4.3.2", - "vitest": "^2.1.2", + "vitest": "2.1.4", "vitest-fetch-mock": "^0.4.2" }, "packageManager": "yarn@4.2.2", @@ -106,7 +108,8 @@ "simple-git-hooks": false, "vitest>@vitest/browser>webdriverio>@wdio/utils>edgedriver": false, "vitest>@vitest/browser>webdriverio>@wdio/utils>geckodriver": false, - "vitest>@vitest/mocker>msw": false + "vitest>@vitest/mocker>msw": false, + "@vitest/browser>msw": false } }, "resolutions": { diff --git a/packages/cli/package.json b/packages/cli/package.json index 2682855d5..313b46057 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -78,7 +78,7 @@ "typescript": "~5.5.4", "typescript-eslint": "^8.8.1", "vite": "^5.3.5", - "vitest": "^2.1.2" + "vitest": "2.1.4" }, "engines": { "node": "^20 || >=22" diff --git a/packages/errors/package.json b/packages/errors/package.json index 9efd6be55..027e5eafa 100644 --- a/packages/errors/package.json +++ b/packages/errors/package.json @@ -77,7 +77,7 @@ "typescript": "~5.5.4", "typescript-eslint": "^8.8.1", "vite": "^5.3.5", - "vitest": "^2.1.2" + "vitest": "2.1.4" }, "engines": { "node": "^20 || >=22" diff --git a/packages/extension/package.json b/packages/extension/package.json index d5272e928..68b8edbc7 100644 --- a/packages/extension/package.json +++ b/packages/extension/package.json @@ -91,7 +91,7 @@ "vite": "^5.3.5", "vite-plugin-checker": "^0.8.0", "vite-plugin-static-copy": "^1.0.6", - "vitest": "^2.1.2" + "vitest": "2.1.4" }, "engines": { "node": "^20 || >=22" diff --git a/packages/kernel/package.json b/packages/kernel/package.json index faa935526..cdceed301 100644 --- a/packages/kernel/package.json +++ b/packages/kernel/package.json @@ -80,7 +80,7 @@ "typescript": "~5.5.4", "typescript-eslint": "^8.8.1", "vite": "^5.3.5", - "vitest": "^2.1.2" + "vitest": "2.1.4" }, "engines": { "node": "^20 || >=22" diff --git a/packages/nodejs/package.json b/packages/nodejs/package.json index 9d8dfad22..e77733eed 100644 --- a/packages/nodejs/package.json +++ b/packages/nodejs/package.json @@ -12,7 +12,9 @@ "dist/" ], "scripts": { - "build": "ts-bridge --project tsconfig.build.json --clean", + "build": "ts-bridge --project tsconfig.build.json --clean && yarn build:sqlite3", + "build:e2e": "ts-bridge --project tsconfig.build.json --clean && yarn build:sqlite3 -f", + "build:sqlite3": "scripts/build-sqlite3.sh", "changelog:validate": "../../scripts/validate-changelog.sh @ocap/nodejs", "clean": "rimraf --glob ./dist './*.tsbuildinfo'", "lint": "yarn lint:ts && yarn lint:eslint && yarn lint:misc --check && yarn constraints && yarn lint:dependencies", @@ -23,24 +25,25 @@ "lint:ts": "tsc --project tsconfig.lint.json", "publish:preview": "yarn npm publish --tag preview", "start": "yarn build:vite:dev --watch", - "test": "yarn build && vitest", + "test": "vitest run --config vitest.config.ts", + "test:e2e": "vitest run --config vitest.config.e2e.ts --no-silent", + "test:e2e:ci": "./scripts/test-e2e-ci.sh", "test:clean": "yarn test --no-cache --coverage.clean", "test:dev": "yarn test --coverage false", - "test:verbose": "yarn test --reporter verbose" + "test:verbose": "yarn test --reporter verbose", + "build:docs": "typedoc", + "test:watch": "vitest --config vitest.config.ts" }, "dependencies": { - "@endo/eventual-send": "^1.2.6", "@endo/exo": "^1.5.4", "@endo/patterns": "^1.4.4", "@endo/promise-kit": "^1.1.6", - "@metamask/snaps-utils": "^8.3.0", "@metamask/utils": "^9.3.0", - "@ocap/errors": "workspace:^", "@ocap/kernel": "workspace:^", "@ocap/shims": "workspace:^", "@ocap/streams": "workspace:^", "@ocap/utils": "workspace:^", - "@sqlite.org/sqlite-wasm": "3.47.0-build1", + "better-sqlite3": "^11.7.0", "ses": "^1.9.0" }, "devDependencies": { @@ -50,12 +53,14 @@ "@metamask/eslint-config-nodejs": "^14.0.0", "@metamask/eslint-config-typescript": "^14.0.0", "@ocap/cli": "workspace:^", - "@ocap/test-utils": "workspace:^", "@ts-bridge/cli": "^0.5.1", + "@types/better-sqlite3": "^7.6.12", "@types/chrome": "^0.0.268", "@typescript-eslint/eslint-plugin": "^8.8.1", "@typescript-eslint/parser": "^8.8.1", "@typescript-eslint/utils": "^8.8.1", + "@vitest/browser": "2.1.4", + "@vitest/coverage-istanbul": "2.1.4", "depcheck": "^1.4.7", "eslint": "^9.12.0", "eslint-config-prettier": "^9.1.0", @@ -65,15 +70,21 @@ "eslint-plugin-n": "^17.11.1", "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-promise": "^7.1.0", + "node-gyp": "^11.0.0", "prettier": "^3.3.3", "rimraf": "^6.0.1", "typedoc": "^0.26.8", "typescript": "~5.5.4", "typescript-eslint": "^8.8.1", "vite": "^5.3.5", - "vitest": "^2.1.2" + "vite-plugin-checker": "^0.8.0", + "vite-plugin-static-copy": "^1.0.6", + "vitest": "2.1.4" }, "engines": { - "node": "^18.18 || >=20" + "node": "^20 || >=22" + }, + "exports": { + "./package.json": "./package.json" } } diff --git a/packages/nodejs/scripts/build-constants.mjs b/packages/nodejs/scripts/build-constants.mjs new file mode 100644 index 000000000..fefb3620f --- /dev/null +++ b/packages/nodejs/scripts/build-constants.mjs @@ -0,0 +1,11 @@ +import path from 'path'; + +export const sourceDir = './src'; +export const buildDir = path.resolve(sourceDir, '../dist'); + +export const trustedPreludes = { + 'kernel-worker': path.resolve( + sourceDir, + 'env/kernel-worker-trusted-prelude.js', + ), +}; diff --git a/packages/nodejs/scripts/build-sqlite3.sh b/packages/nodejs/scripts/build-sqlite3.sh new file mode 100755 index 000000000..ebd2e23a2 --- /dev/null +++ b/packages/nodejs/scripts/build-sqlite3.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash + +# set -x +set -e +set -o pipefail + +dir=$(pwd) + +package_root="$(dirname "$0")/.." +cd $package_root +package_root=$(pwd) +monorepo_root="$package_root/../.." + +while getopts ":ab:" opt; do + case $OPTARG in + f) force=1;; + \?) echo "Invalid option: -$OPTARG"; exit 1;; + esac +done + +if ! [ "$force" = "1" ] && [ -f "node_modules/better-sqlite3/build/better_sqlite3.node" ]; then + echo "Found better-sqlite3 bindings." + exit 0 +fi + +echo "Building better-sqlite3 bindings." + +# build better-sqlite at the monorepo root +cd $monorepo_root +cd node_modules/better-sqlite3 +yarn build-release + +# move back to the source folder +cd $package_root + +# copy the build to this package +mkdir -p node_modules/better-sqlite3/build/ +cp -r ../../node_modules/better-sqlite3/build/Release/ node_modules/better-sqlite3/build/ + +cd $dir diff --git a/packages/nodejs/scripts/test-e2e-ci.sh b/packages/nodejs/scripts/test-e2e-ci.sh new file mode 100755 index 000000000..56920fb1e --- /dev/null +++ b/packages/nodejs/scripts/test-e2e-ci.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +set -x +set -e +set -o pipefail + +# force build sqlite3 so it aligns with node version +yarn build:e2e + +# We borrow the vat definition from extension for now +yarn ocap bundle "../extension/src/vats" + +# Start the server in background and capture its PID +yarn ocap serve "../extension/src/vats" & +SERVER_PID=$! + +function cleanup() { + # Kill the server if it's still running + if kill -0 $SERVER_PID 2>/dev/null; then + kill $SERVER_PID + fi +} +# Ensure we always close the server +trap cleanup EXIT + +yarn test:e2e diff --git a/packages/nodejs/src/env/endoify.ts b/packages/nodejs/src/env/endoify.ts new file mode 100644 index 000000000..58ad152ae --- /dev/null +++ b/packages/nodejs/src/env/endoify.ts @@ -0,0 +1 @@ +import '@ocap/shims/endoify'; diff --git a/packages/nodejs/src/env/kernel-worker-trusted-prelude.js b/packages/nodejs/src/env/kernel-worker-trusted-prelude.js new file mode 100644 index 000000000..dad2cb379 --- /dev/null +++ b/packages/nodejs/src/env/kernel-worker-trusted-prelude.js @@ -0,0 +1,2 @@ +// eslint-disable-next-line import-x/no-unresolved +import './endoify.js'; diff --git a/packages/nodejs/src/kernel/VatWorkerService.ts b/packages/nodejs/src/kernel/VatWorkerService.ts index 16634fa43..8fcb0d46c 100644 --- a/packages/nodejs/src/kernel/VatWorkerService.ts +++ b/packages/nodejs/src/kernel/VatWorkerService.ts @@ -1,8 +1,9 @@ +import { makePromiseKit } from '@endo/promise-kit'; import type { VatWorkerService, VatId } from '@ocap/kernel'; -import { NodeWorkerMultiplexer } from '@ocap/streams'; -import type { StreamMultiplexer } from '@ocap/streams'; +import { NodeWorkerMultiplexer, StreamMultiplexer } from '@ocap/streams'; import { makeLogger } from '@ocap/utils'; import type { Logger } from '@ocap/utils'; +import { readFile } from 'node:fs/promises'; import { Worker as NodeWorker } from 'node:worker_threads'; // Worker file loads from the built dist directory, requires rebuild after change @@ -11,7 +12,6 @@ const workerFileURL = new URL('../../dist/vat/inside.mjs', import.meta.url) .pathname; export class NodejsVatWorkerService implements VatWorkerService { - // eslint-disable-next-line no-unused-private-class-members readonly #logger: Logger; workers = new Map< @@ -30,10 +30,25 @@ export class NodejsVatWorkerService implements VatWorkerService { } async launch(vatId: VatId): Promise { - const worker = new NodeWorker(workerFileURL); - const multiplexer = new NodeWorkerMultiplexer(worker); - this.workers.set(vatId, { worker, multiplexer }); - return multiplexer; + const { promise, resolve } = makePromiseKit(); + this.#logger.debug('launching', vatId); + this.#logger.debug('fileUrl', workerFileURL); + this.#logger.debug( + `fileContent\n===\n${(await readFile(workerFileURL)).toString()}\n===\n`, + ); + const worker = new NodeWorker(workerFileURL, { + env: { + NODE_VAT_ID: vatId, + }, + }); + this.#logger.debug('launched', vatId); + worker.once('online', () => { + const multiplexer = new NodeWorkerMultiplexer(worker, 'vat'); + this.workers.set(vatId, { worker, multiplexer }); + resolve(multiplexer); + this.#logger.debug('launched', vatId); + }); + return promise; } async terminate(vatId: VatId): Promise { diff --git a/packages/nodejs/src/kernel/kernel-worker.ts b/packages/nodejs/src/kernel/kernel-worker.ts index ee87a5ddb..e34930995 100644 --- a/packages/nodejs/src/kernel/kernel-worker.ts +++ b/packages/nodejs/src/kernel/kernel-worker.ts @@ -1,4 +1,4 @@ -import './env.js'; +import '@ocap/shims/endoify'; import type { NonEmptyArray } from '@metamask/utils'; import type { KernelCommand, KernelCommandReply, VatId } from '@ocap/kernel'; import { Kernel, VatCommandMethod } from '@ocap/kernel'; @@ -31,6 +31,9 @@ export async function makeKernel(port: NodeMessagePort): Promise { return kernel; } +const sampleOne = (from: NonEmptyArray): Ele => + from[Math.floor(Math.random() * from.length)] as Ele; + /** * Runs the full lifecycle of an array of vats, including their creation, * restart, message passing, and termination. @@ -42,27 +45,31 @@ export async function runVatLifecycle( kernel: Kernel, vats: NonEmptyArray, ): Promise { - console.time(`Created vats: ${vats.join(', ')}`); + console.log('runVatLifecycle Start...'); + const vatLabel = vats.join(', '); + console.time(`Created vats: ${vatLabel}`); await Promise.all( - vats.map(async () => - kernel.launchVat({ - bundleName: 'sample-vat', - parameters: { name: 'Nodeen' }, - }), + vats.map( + async () => + await kernel.launchVat({ + bundleSpec: 'http://localhost:3000/sample-vat.bundle', + parameters: { name: 'Nodeen' }, + }), ), ); - console.timeEnd(`Created vats: ${vats.join(', ')}`); - + console.timeEnd(`Created vats: ${vatLabel}`); console.log('Kernel vats:', kernel.getVatIds().join(', ')); + const knownVats = kernel.getVatIds() as NonEmptyArray; + // Restart a randomly selected vat from the array. - const vatToRestart = vats[Math.floor(Math.random() * vats.length)] as VatId; + const vatToRestart = sampleOne(knownVats); console.time(`Vat "${vatToRestart}" restart`); await kernel.restartVat(vatToRestart); console.timeEnd(`Vat "${vatToRestart}" restart`); // Send a "Ping" message to a randomly selected vat. - const vatToPing = vats[Math.floor(Math.random() * vats.length)] as VatId; + const vatToPing = sampleOne(knownVats); console.time(`Ping Vat "${vatToPing}"`); await kernel.sendMessage(vatToPing, { method: VatCommandMethod.ping, diff --git a/packages/nodejs/src/kernel/sqlite-kv-store.ts b/packages/nodejs/src/kernel/sqlite-kv-store.ts index 8b4062316..9e4930c4c 100644 --- a/packages/nodejs/src/kernel/sqlite-kv-store.ts +++ b/packages/nodejs/src/kernel/sqlite-kv-store.ts @@ -1,7 +1,20 @@ +import { hasProperty, isObject } from '@metamask/utils'; import type { KVStore } from '@ocap/kernel'; import { makeLogger } from '@ocap/utils'; -import type { Database } from '@sqlite.org/sqlite-wasm'; -import sqlite3InitModule from '@sqlite.org/sqlite-wasm'; +// eslint-disable-next-line @typescript-eslint/naming-convention +import Sqlite from 'better-sqlite3'; +import { mkdir } from 'fs/promises'; +import { tmpdir } from 'os'; +import { join, resolve } from 'path'; + +const USE_TMPDIR = true; + +const dbRoot = join( + USE_TMPDIR ? tmpdir() : resolve(new URL('..', import.meta.url).pathname), + './db', +); + +const dbPath = join(dbRoot, 'store.db'); // No changes made to this file, besides this comment. // If used, this file should be deduped with its copy @@ -12,15 +25,17 @@ import sqlite3InitModule from '@sqlite.org/sqlite-wasm'; /** * Ensure that SQLite is initialized. * + * @param logger - An optional logger to pass to the Sqlite constructor. * @returns The SQLite database object. */ -async function initDB(): Promise { - const sqlite3 = await sqlite3InitModule(); - if (sqlite3.oo1.OpfsDb) { - return new sqlite3.oo1.OpfsDb('/testdb.sqlite', 'cwt'); - } - console.warn(`OPFS not enabled, database will be ephemeral`); - return new sqlite3.oo1.DB('/testdb.sqlite', 'cwt'); +async function initDB( + logger?: ReturnType, +): Promise { + console.log('dbPath:', dbPath); + await mkdir(dbRoot, { recursive: true }); + return new Sqlite(dbPath, { + verbose: (logger ?? console).info, + }); } /** @@ -33,9 +48,9 @@ export async function makeSQLKVStore( label: string = '[sqlite]', ): Promise { const logger = makeLogger(label); - const db = await initDB(); + const db = await initDB(logger); - db.exec(` + const sqlKVInit = db.prepare(` CREATE TABLE IF NOT EXISTS kv ( key TEXT, value TEXT, @@ -43,6 +58,8 @@ export async function makeSQLKVStore( ) `); + sqlKVInit.run(); + const sqlKVGet = db.prepare(` SELECT value FROM kv @@ -57,22 +74,17 @@ export async function makeSQLKVStore( * @returns The value at that key. */ function kvGet(key: string, required: boolean): string { - sqlKVGet.bind([key]); - if (sqlKVGet.step()) { - const result = sqlKVGet.getString(0); - if (result) { - sqlKVGet.reset(); - logger.debug(`kernel get '${key}' as '${result}'`); - return result; - } + const result = sqlKVGet.get(key); + if (isObject(result) && hasProperty(result, 'value')) { + const value = result.value as string; + logger.debug(`kernel get '${key}' as '${value}'`); + return value; } - sqlKVGet.reset(); if (required) { throw Error(`no record matching key '${key}'`); - } else { - // Sometimes, we really lean on TypeScript's unsoundness - return undefined as unknown as string; } + // Sometimes, we really lean on TypeScript's unsoundness + return undefined as unknown as string; } const sqlKVSet = db.prepare(` @@ -89,9 +101,7 @@ export async function makeSQLKVStore( */ function kvSet(key: string, value: string): void { logger.debug(`kernel set '${key}' to '${value}'`); - sqlKVSet.bind([key, value]); - sqlKVSet.step(); - sqlKVSet.reset(); + sqlKVSet.run(key, value); } const sqlKVDelete = db.prepare(` @@ -106,13 +116,11 @@ export async function makeSQLKVStore( */ function kvDelete(key: string): void { logger.debug(`kernel delete '${key}'`); - sqlKVDelete.bind([key]); - sqlKVDelete.step(); - sqlKVDelete.reset(); + sqlKVDelete.run(key); } - const sqlKVTruncate = db.prepare(` - TRUNCATE TABLE kv + const sqlKVDrop = db.prepare(` + DROP TABLE kv `); /** @@ -120,8 +128,8 @@ export async function makeSQLKVStore( */ function kvTruncate(): void { logger.debug(`kernel truncate`); - sqlKVTruncate.step(); - sqlKVTruncate.reset(); + sqlKVDrop.run(); + sqlKVInit.run(); } return { @@ -129,6 +137,6 @@ export async function makeSQLKVStore( getRequired: (key) => kvGet(key, true), set: kvSet, delete: kvDelete, - truncate: kvTruncate, + truncate: db.transaction(kvTruncate), }; } diff --git a/packages/nodejs/src/vat/inside.ts b/packages/nodejs/src/vat/inside.ts index 418c20be3..9511e0faa 100644 --- a/packages/nodejs/src/vat/inside.ts +++ b/packages/nodejs/src/vat/inside.ts @@ -1,23 +1,32 @@ import '@ocap/shims/endoify'; + import { makeExo } from '@endo/exo'; import { M } from '@endo/patterns'; import type { Json } from '@metamask/utils'; import { VatSupervisor } from '@ocap/kernel'; import type { VatCommand, VatCommandReply } from '@ocap/kernel'; import { NodeWorkerMultiplexer } from '@ocap/streams'; +import { makeLogger } from '@ocap/utils'; import { parentPort } from 'node:worker_threads'; -main().catch(console.error); +// eslint-disable-next-line n/no-process-env +const logger = makeLogger(`[${process.env.NODE_VAT_ID} (inside)]`); + +main().catch(logger.error); /** * The main function for the iframe. */ async function main(): Promise { - assert( - parentPort !== null, - 'Expected to run in Node Worker with parentPort.', - ); - const multiplexer = new NodeWorkerMultiplexer(parentPort); + logger.debug('started main'); + + if (!parentPort) { + const errMsg = 'Expected to run in Node Worker with parentPort.'; + logger.error(errMsg); + throw new Error(errMsg); + } + const multiplexer = new NodeWorkerMultiplexer(parentPort, 'vat'); + multiplexer.start().catch(logger.error); const commandStream = multiplexer.createChannel( 'command', ); @@ -35,5 +44,5 @@ async function main(): Promise { bootstrap, }); - console.log(supervisor.evaluate('["Hello", "world!"].join(" ");')); + logger.log(supervisor.evaluate('["Hello", "world!"].join(" ");')); } diff --git a/packages/nodejs/src/kernel/kernel-worker.test.ts b/packages/nodejs/test/e2e/kernel-worker.test.ts similarity index 74% rename from packages/nodejs/src/kernel/kernel-worker.test.ts rename to packages/nodejs/test/e2e/kernel-worker.test.ts index 7d53dd3e6..292607663 100644 --- a/packages/nodejs/src/kernel/kernel-worker.test.ts +++ b/packages/nodejs/test/e2e/kernel-worker.test.ts @@ -1,10 +1,19 @@ +import '@ocap/shims/endoify'; + import { MessageChannel as NodeMessageChannel } from 'node:worker_threads'; -import { describe, it, expect } from 'vitest'; +import { describe, it, expect, vi } from 'vitest'; + +import { makeKernel, runVatLifecycle } from '../../src/kernel/kernel-worker.js'; -import { makeKernel, runVatLifecycle } from './kernel-worker.js'; +vi.mock('node:process', () => ({ + exit: vi.fn((reason) => { + throw new Error(`process.exit: ${reason}`); + }), +})); describe('Kernel Worker', () => { it('should handle the lifecycle of multiple vats', async () => { + console.log('started test'); const kernelChannel = new NodeMessageChannel(); const { port1: kernelPort } = kernelChannel; console.log('Creating kernel...'); diff --git a/packages/nodejs/tsconfig.build.json b/packages/nodejs/tsconfig.build.json index dc6f5028d..7799c75f6 100644 --- a/packages/nodejs/tsconfig.build.json +++ b/packages/nodejs/tsconfig.build.json @@ -10,7 +10,6 @@ "types": ["chrome", "ses"] }, "references": [ - { "path": "../shims/tsconfig.build.json" }, { "path": "../streams/tsconfig.build.json" }, { "path": "../kernel/tsconfig.build.json" }, { "path": "../utils/tsconfig.build.json" } diff --git a/packages/nodejs/tsconfig.json b/packages/nodejs/tsconfig.json index 94bb7b47d..f957e64b3 100644 --- a/packages/nodejs/tsconfig.json +++ b/packages/nodejs/tsconfig.json @@ -10,7 +10,6 @@ "types": ["chrome", "ses", "vitest", "vitest/jsdom"] }, "references": [ - { "path": "../shims" }, { "path": "../streams" }, { "path": "../test-utils" }, { "path": "../utils" }, @@ -18,6 +17,7 @@ ], "include": [ "../../vitest.config.packages.ts", + "../../vitest.workspace.ts", "./scripts/build-constants.mjs", "./src/**/*.ts", "./src/**/*-trusted-prelude.js", @@ -26,6 +26,6 @@ "./vite-plugins/*.ts", "./vite.config.ts", "./vitest.config.ts", - "../kernel/src/vat-worker-service.ts" + "./vitest.config.e2e.ts" ] } diff --git a/packages/nodejs/vite.config.ts b/packages/nodejs/vite.config.ts new file mode 100644 index 000000000..033c040bd --- /dev/null +++ b/packages/nodejs/vite.config.ts @@ -0,0 +1,60 @@ +// eslint-disable-next-line spaced-comment +/// + +import path from 'path'; +import { defineConfig } from 'vite'; +import { checker as viteChecker } from 'vite-plugin-checker'; +import { viteStaticCopy } from 'vite-plugin-static-copy'; + +import { + sourceDir, + buildDir, + trustedPreludes, +} from './scripts/build-constants.mjs'; + +/** + * Files that need to be statically copied to the destination directory. + * Paths are relative from the project root directory. + */ +const staticCopyTargets: readonly string[] = [ + // External modules + '../shims/dist/endoify.js', + // Trusted preludes + ...new Set(Object.values(trustedPreludes)), +]; + +// https://vitejs.dev/config/ +export default defineConfig(({ mode }) => ({ + root: sourceDir, + + build: { + emptyOutDir: true, + outDir: buildDir, + rollupOptions: { + input: { + 'kernel-worker': path.resolve(sourceDir, 'kernel/kernel-worker.ts'), + 'node-worker': path.resolve(sourceDir, 'node/node-worker.ts'), + }, + output: { + entryFileNames: '[name].js', + chunkFileNames: '[name].js', + assetFileNames: '[name].[ext]', + }, + }, + ...(mode === 'development' + ? { + minify: false, + sourcemap: 'inline', + } + : {}), + }, + + plugins: [ + viteStaticCopy({ + targets: staticCopyTargets.map((src) => ({ src, dest: './' })), + watch: { reloadPageOnChange: true }, + silent: mode === 'development', + }), + viteChecker({ typescript: { tsconfigPath: 'tsconfig.build.json' } }), + ], +})); diff --git a/packages/nodejs/vitest.config.e2e.ts b/packages/nodejs/vitest.config.e2e.ts new file mode 100644 index 000000000..b131aba3a --- /dev/null +++ b/packages/nodejs/vitest.config.e2e.ts @@ -0,0 +1,29 @@ +// eslint-disable-next-line spaced-comment +/// + +import path from 'path'; +import { defineConfig, mergeConfig } from 'vite'; + +import defaultConfig from '../../vitest.config.js'; + +const config = mergeConfig( + defaultConfig, + defineConfig({ + optimizeDeps: { include: ['better-sqlite3'] }, + test: { + pool: 'forks', + alias: [ + { + find: '@ocap/shims/endoify', + replacement: path.resolve('../shims/src/endoify.js'), + customResolver: (id) => ({ external: true, id }), + }, + ], + include: ['./test/e2e/**/*.test.ts'], + exclude: ['./src/**/*'], + }, + }), +); + +delete config.test.coverage.thresholds; +export default config; diff --git a/packages/nodejs/vitest.config.ts b/packages/nodejs/vitest.config.ts index f07bdee16..5bff3e3ac 100644 --- a/packages/nodejs/vitest.config.ts +++ b/packages/nodejs/vitest.config.ts @@ -9,9 +9,9 @@ import defaultConfig from '../../vitest.config.js'; const config = mergeConfig( defaultConfig, defineConfig({ + optimizeDeps: { include: ['better-sqlite3'] }, test: { - // pool: 'vmThreads', - environment: 'node', + pool: 'forks', alias: [ { find: '@ocap/shims/endoify', @@ -19,6 +19,8 @@ const config = mergeConfig( customResolver: (id) => ({ external: true, id }), }, ], + include: ['./src/**/*.test.ts'], + exclude: ['./test/e2e/**/*'], }, }), ); diff --git a/packages/shims/package.json b/packages/shims/package.json index 6b810468d..aebaad66a 100644 --- a/packages/shims/package.json +++ b/packages/shims/package.json @@ -66,7 +66,7 @@ "typescript": "~5.5.4", "typescript-eslint": "^8.8.1", "vite": "^5.3.5", - "vitest": "^2.1.2" + "vitest": "2.1.4" }, "engines": { "node": "^20 || >=22" diff --git a/packages/shims/src/endoify.js b/packages/shims/src/endoify.js index bd96927e6..7cb5c0eb5 100644 --- a/packages/shims/src/endoify.js +++ b/packages/shims/src/endoify.js @@ -7,5 +7,4 @@ lockdown({ stackFiltering: 'verbose', domainTaming: 'unsafe', overrideTaming: 'severe', - stackFiltering: 'verbose', }); diff --git a/packages/streams/package.json b/packages/streams/package.json index 6641c3b29..07e3b1f51 100644 --- a/packages/streams/package.json +++ b/packages/streams/package.json @@ -69,7 +69,7 @@ "@typescript-eslint/eslint-plugin": "^8.8.1", "@typescript-eslint/parser": "^8.8.1", "@typescript-eslint/utils": "^8.8.1", - "@vitest/browser": "2.1.3", + "@vitest/browser": "2.1.4", "@vitest/eslint-plugin": "^1.1.7", "cookie": "^0.7.0", "depcheck": "^1.4.7", @@ -89,7 +89,7 @@ "typescript": "~5.5.4", "typescript-eslint": "^8.8.1", "vite": "^5.3.5", - "vitest": "^2.1.2" + "vitest": "2.1.4" }, "engines": { "node": "^20 || >=22" diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index 5e53fdffa..96a2bf29c 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -46,7 +46,7 @@ "rimraf": "^6.0.1", "typescript": "~5.5.4", "typescript-eslint": "^8.8.1", - "vitest": "^2.1.2", + "vitest": "2.1.4", "vitest-fetch-mock": "^0.4.2" }, "engines": { diff --git a/packages/utils/package.json b/packages/utils/package.json index a93480dfc..7251fe90d 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -77,7 +77,7 @@ "typescript": "~5.5.4", "typescript-eslint": "^8.8.1", "vite": "^5.3.5", - "vitest": "^2.1.2" + "vitest": "2.1.4" }, "engines": { "node": "^20 || >=22" diff --git a/yarn.lock b/yarn.lock index 255bfd087..0164853fa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -242,12 +242,12 @@ __metadata: languageName: node linkType: hard -"@bundled-es-modules/cookie@npm:^2.0.0": - version: 2.0.0 - resolution: "@bundled-es-modules/cookie@npm:2.0.0" +"@bundled-es-modules/cookie@npm:^2.0.1": + version: 2.0.1 + resolution: "@bundled-es-modules/cookie@npm:2.0.1" dependencies: - cookie: "npm:^0.5.0" - checksum: 10/c8ef02aa5d3f6c786cfa407e1c93b4af29c600eb09990973f47a7a49e4771c1bec37c8f8e567638bb9cbc41f4e38d065ff1d8eaf9bf91f0c3613a6d60bc82c8c + cookie: "npm:^0.7.2" + checksum: 10/0038a5e82c41bfcd722afedabeb6961a5f15747b3681d7f4b61e35eb1e33130039e10ee9250dc9c9e4d3915ce1aeee717c0fb92225111574f0a030411abc0987 languageName: node linkType: hard @@ -939,6 +939,15 @@ __metadata: languageName: node linkType: hard +"@isaacs/fs-minipass@npm:^4.0.0": + version: 4.0.1 + resolution: "@isaacs/fs-minipass@npm:4.0.1" + dependencies: + minipass: "npm:^7.0.4" + checksum: 10/4412e9e6713c89c1e66d80bb0bb5a2a93192f10477623a27d08f228ba0316bb880affabc5bfe7f838f58a34d26c2c190da726e576cdfc18c49a72e89adabdcf5 + languageName: node + linkType: hard + "@istanbuljs/schema@npm:^0.1.2, @istanbuljs/schema@npm:^0.1.3": version: 0.1.3 resolution: "@istanbuljs/schema@npm:0.1.3" @@ -1428,9 +1437,9 @@ __metadata: languageName: node linkType: hard -"@mswjs/interceptors@npm:^0.36.5": - version: 0.36.7 - resolution: "@mswjs/interceptors@npm:0.36.7" +"@mswjs/interceptors@npm:^0.37.0": + version: 0.37.3 + resolution: "@mswjs/interceptors@npm:0.37.3" dependencies: "@open-draft/deferred-promise": "npm:^2.2.0" "@open-draft/logger": "npm:^0.3.0" @@ -1438,7 +1447,7 @@ __metadata: is-node-process: "npm:^1.2.0" outvariant: "npm:^1.4.3" strict-event-emitter: "npm:^0.5.1" - checksum: 10/c2579a89f0cd4b9d7026499dffb9fc8ae0e1dea685cbee2028f1bc8ff55a13babe5b1631b10220d15acb4c8198636070913818d415026b850bdd086d384bdc27 + checksum: 10/3d3e2e073feead8702c18dc97e5201785865292b32bd882c4d80461adc3380483b33517c55d7c6c1e53723f5e2ecf50cca0412e6ecd2eb771f4eaabfa2138932 languageName: node linkType: hard @@ -1528,6 +1537,19 @@ __metadata: languageName: node linkType: hard +"@npmcli/agent@npm:^3.0.0": + version: 3.0.0 + resolution: "@npmcli/agent@npm:3.0.0" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^10.0.1" + socks-proxy-agent: "npm:^8.0.3" + checksum: 10/775c9a7eb1f88c195dfb3bce70c31d0fe2a12b28b754e25c08a3edb4bc4816bfedb7ac64ef1e730579d078ca19dacf11630e99f8f3c3e0fd7b23caa5fd6d30a6 + languageName: node + linkType: hard + "@npmcli/fs@npm:^3.1.0": version: 3.1.1 resolution: "@npmcli/fs@npm:3.1.1" @@ -1537,6 +1559,15 @@ __metadata: languageName: node linkType: hard +"@npmcli/fs@npm:^4.0.0": + version: 4.0.0 + resolution: "@npmcli/fs@npm:4.0.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 10/405c4490e1ff11cf299775449a3c254a366a4b1ffc79d87159b0ee7d5558ac9f6a2f8c0735fd6ff3873cef014cb1a44a5f9127cb6a1b2dbc408718cca9365b5a + languageName: node + linkType: hard + "@npmcli/git@npm:^5.0.0": version: 5.0.8 resolution: "@npmcli/git@npm:5.0.8" @@ -1644,7 +1675,7 @@ __metadata: typescript: "npm:~5.5.4" typescript-eslint: "npm:^8.8.1" vite: "npm:^5.3.5" - vitest: "npm:^2.1.2" + vitest: "npm:2.1.4" yargs: "npm:^17.7.2" bin: ocap: ./dist/app.mjs @@ -1687,7 +1718,7 @@ __metadata: typescript: "npm:~5.5.4" typescript-eslint: "npm:^8.8.1" vite: "npm:^5.3.5" - vitest: "npm:^2.1.2" + vitest: "npm:2.1.4" languageName: unknown linkType: soft @@ -1742,7 +1773,7 @@ __metadata: vite: "npm:^5.3.5" vite-plugin-checker: "npm:^0.8.0" vite-plugin-static-copy: "npm:^1.0.6" - vitest: "npm:^2.1.2" + vitest: "npm:2.1.4" languageName: unknown linkType: soft @@ -1785,7 +1816,7 @@ __metadata: typescript: "npm:~5.5.4" typescript-eslint: "npm:^8.8.1" vite: "npm:^5.3.5" - vitest: "npm:^2.1.2" + vitest: "npm:2.1.4" languageName: unknown linkType: soft @@ -1811,7 +1842,8 @@ __metadata: "@typescript-eslint/eslint-plugin": "npm:^8.8.1" "@typescript-eslint/parser": "npm:^8.8.1" "@typescript-eslint/utils": "npm:^8.8.1" - "@vitest/coverage-istanbul": "npm:2.1.3" + "@vitest/browser": "npm:2.1.4" + "@vitest/coverage-istanbul": "npm:2.1.4" "@vitest/eslint-plugin": "npm:^1.1.7" "@yarnpkg/types": "npm:^4.0.0" ava: "npm:^6.2.0" @@ -1837,7 +1869,7 @@ __metadata: typescript-eslint: "npm:^8.8.1" vite: "npm:^5.3.5" vite-tsconfig-paths: "npm:^4.3.2" - vitest: "npm:^2.1.2" + vitest: "npm:2.1.4" vitest-fetch-mock: "npm:^0.4.2" webextension-polyfill: "npm:^0.12.0" languageName: unknown @@ -1848,7 +1880,6 @@ __metadata: resolution: "@ocap/nodejs@workspace:packages/nodejs" dependencies: "@arethetypeswrong/cli": "npm:^0.16.4" - "@endo/eventual-send": "npm:^1.2.6" "@endo/exo": "npm:^1.5.4" "@endo/patterns": "npm:^1.4.4" "@endo/promise-kit": "npm:^1.1.6" @@ -1856,21 +1887,21 @@ __metadata: "@metamask/eslint-config": "npm:^14.0.0" "@metamask/eslint-config-nodejs": "npm:^14.0.0" "@metamask/eslint-config-typescript": "npm:^14.0.0" - "@metamask/snaps-utils": "npm:^8.3.0" "@metamask/utils": "npm:^9.3.0" "@ocap/cli": "workspace:^" - "@ocap/errors": "workspace:^" "@ocap/kernel": "workspace:^" "@ocap/shims": "workspace:^" "@ocap/streams": "workspace:^" - "@ocap/test-utils": "workspace:^" "@ocap/utils": "workspace:^" - "@sqlite.org/sqlite-wasm": "npm:3.47.0-build1" "@ts-bridge/cli": "npm:^0.5.1" + "@types/better-sqlite3": "npm:^7.6.12" "@types/chrome": "npm:^0.0.268" "@typescript-eslint/eslint-plugin": "npm:^8.8.1" "@typescript-eslint/parser": "npm:^8.8.1" "@typescript-eslint/utils": "npm:^8.8.1" + "@vitest/browser": "npm:2.1.4" + "@vitest/coverage-istanbul": "npm:2.1.4" + better-sqlite3: "npm:^11.7.0" depcheck: "npm:^1.4.7" eslint: "npm:^9.12.0" eslint-config-prettier: "npm:^9.1.0" @@ -1880,6 +1911,7 @@ __metadata: eslint-plugin-n: "npm:^17.11.1" eslint-plugin-prettier: "npm:^5.2.1" eslint-plugin-promise: "npm:^7.1.0" + node-gyp: "npm:^11.0.0" prettier: "npm:^3.3.3" rimraf: "npm:^6.0.1" ses: "npm:^1.9.0" @@ -1887,7 +1919,9 @@ __metadata: typescript: "npm:~5.5.4" typescript-eslint: "npm:^8.8.1" vite: "npm:^5.3.5" - vitest: "npm:^2.1.2" + vite-plugin-checker: "npm:^0.8.0" + vite-plugin-static-copy: "npm:^1.0.6" + vitest: "npm:2.1.4" languageName: unknown linkType: soft @@ -1922,7 +1956,7 @@ __metadata: typescript: "npm:~5.5.4" typescript-eslint: "npm:^8.8.1" vite: "npm:^5.3.5" - vitest: "npm:^2.1.2" + vitest: "npm:2.1.4" languageName: unknown linkType: soft @@ -1949,7 +1983,7 @@ __metadata: "@typescript-eslint/eslint-plugin": "npm:^8.8.1" "@typescript-eslint/parser": "npm:^8.8.1" "@typescript-eslint/utils": "npm:^8.8.1" - "@vitest/browser": "npm:2.1.3" + "@vitest/browser": "npm:2.1.4" "@vitest/eslint-plugin": "npm:^1.1.7" cookie: "npm:^0.7.0" depcheck: "npm:^1.4.7" @@ -1969,7 +2003,7 @@ __metadata: typescript: "npm:~5.5.4" typescript-eslint: "npm:^8.8.1" vite: "npm:^5.3.5" - vitest: "npm:^2.1.2" + vitest: "npm:2.1.4" languageName: unknown linkType: soft @@ -1998,7 +2032,7 @@ __metadata: rimraf: "npm:^6.0.1" typescript: "npm:~5.5.4" typescript-eslint: "npm:^8.8.1" - vitest: "npm:^2.1.2" + vitest: "npm:2.1.4" vitest-fetch-mock: "npm:^0.4.2" languageName: unknown linkType: soft @@ -2039,7 +2073,7 @@ __metadata: typescript: "npm:~5.5.4" typescript-eslint: "npm:^8.8.1" vite: "npm:^5.3.5" - vitest: "npm:^2.1.2" + vitest: "npm:2.1.4" languageName: unknown linkType: soft @@ -2433,15 +2467,6 @@ __metadata: languageName: node linkType: hard -"@sqlite.org/sqlite-wasm@npm:3.47.0-build1": - version: 3.47.0-build1 - resolution: "@sqlite.org/sqlite-wasm@npm:3.47.0-build1" - bin: - sqlite-wasm: bin/index.js - checksum: 10/2953f9220b5553b2adedb308ae064e742d5fa062da58bba5402ad7ceec01472e972c7ab25d3559fea508361c8564741161a8e97e88395701de9eb6c2218b8982 - languageName: node - linkType: hard - "@testing-library/dom@npm:^10.4.0": version: 10.4.0 resolution: "@testing-library/dom@npm:10.4.0" @@ -2505,6 +2530,15 @@ __metadata: languageName: node linkType: hard +"@types/better-sqlite3@npm:^7.6.12": + version: 7.6.12 + resolution: "@types/better-sqlite3@npm:7.6.12" + dependencies: + "@types/node": "npm:*" + checksum: 10/a442231518f1a3e28e0ee6efe2581807e5cfaa88a8af4513da34e6ae303ce82f5666e8a0048a1d2738fa248b1b369ee28e59a75189ae0b43e28e44a243a2f24b + languageName: node + linkType: hard + "@types/bn.js@npm:^5.1.5": version: 5.1.6 resolution: "@types/bn.js@npm:5.1.6" @@ -2853,22 +2887,22 @@ __metadata: languageName: node linkType: hard -"@vitest/browser@npm:2.1.3": - version: 2.1.3 - resolution: "@vitest/browser@npm:2.1.3" +"@vitest/browser@npm:2.1.4": + version: 2.1.4 + resolution: "@vitest/browser@npm:2.1.4" dependencies: "@testing-library/dom": "npm:^10.4.0" "@testing-library/user-event": "npm:^14.5.2" - "@vitest/mocker": "npm:2.1.3" - "@vitest/utils": "npm:2.1.3" - magic-string: "npm:^0.30.11" - msw: "npm:^2.3.5" - sirv: "npm:^2.0.4" + "@vitest/mocker": "npm:2.1.4" + "@vitest/utils": "npm:2.1.4" + magic-string: "npm:^0.30.12" + msw: "npm:^2.5.0" + sirv: "npm:^3.0.0" tinyrainbow: "npm:^1.2.0" ws: "npm:^8.18.0" peerDependencies: playwright: "*" - vitest: 2.1.3 + vitest: 2.1.4 webdriverio: "*" peerDependenciesMeta: playwright: @@ -2877,27 +2911,27 @@ __metadata: optional: true webdriverio: optional: true - checksum: 10/e639496fa529140fb9e7dce97890c5b75fffbfb41881bee5ef25b194832d3cadcb77490d9b54777bfa968b993f6878649fe4961d6ef312ca1222b9a2fc8d4f12 + checksum: 10/315746aecebd2aaea5e4b4094157d53b7c6c3f08670f116ba4036e948aeb19a6b6f0c4052f3e0341b36897540f1093820cde0103208af1549258a138c8047d82 languageName: node linkType: hard -"@vitest/coverage-istanbul@npm:2.1.3": - version: 2.1.3 - resolution: "@vitest/coverage-istanbul@npm:2.1.3" +"@vitest/coverage-istanbul@npm:2.1.4": + version: 2.1.4 + resolution: "@vitest/coverage-istanbul@npm:2.1.4" dependencies: "@istanbuljs/schema": "npm:^0.1.3" - debug: "npm:^4.3.6" + debug: "npm:^4.3.7" istanbul-lib-coverage: "npm:^3.2.2" istanbul-lib-instrument: "npm:^6.0.3" istanbul-lib-report: "npm:^3.0.1" istanbul-lib-source-maps: "npm:^5.0.6" istanbul-reports: "npm:^3.1.7" - magicast: "npm:^0.3.4" + magicast: "npm:^0.3.5" test-exclude: "npm:^7.0.1" tinyrainbow: "npm:^1.2.0" peerDependencies: - vitest: 2.1.3 - checksum: 10/d1bad4a71ec55481ca14901da4871088c29432330f3b373ca110d6b5dac3ee2e1f67db1ed9d9e9255186e8eab206a0d717371e447deb9a160d1f813facfb24e5 + vitest: 2.1.4 + checksum: 10/4ceacb4c6617c2cda85941827c2469b2b2d993ffb0851f90957ef5c172918625cdbe92721280d7812ddd80669065bf611b88fe9d006458107a162e91e7d7ac0c languageName: node linkType: hard @@ -2930,26 +2964,6 @@ __metadata: languageName: node linkType: hard -"@vitest/mocker@npm:2.1.3": - version: 2.1.3 - resolution: "@vitest/mocker@npm:2.1.3" - dependencies: - "@vitest/spy": "npm:2.1.3" - estree-walker: "npm:^3.0.3" - magic-string: "npm:^0.30.11" - peerDependencies: - "@vitest/spy": 2.1.3 - msw: ^2.3.5 - vite: ^5.0.0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true - checksum: 10/84be8830d6e965109730257d7a84b3d7594db0998ae55decdbfc304857c1c7d29b49f1f5b23f2addcbce1bd7e8bb33832407737a9bb3f95cb3bf7bb312db4d9d - languageName: node - linkType: hard - "@vitest/mocker@npm:2.1.4": version: 2.1.4 resolution: "@vitest/mocker@npm:2.1.4" @@ -2969,21 +2983,21 @@ __metadata: languageName: node linkType: hard -"@vitest/pretty-format@npm:2.1.3": - version: 2.1.3 - resolution: "@vitest/pretty-format@npm:2.1.3" +"@vitest/pretty-format@npm:2.1.4": + version: 2.1.4 + resolution: "@vitest/pretty-format@npm:2.1.4" dependencies: tinyrainbow: "npm:^1.2.0" - checksum: 10/d9382ee93f0f32e2ef8fe03bda818e5277f052a50ddb05b6a6cf0864b2ccb228484f12f130c05faf62dc2140292ffafc213f2941b0fa24058b3ee2943daa286c + checksum: 10/434e6a7903f72a3796f26516ad728aca92724909e18fd3f2cd4b9b8b0ae2cc7b4cd86e92ab9f2ac7bc005c7a7ef0bcb9d768c0264b4b0625f1f0748cc615f1f6 languageName: node linkType: hard -"@vitest/pretty-format@npm:2.1.4, @vitest/pretty-format@npm:^2.1.4": - version: 2.1.4 - resolution: "@vitest/pretty-format@npm:2.1.4" +"@vitest/pretty-format@npm:^2.1.4": + version: 2.1.8 + resolution: "@vitest/pretty-format@npm:2.1.8" dependencies: tinyrainbow: "npm:^1.2.0" - checksum: 10/434e6a7903f72a3796f26516ad728aca92724909e18fd3f2cd4b9b8b0ae2cc7b4cd86e92ab9f2ac7bc005c7a7ef0bcb9d768c0264b4b0625f1f0748cc615f1f6 + checksum: 10/f0f60c007424194887ad398d202867d58d850154de327993925041e2972357544eea95a22e0bb3a62a470b006ff8de5f691d2078708dcd7f625e24f8a06b26e7 languageName: node linkType: hard @@ -3008,15 +3022,6 @@ __metadata: languageName: node linkType: hard -"@vitest/spy@npm:2.1.3": - version: 2.1.3 - resolution: "@vitest/spy@npm:2.1.3" - dependencies: - tinyspy: "npm:^3.0.0" - checksum: 10/94d6f1bc34da5d0c973d9382c133b938e555fcf2d238edf0aaad3de1a98dd57ebf7c104ba229c6beec48122d2e6f55386d8d2cf96a5804dc95ac683a54754cc7 - languageName: node - linkType: hard - "@vitest/spy@npm:2.1.4": version: 2.1.4 resolution: "@vitest/spy@npm:2.1.4" @@ -3026,17 +3031,6 @@ __metadata: languageName: node linkType: hard -"@vitest/utils@npm:2.1.3": - version: 2.1.3 - resolution: "@vitest/utils@npm:2.1.3" - dependencies: - "@vitest/pretty-format": "npm:2.1.3" - loupe: "npm:^3.1.1" - tinyrainbow: "npm:^1.2.0" - checksum: 10/f064e6634cb84c925a17d8937df7441d150c3e24fa5bbd6304151d11dab6cdeb0cb3d5a95a9aacb8b416c87fb0d9aa8c6b9cc5e174191784231e8345948d6d18 - languageName: node - linkType: hard - "@vitest/utils@npm:2.1.4": version: 2.1.4 resolution: "@vitest/utils@npm:2.1.4" @@ -3473,6 +3467,17 @@ __metadata: languageName: node linkType: hard +"better-sqlite3@npm:^11.7.0": + version: 11.7.0 + resolution: "better-sqlite3@npm:11.7.0" + dependencies: + bindings: "npm:^1.5.0" + node-gyp: "npm:latest" + prebuild-install: "npm:^7.1.1" + checksum: 10/a09bb28c0292bb7c037896ee99197815841275bca2d14f63b58994188239f292642c8c7ea3e0206d8ea6c7530d7b03d7343138ebeb9a4cc855c0b3663e00c812 + languageName: node + linkType: hard + "bin-links@npm:4.0.4": version: 4.0.4 resolution: "bin-links@npm:4.0.4" @@ -3492,7 +3497,7 @@ __metadata: languageName: node linkType: hard -"bindings@npm:^1.4.0": +"bindings@npm:^1.4.0, bindings@npm:^1.5.0": version: 1.5.0 resolution: "bindings@npm:1.5.0" dependencies: @@ -3501,6 +3506,17 @@ __metadata: languageName: node linkType: hard +"bl@npm:^4.0.3": + version: 4.1.0 + resolution: "bl@npm:4.1.0" + dependencies: + buffer: "npm:^5.5.0" + inherits: "npm:^2.0.4" + readable-stream: "npm:^3.4.0" + checksum: 10/b7904e66ed0bdfc813c06ea6c3e35eafecb104369dbf5356d0f416af90c1546de3b74e5b63506f0629acf5e16a6f87c3798f16233dcff086e9129383aa02ab55 + languageName: node + linkType: hard + "blueimp-md5@npm:^2.10.0": version: 2.19.0 resolution: "blueimp-md5@npm:2.19.0" @@ -3564,6 +3580,16 @@ __metadata: languageName: node linkType: hard +"buffer@npm:^5.5.0": + version: 5.7.1 + resolution: "buffer@npm:5.7.1" + dependencies: + base64-js: "npm:^1.3.1" + ieee754: "npm:^1.1.13" + checksum: 10/997434d3c6e3b39e0be479a80288875f71cd1c07d75a3855e6f08ef848a3c966023f79534e22e415ff3a5112708ce06127277ab20e527146d55c84566405c7c6 + languageName: node + linkType: hard + "buffer@npm:^6.0.3": version: 6.0.3 resolution: "buffer@npm:6.0.3" @@ -3615,6 +3641,26 @@ __metadata: languageName: node linkType: hard +"cacache@npm:^19.0.1": + version: 19.0.1 + resolution: "cacache@npm:19.0.1" + dependencies: + "@npmcli/fs": "npm:^4.0.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^10.2.2" + lru-cache: "npm:^10.0.1" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^2.0.1" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^7.0.2" + ssri: "npm:^12.0.0" + tar: "npm:^7.4.3" + unique-filename: "npm:^4.0.0" + checksum: 10/ea026b27b13656330c2bbaa462a88181dcaa0435c1c2e705db89b31d9bdf7126049d6d0445ba746dca21454a0cfdf1d6f47fd39d34c8c8435296b30bc5738a13 + languageName: node + linkType: hard + "callsite@npm:^1.0.0": version: 1.0.0 resolution: "callsite@npm:1.0.0" @@ -3785,6 +3831,13 @@ __metadata: languageName: node linkType: hard +"chownr@npm:^1.1.1": + version: 1.1.4 + resolution: "chownr@npm:1.1.4" + checksum: 10/115648f8eb38bac5e41c3857f3e663f9c39ed6480d1349977c4d96c95a47266fcacc5a5aabf3cb6c481e22d72f41992827db47301851766c4fd77ac21a4f081d + languageName: node + linkType: hard + "chownr@npm:^2.0.0": version: 2.0.0 resolution: "chownr@npm:2.0.0" @@ -3792,6 +3845,13 @@ __metadata: languageName: node linkType: hard +"chownr@npm:^3.0.0": + version: 3.0.0 + resolution: "chownr@npm:3.0.0" + checksum: 10/b63cb1f73d171d140a2ed8154ee6566c8ab775d3196b0e03a2a94b5f6a0ce7777ee5685ca56849403c8d17bd457a6540672f9a60696a6137c7a409097495b82c + languageName: node + linkType: hard + "chunkd@npm:^2.0.1": version: 2.0.1 resolution: "chunkd@npm:2.0.1" @@ -4195,6 +4255,15 @@ __metadata: languageName: node linkType: hard +"decompress-response@npm:^6.0.0": + version: 6.0.0 + resolution: "decompress-response@npm:6.0.0" + dependencies: + mimic-response: "npm:^3.1.0" + checksum: 10/d377cf47e02d805e283866c3f50d3d21578b779731e8c5072d6ce8c13cc31493db1c2f6784da9d1d5250822120cefa44f1deab112d5981015f2e17444b763812 + languageName: node + linkType: hard + "deep-eql@npm:^5.0.1": version: 5.0.2 resolution: "deep-eql@npm:5.0.2" @@ -4202,6 +4271,13 @@ __metadata: languageName: node linkType: hard +"deep-extend@npm:^0.6.0": + version: 0.6.0 + resolution: "deep-extend@npm:0.6.0" + checksum: 10/7be7e5a8d468d6b10e6a67c3de828f55001b6eb515d014f7aeb9066ce36bd5717161eb47d6a0f7bed8a9083935b465bc163ee2581c8b128d29bf61092fdf57a7 + languageName: node + linkType: hard + "deep-freeze-strict@npm:^1.1.1": version: 1.1.1 resolution: "deep-freeze-strict@npm:1.1.1" @@ -4466,6 +4542,15 @@ __metadata: languageName: node linkType: hard +"end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1": + version: 1.4.4 + resolution: "end-of-stream@npm:1.4.4" + dependencies: + once: "npm:^1.4.0" + checksum: 10/530a5a5a1e517e962854a31693dbb5c0b2fc40b46dad2a56a2deec656ca040631124f4795823acc68238147805f8b021abbe221f4afed5ef3c8e8efc2024908b + languageName: node + linkType: hard + "enhanced-resolve@npm:^5.15.0, enhanced-resolve@npm:^5.17.0": version: 5.17.1 resolution: "enhanced-resolve@npm:5.17.1" @@ -5026,6 +5111,13 @@ __metadata: languageName: node linkType: hard +"expand-template@npm:^2.0.3": + version: 2.0.3 + resolution: "expand-template@npm:2.0.3" + checksum: 10/588c19847216421ed92befb521767b7018dc88f88b0576df98cb242f20961425e96a92cbece525ef28cc5becceae5d544ae0f5b9b5e2aa05acb13716ca5b3099 + languageName: node + linkType: hard + "expand-tilde@npm:^2.0.0, expand-tilde@npm:^2.0.2": version: 2.0.2 resolution: "expand-tilde@npm:2.0.2" @@ -5245,6 +5337,13 @@ __metadata: languageName: node linkType: hard +"fs-constants@npm:^1.0.0": + version: 1.0.0 + resolution: "fs-constants@npm:1.0.0" + checksum: 10/18f5b718371816155849475ac36c7d0b24d39a11d91348cfcb308b4494824413e03572c403c86d3a260e049465518c4f0d5bd00f0371cdfcad6d4f30a85b350d + languageName: node + linkType: hard + "fs-extra@npm:^11.1.0": version: 11.2.0 resolution: "fs-extra@npm:11.2.0" @@ -5401,6 +5500,13 @@ __metadata: languageName: node linkType: hard +"github-from-package@npm:0.0.0": + version: 0.0.0 + resolution: "github-from-package@npm:0.0.0" + checksum: 10/2a091ba07fbce22205642543b4ea8aaf068397e1433c00ae0f9de36a3607baf5bcc14da97fbb798cfca6393b3c402031fca06d8b491a44206d6efef391c58537 + languageName: node + linkType: hard + "glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" @@ -5419,7 +5525,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.4.1": +"glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.7, glob@npm:^10.4.1": version: 10.4.5 resolution: "glob@npm:10.4.5" dependencies: @@ -5752,7 +5858,7 @@ __metadata: languageName: node linkType: hard -"ieee754@npm:^1.2.1": +"ieee754@npm:^1.1.13, ieee754@npm:^1.2.1": version: 1.2.1 resolution: "ieee754@npm:1.2.1" checksum: 10/d9f2557a59036f16c282aaeb107832dc957a93d73397d89bbad4eb1130560560eb695060145e8e6b3b498b15ab95510226649a0b8f52ae06583575419fe10fc4 @@ -5821,14 +5927,14 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:^2.0.3": +"inherits@npm:2, inherits@npm:^2.0.3, inherits@npm:^2.0.4": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 10/cd45e923bee15186c07fa4c89db0aace24824c482fb887b528304694b2aa6ff8a898da8657046a5dcf3e46cd6db6c61629551f9215f208d7c3f157cf9b290521 languageName: node linkType: hard -"ini@npm:^1.3.4": +"ini@npm:^1.3.4, ini@npm:~1.3.0": version: 1.3.8 resolution: "ini@npm:1.3.8" checksum: 10/314ae176e8d4deb3def56106da8002b462221c174ddb7ce0c49ee72c8cd1f9044f7b10cc555a7d8850982c3b9ca96fc212122749f5234bc2b6fb05fb942ed566 @@ -6422,7 +6528,7 @@ __metadata: languageName: node linkType: hard -"loupe@npm:^3.1.0, loupe@npm:^3.1.1, loupe@npm:^3.1.2": +"loupe@npm:^3.1.0, loupe@npm:^3.1.2": version: 3.1.2 resolution: "loupe@npm:3.1.2" checksum: 10/8f5734e53fb64cd914aa7d986e01b6d4c2e3c6c56dcbd5428d71c2703f0ab46b5ab9f9eeaaf2b485e8a1c43f865bdd16ec08ae1a661c8f55acdbd9f4d59c607a @@ -6493,7 +6599,7 @@ __metadata: languageName: node linkType: hard -"magicast@npm:^0.3.4": +"magicast@npm:^0.3.5": version: 0.3.5 resolution: "magicast@npm:0.3.5" dependencies: @@ -6542,6 +6648,25 @@ __metadata: languageName: node linkType: hard +"make-fetch-happen@npm:^14.0.3": + version: 14.0.3 + resolution: "make-fetch-happen@npm:14.0.3" + dependencies: + "@npmcli/agent": "npm:^3.0.0" + cacache: "npm:^19.0.1" + http-cache-semantics: "npm:^4.1.1" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^4.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^1.0.0" + proc-log: "npm:^5.0.0" + promise-retry: "npm:^2.0.1" + ssri: "npm:^12.0.0" + checksum: 10/fce0385840b6d86b735053dfe941edc2dd6468fda80fe74da1eeff10cbd82a75760f406194f2bc2fa85b99545b2bc1f84c08ddf994b21830775ba2d1a87e8bdf + languageName: node + linkType: hard + "markdown-it@npm:^14.1.0": version: 14.1.0 resolution: "markdown-it@npm:14.1.0" @@ -6769,6 +6894,13 @@ __metadata: languageName: node linkType: hard +"mimic-response@npm:^3.1.0": + version: 3.1.0 + resolution: "mimic-response@npm:3.1.0" + checksum: 10/7e719047612411fe071332a7498cf0448bbe43c485c0d780046c76633a771b223ff49bd00267be122cedebb897037fdb527df72335d0d0f74724604ca70b37ad + languageName: node + linkType: hard + "minimatch@npm:3.1.2, minimatch@npm:^3.0.4, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" @@ -6805,6 +6937,13 @@ __metadata: languageName: node linkType: hard +"minimist@npm:^1.2.0, minimist@npm:^1.2.3": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 10/908491b6cc15a6c440ba5b22780a0ba89b9810e1aea684e253e43c4e3b8d56ec1dcdd7ea96dde119c29df59c936cde16062159eae4225c691e19c70b432b6e6f + languageName: node + linkType: hard + "minipass-collect@npm:^2.0.1": version: 2.0.1 resolution: "minipass-collect@npm:2.0.1" @@ -6829,6 +6968,21 @@ __metadata: languageName: node linkType: hard +"minipass-fetch@npm:^4.0.0": + version: 4.0.0 + resolution: "minipass-fetch@npm:4.0.0" + dependencies: + encoding: "npm:^0.1.13" + minipass: "npm:^7.0.3" + minipass-sized: "npm:^1.0.3" + minizlib: "npm:^3.0.1" + dependenciesMeta: + encoding: + optional: true + checksum: 10/4b0772dbee77727b469dc5bfc371541d9aba1e243fbb46ddc1b9ff7efa4de4a4cf5ff3a359d6a3b3a460ca26df9ae67a9c93be26ab6417c225e49d63b52b2801 + languageName: node + linkType: hard + "minipass-flush@npm:^1.0.5": version: 1.0.5 resolution: "minipass-flush@npm:1.0.5" @@ -6872,7 +7026,7 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.1.2": +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2": version: 7.1.2 resolution: "minipass@npm:7.1.2" checksum: 10/c25f0ee8196d8e6036661104bacd743785b2599a21de5c516b32b3fa2b83113ac89a2358465bc04956baab37ffb956ae43be679b2262bf7be15fce467ccd7950 @@ -6889,6 +7043,23 @@ __metadata: languageName: node linkType: hard +"minizlib@npm:^3.0.1": + version: 3.0.1 + resolution: "minizlib@npm:3.0.1" + dependencies: + minipass: "npm:^7.0.4" + rimraf: "npm:^5.0.5" + checksum: 10/622cb85f51e5c206a080a62d20db0d7b4066f308cb6ce82a9644da112367c3416ae7062017e631eb7ac8588191cfa4a9a279b8651c399265202b298e98c4acef + languageName: node + linkType: hard + +"mkdirp-classic@npm:^0.5.2, mkdirp-classic@npm:^0.5.3": + version: 0.5.3 + resolution: "mkdirp-classic@npm:0.5.3" + checksum: 10/3f4e088208270bbcc148d53b73e9a5bd9eef05ad2cbf3b3d0ff8795278d50dd1d11a8ef1875ff5aea3fa888931f95bfcb2ad5b7c1061cfefd6284d199e6776ac + languageName: node + linkType: hard + "mkdirp@npm:^1.0.3": version: 1.0.4 resolution: "mkdirp@npm:1.0.4" @@ -6898,6 +7069,15 @@ __metadata: languageName: node linkType: hard +"mkdirp@npm:^3.0.1": + version: 3.0.1 + resolution: "mkdirp@npm:3.0.1" + bin: + mkdirp: dist/cjs/src/bin.js + checksum: 10/16fd79c28645759505914561e249b9a1f5fe3362279ad95487a4501e4467abeb714fd35b95307326b8fd03f3c7719065ef11a6f97b7285d7888306d1bd2232ba + languageName: node + linkType: hard + "mrmime@npm:^2.0.0": version: 2.0.0 resolution: "mrmime@npm:2.0.0" @@ -6912,15 +7092,15 @@ __metadata: languageName: node linkType: hard -"msw@npm:^2.3.5": - version: 2.6.0 - resolution: "msw@npm:2.6.0" +"msw@npm:^2.5.0": + version: 2.6.8 + resolution: "msw@npm:2.6.8" dependencies: - "@bundled-es-modules/cookie": "npm:^2.0.0" + "@bundled-es-modules/cookie": "npm:^2.0.1" "@bundled-es-modules/statuses": "npm:^1.0.1" "@bundled-es-modules/tough-cookie": "npm:^0.1.6" "@inquirer/confirm": "npm:^5.0.0" - "@mswjs/interceptors": "npm:^0.36.5" + "@mswjs/interceptors": "npm:^0.37.0" "@open-draft/deferred-promise": "npm:^2.2.0" "@open-draft/until": "npm:^2.1.0" "@types/cookie": "npm:^0.6.0" @@ -6941,7 +7121,7 @@ __metadata: optional: true bin: msw: cli/index.js - checksum: 10/7fec823b9350c8c2e635f6acbb0549d10b11b5622f16b9f90ee147d993458083054eaffe5ade6fcd435dd5dc66e4d5db7a4ee1f266944afeb617d2abe5afc89a + checksum: 10/35d551c0fffe8b12cf174ae70ea8560bcc2e67f8887f20b43c7a3903ad4dc4272dc1c92f9ae68d30ad56435b391bcc5379495b1f9f0badcd4f2fdb614fbf7244 languageName: node linkType: hard @@ -6985,6 +7165,13 @@ __metadata: languageName: node linkType: hard +"napi-build-utils@npm:^1.0.1": + version: 1.0.2 + resolution: "napi-build-utils@npm:1.0.2" + checksum: 10/276feb8e30189fe18718e85b6f82e4f952822baa2e7696f771cc42571a235b789dc5907a14d9ffb6838c3e4ff4c25717c2575e5ce1cf6e02e496e204c11e57f6 + languageName: node + linkType: hard + "natural-compare@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare@npm:1.4.0" @@ -6999,6 +7186,22 @@ __metadata: languageName: node linkType: hard +"negotiator@npm:^1.0.0": + version: 1.0.0 + resolution: "negotiator@npm:1.0.0" + checksum: 10/b5734e87295324fabf868e36fb97c84b7d7f3156ec5f4ee5bf6e488079c11054f818290fc33804cef7b1ee21f55eeb14caea83e7dafae6492a409b3e573153e5 + languageName: node + linkType: hard + +"node-abi@npm:^3.3.0": + version: 3.71.0 + resolution: "node-abi@npm:3.71.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 10/0a1cef5106c43d67f9f8a911b0c9d5ee08971eda002ba466606c8e6164964456f5211f37966717efc3d5d49bae32f0cf9290254b1286bf71f0ba158a4f8a9846 + languageName: node + linkType: hard + "node-emoji@npm:^2.1.3": version: 2.1.3 resolution: "node-emoji@npm:2.1.3" @@ -7056,6 +7259,26 @@ __metadata: languageName: node linkType: hard +"node-gyp@npm:^11.0.0": + version: 11.0.0 + resolution: "node-gyp@npm:11.0.0" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + glob: "npm:^10.3.10" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^14.0.3" + nopt: "npm:^8.0.0" + proc-log: "npm:^5.0.0" + semver: "npm:^7.3.5" + tar: "npm:^7.4.3" + which: "npm:^5.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10/5d07430e887a906f85c7c6ed87e8facb7ecd4ce42d948a2438c471df2e24ae6af70f4def114ec1a03127988d164648dda8d75fe666f3c4b431e53856379fdf13 + languageName: node + linkType: hard + "node-releases@npm:^2.0.18": version: 2.0.18 resolution: "node-releases@npm:2.0.18" @@ -7092,6 +7315,17 @@ __metadata: languageName: node linkType: hard +"nopt@npm:^8.0.0": + version: 8.0.0 + resolution: "nopt@npm:8.0.0" + dependencies: + abbrev: "npm:^2.0.0" + bin: + nopt: bin/nopt.js + checksum: 10/2d137f64b6f9331ec97047dd1cbbe4dcd9a61ceef4fd0f2252c0bbac1d69ba15671e6fd83a441328824b3ca78afe6ebe1694f12ebcd162b73a221582a06179ff + languageName: node + linkType: hard + "normalize-package-data@npm:^6.0.0": version: 6.0.2 resolution: "normalize-package-data@npm:6.0.2" @@ -7203,7 +7437,7 @@ __metadata: languageName: node linkType: hard -"once@npm:^1.3.0, once@npm:^1.4.0": +"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": version: 1.4.0 resolution: "once@npm:1.4.0" dependencies: @@ -7610,6 +7844,28 @@ __metadata: languageName: node linkType: hard +"prebuild-install@npm:^7.1.1": + version: 7.1.2 + resolution: "prebuild-install@npm:7.1.2" + dependencies: + detect-libc: "npm:^2.0.0" + expand-template: "npm:^2.0.3" + github-from-package: "npm:0.0.0" + minimist: "npm:^1.2.3" + mkdirp-classic: "npm:^0.5.3" + napi-build-utils: "npm:^1.0.1" + node-abi: "npm:^3.3.0" + pump: "npm:^3.0.0" + rc: "npm:^1.2.7" + simple-get: "npm:^4.0.0" + tar-fs: "npm:^2.0.0" + tunnel-agent: "npm:^0.6.0" + bin: + prebuild-install: bin.js + checksum: 10/32d5c026cc978dd02762b9ad3c765178aee8383aeac4303fed3cd226eff53100db038d4791b03ae1ebc7d213a7af392d26e32095579cedb8dba1d00ad08ecd46 + languageName: node + linkType: hard + "prelude-ls@npm:^1.2.1": version: 1.2.1 resolution: "prelude-ls@npm:1.2.1" @@ -7686,6 +7942,13 @@ __metadata: languageName: node linkType: hard +"proc-log@npm:^5.0.0": + version: 5.0.0 + resolution: "proc-log@npm:5.0.0" + checksum: 10/35610bdb0177d3ab5d35f8827a429fb1dc2518d9e639f2151ac9007f01a061c30e0c635a970c9b00c39102216160f6ec54b62377c92fac3b7bfc2ad4b98d195c + languageName: node + linkType: hard + "process@npm:^0.11.10": version: 0.11.10 resolution: "process@npm:0.11.10" @@ -7724,6 +7987,16 @@ __metadata: languageName: node linkType: hard +"pump@npm:^3.0.0": + version: 3.0.2 + resolution: "pump@npm:3.0.2" + dependencies: + end-of-stream: "npm:^1.1.0" + once: "npm:^1.3.1" + checksum: 10/e0c4216874b96bd25ddf31a0b61a5613e26cc7afa32379217cf39d3915b0509def3565f5f6968fafdad2894c8bbdbd67d340e84f3634b2a29b950cffb6442d9f + languageName: node + linkType: hard + "punycode.js@npm:^2.3.1": version: 2.3.1 resolution: "punycode.js@npm:2.3.1" @@ -7773,6 +8046,20 @@ __metadata: languageName: node linkType: hard +"rc@npm:^1.2.7": + version: 1.2.8 + resolution: "rc@npm:1.2.8" + dependencies: + deep-extend: "npm:^0.6.0" + ini: "npm:~1.3.0" + minimist: "npm:^1.2.0" + strip-json-comments: "npm:~2.0.1" + bin: + rc: ./cli.js + checksum: 10/5c4d72ae7eec44357171585938c85ce066da8ca79146b5635baf3d55d74584c92575fa4e2c9eac03efbed3b46a0b2e7c30634c012b4b4fa40d654353d3c163eb + languageName: node + linkType: hard + "react-is@npm:^17.0.1": version: 17.0.2 resolution: "react-is@npm:17.0.2" @@ -7787,7 +8074,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^3.6.0, readable-stream@npm:^3.6.2": +"readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0, readable-stream@npm:^3.6.2": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" dependencies: @@ -7970,6 +8257,17 @@ __metadata: languageName: node linkType: hard +"rimraf@npm:^5.0.5": + version: 5.0.10 + resolution: "rimraf@npm:5.0.10" + dependencies: + glob: "npm:^10.3.7" + bin: + rimraf: dist/esm/bin.mjs + checksum: 10/f3b8ce81eecbde4628b07bdf9e2fa8b684e0caea4999acb1e3b0402c695cd41f28cd075609a808e61ce2672f528ca079f675ab1d8e8d5f86d56643a03e0b8d2e + languageName: node + linkType: hard + "rimraf@npm:^6.0.1": version: 6.0.1 resolution: "rimraf@npm:6.0.1" @@ -8084,7 +8382,7 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:~5.2.0": +"safe-buffer@npm:^5.0.1, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: 10/32872cd0ff68a3ddade7a7617b8f4c2ae8764d8b7d884c651b74457967a9e0e886267d3ecc781220629c44a865167b61c375d2da6c720c840ecd73f45d5d9451 @@ -8223,6 +8521,24 @@ __metadata: languageName: node linkType: hard +"simple-concat@npm:^1.0.0": + version: 1.0.1 + resolution: "simple-concat@npm:1.0.1" + checksum: 10/4d211042cc3d73a718c21ac6c4e7d7a0363e184be6a5ad25c8a1502e49df6d0a0253979e3d50dbdd3f60ef6c6c58d756b5d66ac1e05cda9cacd2e9fc59e3876a + languageName: node + linkType: hard + +"simple-get@npm:^4.0.0": + version: 4.0.1 + resolution: "simple-get@npm:4.0.1" + dependencies: + decompress-response: "npm:^6.0.0" + once: "npm:^1.3.1" + simple-concat: "npm:^1.0.0" + checksum: 10/93f1b32319782f78f2f2234e9ce34891b7ab6b990d19d8afefaa44423f5235ce2676aae42d6743fecac6c8dfff4b808d4c24fe5265be813d04769917a9a44f36 + languageName: node + linkType: hard + "simple-git-hooks@npm:^2.11.1": version: 2.11.1 resolution: "simple-git-hooks@npm:2.11.1" @@ -8232,14 +8548,14 @@ __metadata: languageName: node linkType: hard -"sirv@npm:^2.0.4": - version: 2.0.4 - resolution: "sirv@npm:2.0.4" +"sirv@npm:^3.0.0": + version: 3.0.0 + resolution: "sirv@npm:3.0.0" dependencies: "@polka/url": "npm:^1.0.0-next.24" mrmime: "npm:^2.0.0" totalist: "npm:^3.0.0" - checksum: 10/24f42cf06895017e589c9d16fc3f1c6c07fe8b0dbafce8a8b46322cfba67b7f2498610183954cb0e9d089c8cb60002a7ee7e8bca6a91a0d7042bfbc3473c95c3 + checksum: 10/94dbd5df7cf4965f7c5941767117cbf9709e1d25de1d619a114c3f77fc63c124b5a5255717af2a0de637bb83d0b0defd0822d01420764b56432b53281b1d675d languageName: node linkType: hard @@ -8441,6 +8757,15 @@ __metadata: languageName: node linkType: hard +"ssri@npm:^12.0.0": + version: 12.0.0 + resolution: "ssri@npm:12.0.0" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10/7024c1a6e39b3f18aa8f1c8290e884fe91b0f9ca5a6c6d410544daad54de0ba664db879afe16412e187c6c292fd60b937f047ee44292e5c2af2dcc6d8e1a9b48 + languageName: node + linkType: hard + "stable-hash@npm:^0.0.4": version: 0.0.4 resolution: "stable-hash@npm:0.0.4" @@ -8472,9 +8797,9 @@ __metadata: linkType: hard "std-env@npm:^3.7.0": - version: 3.7.0 - resolution: "std-env@npm:3.7.0" - checksum: 10/6ee0cca1add3fd84656b0002cfbc5bfa20340389d9ba4720569840f1caa34bce74322aef4c93f046391583e50649d0cf81a5f8fe1d411e50b659571690a45f12 + version: 3.8.0 + resolution: "std-env@npm:3.8.0" + checksum: 10/034176196cfcaaab16dbdd96fc9e925a9544799fb6dc5a3e36fe43270f3a287c7f779d785b89edaf22cef2b5f1dcada2aae67430b8602e785ee74bdb3f671768 languageName: node linkType: hard @@ -8592,6 +8917,13 @@ __metadata: languageName: node linkType: hard +"strip-json-comments@npm:~2.0.1": + version: 2.0.1 + resolution: "strip-json-comments@npm:2.0.1" + checksum: 10/1074ccb63270d32ca28edfb0a281c96b94dc679077828135141f27d52a5a398ef5e78bcf22809d23cadc2b81dfbe345eb5fd8699b385c8b1128907dec4a7d1e1 + languageName: node + linkType: hard + "strnum@npm:^1.0.5": version: 1.0.5 resolution: "strnum@npm:1.0.5" @@ -8661,6 +8993,31 @@ __metadata: languageName: node linkType: hard +"tar-fs@npm:^2.0.0": + version: 2.1.1 + resolution: "tar-fs@npm:2.1.1" + dependencies: + chownr: "npm:^1.1.1" + mkdirp-classic: "npm:^0.5.2" + pump: "npm:^3.0.0" + tar-stream: "npm:^2.1.4" + checksum: 10/526deae025453e825f87650808969662fbb12eb0461d033e9b447de60ec951c6c4607d0afe7ce057defe9d4e45cf80399dd74bc15f9d9e0773d5e990a78ce4ac + languageName: node + linkType: hard + +"tar-stream@npm:^2.1.4": + version: 2.2.0 + resolution: "tar-stream@npm:2.2.0" + dependencies: + bl: "npm:^4.0.3" + end-of-stream: "npm:^1.4.1" + fs-constants: "npm:^1.0.0" + inherits: "npm:^2.0.3" + readable-stream: "npm:^3.1.1" + checksum: 10/1a52a51d240c118cbcd30f7368ea5e5baef1eac3e6b793fb1a41e6cd7319296c79c0264ccc5859f5294aa80f8f00b9239d519e627b9aade80038de6f966fec6a + languageName: node + linkType: hard + "tar@npm:^6.1.11, tar@npm:^6.2.1": version: 6.2.1 resolution: "tar@npm:6.2.1" @@ -8675,6 +9032,20 @@ __metadata: languageName: node linkType: hard +"tar@npm:^7.4.3": + version: 7.4.3 + resolution: "tar@npm:7.4.3" + dependencies: + "@isaacs/fs-minipass": "npm:^4.0.0" + chownr: "npm:^3.0.0" + minipass: "npm:^7.1.2" + minizlib: "npm:^3.0.1" + mkdirp: "npm:^3.0.1" + yallist: "npm:^5.0.0" + checksum: 10/12a2a4fc6dee23e07cc47f1aeb3a14a1afd3f16397e1350036a8f4cdfee8dcac7ef5978337a4e7b2ac2c27a9a6d46388fc2088ea7c80cb6878c814b1425f8ecf + languageName: node + linkType: hard + "temp-dir@npm:^3.0.0": version: 3.0.0 resolution: "temp-dir@npm:3.0.0" @@ -8747,9 +9118,9 @@ __metadata: linkType: hard "tinypool@npm:^1.0.1": - version: 1.0.1 - resolution: "tinypool@npm:1.0.1" - checksum: 10/eaceb93784b8e27e60c0e3e2c7d11c29e1e79b2a025b2c232215db73b90fe22bd4753ad53fc8e801c2b5a63b94a823af549555d8361272bc98271de7dd4a9925 + version: 1.0.2 + resolution: "tinypool@npm:1.0.2" + checksum: 10/6109322f14b3763f65c8fa49fddab72cd3edd96b82dd50e05e63de74867329ff5353bff4377281ec963213d9314f37f4a353e9ee34bbac85fd4c1e4a568d6076 languageName: node linkType: hard @@ -8760,7 +9131,7 @@ __metadata: languageName: node linkType: hard -"tinyspy@npm:^3.0.0, tinyspy@npm:^3.0.2": +"tinyspy@npm:^3.0.2": version: 3.0.2 resolution: "tinyspy@npm:3.0.2" checksum: 10/5db671b2ff5cd309de650c8c4761ca945459d7204afb1776db9a04fb4efa28a75f08517a8620c01ee32a577748802231ad92f7d5b194dc003ee7f987a2a06337 @@ -8857,6 +9228,15 @@ __metadata: languageName: node linkType: hard +"tunnel-agent@npm:^0.6.0": + version: 0.6.0 + resolution: "tunnel-agent@npm:0.6.0" + dependencies: + safe-buffer: "npm:^5.0.1" + checksum: 10/7f0d9ed5c22404072b2ae8edc45c071772affd2ed14a74f03b4e71b4dd1a14c3714d85aed64abcaaee5fec2efc79002ba81155c708f4df65821b444abb0cfade + languageName: node + linkType: hard + "type-check@npm:^0.4.0, type-check@npm:~0.4.0": version: 0.4.0 resolution: "type-check@npm:0.4.0" @@ -9022,6 +9402,15 @@ __metadata: languageName: node linkType: hard +"unique-filename@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-filename@npm:4.0.0" + dependencies: + unique-slug: "npm:^5.0.0" + checksum: 10/6a62094fcac286b9ec39edbd1f8f64ff92383baa430af303dfed1ffda5e47a08a6b316408554abfddd9730c78b6106bef4ca4d02c1231a735ddd56ced77573df + languageName: node + linkType: hard + "unique-slug@npm:^4.0.0": version: 4.0.0 resolution: "unique-slug@npm:4.0.0" @@ -9031,6 +9420,15 @@ __metadata: languageName: node linkType: hard +"unique-slug@npm:^5.0.0": + version: 5.0.0 + resolution: "unique-slug@npm:5.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + checksum: 10/beafdf3d6f44990e0a5ce560f8f881b4ee811be70b6ba0db25298c31c8cf525ed963572b48cd03be1c1349084f9e339be4241666d7cf1ebdad20598d3c652b27 + languageName: node + linkType: hard + "unist-util-is@npm:^6.0.0": version: 6.0.0 resolution: "unist-util-is@npm:6.0.0" @@ -9283,8 +9681,8 @@ __metadata: linkType: hard "vite@npm:^5.0.0, vite@npm:^5.3.5": - version: 5.4.9 - resolution: "vite@npm:5.4.9" + version: 5.4.11 + resolution: "vite@npm:5.4.11" dependencies: esbuild: "npm:^0.21.3" fsevents: "npm:~2.3.3" @@ -9321,7 +9719,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 10/60dfb3912ba6367d2d128e798d899caae3f4ec58990657b9f679c4d9de21ddec7eba5f6ad3d4fa0e8ea31771d477521b8e757a622ecc54829d73cb7f7c146bc4 + checksum: 10/719c4dea896e9547958643354003c8c9ea98e5367196d98f5f46cffb3ec963fead3ea5853f5af941c79bbfb73583dec19bbb0d28d2f644b95d7f59c55e22919d languageName: node linkType: hard @@ -9334,7 +9732,7 @@ __metadata: languageName: node linkType: hard -"vitest@npm:^2.1.2": +"vitest@npm:2.1.4": version: 2.1.4 resolution: "vitest@npm:2.1.4" dependencies: @@ -9550,6 +9948,17 @@ __metadata: languageName: node linkType: hard +"which@npm:^5.0.0": + version: 5.0.0 + resolution: "which@npm:5.0.0" + dependencies: + isexe: "npm:^3.1.1" + bin: + node-which: bin/which.js + checksum: 10/6ec99e89ba32c7e748b8a3144e64bfc74aa63e2b2eacbb61a0060ad0b961eb1a632b08fb1de067ed59b002cec3e21de18299216ebf2325ef0f78e0f121e14e90 + languageName: node + linkType: hard + "why-is-node-running@npm:^2.3.0": version: 2.3.0 resolution: "why-is-node-running@npm:2.3.0" @@ -9706,6 +10115,13 @@ __metadata: languageName: node linkType: hard +"yallist@npm:^5.0.0": + version: 5.0.0 + resolution: "yallist@npm:5.0.0" + checksum: 10/1884d272d485845ad04759a255c71775db0fac56308764b4c77ea56a20d56679fad340213054c8c9c9c26fcfd4c4b2a90df993b7e0aaf3cdb73c618d1d1a802a + languageName: node + linkType: hard + "yaml@npm:^1.10.0": version: 1.10.2 resolution: "yaml@npm:1.10.2"