diff --git a/.gitignore b/.gitignore index 677c1668..2e877563 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,6 @@ packages/kit/skills docs/.vitepress/cache .turbo .context + +# Agent skills from npm packages (managed by skills-npm) +**/skills/npm-* diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index b4d40d24..db98d1f1 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -91,6 +91,29 @@ export default extendConfig(withMermaid(defineConfig({ { text: 'Examples', link: '/kit/examples' }, ], }, + { + text: 'Error Reference', + link: '/errors/', + collapsed: true, + items: [ + { + text: 'DevTools Kit (DTK)', + collapsed: true, + items: Array.from({ length: 32 }, (_, i) => { + const code = `DTK${String(i + 1).padStart(4, '0')}` + return { text: code, link: `/errors/${code}` } + }), + }, + { + text: 'Rolldown DevTools (RDDT)', + collapsed: true, + items: [ + { text: 'RDDT0001', link: '/errors/RDDT0001' }, + { text: 'RDDT0002', link: '/errors/RDDT0002' }, + ], + }, + ], + }, ], search: { diff --git a/docs/errors/DTK0001.md b/docs/errors/DTK0001.md new file mode 100644 index 00000000..55aecfdd --- /dev/null +++ b/docs/errors/DTK0001.md @@ -0,0 +1,60 @@ +--- +outline: deep +--- + +# DTK0001: RPC Function Already Registered + +> Package: `@vitejs/devtools-rpc` + +## Message + +> RPC function "`{name}`" is already registered + +## Cause + +This error is thrown by `RpcFunctionsCollectorBase.register()` when you attempt to register an RPC function with a name that already exists in the collector. Each function name must be unique within a collector instance unless you explicitly opt into overwriting. + +## Example + +```ts +import { defineRpcFunction } from '@vitejs/devtools-kit' + +const getVersion = defineRpcFunction({ + name: 'my-plugin:get-version', + type: 'static', + handler: () => '1.0.0', +}) + +const getVersionAlt = defineRpcFunction({ + name: 'my-plugin:get-version', // same name as above + type: 'static', + handler: () => '2.0.0', +}) + +// First registration succeeds +collector.register(getVersion) + +// Second registration throws DTK0001 +collector.register(getVersionAlt) +``` + +## Fix + +Either use a unique name for each function, or pass `force: true` to overwrite the existing registration: + +```ts +// Option 1: Use a unique name +const getVersionAlt = defineRpcFunction({ + name: 'my-plugin:get-version-alt', + type: 'static', + handler: () => '2.0.0', +}) +collector.register(getVersionAlt) + +// Option 2: Force overwrite +collector.register(getVersionAlt, true) +``` + +## Source + +`packages/rpc/src/collector.ts` diff --git a/docs/errors/DTK0002.md b/docs/errors/DTK0002.md new file mode 100644 index 00000000..7ff6b133 --- /dev/null +++ b/docs/errors/DTK0002.md @@ -0,0 +1,48 @@ +--- +outline: deep +--- + +# DTK0002: RPC Function Not Registered (Update) + +> Package: `@vitejs/devtools-rpc` + +## Message + +> RPC function "`{name}`" is not registered. Use register() to add new functions. + +## Cause + +This error is thrown by `RpcFunctionsCollectorBase.update()` when you attempt to update a function definition that has not been registered yet. The `update()` method is intended for replacing an existing definition, not for adding new ones. + +## Example + +```ts +import { defineRpcFunction } from '@vitejs/devtools-kit' + +const getVersion = defineRpcFunction({ + name: 'my-plugin:get-version', + type: 'static', + handler: () => '2.0.0', +}) + +// Throws DTK0002 because 'my-plugin:get-version' was never registered +collector.update(getVersion) +``` + +## Fix + +Register the function first with `register()`, then use `update()` for subsequent changes. Alternatively, pass `force: true` to `update()` to allow upserting: + +```ts +// Option 1: Register first, update later +collector.register(getVersion) +// ... later ... +collector.update(getVersionUpdated) + +// Option 2: Force update (creates if missing) +collector.update(getVersion, true) +``` + +## Source + +`packages/rpc/src/collector.ts` diff --git a/docs/errors/DTK0003.md b/docs/errors/DTK0003.md new file mode 100644 index 00000000..114f490e --- /dev/null +++ b/docs/errors/DTK0003.md @@ -0,0 +1,51 @@ +--- +outline: deep +--- + +# DTK0003: RPC Function Schema Not Found + +> Package: `@vitejs/devtools-rpc` + +## Message + +> RPC function "`{name}`" is not registered + +## Cause + +This error is thrown by `RpcFunctionsCollectorBase.getSchema()` when you request the argument and return schemas for a function name that does not exist in the collector. The function must be registered before its schema can be queried. + +## Example + +```ts +// Throws DTK0003 because 'my-plugin:get-config' was never registered +const schema = collector.getSchema('my-plugin:get-config') +``` + +## Fix + +Ensure the function is registered before querying its schema. You can check whether a function exists first using `has()`: + +```ts +import { defineRpcFunction } from '@vitejs/devtools-kit' + +const getConfig = defineRpcFunction({ + name: 'my-plugin:get-config', + type: 'query', + handler: () => ({ debug: false }), +}) + +// Register first +collector.register(getConfig) + +// Now getSchema works +const schema = collector.getSchema('my-plugin:get-config') + +// Or guard with has() +if (collector.has('my-plugin:get-config')) { + const schema = collector.getSchema('my-plugin:get-config') +} +``` + +## Source + +`packages/rpc/src/collector.ts` diff --git a/docs/errors/DTK0004.md b/docs/errors/DTK0004.md new file mode 100644 index 00000000..caca1318 --- /dev/null +++ b/docs/errors/DTK0004.md @@ -0,0 +1,76 @@ +--- +outline: deep +--- + +# DTK0004: Missing RPC Handler + +> Package: `@vitejs/devtools-rpc` + +## Message + +> Either handler or setup function must be provided for RPC function "`{name}`" + +## Cause + +This error is thrown by `getRpcHandler()` when an RPC function definition provides neither a `handler` property nor a `setup` function that returns a `handler`. It can occur in two situations: + +1. When the collector's proxy tries to resolve a handler for a registered function. +2. During `dumpFunctions()` when resolving handlers for pre-computation. + +Every RPC function must have a way to produce a handler -- either directly via `handler` or lazily via `setup`. + +## Example + +```ts +import { defineRpcFunction } from '@vitejs/devtools-kit' + +// Missing both handler and setup +const broken = defineRpcFunction({ + name: 'my-plugin:broken', + type: 'query', +}) + +collector.register(broken) + +// Throws DTK0004 when the handler is resolved +await collector.getHandler('my-plugin:broken') +``` + +A `setup` function that forgets to return a handler also triggers this error: + +```ts +const alsoMissing = defineRpcFunction({ + name: 'my-plugin:also-missing', + type: 'query', + setup: (ctx) => { + // Forgot to return { handler: ... } + return {} + }, +}) +``` + +## Fix + +Provide a `handler` directly, or return one from `setup`: + +```ts +// Option 1: Direct handler +const getVersion = defineRpcFunction({ + name: 'my-plugin:get-version', + type: 'static', + handler: () => '1.0.0', +}) + +// Option 2: Handler via setup (useful when you need context) +const getConfig = defineRpcFunction({ + name: 'my-plugin:get-config', + type: 'query', + setup: ctx => ({ + handler: () => ctx.config, + }), +}) +``` + +## Source + +`packages/rpc/src/handler.ts` diff --git a/docs/errors/DTK0005.md b/docs/errors/DTK0005.md new file mode 100644 index 00000000..5a554c65 --- /dev/null +++ b/docs/errors/DTK0005.md @@ -0,0 +1,60 @@ +--- +outline: deep +--- + +# DTK0005: Function Not in Dump Store + +> Package: `@vitejs/devtools-rpc` + +## Message + +> Function "`{name}`" not found in dump store + +## Cause + +This error is thrown by `createClientFromDump()` when you call a function on the dump client that was not included in the definitions passed to `dumpFunctions()`. The dump store only contains entries for functions that were part of the original dump collection, and the client rejects calls to unknown functions. + +## Example + +```ts +import { defineRpcFunction } from '@vitejs/devtools-kit' +import { createClientFromDump, dumpFunctions } from '@vitejs/devtools-rpc' + +const getVersion = defineRpcFunction({ + name: 'my-plugin:get-version', + type: 'static', + handler: () => '1.0.0', +}) + +// Only getVersion is dumped +const store = await dumpFunctions([getVersion]) +const client = createClientFromDump(store) + +// Throws DTK0005 because 'my-plugin:get-config' is not in the store +await client['my-plugin:get-config']() +``` + +## Fix + +Include the function in the definitions array passed to `dumpFunctions()`: + +```ts +const getConfig = defineRpcFunction({ + name: 'my-plugin:get-config', + type: 'query', + handler: () => ({ debug: false }), + dump: { inputs: [[]] }, +}) + +// Include all needed functions in the dump +const store = await dumpFunctions([getVersion, getConfig]) +const client = createClientFromDump(store) + +// Now both functions work +await client['my-plugin:get-version']() +await client['my-plugin:get-config']() +``` + +## Source + +`packages/rpc/src/dumps.ts` diff --git a/docs/errors/DTK0006.md b/docs/errors/DTK0006.md new file mode 100644 index 00000000..a19840b9 --- /dev/null +++ b/docs/errors/DTK0006.md @@ -0,0 +1,81 @@ +--- +outline: deep +--- + +# DTK0006: No Dump Match + +> Package: `@vitejs/devtools-rpc` + +## Message + +> No dump match for "`{name}`" with args: `{args}` + +## Cause + +This error is thrown by `createClientFromDump()` when a function exists in the dump store, but no pre-computed result matches the given arguments. The dump client uses argument hashing to look up results, so the call arguments must exactly match one of the `dump.inputs` entries. This error only occurs when there is also no `fallback` configured for the function. + +## Example + +```ts +import { defineRpcFunction } from '@vitejs/devtools-kit' +import { createClientFromDump, dumpFunctions } from '@vitejs/devtools-rpc' + +const greet = defineRpcFunction({ + name: 'my-plugin:greet', + type: 'query', + handler: (name: string) => `Hello, ${name}!`, + dump: { + inputs: [['Alice'], ['Bob']], // only these two inputs are pre-computed + }, +}) + +const store = await dumpFunctions([greet]) +const client = createClientFromDump(store) + +// Works fine +await client['my-plugin:greet']('Alice') // 'Hello, Alice!' + +// Throws DTK0006 because 'Charlie' was not in dump.inputs +await client['my-plugin:greet']('Charlie') +``` + +## Fix + +Add the missing input combination to the `dump.inputs` array, or configure a `fallback` value for unmatched calls: + +```ts +// Option 1: Add the missing input +const greet = defineRpcFunction({ + name: 'my-plugin:greet', + type: 'query', + handler: (name: string) => `Hello, ${name}!`, + dump: { + inputs: [['Alice'], ['Bob'], ['Charlie']], + }, +}) + +// Option 2: Provide a fallback for unmatched args +const greet = defineRpcFunction({ + name: 'my-plugin:greet', + type: 'query', + handler: (name: string) => `Hello, ${name}!`, + dump: { + inputs: [['Alice'], ['Bob']], + fallback: 'Hello, stranger!', + }, +}) +``` + +You can also use the `onMiss` callback in `createClientFromDump()` to debug which calls are missing: + +```ts +const client = createClientFromDump(store, { + onMiss: (name, args) => { + console.warn(`Dump miss: ${name}`, args) + }, +}) +``` + +## Source + +`packages/rpc/src/dumps.ts` diff --git a/docs/errors/DTK0007.md b/docs/errors/DTK0007.md new file mode 100644 index 00000000..3397b211 --- /dev/null +++ b/docs/errors/DTK0007.md @@ -0,0 +1,61 @@ +--- +outline: deep +--- + +# DTK0007: Invalid Dump Configuration + +> Package: `@vitejs/devtools-rpc` + +## Message + +> Function "`{name}`" with type "`{type}`" cannot have dump configuration. Only "static" and "query" types support dumps. + +## Cause + +This error is thrown by `validateDefinitions()` (called at the start of `dumpFunctions()`) when an RPC function of type `action` or `event` has a `dump` property. Actions and events represent side effects or notifications and their results should not be pre-computed or cached, so dump configuration is only valid for `static` and `query` function types. + +## Example + +```ts +import { defineRpcFunction } from '@vitejs/devtools-kit' +import { dumpFunctions } from '@vitejs/devtools-rpc' + +const sendNotification = defineRpcFunction({ + name: 'my-plugin:send-notification', + type: 'action', + handler: (msg: string) => { /* sends a notification */ }, + dump: { + inputs: [['hello']], // not allowed for actions + }, +}) + +// Throws DTK0007 during validation +const store = await dumpFunctions([sendNotification]) +``` + +## Fix + +Remove the `dump` property from action and event functions. If the function is actually a pure data retrieval, change its type to `query` or `static`: + +```ts +// Option 1: Remove dump from the action +const sendNotification = defineRpcFunction({ + name: 'my-plugin:send-notification', + type: 'action', + handler: (msg: string) => { /* sends a notification */ }, +}) + +// Option 2: If it's actually a pure read, change the type +const getNotifications = defineRpcFunction({ + name: 'my-plugin:get-notifications', + type: 'query', // pure data retrieval, dumps are allowed + handler: () => ['notification-1', 'notification-2'], + dump: { + inputs: [[]], + }, +}) +``` + +## Source + +`packages/rpc/src/validation.ts` diff --git a/docs/errors/DTK0008.md b/docs/errors/DTK0008.md new file mode 100644 index 00000000..272b8ecc --- /dev/null +++ b/docs/errors/DTK0008.md @@ -0,0 +1,66 @@ +--- +outline: deep +--- + +# DTK0008: Client Auth Disabled + +> Package: `@vitejs/devtools` + +## Message + +> Client authentication is disabled. Any browser can connect to the devtools and access your server and filesystem. + +## Cause + +This warning is emitted by `createWsServer()` when the WebSocket server starts and client authentication has been disabled. Authentication is disabled when any of the following conditions is true: + +1. The DevTools context is running in **build mode** (`context.mode === 'build'`). +2. The Vite config sets `devtools.config.clientAuth` to `false`. +3. The environment variable `VITE_DEVTOOLS_DISABLE_CLIENT_AUTH` is set to `'true'`. + +When authentication is disabled, every connecting WebSocket client is automatically marked as trusted (`meta.isTrusted = true`), bypassing the token-based auth flow entirely. + +## Example + +```ts +import devtools from '@vitejs/devtools' +// vite.config.ts +import { defineConfig } from 'vite' + +export default defineConfig({ + plugins: [ + devtools({ + config: { + // This disables client auth and triggers DTK0008 + clientAuth: false, + }, + }), + ], +}) +``` + +Or via environment variable: + +```sh +VITE_DEVTOOLS_DISABLE_CLIENT_AUTH=true vite dev +``` + +Build mode also disables auth automatically: + +```sh +vite build # DTK0008 is logged during build +``` + +## Fix + +This is an informational warning. No action is required if you intentionally disabled authentication (e.g., in a trusted local environment or during builds). + +If this warning is unexpected: + +- Remove `clientAuth: false` from your `devtools.config` in `vite.config.ts`. +- Unset the `VITE_DEVTOOLS_DISABLE_CLIENT_AUTH` environment variable. +- If running in build mode, the warning is expected and harmless. + +## Source + +`packages/core/src/node/ws.ts` diff --git a/docs/errors/DTK0009.md b/docs/errors/DTK0009.md new file mode 100644 index 00000000..2a8546b7 --- /dev/null +++ b/docs/errors/DTK0009.md @@ -0,0 +1,54 @@ +--- +outline: deep +--- + +# DTK0009: Storage Parse Failed + +> Package: `@vitejs/devtools` + +## Message + +> Failed to parse storage file: `{filepath}`, falling back to defaults. + +## Cause + +This warning is emitted by `createStorage()` when a persisted storage file exists on disk but contains invalid JSON that cannot be parsed. The function catches the `JSON.parse` error and falls back to the provided `initialValue` defaults, so DevTools continues to function normally. + +The storage files are typically located at: + +- **Auth storage:** `node_modules/.vite/devtools/auth.json` +- **User settings:** `node_modules/.vite/devtools/settings.json` + +Corruption can occur from incomplete writes (e.g., a crash during save), manual edits with syntax errors, or file system issues. + +## Example + +A corrupted storage file triggers this warning on startup: + +```txt +// node_modules/.vite/devtools/settings.json +{ "dockLayout": "left", // trailing comma or syntax error +``` + +When DevTools reads this file, `JSON.parse` throws, and DTK0009 is logged with the file path. + +## Fix + +Delete the corrupted file and restart your dev server. DevTools will recreate the file with default values automatically: + +```sh +# Remove the corrupted storage file +rm node_modules/.vite/devtools/settings.json + +# Or remove the entire devtools storage directory +rm -rf node_modules/.vite/devtools/ + +# Restart the dev server +vite dev +``` + +No configuration will be lost beyond what was already corrupted. The underlying parse error is attached as `cause` on the diagnostic for additional debugging context. + +## Source + +`packages/core/src/node/storage.ts` diff --git a/docs/errors/DTK0010.md b/docs/errors/DTK0010.md new file mode 100644 index 00000000..4e8d3b5e --- /dev/null +++ b/docs/errors/DTK0010.md @@ -0,0 +1,48 @@ +--- +outline: deep +--- + +# DTK0010: Experimental Static Build + +> Package: `@vitejs/devtools` + +## Message + +> Static build is still experimental and not yet complete. Generated output may be missing features and can change without notice. + +## Cause + +This warning is emitted by the `build()` function in the CLI commands module when you run the DevTools static build command. The static build feature generates a standalone HTML export of the DevTools UI, but it is still under active development. + +The warning is logged after the build completes successfully to inform you that the output may be incomplete or change in future releases. + +## Example + +Running the static build via the CLI triggers this warning: + +```sh +vite devtools build --outDir ./devtools-report +``` + +Or programmatically: + +```ts +import { build } from '@vitejs/devtools/node' + +await build({ + root: process.cwd(), + outDir: './devtools-report', + base: '/', +}) +// DTK0010 warning is logged after build completes +``` + +## Fix + +No action is required. This is an informational warning acknowledging the experimental status of the static build feature. The generated output is usable but may lack some features present in the live DevTools UI. + +If you depend on stable output, consider using the live DevTools server (`vite devtools start`) instead until the static build is finalized. + +## Source + +`packages/core/src/node/cli-commands.ts` diff --git a/docs/errors/DTK0011.md b/docs/errors/DTK0011.md new file mode 100644 index 00000000..fd4d342a --- /dev/null +++ b/docs/errors/DTK0011.md @@ -0,0 +1,64 @@ +--- +outline: deep +--- + +# DTK0011: RPC Function Error + +> Package: `@vitejs/devtools` + +## Message + +> RPC error on executing "`{name}`" + +## Cause + +This error is logged when an individual RPC function throws during execution. It is triggered by the `onFunctionError` hook in the `createRpcServer` configuration inside `createWsServer()`. The `{name}` parameter identifies which RPC function failed. + +When a client invokes a server-side RPC function and that function throws, the RPC layer catches the error, logs this diagnostic with the function name, and propagates the error back to the caller. The original error is attached as `cause`. + +## Example + +A buggy RPC function that throws at runtime: + +```ts +import { defineRpcFunction } from '@vitejs/devtools-kit' + +const myFunction = defineRpcFunction({ + name: 'my-plugin:get-data', + async handler() { + // This throws and triggers DTK0011 with name "my-plugin:get-data" + throw new Error('Database connection failed') + }, +}) +``` + +When a client calls `rpc.invoke('my-plugin:get-data')`, the server logs: + +``` +RPC error on executing "my-plugin:get-data" +``` + +## Fix + +1. Check the `cause` attached to the diagnostic for the original error and stack trace. +2. Fix the underlying issue in your RPC function handler. +3. Ensure your handler properly handles edge cases (missing data, invalid input, unavailable resources). + +```ts +const myFunction = defineRpcFunction({ + name: 'my-plugin:get-data', + async handler() { + try { + return await fetchData() + } + catch (error) { + // Handle gracefully instead of letting it throw + return { error: 'Data unavailable' } + } + }, +}) +``` + +## Source + +`packages/core/src/node/ws.ts` diff --git a/docs/errors/DTK0012.md b/docs/errors/DTK0012.md new file mode 100644 index 00000000..13f9dafc --- /dev/null +++ b/docs/errors/DTK0012.md @@ -0,0 +1,44 @@ +--- +outline: deep +--- + +# DTK0012: RPC General Error + +> Package: `@vitejs/devtools` + +## Message + +> RPC error on executing rpc + +## Cause + +This error is logged when a general RPC error occurs outside of a specific function invocation. It is triggered by the `onGeneralError` hook in the `createRpcServer` configuration inside `createWsServer()`. + +Unlike DTK0011 which is scoped to a named function, this diagnostic covers errors in the RPC transport layer itself -- for example, message serialization failures, WebSocket protocol errors, or issues in the RPC resolver pipeline. The original error is attached as `cause`. + +## Example + +General RPC errors typically arise from infrastructure-level issues rather than user code. For instance, if a function returns a value that cannot be serialized over the WebSocket connection: + +```ts +import { defineRpcFunction } from '@vitejs/devtools-kit' + +const myFunction = defineRpcFunction({ + name: 'my-plugin:get-stream', + async handler() { + // Returning a non-serializable value may cause a general RPC error + return new ReadableStream() + }, +}) +``` + +## Fix + +1. Check the `cause` attached to the diagnostic for the underlying error details. +2. Ensure all RPC function return values are JSON-serializable. +3. If the error appears to be a WebSocket connectivity issue, verify that the DevTools server and client are properly connected. +4. If the error persists and appears to be a bug in the RPC layer, report it to the Vite DevTools repository. + +## Source + +`packages/core/src/node/ws.ts` diff --git a/docs/errors/DTK0013.md b/docs/errors/DTK0013.md new file mode 100644 index 00000000..1853a98b --- /dev/null +++ b/docs/errors/DTK0013.md @@ -0,0 +1,72 @@ +--- +outline: deep +--- + +# DTK0013: Unauthorized RPC Access + +> Package: `@vitejs/devtools` + +## Message + +> Unauthorized access to method `{name}` from client [`{clientId}`] + +## Cause + +This error is thrown by the RPC resolver in `createWsServer()` when an untrusted WebSocket client attempts to call a non-anonymous RPC method. Methods whose names start with `vite:anonymous:` are exempt from authentication and can be called by any client; all other methods require the client to be trusted. + +A client becomes trusted through one of these mechanisms: + +1. **Client auth is disabled** (build mode, `clientAuth: false`, or `VITE_DEVTOOLS_DISABLE_CLIENT_AUTH=true`) -- all clients are auto-trusted. +2. **Auth token in storage** -- the client provides a `vite_devtools_auth_token` query parameter that matches a token stored in `node_modules/.vite/devtools/auth.json`. +3. **Static auth tokens** -- the token matches one of the tokens listed in `devtools.config.clientAuthTokens`. + +If none of these conditions are met, the client is untrusted and any call to a non-anonymous method triggers this error. + +## Example + +A client connecting without a valid auth token: + +```ts +// Client-side: connecting without authentication +const ws = new WebSocket('ws://localhost:7812') +// This client is untrusted + +// Calling a protected method triggers DTK0013 +await rpc.invoke('my-plugin:get-data') +// Error: Unauthorized access to method "my-plugin:get-data" from client [abc123] +``` + +## Fix + +Provide a valid authentication token when connecting: + +```ts +// Client-side: connecting with a valid auth token +const ws = new WebSocket( + 'ws://localhost:7812?vite_devtools_auth_token=your-token-here' +) +``` + +Or configure static trusted tokens in your Vite config: + +```ts +import devtools from '@vitejs/devtools' +// vite.config.ts +import { defineConfig } from 'vite' + +export default defineConfig({ + plugins: [ + devtools({ + config: { + clientAuthTokens: ['your-trusted-token'], + }, + }), + ], +}) +``` + +If you are developing locally and want to skip authentication entirely, see [DTK0008](./DTK0008) for how to disable client auth. + +## Source + +`packages/core/src/node/ws.ts` diff --git a/docs/errors/DTK0014.md b/docs/errors/DTK0014.md new file mode 100644 index 00000000..1dc3cdb1 --- /dev/null +++ b/docs/errors/DTK0014.md @@ -0,0 +1,101 @@ +--- +outline: deep +--- + +# DTK0014: Plugin Setup Error + +> Package: `@vitejs/devtools` + +## Message + +> Error setting up plugin `{name}` + +## Cause + +This error is thrown by `createDevToolsContext()` when a Vite plugin's `devtools.setup()` hook throws during initialization. The DevTools context iterates over all Vite plugins that define a `devtools` property and calls their `setup()` hook with the `DevToolsNodeContext`. If the hook throws, the error is caught, wrapped with this diagnostic (preserving the original error as `cause`), and re-thrown -- halting DevTools initialization. + +Plugins may be skipped entirely if their `devtools.capabilities` configuration indicates they do not support the current mode (dev or build). + +## Example + +A plugin with a failing setup hook: + +```ts +// my-vite-plugin.ts +import type { Plugin } from 'vite' + +export default function myPlugin(): Plugin { + return { + name: 'my-plugin', + devtools: { + setup(context) { + // This error triggers DTK0014 with name "my-plugin" + throw new Error('Failed to connect to analysis service') + }, + }, + } +} +``` + +```ts +import devtools from '@vitejs/devtools' +// vite.config.ts +import { defineConfig } from 'vite' +import myPlugin from './my-vite-plugin' + +export default defineConfig({ + plugins: [ + devtools(), + myPlugin(), + ], +}) +``` + +Running `vite dev` will throw: + +``` +Error setting up plugin my-plugin + Caused by: Failed to connect to analysis service +``` + +## Fix + +1. Check the `cause` attached to the diagnostic for the original error and stack trace. +2. Fix the issue in your plugin's `devtools.setup()` hook. Common causes include: + - Missing dependencies or services the plugin relies on. + - Invalid configuration passed to the plugin. + - Errors in dock/RPC registration during setup. +3. Add error handling in your setup hook for non-critical operations: + +```ts +export default function myPlugin(): Plugin { + return { + name: 'my-plugin', + devtools: { + async setup(context) { + // Guard non-critical initialization + try { + await connectToService() + } + catch { + console.warn('Analysis service unavailable, some features disabled') + } + + // Critical registrations + context.docks.register({ + id: 'my-plugin:dashboard', + type: 'iframe', + title: 'My Plugin', + icon: 'ph:chart-bar-duotone', + category: 'analysis', + src: '/.my-plugin/', + }) + }, + }, + } +} +``` + +## Source + +`packages/core/src/node/context.ts` diff --git a/docs/errors/DTK0015.md b/docs/errors/DTK0015.md new file mode 100644 index 00000000..4e45e6e4 --- /dev/null +++ b/docs/errors/DTK0015.md @@ -0,0 +1,90 @@ +--- +outline: deep +--- + +# DTK0015: Dock Already Registered + +> Package: `@vitejs/devtools` + +## Message + +> Dock with id "`{id}`" is already registered + +## Cause + +This error is thrown by `DevToolsDockHost.register()` when you attempt to register a dock entry with an `id` that is already in use by another dock. The dock host maintains a `Map` of registered views keyed by `id`, and duplicate registrations are rejected by default to prevent accidental overwrites. + +This commonly happens when: + +- Two plugins register docks with the same id. +- A plugin's `devtools.setup()` hook runs more than once without cleanup. +- A hard-coded id collides with another plugin's dock. + +## Example + +```ts +// In a plugin's devtools.setup() hook +export default function myPlugin(): Plugin { + return { + name: 'my-plugin', + devtools: { + setup(context) { + context.docks.register({ + id: 'my-plugin:overview', + type: 'iframe', + title: 'Overview', + icon: 'ph:eye-duotone', + category: 'analysis', + src: '/.my-plugin/', + }) + + // Registering the same id again throws DTK0015 + context.docks.register({ + id: 'my-plugin:overview', + type: 'iframe', + title: 'Overview v2', + icon: 'ph:eye-duotone', + category: 'analysis', + src: '/.my-plugin/v2', + }) + }, + }, + } +} +``` + +## Fix + +Use a unique id for each dock. If you intentionally need to replace an existing registration, pass `force: true` as the second argument: + +```ts +// Use the force parameter to overwrite +context.docks.register({ + id: 'my-plugin:overview', + type: 'iframe', + title: 'Overview v2', + icon: 'ph:eye-duotone', + category: 'analysis', + src: '/.my-plugin/v2', +}, true) +``` + +If you need to update properties of an already-registered dock without replacing it, use the `update` function returned from the initial `register()` call: + +```ts +const dock = context.docks.register({ + id: 'my-plugin:overview', + type: 'iframe', + title: 'Overview', + icon: 'ph:eye-duotone', + category: 'analysis', + src: '/.my-plugin/', +}) + +// Update properties later +dock.update({ title: 'Overview v2' }) +``` + +## Source + +`packages/core/src/node/host-docks.ts` diff --git a/docs/errors/DTK0016.md b/docs/errors/DTK0016.md new file mode 100644 index 00000000..2c1ac0cb --- /dev/null +++ b/docs/errors/DTK0016.md @@ -0,0 +1,75 @@ +--- +outline: deep +--- + +# DTK0016: Cannot Change Dock ID + +> Package: `@vitejs/devtools` + +## Message + +> Cannot change the id of a dock. Use register() to add new docks. + +## Cause + +This error is thrown by the `update()` method returned from `DevToolsDockHost.register()` when you attempt to change the `id` field of a registered dock. Dock ids are immutable after registration because they serve as the primary key in the dock host's internal `Map`. Changing an id would break the association between the entry and its key. + +The check specifically fires when `patch.id` is defined and differs from the original `view.id`. + +## Example + +```ts +// In a plugin's devtools.setup() hook +export default function myPlugin(): Plugin { + return { + name: 'my-plugin', + devtools: { + setup(context) { + const dock = context.docks.register({ + id: 'my-plugin:overview', + type: 'iframe', + title: 'Overview', + icon: 'ph:eye-duotone', + category: 'analysis', + src: '/.my-plugin/', + }) + + // Attempting to change the id throws DTK0016 + dock.update({ id: 'my-plugin:dashboard' }) + }, + }, + } +} +``` + +## Fix + +Dock ids cannot be changed after registration. If you need a dock with a different id, register a new dock instead: + +```ts +const dock = context.docks.register({ + id: 'my-plugin:overview', + type: 'iframe', + title: 'Overview', + icon: 'ph:eye-duotone', + category: 'analysis', + src: '/.my-plugin/', +}) + +// Update non-id properties -- this works fine +dock.update({ title: 'Dashboard', icon: 'ph:chart-bar-duotone' }) + +// For a new id, register a separate dock +context.docks.register({ + id: 'my-plugin:dashboard', + type: 'iframe', + title: 'Dashboard', + icon: 'ph:chart-bar-duotone', + category: 'analysis', + src: '/.my-plugin/dashboard', +}) +``` + +## Source + +`packages/core/src/node/host-docks.ts` diff --git a/docs/errors/DTK0017.md b/docs/errors/DTK0017.md new file mode 100644 index 00000000..da3b26a2 --- /dev/null +++ b/docs/errors/DTK0017.md @@ -0,0 +1,83 @@ +--- +outline: deep +--- + +# DTK0017: Dock Not Registered + +> Package: `@vitejs/devtools` + +## Message + +> Dock with id "`{id}`" is not registered. Use register() to add new docks. + +## Cause + +This error is thrown by `DevToolsDockHost.update()` when you attempt to update a dock entry whose `id` does not exist in the dock host's registry. The `update()` method on the host (not the one returned from `register()`) checks that the dock is already registered before applying changes. + +This can happen when: + +- You call `context.docks.update()` directly with an id that was never registered. +- The dock was previously removed or was never successfully registered. +- There is a typo in the dock id. + +## Example + +```ts +// In a plugin's devtools.setup() hook +export default function myPlugin(): Plugin { + return { + name: 'my-plugin', + devtools: { + setup(context) { + // Attempting to update a dock that doesn't exist throws DTK0017 + context.docks.update({ + id: 'my-plugin:nonexistent', + type: 'iframe', + title: 'Ghost Panel', + icon: 'ph:ghost-duotone', + category: 'debug', + src: '/.my-plugin/', + }) + }, + }, + } +} +``` + +## Fix + +Register the dock before updating it. Use `context.docks.register()` for initial registration, then use the returned `update` handle for subsequent changes: + +```ts +// Register first +const dock = context.docks.register({ + id: 'my-plugin:overview', + type: 'iframe', + title: 'Overview', + icon: 'ph:eye-duotone', + category: 'analysis', + src: '/.my-plugin/', +}) + +// Then update via the returned handle +dock.update({ title: 'Updated Overview' }) +``` + +If you are unsure whether a dock is registered, you can check the dock host's `views` map before updating: + +```ts +if (context.docks.views.has('my-plugin:overview')) { + context.docks.update({ + id: 'my-plugin:overview', + type: 'iframe', + title: 'Updated Overview', + icon: 'ph:eye-duotone', + category: 'analysis', + src: '/.my-plugin/', + }) +} +``` + +## Source + +`packages/core/src/node/host-docks.ts` diff --git a/docs/errors/DTK0018.md b/docs/errors/DTK0018.md new file mode 100644 index 00000000..4c142f14 --- /dev/null +++ b/docs/errors/DTK0018.md @@ -0,0 +1,61 @@ +--- +outline: deep +--- + +# DTK0018: Terminal Session Already Registered + +> Package: `@vitejs/devtools` + +## Message + +> Terminal session with id "`{id}`" already registered + +## Cause + +The `DevToolsTerminalHost.register()` or `DevToolsTerminalHost.startChildProcess()` method was called with a session `id` that is already present in the terminal sessions map. Each terminal session must have a unique identifier. This check runs at the beginning of both `register()` and `startChildProcess()` in the `DevToolsTerminalHost` class. + +## Example + +```ts +export default defineDevToolsPlugin({ + name: 'my-plugin', + setup(context) { + // First registration succeeds + context.terminals.register({ + id: 'my-plugin:terminal', + label: 'My Terminal', + icon: 'i-carbon-terminal', + }) + + // Second registration with the same id throws DTK0018 + context.terminals.register({ + id: 'my-plugin:terminal', // duplicate id + label: 'Another Terminal', + icon: 'i-carbon-terminal', + }) + }, +}) +``` + +## Fix + +Use a unique `id` for each terminal session. If you need to modify an existing session, use `context.terminals.update()` instead of registering again. If you need to replace a session, call `context.terminals.remove()` first. + +```ts +// Option 1: Use a unique id +context.terminals.register({ + id: 'my-plugin:terminal-2', + label: 'Another Terminal', + icon: 'i-carbon-terminal', +}) + +// Option 2: Update the existing session +context.terminals.update({ + id: 'my-plugin:terminal', + label: 'Updated Label', +}) +``` + +## Source + +`packages/core/src/node/host-terminals.ts` diff --git a/docs/errors/DTK0019.md b/docs/errors/DTK0019.md new file mode 100644 index 00000000..62207a50 --- /dev/null +++ b/docs/errors/DTK0019.md @@ -0,0 +1,64 @@ +--- +outline: deep +--- + +# DTK0019: Terminal Session Not Registered + +> Package: `@vitejs/devtools` + +## Message + +> Terminal session with id "`{id}`" not registered + +## Cause + +The `DevToolsTerminalHost.update()` method was called with a session `id` that does not exist in the terminal sessions map. You can only update sessions that were previously added via `register()` or `startChildProcess()`. + +## Example + +```ts +export default defineDevToolsPlugin({ + name: 'my-plugin', + setup(context) { + // Trying to update a session that was never registered throws DTK0019 + context.terminals.update({ + id: 'my-plugin:nonexistent', + label: 'Updated Label', + }) + }, +}) +``` + +## Fix + +Register the terminal session before attempting to update it. + +```ts +// Register first +context.terminals.register({ + id: 'my-plugin:terminal', + label: 'My Terminal', + icon: 'i-carbon-terminal', +}) + +// Then update +context.terminals.update({ + id: 'my-plugin:terminal', + label: 'Updated Label', +}) +``` + +If the session may or may not exist, check the sessions map before updating: + +```ts +if (context.terminals.sessions.has('my-plugin:terminal')) { + context.terminals.update({ + id: 'my-plugin:terminal', + label: 'Updated Label', + }) +} +``` + +## Source + +`packages/core/src/node/host-terminals.ts` diff --git a/docs/errors/DTK0020.md b/docs/errors/DTK0020.md new file mode 100644 index 00000000..ea16d334 --- /dev/null +++ b/docs/errors/DTK0020.md @@ -0,0 +1,53 @@ +--- +outline: deep +--- + +# DTK0020: RPC Function Not Registered + +> Package: `@vitejs/devtools` + +## Message + +> RPC function "`{name}`" is not registered + +## Cause + +The `RpcFunctionsHost.invokeLocal()` method was called with a function name that has not been registered in the RPC definitions map. This method is used to call server-side RPC functions directly without going through the WebSocket transport. The function must have been registered via `defineRpcFunction` and collected by the RPC host before it can be invoked locally. + +## Example + +```ts +export default defineDevToolsPlugin({ + name: 'my-plugin', + setup(context) { + // Attempting to invoke a function that hasn't been registered throws DTK0020 + await context.rpc.invokeLocal('my-plugin:unregistered-fn') + }, +}) +``` + +## Fix + +Ensure the RPC function is registered before calling `invokeLocal()`. The function must be defined using `defineRpcFunction` and set up within a plugin that has already been initialized. + +```ts +import { defineRpcFunction } from '@vitejs/devtools-kit' + +// Define the function +export const myFunction = defineRpcFunction({ + name: 'my-plugin:my-function', + type: 'query', + setup: context => ({ + handler: () => { + return { result: 'hello' } + }, + }), +}) + +// Later, invoke it locally (after it has been registered) +const result = await context.rpc.invokeLocal('my-plugin:my-function') +``` + +## Source + +`packages/core/src/node/host-functions.ts` diff --git a/docs/errors/DTK0021.md b/docs/errors/DTK0021.md new file mode 100644 index 00000000..33c93b60 --- /dev/null +++ b/docs/errors/DTK0021.md @@ -0,0 +1,42 @@ +--- +outline: deep +--- + +# DTK0021: AsyncLocalStorage Not Set + +> Package: `@vitejs/devtools` + +## Message + +> AsyncLocalStorage is not set, it likely to be an internal bug of Vite DevTools + +## Cause + +The `RpcFunctionsHost.getCurrentRpcSession()` method was called, but the internal `AsyncLocalStorage` instance used to track the current RPC session was never initialized. This storage is set up during WebSocket server creation and should always be available when RPC handlers execute. If it is missing, something went wrong during the DevTools initialization process. + +## Example + +This error cannot be triggered by user code under normal circumstances. It would only occur if the internal wiring between the WebSocket server and the RPC host is broken. + +```ts +export default defineDevToolsPlugin({ + name: 'my-plugin', + setup(context) { + // This would throw DTK0021 only if the internal AsyncLocalStorage + // was never wired up (an internal bug) + const session = context.rpc.getCurrentRpcSession() + }, +}) +``` + +## Fix + +This is an internal error in Vite DevTools. If you encounter it, please report it at [https://github.com/vitejs/devtools/issues](https://github.com/vitejs/devtools/issues) with: + +- Your Vite DevTools version +- Steps to reproduce the issue +- Any relevant console output + +## Source + +`packages/core/src/node/host-functions.ts` diff --git a/docs/errors/DTK0022.md b/docs/errors/DTK0022.md new file mode 100644 index 00000000..307e7117 --- /dev/null +++ b/docs/errors/DTK0022.md @@ -0,0 +1,57 @@ +--- +outline: deep +--- + +# DTK0022: View distDir Not Found + +> Package: `@vitejs/devtools` + +## Message + +> distDir `{distDir}` does not exist + +## Cause + +The `DevToolsViewHost.hostStatic()` method was called with a `distDir` path that does not exist on disk. Before serving static files, the view host checks that the directory is present using `existsSync()`. This typically happens when the UI package has not been built yet, or when the path is misconfigured. + +## Example + +```ts +import { resolve } from 'node:path' + +export default defineDevToolsPlugin({ + name: 'my-plugin', + setup(context) { + // Throws DTK0022 if the dist directory hasn't been built + context.views.hostStatic( + '/.my-plugin/', + resolve(__dirname, '../client/dist'), + ) + }, +}) +``` + +## Fix + +Ensure the dist directory exists before calling `hostStatic()`. This usually means building the UI package first. + +```sh +# Build the UI package before starting the dev server +pnpm -C packages/my-plugin-ui run build +``` + +If the path might not exist in all environments (e.g., during development without a build), guard the call: + +```ts +import { existsSync } from 'node:fs' +import { resolve } from 'node:path' + +const distDir = resolve(__dirname, '../client/dist') +if (existsSync(distDir)) { + context.views.hostStatic('/.my-plugin/', distDir) +} +``` + +## Source + +`packages/core/src/node/host-views.ts` diff --git a/docs/errors/DTK0023.md b/docs/errors/DTK0023.md new file mode 100644 index 00000000..d36e31cf --- /dev/null +++ b/docs/errors/DTK0023.md @@ -0,0 +1,52 @@ +--- +outline: deep +--- + +# DTK0023: Vite Server Required + +> Package: `@vitejs/devtools` + +## Message + +> viteServer is required in dev mode + +## Cause + +The `DevToolsViewHost.hostStatic()` method was called while Vite is running in `serve` (dev) mode, but the `viteServer` instance on the DevTools context is not available. In dev mode, the view host needs the Vite dev server to register its middleware for serving static files via `sirv`. This can happen if `hostStatic()` is called before the Vite server has been fully initialized and attached to the context. + +## Example + +```ts +export default defineDevToolsPlugin({ + name: 'my-plugin', + setup(context) { + // If viteServer is not yet set on the context in dev mode, + // this throws DTK0023 + context.views.hostStatic( + '/.my-plugin/', + resolve(__dirname, '../client/dist'), + ) + }, +}) +``` + +## Fix + +Ensure `hostStatic()` is called after the Vite dev server is available on the context. In most cases, calling it within the `setup` hook of `defineDevToolsPlugin` should work because the server is initialized before plugins are set up. If you are calling it from an asynchronous callback, verify that `context.viteServer` is defined. + +```ts +export default defineDevToolsPlugin({ + name: 'my-plugin', + setup(context) { + if (context.viteConfig.command === 'serve' && !context.viteServer) { + // Wait or handle the case where the server isn't ready + return + } + context.views.hostStatic('/.my-plugin/', distDir) + }, +}) +``` + +## Source + +`packages/core/src/node/host-views.ts` diff --git a/docs/errors/DTK0024.md b/docs/errors/DTK0024.md new file mode 100644 index 00000000..c9e85463 --- /dev/null +++ b/docs/errors/DTK0024.md @@ -0,0 +1,67 @@ +--- +outline: deep +--- + +# DTK0024: Command Already Registered + +> Package: `@vitejs/devtools` + +## Message + +> Command "`{id}`" is already registered + +## Cause + +The `DevToolsCommandsHost.register()` method was called with a command `id` that already exists in the commands map. Each command must have a unique identifier. + +## Example + +```ts +export default defineDevToolsPlugin({ + name: 'my-plugin', + setup(context) { + context.commands.register({ + id: 'my-plugin:reload', + label: 'Reload', + handler: () => { /* ... */ }, + }) + + // Registering with the same id throws DTK0024 + context.commands.register({ + id: 'my-plugin:reload', + label: 'Reload Again', + handler: () => { /* ... */ }, + }) + }, +}) +``` + +## Fix + +Use a unique `id` for each command. If you need to modify an existing command, use the `update` method on the handle returned by `register()`. + +```ts +const handle = context.commands.register({ + id: 'my-plugin:reload', + label: 'Reload', + handler: () => { /* ... */ }, +}) + +// Update the existing command instead of re-registering +handle.update({ label: 'Reload All' }) +``` + +If you need to replace a command entirely, unregister it first: + +```ts +handle.unregister() +context.commands.register({ + id: 'my-plugin:reload', + label: 'New Reload', + handler: () => { /* ... */ }, +}) +``` + +## Source + +`packages/core/src/node/host-commands.ts` diff --git a/docs/errors/DTK0025.md b/docs/errors/DTK0025.md new file mode 100644 index 00000000..02126fa1 --- /dev/null +++ b/docs/errors/DTK0025.md @@ -0,0 +1,57 @@ +--- +outline: deep +--- + +# DTK0025: Cannot Change Command ID + +> Package: `@vitejs/devtools` + +## Message + +> Cannot change the id of a command. Use register() to add new commands. + +## Cause + +The `update` method on a `DevToolsCommandHandle` was called with a patch object that includes an `id` property. Command IDs are immutable after registration -- they serve as the stable key in the commands map and cannot be changed via update. + +## Example + +```ts +export default defineDevToolsPlugin({ + name: 'my-plugin', + setup(context) { + const handle = context.commands.register({ + id: 'my-plugin:reload', + label: 'Reload', + handler: () => { /* ... */ }, + }) + + // Attempting to change the id throws DTK0025 + handle.update({ id: 'my-plugin:new-id', label: 'New Label' }) + }, +}) +``` + +## Fix + +If you need a command with a different `id`, unregister the existing command and register a new one. + +```ts +handle.unregister() + +const newHandle = context.commands.register({ + id: 'my-plugin:new-id', + label: 'New Label', + handler: () => { /* ... */ }, +}) +``` + +To update other properties of a command without changing its `id`, omit the `id` field from the patch: + +```ts +handle.update({ label: 'Updated Label' }) +``` + +## Source + +`packages/core/src/node/host-commands.ts` diff --git a/docs/errors/DTK0026.md b/docs/errors/DTK0026.md new file mode 100644 index 00000000..93d06b9f --- /dev/null +++ b/docs/errors/DTK0026.md @@ -0,0 +1,64 @@ +--- +outline: deep +--- + +# DTK0026: Command Not Registered + +> Package: `@vitejs/devtools` + +## Message + +> Command "`{id}`" is not registered + +## Cause + +This error is thrown in two situations within the `DevToolsCommandsHost`: + +1. **`execute()`** -- Attempting to execute a command by `id`, but no command with that `id` is found in the commands map or as a child of any registered command. +2. **`handle.update()`** -- Attempting to update a command via its handle, but the command was already unregistered. + +## Example + +```ts +export default defineDevToolsPlugin({ + name: 'my-plugin', + setup(context) { + // Executing a command that was never registered throws DTK0026 + await context.commands.execute('my-plugin:nonexistent') + }, +}) +``` + +```ts +// Or: updating after unregister +const handle = context.commands.register({ + id: 'my-plugin:reload', + label: 'Reload', + handler: () => { /* ... */ }, +}) + +handle.unregister() + +// This throws DTK0026 because the command no longer exists +handle.update({ label: 'Updated' }) +``` + +## Fix + +Register the command before executing or updating it. If the command may not exist, check the commands map first. + +```ts +// Register the command +context.commands.register({ + id: 'my-plugin:reload', + label: 'Reload', + handler: () => { /* ... */ }, +}) + +// Now it can be executed +await context.commands.execute('my-plugin:reload') +``` + +## Source + +`packages/core/src/node/host-commands.ts` diff --git a/docs/errors/DTK0027.md b/docs/errors/DTK0027.md new file mode 100644 index 00000000..9199a510 --- /dev/null +++ b/docs/errors/DTK0027.md @@ -0,0 +1,66 @@ +--- +outline: deep +--- + +# DTK0027: Shared State Not Found + +> Package: `@vitejs/devtools` + +## Message + +> Shared state of "`{key}`" is not found, please provide an initial value for the first time + +## Cause + +The `RpcSharedStateHost.get()` method was called with a key that does not exist in the shared state map, and neither `initialValue` nor `sharedState` was provided in the options. When accessing a shared state key for the first time, the host needs an initial value to create the state instance. Subsequent calls with the same key will return the existing state without requiring options. + +## Example + +```ts +export default defineDevToolsPlugin({ + name: 'my-plugin', + setup(context) { + // Throws DTK0027 because the key doesn't exist yet and no initial value is given + const state = await context.rpc.sharedState.get('my-plugin:config') + }, +}) +``` + +## Fix + +Provide an `initialValue` when calling `get()` for a key that might not exist yet. + +```ts +const state = await context.rpc.sharedState.get('my-plugin:config', { + initialValue: { + theme: 'dark', + showTimestamps: true, + }, +}) +``` + +Alternatively, provide a pre-created `sharedState` instance: + +```ts +import { createSharedState } from '@vitejs/devtools-kit/utils/shared-state' + +const myState = createSharedState({ + initialValue: { theme: 'dark' }, + enablePatches: false, +}) + +const state = await context.rpc.sharedState.get('my-plugin:config', { + sharedState: myState, +}) +``` + +After the first call with an initial value, subsequent calls to the same key do not need options: + +```ts +// This works because 'my-plugin:config' was already initialized above +const state = await context.rpc.sharedState.get('my-plugin:config') +``` + +## Source + +`packages/core/src/node/rpc-shared-state.ts` diff --git a/docs/errors/DTK0028.md b/docs/errors/DTK0028.md new file mode 100644 index 00000000..090e6ac3 --- /dev/null +++ b/docs/errors/DTK0028.md @@ -0,0 +1,44 @@ +--- +outline: deep +--- + +# DTK0028: Path Outside Workspace Root (Open in Editor) + +> Package: `@vitejs/devtools` + +## Message + +> Path is outside the workspace root + +## Cause + +The `vite:core:open-in-editor` RPC function received a file path that, when resolved against the workspace root, points to a location outside the workspace root directory. This is a security restriction to prevent the DevTools client from opening arbitrary files on the host machine. The check resolves the path using `path.resolve()` and then verifies that the relative path from the workspace root does not start with `..` and does not contain null bytes. + +## Example + +```ts +// From the DevTools client, calling the open-in-editor RPC +await rpc.call('vite:core:open-in-editor', '../../etc/passwd') +// Throws DTK0028 because the path escapes the workspace root + +await rpc.call('vite:core:open-in-editor', '/absolute/path/outside/workspace') +// Throws DTK0028 if this path is not within the workspace root +``` + +## Fix + +Ensure the path passed to the open-in-editor function is within the workspace root. Use relative paths from the project root, or absolute paths that resolve to a location inside the workspace. + +```ts +// Use a relative path within the project +await rpc.call('vite:core:open-in-editor', 'src/main.ts') + +// Or an absolute path that is inside the workspace root +await rpc.call('vite:core:open-in-editor', '/workspace/project/src/main.ts') +``` + +If you need to open files outside the workspace, this is intentionally disallowed for security. The workspace root is determined by `context.workspaceRoot`. + +## Source + +`packages/core/src/node/rpc/public/open-in-editor.ts` diff --git a/docs/errors/DTK0029.md b/docs/errors/DTK0029.md new file mode 100644 index 00000000..59b960f5 --- /dev/null +++ b/docs/errors/DTK0029.md @@ -0,0 +1,44 @@ +--- +outline: deep +--- + +# DTK0029: Path Outside Workspace Root (Open in Finder) + +> Package: `@vitejs/devtools` + +## Message + +> Path is outside the workspace root + +## Cause + +The `vite:core:open-in-finder` RPC function received a file path that, when resolved against the workspace root, points to a location outside the workspace root directory. This is a security restriction to prevent the DevTools client from opening arbitrary directories or files in the system file manager. The check resolves the path using `path.resolve()` and then verifies that the relative path from the workspace root does not start with `..` and does not contain null bytes. + +## Example + +```ts +// From the DevTools client, calling the open-in-finder RPC +await rpc.call('vite:core:open-in-finder', '../../../home') +// Throws DTK0029 because the path escapes the workspace root + +await rpc.call('vite:core:open-in-finder', '/tmp/some-directory') +// Throws DTK0029 if /tmp is not within the workspace root +``` + +## Fix + +Ensure the path passed to the open-in-finder function is within the workspace root. Use relative paths from the project root, or absolute paths that resolve to a location inside the workspace. + +```ts +// Use a relative path within the project +await rpc.call('vite:core:open-in-finder', 'src/components') + +// Or an absolute path that is inside the workspace root +await rpc.call('vite:core:open-in-finder', '/workspace/project/public/assets') +``` + +If you need to open locations outside the workspace, this is intentionally disallowed for security. The workspace root is determined by `context.workspaceRoot`. + +## Source + +`packages/core/src/node/rpc/public/open-in-finder.ts` diff --git a/docs/errors/DTK0030.md b/docs/errors/DTK0030.md new file mode 100644 index 00000000..4b559834 --- /dev/null +++ b/docs/errors/DTK0030.md @@ -0,0 +1,49 @@ +--- +outline: deep +--- + +# DTK0030: Dock Entry Not Found + +> Package: `@vitejs/devtools` + +## Message + +> Dock entry with id "`{id}`" not found + +## Cause + +The internal `devtoolskit:internal:docks:on-launch` RPC function was called with a dock entry `id` that does not exist in the docks host. This function is invoked by the DevTools client when a user clicks on a launcher-type dock entry. It looks up the entry by `id` in `context.docks.values()`, and if no matching entry is found, it throws this error. + +## Example + +This error is typically triggered by the DevTools client UI, not by plugin code directly. It would occur if a dock entry was unregistered between when the UI rendered the dock panel and when the user clicked the launch button. + +```ts +// Internally, the client calls: +await rpc.call('devtoolskit:internal:docks:on-launch', 'nonexistent-dock-id') +// Throws DTK0030 because the dock entry does not exist +``` + +## Fix + +Ensure the dock entry is registered before attempting to launch it. If you are writing a plugin that registers dock entries, verify that the entry persists for the lifetime it is expected to be launchable. + +```ts +context.docks.register({ + id: 'my-plugin:dock', + label: 'My Dock', + type: 'launcher', + launcher: { + status: 'idle', + onLaunch: async () => { + // launch logic + }, + }, +}) +``` + +If you see this error in the DevTools UI, try refreshing the page to re-synchronize the dock entries. + +## Source + +`packages/core/src/node/rpc/internal/docks-on-launch.ts` diff --git a/docs/errors/DTK0031.md b/docs/errors/DTK0031.md new file mode 100644 index 00000000..65f21a01 --- /dev/null +++ b/docs/errors/DTK0031.md @@ -0,0 +1,54 @@ +--- +outline: deep +--- + +# DTK0031: Dock Entry Not a Launcher + +> Package: `@vitejs/devtools` + +## Message + +> Dock entry with id "`{id}`" is not a launcher + +## Cause + +The internal `devtoolskit:internal:docks:on-launch` RPC function was called for a dock entry that exists but has a `type` other than `'launcher'`. Only dock entries with `type: 'launcher'` have an `onLaunch` handler that can be invoked. This can happen if a dock entry's type was changed after the client UI rendered, or if there is a mismatch between the client and server state. + +## Example + +```ts +// A dock entry registered as a non-launcher type +context.docks.register({ + id: 'my-plugin:info-panel', + label: 'Info Panel', + type: 'iframe', + iframe: { src: '/.my-plugin/' }, +}) + +// If the client somehow tries to launch this entry, DTK0031 is thrown +// (internally: rpc.call('devtoolskit:internal:docks:on-launch', 'my-plugin:info-panel')) +``` + +## Fix + +Only the `'launcher'` dock type supports the launch action. If you intended this dock entry to be launchable, register it with `type: 'launcher'`: + +```ts +context.docks.register({ + id: 'my-plugin:dock', + label: 'My Launchable Dock', + type: 'launcher', + launcher: { + status: 'idle', + onLaunch: async () => { + // Perform setup, then optionally switch to an iframe dock + }, + }, +}) +``` + +If you see this error in the DevTools UI, it likely indicates a state synchronization issue. Refreshing the page should resolve it. + +## Source + +`packages/core/src/node/rpc/internal/docks-on-launch.ts` diff --git a/docs/errors/DTK0032.md b/docs/errors/DTK0032.md new file mode 100644 index 00000000..bf8a7e93 --- /dev/null +++ b/docs/errors/DTK0032.md @@ -0,0 +1,71 @@ +--- +outline: deep +--- + +# DTK0032: Dock Launch Error + +> Package: `@vitejs/devtools` + +## Message + +> Error launching dock entry "`{id}`" + +## Cause + +A dock entry's `onLaunch()` handler threw an error during execution. When the DevTools client triggers a launcher-type dock entry, the `devtoolskit:internal:docks:on-launch` RPC function calls the entry's `onLaunch()` callback. If that callback throws, the error is caught, this diagnostic is logged (not thrown), and the dock entry's launcher status is set to `'error'` with the error message attached. The original error is available as the `cause` of this diagnostic. + +## Example + +```ts +context.docks.register({ + id: 'my-plugin:dock', + label: 'My Dock', + type: 'launcher', + launcher: { + status: 'idle', + onLaunch: async () => { + // If this throws, DTK0032 is logged + const port = await startDevServer() + if (!port) { + throw new Error('Failed to start dev server') + } + }, + }, +}) +``` + +## Fix + +Check the original error attached as `cause` in the log output to determine what went wrong in your `onLaunch` handler. Common issues include: + +- A build step or dev server failing to start +- Missing dependencies or misconfigured paths +- Network errors when fetching external resources + +Add error handling within your `onLaunch` callback to provide better diagnostics: + +```ts +context.docks.register({ + id: 'my-plugin:dock', + label: 'My Dock', + type: 'launcher', + launcher: { + status: 'idle', + onLaunch: async () => { + try { + await startDevServer() + } + catch (error) { + console.error('[my-plugin] Failed to start:', error) + throw error // re-throw so the dock status reflects the error + } + }, + }, +}) +``` + +After the error is resolved, the user can retry the launch from the DevTools UI. The dock entry's status will show `'error'` with the error message until a successful launch. + +## Source + +`packages/core/src/node/rpc/internal/docks-on-launch.ts` diff --git a/docs/errors/RDDT0001.md b/docs/errors/RDDT0001.md new file mode 100644 index 00000000..67a6df45 --- /dev/null +++ b/docs/errors/RDDT0001.md @@ -0,0 +1,43 @@ +--- +outline: deep +--- + +# RDDT0001: Rolldown Logs Directory Not Found + +> Package: `@vitejs/devtools-rolldown` + +## Message + +> Rolldown logs directory `.rolldown` not found, you might want to run build with `build.rolldownOptions.devtools` enabled first. + +## Cause + +When the Rolldown DevTools plugin initializes, it looks for the `.rolldown` directory inside `node_modules` (checking both the project `cwd` and `process.cwd()`). This directory is where Rolldown writes its build logs and debug output. If neither location contains a `.rolldown` directory, this warning is emitted because the plugin has no data to display. + +This typically happens when: + +- You have not yet run a build with Rolldown devtools output enabled. +- The `node_modules` directory was cleaned or reinstalled without re-running a build. +- The project `cwd` does not match the expected root (e.g., running from a different directory). + +## Fix + +1. Enable devtools output in your Vite/Rolldown config: + + ```ts + export default defineConfig({ + build: { + rolldownOptions: { + devtools: true + } + } + }) + ``` + +2. Run a build so Rolldown produces its log files into `node_modules/.rolldown/`. + +3. Start the devtools again. The warning should no longer appear. + +## Source + +`packages/rolldown/src/node/rpc/utils.ts` diff --git a/docs/errors/RDDT0002.md b/docs/errors/RDDT0002.md new file mode 100644 index 00000000..ac21e64c --- /dev/null +++ b/docs/errors/RDDT0002.md @@ -0,0 +1,35 @@ +--- +outline: deep +--- + +# RDDT0002: JSON Parse Stream Bad Line + +> Package: `@vitejs/devtools-rolldown` + +## Message + +> JSON parse stream skip bad line {line}: {error} + +## Cause + +Rolldown writes its build logs as newline-delimited JSON (NDJSON). When the devtools plugin reads these files, it parses each line individually using `JSON.parse`. If a line cannot be parsed as valid JSON, this warning is emitted and the line is skipped. + +Common reasons a line might fail to parse: + +- The log file was truncated during a crash or interrupted build. +- The file was corrupted by concurrent writes or disk issues. +- A non-JSON line (such as a trailing newline or debug output) was written into the log file. + +The warning includes the line number, the parse error message, and a preview of the offending line (truncated to 256 characters) to help diagnose the issue. + +## Fix + +This warning is non-fatal -- the bad line is skipped and processing continues with the remaining lines. If you see this warning frequently or for many lines: + +1. Delete the `node_modules/.rolldown/` directory. +2. Run a clean build to regenerate the log files. +3. If the problem persists, check that no other process is writing to the `.rolldown` directory concurrently. + +## Source + +`packages/rolldown/src/node/utils/json-parse-stream.ts` diff --git a/docs/errors/index.md b/docs/errors/index.md new file mode 100644 index 00000000..6249dd24 --- /dev/null +++ b/docs/errors/index.md @@ -0,0 +1,62 @@ +--- +outline: deep +--- + +# Error Reference + +Vite DevTools uses structured diagnostics to surface actionable warnings and errors at runtime. Each diagnostic has a unique error code, a human-readable message, and a link back to this documentation. + +## How error codes work + +- Codes follow the pattern **prefix + 4-digit number** (e.g., `DTK0001`, `RDDT0002`). +- Each prefix maps to a package: `DTK` for `@vitejs/devtools` core/kit, `RDDT` for `@vitejs/devtools-rolldown`. +- Every error page includes the cause, recommended fix, and a reference to the source file that emits it. +- The diagnostics system is powered by [`@antfu/experimental-logs-sdk`](https://github.com/antfu/experimental-logs-sdk), which provides structured logging with docs URLs, ANSI-formatted console output, and level-based filtering. + +## DevTools Kit (DTK) + +Emitted by `@vitejs/devtools` and `@vitejs/devtools-kit`. + +| Code | Level | Title | Package | +|------|-------|-------|---------| +| [DTK0001](./DTK0001) | error | RPC Function Already Registered | `@vitejs/devtools` | +| [DTK0002](./DTK0002) | error | RPC Function Not Registered | `@vitejs/devtools` | +| [DTK0003](./DTK0003) | error | RPC Function Not Registered | `@vitejs/devtools` | +| [DTK0004](./DTK0004) | error | Missing RPC Handler | `@vitejs/devtools` | +| [DTK0005](./DTK0005) | error | Function Not in Dump Store | `@vitejs/devtools` | +| [DTK0006](./DTK0006) | error | No Dump Match | `@vitejs/devtools` | +| [DTK0007](./DTK0007) | error | Invalid Dump Configuration | `@vitejs/devtools` | +| [DTK0008](./DTK0008) | warn | Client Auth Disabled | `@vitejs/devtools` | +| [DTK0009](./DTK0009) | warn | Storage Parse Failed | `@vitejs/devtools` | +| [DTK0010](./DTK0010) | warn | Experimental Static Build | `@vitejs/devtools` | +| [DTK0011](./DTK0011) | error | RPC Function Error | `@vitejs/devtools` | +| [DTK0012](./DTK0012) | error | RPC General Error | `@vitejs/devtools` | +| [DTK0013](./DTK0013) | error | Unauthorized RPC Access | `@vitejs/devtools` | +| [DTK0014](./DTK0014) | error | Plugin Setup Error | `@vitejs/devtools` | +| [DTK0015](./DTK0015) | error | Dock Already Registered | `@vitejs/devtools` | +| [DTK0016](./DTK0016) | error | Cannot Change Dock ID | `@vitejs/devtools` | +| [DTK0017](./DTK0017) | error | Dock Not Registered | `@vitejs/devtools` | +| [DTK0018](./DTK0018) | error | Terminal Session Already Registered | `@vitejs/devtools` | +| [DTK0019](./DTK0019) | error | Terminal Session Not Registered | `@vitejs/devtools` | +| [DTK0020](./DTK0020) | error | RPC Function Not Registered (Local) | `@vitejs/devtools` | +| [DTK0021](./DTK0021) | error | AsyncLocalStorage Not Set | `@vitejs/devtools` | +| [DTK0022](./DTK0022) | error | View distDir Not Found | `@vitejs/devtools` | +| [DTK0023](./DTK0023) | error | Vite Server Required | `@vitejs/devtools` | +| [DTK0024](./DTK0024) | error | Command Already Registered | `@vitejs/devtools` | +| [DTK0025](./DTK0025) | error | Cannot Change Command ID | `@vitejs/devtools` | +| [DTK0026](./DTK0026) | error | Command Not Registered | `@vitejs/devtools` | +| [DTK0027](./DTK0027) | error | Shared State Not Found | `@vitejs/devtools` | +| [DTK0028](./DTK0028) | error | Path Outside Workspace Root | `@vitejs/devtools` | +| [DTK0029](./DTK0029) | error | Path Outside Workspace Root | `@vitejs/devtools` | +| [DTK0030](./DTK0030) | error | Dock Entry Not Found | `@vitejs/devtools` | +| [DTK0031](./DTK0031) | error | Dock Entry Not a Launcher | `@vitejs/devtools` | +| [DTK0032](./DTK0032) | error | Dock Launch Error | `@vitejs/devtools` | + +## Rolldown DevTools (RDDT) + +Emitted by `@vitejs/devtools-rolldown`. + +| Code | Level | Title | Package | +|------|-------|-------|---------| +| [RDDT0001](./RDDT0001) | warn | Rolldown Logs Directory Not Found | `@vitejs/devtools-rolldown` | +| [RDDT0002](./RDDT0002) | warn | JSON Parse Stream Bad Line | `@vitejs/devtools-rolldown` | diff --git a/package.json b/package.json index f3ac0595..db9414db 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "play:debug": "pnpm -C packages/core run play:debug", "play:standalone": "pnpm -C packages/core run dev:standalone", "example:plugin-file-explorer": "pnpm -C examples/plugin-file-explorer run play:dev", - "prepare": "npx simple-git-hooks && pnpm -C packages/rolldown run dev:prepare", + "postinstall": "npx simple-git-hooks && pnpm -C packages/rolldown run dev:prepare && skills-npm", "lint": "eslint --cache", "test": "vitest", "release": "bumpp -r", @@ -24,6 +24,7 @@ }, "devDependencies": { "@antfu/eslint-config": "catalog:devtools", + "@antfu/experimental-logs-sdk": "catalog:deps", "@antfu/ni": "catalog:build", "@antfu/utils": "catalog:inlined", "@iconify-json/carbon": "catalog:icons", @@ -64,6 +65,7 @@ "nuxt": "catalog:build", "p-limit": "catalog:deps", "simple-git-hooks": "catalog:devtools", + "skills-npm": "catalog:devtools", "tsdown": "catalog:build", "tsx": "catalog:build", "turbo": "catalog:build", diff --git a/packages/core/package.json b/packages/core/package.json index 45d4853d..86cad2ae 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -55,6 +55,7 @@ "vite": "*" }, "dependencies": { + "@antfu/experimental-logs-sdk": "catalog:deps", "@vitejs/devtools-kit": "workspace:*", "@vitejs/devtools-rolldown": "workspace:*", "@vitejs/devtools-rpc": "workspace:*", diff --git a/packages/core/src/node/cli-commands.ts b/packages/core/src/node/cli-commands.ts index 81b79faa..a2d3d9c9 100644 --- a/packages/core/src/node/cli-commands.ts +++ b/packages/core/src/node/cli-commands.ts @@ -6,6 +6,7 @@ import { import c from 'ansis' import { resolve } from 'pathe' import { MARK_NODE } from './constants' +import { logger } from './diagnostics' import { normalizeHttpServerUrl } from './utils' export interface StartOptions { @@ -94,6 +95,5 @@ export async function build(options: BuildOptions) { outDir, }) - console.warn(c.yellow`${MARK_NODE} Static build is still experimental and not yet complete.`) - console.warn(c.yellow`${MARK_NODE} Generated output may be missing features and can change without notice.`) + logger.DTK0010().log() } diff --git a/packages/core/src/node/context.ts b/packages/core/src/node/context.ts index 7a7b011a..edb4f85c 100644 --- a/packages/core/src/node/context.ts +++ b/packages/core/src/node/context.ts @@ -3,6 +3,7 @@ import type { ResolvedConfig, ViteDevServer } from 'vite' import { createDebug } from 'obug' import { debounce } from 'perfect-debounce' import { ContextUtils } from './context-utils' +import { logger } from './diagnostics' import { DevToolsCommandsHost } from './host-commands' import { DevToolsDockHost } from './host-docks' import { RpcFunctionsHost } from './host-functions' @@ -166,8 +167,7 @@ export async function createDevToolsContext( await plugin.devtools?.setup?.(context) } catch (error) { - console.error(`[Vite DevTools] Error setting up plugin ${plugin.name}:`, error) - throw error + throw logger.DTK0014({ name: plugin.name }, { cause: error }).throw() } } diff --git a/packages/core/src/node/diagnostics.ts b/packages/core/src/node/diagnostics.ts new file mode 100644 index 00000000..017eba80 --- /dev/null +++ b/packages/core/src/node/diagnostics.ts @@ -0,0 +1,94 @@ +import { consoleReporter, createLogger, defineDiagnostics } from '@antfu/experimental-logs-sdk' +import { ansiFormatter } from '@antfu/experimental-logs-sdk/formatters/ansi' +import c from 'ansis' + +export const diagnostics = defineDiagnostics({ + docsBase: 'https://devtools.vite.dev/errors', + codes: { + DTK0008: { + message: 'Client authentication is disabled. Any browser can connect to the devtools and access your server and filesystem.', + level: 'warn', + }, + DTK0009: { + message: (p: { filepath: string }) => `Failed to parse storage file: ${p.filepath}, falling back to defaults.`, + level: 'warn', + }, + DTK0010: { + message: 'Static build is still experimental and not yet complete. Generated output may be missing features and can change without notice.', + level: 'warn', + }, + DTK0011: { + message: (p: { name: string }) => `RPC error on executing "${p.name}"`, + }, + DTK0012: { + message: 'RPC error on executing rpc', + }, + DTK0013: { + message: (p: { name: string, clientId: string }) => `Unauthorized access to method ${JSON.stringify(p.name)} from client [${p.clientId}]`, + }, + DTK0014: { + message: (p: { name: string }) => `Error setting up plugin ${p.name}`, + }, + DTK0015: { + message: (p: { id: string }) => `Dock with id "${p.id}" is already registered`, + hint: 'Use the `force` parameter to overwrite an existing registration.', + }, + DTK0016: { + message: 'Cannot change the id of a dock. Use register() to add new docks.', + }, + DTK0017: { + message: (p: { id: string }) => `Dock with id "${p.id}" is not registered. Use register() to add new docks.`, + }, + DTK0018: { + message: (p: { id: string }) => `Terminal session with id "${p.id}" already registered`, + }, + DTK0019: { + message: (p: { id: string }) => `Terminal session with id "${p.id}" not registered`, + }, + DTK0020: { + message: (p: { name: string }) => `RPC function "${p.name}" is not registered`, + }, + DTK0021: { + message: 'AsyncLocalStorage is not set, it likely to be an internal bug of Vite DevTools', + }, + DTK0022: { + message: (p: { distDir: string }) => `distDir ${p.distDir} does not exist`, + }, + DTK0023: { + message: 'viteServer is required in dev mode', + }, + DTK0024: { + message: (p: { id: string }) => `Command "${p.id}" is already registered`, + }, + DTK0025: { + message: 'Cannot change the id of a command. Use register() to add new commands.', + }, + DTK0026: { + message: (p: { id: string }) => `Command "${p.id}" is not registered`, + }, + DTK0027: { + message: (p: { key: string }) => `Shared state of "${p.key}" is not found, please provide an initial value for the first time`, + }, + DTK0028: { + message: 'Path is outside the workspace root', + }, + DTK0029: { + message: 'Path is outside the workspace root', + }, + DTK0030: { + message: (p: { id: string }) => `Dock entry with id "${p.id}" not found`, + }, + DTK0031: { + message: (p: { id: string }) => `Dock entry with id "${p.id}" is not a launcher`, + }, + DTK0032: { + message: (p: { id: string }) => `Error launching dock entry "${p.id}"`, + }, + }, +}) + +export const logger = createLogger({ + diagnostics: [diagnostics], + formatter: ansiFormatter(c), + reporter: consoleReporter, +}) diff --git a/packages/core/src/node/host-commands.ts b/packages/core/src/node/host-commands.ts index f920411c..f469ae58 100644 --- a/packages/core/src/node/host-commands.ts +++ b/packages/core/src/node/host-commands.ts @@ -1,5 +1,6 @@ import type { DevToolsCommandHandle, DevToolsCommandsHost as DevToolsCommandsHostType, DevToolsNodeContext, DevToolsServerCommandEntry, DevToolsServerCommandInput } from '@vitejs/devtools-kit' import { createEventEmitter } from '@vitejs/devtools-kit/utils/events' +import { logger } from './diagnostics' export class DevToolsCommandsHost implements DevToolsCommandsHostType { public readonly commands: DevToolsCommandsHostType['commands'] = new Map() @@ -11,7 +12,7 @@ export class DevToolsCommandsHost implements DevToolsCommandsHostType { register(command: DevToolsServerCommandInput): DevToolsCommandHandle { if (this.commands.has(command.id)) { - throw new Error(`Command "${command.id}" is already registered`) + throw logger.DTK0024({ id: command.id }).throw() } this.commands.set(command.id, command) this.events.emit('command:registered', this.toSerializable(command)) @@ -20,11 +21,11 @@ export class DevToolsCommandsHost implements DevToolsCommandsHostType { id: command.id, update: (patch: Partial>) => { if ('id' in patch) { - throw new Error(`Cannot change the id of a command. Use register() to add new commands.`) + throw logger.DTK0025().throw() } const existing = this.commands.get(command.id) if (!existing) { - throw new Error(`Command "${command.id}" is not registered`) + throw logger.DTK0026({ id: command.id }).throw() } Object.assign(existing, patch) this.events.emit('command:registered', this.toSerializable(existing)) @@ -44,7 +45,7 @@ export class DevToolsCommandsHost implements DevToolsCommandsHostType { async execute(id: string, ...args: any[]): Promise { const found = this.findCommand(id) if (!found) { - throw new Error(`Command "${id}" is not registered`) + throw logger.DTK0026({ id }).throw() } if (!found.handler) { throw new Error(`Command "${id}" has no handler (group-only command)`) diff --git a/packages/core/src/node/host-docks.ts b/packages/core/src/node/host-docks.ts index 269fa672..2f541ecd 100644 --- a/packages/core/src/node/host-docks.ts +++ b/packages/core/src/node/host-docks.ts @@ -3,6 +3,7 @@ import type { SharedState } from '@vitejs/devtools-kit/utils/shared-state' import { DEFAULT_STATE_USER_SETTINGS } from '@vitejs/devtools-kit/constants' import { createEventEmitter } from '@vitejs/devtools-kit/utils/events' import { join } from 'pathe' +import { logger } from './diagnostics' import { createStorage } from './storage' export class DevToolsDockHost implements DevToolsDockHostType { @@ -72,7 +73,7 @@ export class DevToolsDockHost implements DevToolsDockHostType { update: (patch: Partial) => void } { if (this.views.has(view.id) && !force) { - throw new Error(`Dock with id "${view.id}" is already registered`) + throw logger.DTK0015({ id: view.id }).throw() } this.views.set(view.id, view) this.events.emit('dock:entry:updated', view) @@ -80,7 +81,7 @@ export class DevToolsDockHost implements DevToolsDockHostType { return { update: (patch) => { if (patch.id && patch.id !== view.id) { - throw new Error(`Cannot change the id of a dock. Use register() to add new docks.`) + throw logger.DTK0016().throw() } this.update(Object.assign(this.views.get(view.id)!, patch)) }, @@ -89,7 +90,7 @@ export class DevToolsDockHost implements DevToolsDockHostType { update(view: DevToolsDockUserEntry): void { if (!this.views.has(view.id)) { - throw new Error(`Dock with id "${view.id}" is not registered. Use register() to add new docks.`) + throw logger.DTK0017({ id: view.id }).throw() } this.views.set(view.id, view) this.events.emit('dock:entry:updated', view) diff --git a/packages/core/src/node/host-functions.ts b/packages/core/src/node/host-functions.ts index ff430e6e..b7036269 100644 --- a/packages/core/src/node/host-functions.ts +++ b/packages/core/src/node/host-functions.ts @@ -3,6 +3,7 @@ import type { BirpcGroup } from 'birpc' import type { AsyncLocalStorage } from 'node:async_hooks' import { RpcFunctionsCollectorBase } from '@vitejs/devtools-rpc' import { createDebug } from 'obug' +import { logger } from './diagnostics' import { createRpcSharedStateServerHost } from './rpc-shared-state' const debugBroadcast = createDebug('vite:devtools:rpc:broadcast') @@ -30,7 +31,7 @@ export class RpcFunctionsHost extends RpcFunctionsCollectorBase>> { if (!this.definitions.has(method as string)) { - throw new Error(`RPC function "${String(method)}" is not registered`) + throw logger.DTK0020({ name: String(method) }).throw() } const handler = await this.getHandler(method) @@ -65,7 +66,7 @@ export class RpcFunctionsHost extends RpcFunctionsCollectorBase): void { if (!this.sessions.has(patch.id)) { - throw new Error(`Terminal session with id "${patch.id}" not registered`) + throw logger.DTK0019({ id: patch.id }).throw() } const session = this.sessions.get(patch.id)! Object.assign(session, patch) @@ -84,7 +85,7 @@ export class DevToolsTerminalHost implements DevToolsTerminalHostType { terminal: Omit, ): Promise { if (this.sessions.has(terminal.id)) { - throw new Error(`Terminal session with id "${terminal.id}" already registered`) + throw logger.DTK0018({ id: terminal.id }).throw() } const { exec } = await import('tinyexec') diff --git a/packages/core/src/node/host-views.ts b/packages/core/src/node/host-views.ts index 41e4c954..8379f1bc 100644 --- a/packages/core/src/node/host-views.ts +++ b/packages/core/src/node/host-views.ts @@ -1,6 +1,7 @@ import type { DevToolsNodeContext, DevToolsViewHost as DevToolsViewHostType } from '@vitejs/devtools-kit' import { existsSync } from 'node:fs' import sirv from 'sirv' +import { logger } from './diagnostics' export class DevToolsViewHost implements DevToolsViewHostType { /** @@ -15,14 +16,14 @@ export class DevToolsViewHost implements DevToolsViewHostType { hostStatic(baseUrl: string, distDir: string) { if (!existsSync(distDir)) { - throw new Error(`[Vite DevTools] distDir ${distDir} does not exist`) + throw logger.DTK0022({ distDir }).throw() } this.buildStaticDirs.push({ baseUrl, distDir }) if (this.context.viteConfig.command === 'serve') { if (!this.context.viteServer) - throw new Error('[Vite DevTools] viteServer is required in dev mode') + throw logger.DTK0023().throw() this.context.viteServer.middlewares.use( baseUrl, sirv(distDir, { diff --git a/packages/core/src/node/rpc-shared-state.ts b/packages/core/src/node/rpc-shared-state.ts index 96869076..09312330 100644 --- a/packages/core/src/node/rpc-shared-state.ts +++ b/packages/core/src/node/rpc-shared-state.ts @@ -2,6 +2,7 @@ import type { RpcFunctionsHost, RpcSharedStateGetOptions, RpcSharedStateHost } f import type { SharedState } from '@vitejs/devtools-kit/utils/shared-state' import { createSharedState } from '@vitejs/devtools-kit/utils/shared-state' import { createDebug } from 'obug' +import { logger } from './diagnostics' const debug = createDebug('vite:devtools:rpc:state:changed') @@ -47,7 +48,7 @@ export function createRpcSharedStateServerHost( return sharedState.get(key)! } if (options?.initialValue === undefined && options?.sharedState === undefined) { - throw new Error(`Shared state of "${key}" is not found, please provide an initial value for the first time`) + throw logger.DTK0027({ key }).throw() } debug('new-state', key) const state = options.sharedState ?? createSharedState({ diff --git a/packages/core/src/node/rpc/internal/docks-on-launch.ts b/packages/core/src/node/rpc/internal/docks-on-launch.ts index 185da77c..3376d03a 100644 --- a/packages/core/src/node/rpc/internal/docks-on-launch.ts +++ b/packages/core/src/node/rpc/internal/docks-on-launch.ts @@ -1,4 +1,5 @@ import { defineRpcFunction } from '@vitejs/devtools-kit' +import { logger } from '../../diagnostics' export const docksOnLaunch = defineRpcFunction({ name: 'devtoolskit:internal:docks:on-launch', @@ -13,10 +14,10 @@ export const docksOnLaunch = defineRpcFunction({ const entry = context.docks.values().find(entry => entry.id === entryId) if (!entry) { - throw new Error(`Dock entry with id "${entryId}" not found`) + throw logger.DTK0030({ id: entryId }).throw() } if (entry.type !== 'launcher') { - throw new Error(`Dock entry with id "${entryId}" is not a launcher`) + throw logger.DTK0031({ id: entryId }).throw() } try { context.docks.update({ @@ -42,7 +43,7 @@ export const docksOnLaunch = defineRpcFunction({ return result } catch (error) { - console.error(`[VITE DEVTOOLS] Error launching dock entry "${entryId}"`, error) + logger.DTK0032({ id: entryId }, { cause: error }).log() context.docks.update({ ...entry, launcher: { diff --git a/packages/core/src/node/rpc/public/open-in-editor.ts b/packages/core/src/node/rpc/public/open-in-editor.ts index f5ecea47..438288bb 100644 --- a/packages/core/src/node/rpc/public/open-in-editor.ts +++ b/packages/core/src/node/rpc/public/open-in-editor.ts @@ -1,5 +1,6 @@ import { relative, resolve } from 'node:path' import { defineRpcFunction } from '@vitejs/devtools-kit' +import { logger } from '../../diagnostics' export const openInEditor = defineRpcFunction({ name: 'vite:core:open-in-editor', @@ -12,7 +13,7 @@ export const openInEditor = defineRpcFunction({ // Prevent escaping the workspace root if (rel.startsWith('..') || rel.includes('\0')) { - throw new Error('Path is outside the workspace root') + throw logger.DTK0028().throw() } await import('launch-editor').then(r => r.default(resolved)) diff --git a/packages/core/src/node/rpc/public/open-in-finder.ts b/packages/core/src/node/rpc/public/open-in-finder.ts index 86590e17..f9b38e50 100644 --- a/packages/core/src/node/rpc/public/open-in-finder.ts +++ b/packages/core/src/node/rpc/public/open-in-finder.ts @@ -1,5 +1,6 @@ import { relative, resolve } from 'node:path' import { defineRpcFunction } from '@vitejs/devtools-kit' +import { logger } from '../../diagnostics' export const openInFinder = defineRpcFunction({ name: 'vite:core:open-in-finder', @@ -12,7 +13,7 @@ export const openInFinder = defineRpcFunction({ // Ensure the path stays within workspace root if (rel.startsWith('..') || rel.includes('\0')) { - throw new Error('Path is outside the workspace root') + throw logger.DTK0029().throw() } await import('open').then(r => r.default(resolved)) diff --git a/packages/core/src/node/storage.ts b/packages/core/src/node/storage.ts index 60a9cb9d..79fd8749 100644 --- a/packages/core/src/node/storage.ts +++ b/packages/core/src/node/storage.ts @@ -2,6 +2,7 @@ import fs from 'node:fs' import { createSharedState } from '@vitejs/devtools-kit/utils/shared-state' import { dirname } from 'pathe' import { debounce } from 'perfect-debounce' +import { logger } from './diagnostics' export interface CreateStorageOptions { filepath: string @@ -23,8 +24,7 @@ export function createStorage(options: CreateStorageOptions initialValue = mergeInitialValue ? mergeInitialValue(options.initialValue, savedValue) : savedValue } catch (error) { - console.warn(`[Vite DevTools] Failed to parse storage file: ${options.filepath}, falling back to defaults.`) - console.warn(error) + logger.DTK0009({ filepath: options.filepath }, { cause: error }).log() initialValue = options.initialValue } } diff --git a/packages/core/src/node/ws.ts b/packages/core/src/node/ws.ts index fe7ae397..601008d9 100644 --- a/packages/core/src/node/ws.ts +++ b/packages/core/src/node/ws.ts @@ -11,6 +11,7 @@ import { getPort } from 'get-port-please' import { createDebug } from 'obug' import { MARK_INFO } from './constants' import { getInternalContext } from './context-internal' +import { logger } from './diagnostics' const debugInvoked = createDebug('vite:devtools:rpc:invoked') @@ -40,7 +41,7 @@ export async function createWsServer(options: CreateWsServerOptions) { const isClientAuthDisabled = context.mode === 'build' || context.viteConfig.devtools?.config?.clientAuth === false || process.env.VITE_DEVTOOLS_DISABLE_CLIENT_AUTH === 'true' if (isClientAuthDisabled) { - console.warn('[Vite DevTools] Client authentication is disabled. Any browser can connect to the devtools and access to your server and filesystem.') + logger.DTK0008().log() } const preset = createWsRpcPreset({ @@ -80,12 +81,10 @@ export async function createWsServer(options: CreateWsServerOptions) { preset, rpcOptions: { onFunctionError(error, name) { - console.error(c.red`⬢ RPC error on executing "${c.bold(name)}":`) - console.error(error) + logger.DTK0011({ name }, { cause: error }).log() }, onGeneralError(error) { - console.error(c.red`⬢ RPC error on executing rpc`) - console.error(error) + logger.DTK0012({ cause: error }).log() }, resolver(name, fn) { // eslint-disable-next-line ts/no-this-alias @@ -94,7 +93,7 @@ export async function createWsServer(options: CreateWsServerOptions) { // Block unauthorized access to non-anonymous methods if (!name.startsWith(ANONYMOUS_SCOPE) && !rpc.$meta.isTrusted) { return () => { - throw new Error(`Unauthorized access to method ${JSON.stringify(name)} from client [${rpc.$meta.id}]`) + throw logger.DTK0013({ name, clientId: rpc.$meta.id }).throw() } } diff --git a/packages/rolldown/package.json b/packages/rolldown/package.json index f21addd3..3ea378f8 100644 --- a/packages/rolldown/package.json +++ b/packages/rolldown/package.json @@ -34,6 +34,7 @@ "prepack": "pnpm build" }, "dependencies": { + "@antfu/experimental-logs-sdk": "catalog:deps", "@floating-ui/dom": "catalog:frontend", "@pnpm/read-project-manifest": "catalog:deps", "@rolldown/debug": "catalog:deps", diff --git a/packages/rolldown/src/node/diagnostics.ts b/packages/rolldown/src/node/diagnostics.ts new file mode 100644 index 00000000..0663a5af --- /dev/null +++ b/packages/rolldown/src/node/diagnostics.ts @@ -0,0 +1,23 @@ +import { consoleReporter, createLogger, defineDiagnostics } from '@antfu/experimental-logs-sdk' +import { ansiFormatter } from '@antfu/experimental-logs-sdk/formatters/ansi' +import c from 'ansis' + +export const diagnostics = defineDiagnostics({ + docsBase: 'https://devtools.vite.dev/errors', + codes: { + RDDT0001: { + message: 'Rolldown logs directory `.rolldown` not found, you might want to run build with `build.rolldownOptions.devtools` enabled first.', + level: 'warn', + }, + RDDT0002: { + message: (p: { line: number, error: string, preview: string }) => `JSON parse stream skip bad line ${p.line}: ${p.error}\n${p.preview}`, + level: 'warn', + }, + }, +}) + +export const logger = createLogger({ + diagnostics: [diagnostics], + formatter: ansiFormatter(c), + reporter: consoleReporter, +}) diff --git a/packages/rolldown/src/node/rpc/utils.ts b/packages/rolldown/src/node/rpc/utils.ts index 6124ac60..b6ac358c 100644 --- a/packages/rolldown/src/node/rpc/utils.ts +++ b/packages/rolldown/src/node/rpc/utils.ts @@ -2,6 +2,7 @@ import type { DevToolsNodeContext } from '@vitejs/devtools-kit' import { existsSync } from 'node:fs' import process from 'node:process' import { join } from 'pathe' +import { logger } from '../diagnostics' import { RolldownLogsManager } from '../rolldown/logs-manager' const weakMap = new WeakMap() @@ -15,7 +16,7 @@ export function getLogsManager(context: DevToolsNodeContext): RolldownLogsManage ] const dir = dirs.find(dir => existsSync(dir)) if (!dir) { - console.warn('[Rolldown DevTools] Rolldown logs directory `.rolldown` not found, you might want to run build with `build.rolldownOptions.devtools` enabled first.') + logger.RDDT0001().log() } manager = new RolldownLogsManager(dir ?? dirs[0]!) } diff --git a/packages/rolldown/src/node/utils/json-parse-stream.ts b/packages/rolldown/src/node/utils/json-parse-stream.ts index 6132388a..1d77ab24 100644 --- a/packages/rolldown/src/node/utils/json-parse-stream.ts +++ b/packages/rolldown/src/node/utils/json-parse-stream.ts @@ -2,6 +2,7 @@ import { pipeline } from 'node:stream/promises' import split2 from 'split2' import StreamJSON from 'stream-json' import Assembler from 'stream-json/Assembler' +import { logger } from '../diagnostics' export class JsonParseStreamError extends Error { constructor( @@ -55,9 +56,7 @@ export async function parseJsonStreamWithConcatArrays( } catch (e) { const preview = line.length > 256 ? `${line.slice(0, 256)}...` : line - console.warn( - `[rolldown-devtools] JSON parse stream skip bad line ${lineNumber}: ${(e as Error).message}\n${preview}`, - ) + logger.RDDT0002({ line: lineNumber, error: (e as Error).message, preview }).log() } } }, diff --git a/packages/rpc/package.json b/packages/rpc/package.json index 6ae2d866..e6faa613 100644 --- a/packages/rpc/package.json +++ b/packages/rpc/package.json @@ -45,6 +45,7 @@ } }, "dependencies": { + "@antfu/experimental-logs-sdk": "catalog:deps", "birpc": "catalog:deps", "ohash": "catalog:deps", "p-limit": "catalog:deps", diff --git a/packages/rpc/src/collector.ts b/packages/rpc/src/collector.ts index 85cf0be6..b568f4c2 100644 --- a/packages/rpc/src/collector.ts +++ b/packages/rpc/src/collector.ts @@ -1,4 +1,5 @@ import type { RpcArgsSchema, RpcFunctionDefinition, RpcFunctionsCollector, RpcReturnSchema } from './types' +import { logger } from './diagnostics' import { getRpcHandler } from './handler' export class RpcFunctionsCollectorBase< @@ -40,7 +41,7 @@ export class RpcFunctionsCollectorBase< register(fn: RpcFunctionDefinition, force = false): void { if (this.definitions.has(fn.name) && !force) { - throw new Error(`RPC function "${fn.name}" is already registered`) + throw logger.DTK0001({ name: fn.name }).throw() } this.definitions.set(fn.name, fn) this._onChanged.forEach(cb => cb(fn.name)) @@ -48,7 +49,7 @@ export class RpcFunctionsCollectorBase< update(fn: RpcFunctionDefinition, force = false): void { if (!this.definitions.has(fn.name) && !force) { - throw new Error(`RPC function "${fn.name}" is not registered. Use register() to add new functions.`) + throw logger.DTK0002({ name: fn.name }).throw() } this.definitions.set(fn.name, fn) this._onChanged.forEach(cb => cb(fn.name)) @@ -71,7 +72,7 @@ export class RpcFunctionsCollectorBase< getSchema(name: T): { args: RpcArgsSchema | undefined, returns: RpcReturnSchema | undefined } { const definition = this.definitions.get(name as string) if (!definition) - throw new Error(`RPC function "${String(name)}" is not registered`) + throw logger.DTK0003({ name: String(name) }).throw() return { args: definition.args, returns: definition.returns, diff --git a/packages/rpc/src/diagnostics.ts b/packages/rpc/src/diagnostics.ts new file mode 100644 index 00000000..1ad3a81b --- /dev/null +++ b/packages/rpc/src/diagnostics.ts @@ -0,0 +1,35 @@ +import { consoleReporter, createLogger, defineDiagnostics, plainFormatter } from '@antfu/experimental-logs-sdk' + +export const diagnostics = defineDiagnostics({ + docsBase: 'https://devtools.vite.dev/errors', + codes: { + DTK0001: { + message: (p: { name: string }) => `RPC function "${p.name}" is already registered`, + hint: 'Use the `force` parameter to overwrite an existing registration.', + }, + DTK0002: { + message: (p: { name: string }) => `RPC function "${p.name}" is not registered. Use register() to add new functions.`, + }, + DTK0003: { + message: (p: { name: string }) => `RPC function "${p.name}" is not registered`, + }, + DTK0004: { + message: (p: { name: string }) => `Either handler or setup function must be provided for RPC function "${p.name}"`, + }, + DTK0005: { + message: (p: { name: string }) => `Function "${p.name}" not found in dump store`, + }, + DTK0006: { + message: (p: { name: string, args: string }) => `No dump match for "${p.name}" with args: ${p.args}`, + }, + DTK0007: { + message: (p: { name: string, type: string }) => `Function "${p.name}" with type "${p.type}" cannot have dump configuration. Only "static" and "query" types support dumps.`, + }, + }, +}) + +export const logger = createLogger({ + diagnostics: [diagnostics], + formatter: plainFormatter, + reporter: consoleReporter, +}) diff --git a/packages/rpc/src/dumps.test.ts b/packages/rpc/src/dumps.test.ts index 2204664b..ab2f7b86 100644 --- a/packages/rpc/src/dumps.test.ts +++ b/packages/rpc/src/dumps.test.ts @@ -76,7 +76,7 @@ describe('dumps', () => { const client = createClientFromDump(store) await expect(client.greet('Alice')).resolves.toBe('Hello, Alice!') - await expect(client.greet('Unknown')).rejects.toThrow('[devtools-rpc] No dump match for "greet"') + await expect(client.greet('Unknown')).rejects.toThrow('No dump match for "greet"') }) it('should handle errors in dumps', async () => { @@ -264,7 +264,7 @@ describe('dumps', () => { const store = await dumpFunctions([add]) const client = createClientFromDump(store) - expect(() => (client as any).subtract(1, 2)).toThrow('[devtools-rpc] Function "subtract" not found in dump store') + expect(() => (client as any).subtract(1, 2)).toThrow('Function "subtract" not found in dump store') }) it('should skip functions without dumps during collection', async () => { @@ -582,7 +582,7 @@ describe('dumps', () => { }) await expect(dumpFunctions([sendEmail])).rejects.toThrow( - '[devtools-rpc] Function "sendEmail" with type "action" cannot have dump configuration', + 'Function "sendEmail" with type "action" cannot have dump configuration', ) }) @@ -597,7 +597,7 @@ describe('dumps', () => { }) await expect(dumpFunctions([notifyUser])).rejects.toThrow( - '[devtools-rpc] Function "notifyUser" with type "event" cannot have dump configuration', + 'Function "notifyUser" with type "event" cannot have dump configuration', ) }) diff --git a/packages/rpc/src/dumps.ts b/packages/rpc/src/dumps.ts index 472fded7..73b04d3c 100644 --- a/packages/rpc/src/dumps.ts +++ b/packages/rpc/src/dumps.ts @@ -9,6 +9,7 @@ import type { } from './types' import { hash } from 'ohash' import pLimit from 'p-limit' +import { logger } from './diagnostics' import { validateDefinitions } from './validation' function getDumpRecordKey(functionName: string, args: any[]): string { @@ -73,7 +74,7 @@ export async function dumpFunctions< const handler = setupResult.handler || definition.handler if (!handler) { - throw new Error(`[devtools-rpc] Either handler or setup function must be provided for RPC function "${definition.name}"`) + throw logger.DTK0004({ name: definition.name }).throw() } let dump = setupResult.dump ?? definition.dump @@ -199,7 +200,7 @@ export function createClientFromDump>( const client = new Proxy({} as T, { get(_, functionName: string) { if (!(functionName in store.definitions)) { - throw new Error(`[devtools-rpc] Function "${functionName}" not found in dump store`) + throw logger.DTK0005({ name: functionName }).throw() } return async (...args: any[]) => { @@ -238,9 +239,7 @@ export function createClientFromDump>( return fallbackRecord.output } - throw new Error( - `[devtools-rpc] No dump match for "${functionName}" with args: ${JSON.stringify(args)}`, - ) + throw logger.DTK0006({ name: functionName, args: JSON.stringify(args) }).throw() } }, has(_, functionName: string) { diff --git a/packages/rpc/src/handler.ts b/packages/rpc/src/handler.ts index aec8f196..ac4728f0 100644 --- a/packages/rpc/src/handler.ts +++ b/packages/rpc/src/handler.ts @@ -1,4 +1,5 @@ import type { RpcFunctionDefinition, RpcFunctionSetupResult, RpcFunctionType } from './types' +import { logger } from './diagnostics' export async function getRpcResolvedSetupResult< NAME extends string, @@ -41,7 +42,7 @@ export async function getRpcHandler< } const result = await getRpcResolvedSetupResult(definition, context) if (!result.handler) { - throw new Error(`[devtools-rpc] Either handler or setup function must be provided for RPC function "${definition.name}"`) + throw logger.DTK0004({ name: definition.name }).throw() } return result.handler } diff --git a/packages/rpc/src/validation.ts b/packages/rpc/src/validation.ts index bdc5b9d3..341dfe90 100644 --- a/packages/rpc/src/validation.ts +++ b/packages/rpc/src/validation.ts @@ -1,4 +1,5 @@ import type { RpcFunctionDefinitionAny } from './types' +import { logger } from './diagnostics' /** * Validates RPC function definitions. @@ -11,9 +12,7 @@ export function validateDefinitions(definitions: readonly RpcFunctionDefinitionA const type = definition.type || 'query' if ((type === 'action' || type === 'event') && definition.dump) { - throw new Error( - `[devtools-rpc] Function "${definition.name}" with type "${type}" cannot have dump configuration. Only "static" and "query" types support dumps.`, - ) + throw logger.DTK0007({ name: definition.name, type }).throw() } } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ac7312d5..2288674e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,6 +37,9 @@ catalogs: specifier: ^7.1.1 version: 7.1.1 deps: + '@antfu/experimental-logs-sdk': + specifier: ^0.0.3 + version: 0.0.3 '@pnpm/read-project-manifest': specifier: ^1001.2.6 version: 1001.2.6 @@ -158,6 +161,9 @@ catalogs: simple-git-hooks: specifier: ^2.13.1 version: 2.13.1 + skills-npm: + specifier: ^1.1.1 + version: 1.1.1 solid-js: specifier: ^1.9.12 version: 1.9.12 @@ -406,7 +412,10 @@ importers: devDependencies: '@antfu/eslint-config': specifier: catalog:devtools - version: 8.0.0(@typescript-eslint/rule-tester@8.56.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(@typescript-eslint/typescript-estree@8.58.0(typescript@6.0.2))(@typescript-eslint/utils@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(@unocss/eslint-plugin@66.6.7(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(@vue/compiler-sfc@3.5.31)(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)(vitest@4.1.2(@opentelemetry/api@1.9.0)(@types/node@25.0.3)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))) + version: 8.0.0(@typescript-eslint/rule-tester@8.56.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(@typescript-eslint/typescript-estree@8.58.0(typescript@6.0.2))(@typescript-eslint/utils@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(@unocss/eslint-plugin@66.6.7(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(@vue/compiler-sfc@3.5.31)(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)(vitest@4.1.2(@opentelemetry/api@1.9.0)(@types/node@25.0.3)(vite@8.0.3)) + '@antfu/experimental-logs-sdk': + specifier: catalog:deps + version: 0.0.3(magic-string@0.30.21)(oxc-parser@0.117.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1))(unplugin@3.0.0) '@antfu/ni': specifier: catalog:build version: 30.0.0 @@ -463,10 +472,10 @@ importers: version: 0.13.0(vue@3.5.31(typescript@6.0.2))(zod@4.3.6) '@nuxt/devtools': specifier: ^3.2.4 - version: 3.2.4(@vitejs/devtools@packages+core)(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.2)) + version: 3.2.4(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(vite@8.0.3)(vue@3.5.31(typescript@6.0.2)) '@nuxt/eslint': specifier: catalog:devtools - version: 1.15.2(@typescript-eslint/utils@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(@vue/compiler-sfc@3.5.31)(eslint@10.1.0(jiti@2.6.1))(magicast@0.5.2)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 1.15.2(@typescript-eslint/utils@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(@vue/compiler-sfc@3.5.31)(eslint@10.1.0(jiti@2.6.1))(magicast@0.5.2)(typescript@6.0.2)(vite@8.0.3) '@types/chrome': specifier: catalog:types version: 0.1.38 @@ -520,16 +529,19 @@ importers: version: 0.9.0 nuxt: specifier: ^4.4.2 - version: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3) + version: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3)(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3) p-limit: specifier: catalog:deps version: 7.3.0 simple-git-hooks: specifier: catalog:devtools version: 2.13.1 + skills-npm: + specifier: catalog:devtools + version: 1.1.1 tsdown: specifier: catalog:build - version: 0.21.7(@vitejs/devtools@packages+core)(publint@0.3.18)(synckit@0.11.12)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2)) + version: 0.21.7(@vitejs/devtools@0.1.13)(publint@0.3.18)(synckit@0.11.12)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2)) tsx: specifier: catalog:build version: 4.21.0 @@ -544,16 +556,16 @@ importers: version: 1.17.5(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1) vite: specifier: ^8.0.3 - version: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + version: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@0.1.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) vite-plugin-inspect: specifier: catalog:devtools - version: 12.0.0-beta.1(@nuxt/kit@4.4.2(magicast@0.5.2))(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(ws@8.20.0) + version: 12.0.0-beta.1(@nuxt/kit@4.4.2(magicast@0.5.2))(typescript@6.0.2)(vite@8.0.3)(ws@8.20.0) vite-plugin-vue-tracer: specifier: catalog:playground - version: 1.3.0(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.2)) + version: 1.3.0(vite@8.0.3)(vue@3.5.31(typescript@6.0.2)) vitest: specifier: catalog:testing - version: 4.1.2(@opentelemetry/api@1.9.0)(@types/node@25.0.3)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.2(@opentelemetry/api@1.9.0)(@types/node@25.0.3)(vite@8.0.3) vitest-package-exports: specifier: catalog:testing version: 1.2.0 @@ -611,7 +623,7 @@ importers: version: 0.21.7(@vitejs/devtools@packages+core)(publint@0.3.18)(synckit@0.11.12)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2)) unocss: specifier: catalog:build - version: 66.6.7(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@unocss/webpack@66.6.7(webpack@5.104.1(esbuild@0.27.5)))(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 66.6.7(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@unocss/webpack@66.6.7(webpack@5.104.1(esbuild@0.27.5)))(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) vite: specifier: ^8.0.3 version: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) @@ -654,7 +666,7 @@ importers: version: 0.21.7(@vitejs/devtools@packages+core)(publint@0.3.18)(synckit@0.11.12)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2)) unocss: specifier: catalog:build - version: 66.6.7(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@unocss/webpack@66.6.7(webpack@5.104.1(esbuild@0.27.5)))(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 66.6.7(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@unocss/webpack@66.6.7(webpack@5.104.1(esbuild@0.27.5)))(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) vite: specifier: ^8.0.3 version: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) @@ -683,6 +695,9 @@ importers: packages/core: dependencies: + '@antfu/experimental-logs-sdk': + specifier: catalog:deps + version: 0.0.3(magic-string@0.30.21)(oxc-parser@0.117.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1))(unplugin@3.0.0) '@vitejs/devtools-kit': specifier: workspace:* version: link:../kit @@ -740,7 +755,7 @@ importers: version: 1.2.0 '@vitejs/plugin-vue': specifier: catalog:build - version: 6.0.5(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.2)) + version: 6.0.5(vite@8.0.3)(vue@3.5.31(typescript@6.0.2)) '@xterm/addon-fit': specifier: catalog:frontend version: 0.11.0 @@ -758,16 +773,16 @@ importers: version: 4.1.3 tsdown: specifier: catalog:build - version: 0.21.7(@vitejs/devtools@packages+core)(publint@0.3.18)(synckit@0.11.12)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2)) + version: 0.21.7(@vitejs/devtools@0.1.13)(publint@0.3.18)(synckit@0.11.12)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2)) typescript: specifier: catalog:devtools version: 6.0.2 unplugin-vue: specifier: catalog:build - version: 7.1.1(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(vue@3.5.31(typescript@6.0.2))(yaml@2.8.3) + version: 7.1.1(@types/node@25.0.3)(@vitejs/devtools@0.1.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(vue@3.5.31(typescript@6.0.2))(yaml@2.8.3) vite: specifier: ^8.0.3 - version: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + version: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@0.1.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) vue-router: specifier: catalog:playground version: 5.0.4(@vue/compiler-sfc@3.5.31)(vue@3.5.31(typescript@6.0.2)) @@ -795,16 +810,19 @@ importers: version: 11.1.4 tsdown: specifier: catalog:build - version: 0.21.7(@vitejs/devtools@packages+core)(publint@0.3.18)(synckit@0.11.12)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2)) + version: 0.21.7(@vitejs/devtools@0.1.13)(publint@0.3.18)(synckit@0.11.12)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2)) ua-parser-modern: specifier: catalog:frontend version: 0.1.1 vite: specifier: ^8.0.3 - version: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + version: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@0.1.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) packages/rolldown: dependencies: + '@antfu/experimental-logs-sdk': + specifier: catalog:deps + version: 0.0.3(magic-string@0.30.21)(oxc-parser@0.117.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1))(unplugin@3.0.0) '@floating-ui/dom': specifier: catalog:frontend version: 1.7.6 @@ -895,7 +913,7 @@ importers: version: 1.7.8 '@unocss/nuxt': specifier: catalog:build - version: 66.6.7(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(magicast@0.5.2)(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(webpack@5.104.1(esbuild@0.27.5)) + version: 66.6.7(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(magicast@0.5.2)(vite@8.0.3)(webpack@5.104.1(esbuild@0.27.5)) '@vueuse/components': specifier: catalog:frontend version: 14.2.1(vue@3.5.31(typescript@6.0.2)) @@ -904,7 +922,7 @@ importers: version: 14.2.1(vue@3.5.31(typescript@6.0.2)) '@vueuse/nuxt': specifier: catalog:build - version: 14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vue/compiler-sfc@3.5.31)(cac@7.0.0)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3))(vue@3.5.31(typescript@6.0.2)) + version: 14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(@vue/compiler-sfc@3.5.31)(cac@7.0.0)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3)(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3))(vue@3.5.31(typescript@6.0.2)) '@vueuse/router': specifier: catalog:frontend version: 14.2.1(vue-router@5.0.4(@vue/compiler-sfc@3.5.31)(vue@3.5.31(typescript@6.0.2)))(vue@3.5.31(typescript@6.0.2)) @@ -946,16 +964,19 @@ importers: version: 1.0.0 tsdown: specifier: catalog:build - version: 0.21.7(@vitejs/devtools@packages+core)(publint@0.3.18)(synckit@0.11.12)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2)) + version: 0.21.7(@vitejs/devtools@0.1.13)(publint@0.3.18)(synckit@0.11.12)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2)) unocss: specifier: catalog:build - version: 66.6.7(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@unocss/webpack@66.6.7(webpack@5.104.1(esbuild@0.27.5)))(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 66.6.7(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@unocss/webpack@66.6.7(webpack@5.104.1(esbuild@0.27.5)))(vite@8.0.3) vite-hot-client: specifier: catalog:frontend - version: 2.1.0(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 2.1.0(vite@8.0.3) packages/rpc: dependencies: + '@antfu/experimental-logs-sdk': + specifier: catalog:deps + version: 0.0.3(magic-string@0.30.21)(oxc-parser@0.117.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1))(unplugin@3.0.0) birpc: specifier: catalog:deps version: 4.0.0 @@ -974,7 +995,7 @@ importers: devDependencies: tsdown: specifier: catalog:build - version: 0.21.7(@vitejs/devtools@packages+core)(publint@0.3.18)(synckit@0.11.12)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2)) + version: 0.21.7(@vitejs/devtools@0.1.13)(publint@0.3.18)(synckit@0.11.12)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2)) ws: specifier: catalog:deps version: 8.20.0 @@ -1017,7 +1038,7 @@ importers: version: 0.21.7(@vitejs/devtools@packages+core)(publint@0.3.18)(synckit@0.11.12)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2)) unocss: specifier: catalog:build - version: 66.6.7(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@unocss/webpack@66.6.7(webpack@5.104.1(esbuild@0.27.5)))(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 66.6.7(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@unocss/webpack@66.6.7(webpack@5.104.1(esbuild@0.27.5)))(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) vite-hot-client: specifier: catalog:frontend version: 2.1.0(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) @@ -1029,10 +1050,10 @@ importers: version: 14.2.1(vue@3.5.31(typescript@6.0.2)) nuxt: specifier: ^4.4.2 - version: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3) + version: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3)(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3) unocss: specifier: '*' - version: 66.6.7(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@unocss/webpack@66.6.7(webpack@5.104.1(esbuild@0.27.5)))(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 66.6.7(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@unocss/webpack@66.6.7(webpack@5.104.1(esbuild@0.27.5)))(vite@8.0.3) vue: specifier: '*' version: 3.5.31(typescript@6.0.2) @@ -1084,22 +1105,22 @@ importers: version: 7.8.4 '@unocss/nuxt': specifier: catalog:build - version: 66.6.7(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(magicast@0.5.2)(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(webpack@5.104.1(esbuild@0.27.5)) + version: 66.6.7(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(magicast@0.5.2)(vite@8.0.3)(webpack@5.104.1(esbuild@0.27.5)) '@vueuse/core': specifier: catalog:frontend version: 14.2.1(vue@3.5.31(typescript@6.0.2)) '@vueuse/nuxt': specifier: catalog:build - version: 14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3))(vue@3.5.31(typescript@6.0.2)) + version: 14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3)(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3))(vue@3.5.31(typescript@6.0.2)) floating-vue: specifier: catalog:frontend version: 5.2.2(@nuxt/kit@4.4.2(magicast@0.5.2))(vue@3.5.31(typescript@6.0.2)) tsdown: specifier: catalog:build - version: 0.21.7(@vitejs/devtools@packages+core)(publint@0.3.18)(synckit@0.11.12)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2)) + version: 0.21.7(@vitejs/devtools@0.1.13)(publint@0.3.18)(synckit@0.11.12)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2)) unocss: specifier: catalog:build - version: 66.6.7(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@unocss/webpack@66.6.7(webpack@5.104.1(esbuild@0.27.5)))(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 66.6.7(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@unocss/webpack@66.6.7(webpack@5.104.1(esbuild@0.27.5)))(vite@8.0.3) packages/webext: dependencies: @@ -1109,7 +1130,7 @@ importers: devDependencies: tsdown: specifier: catalog:build - version: 0.21.7(@vitejs/devtools@packages+core)(publint@0.3.18)(synckit@0.11.12)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2)) + version: 0.21.7(@vitejs/devtools@0.1.13)(publint@0.3.18)(synckit@0.11.12)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2)) tsx: specifier: catalog:build version: 4.21.0 @@ -1177,6 +1198,20 @@ packages: svelte-eslint-parser: optional: true + '@antfu/experimental-logs-sdk@0.0.3': + resolution: {integrity: sha512-qaxCGIEuFAzk3PVy2yAvVsVtpty8mIGjoN5PY9jSeR8FGnHbDS+c3vJTgdriWiwwl8QWpit+pGq8KgMlHc9W6Q==} + peerDependencies: + magic-string: '>=0.30.0' + oxc-parser: '>=0.50.0' + unplugin: '>=2.0.0' + peerDependenciesMeta: + magic-string: + optional: true + oxc-parser: + optional: true + unplugin: + optional: true + '@antfu/install-pkg@1.1.0': resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} @@ -3725,6 +3760,14 @@ packages: peerDependencies: vite: ^8.0.3 + '@vitejs/devtools-kit@0.1.13': + resolution: {integrity: sha512-8TqyrrPTB8KNGb2ukVHNo4aMhGYJgUypVNMnqOvxaWYln3QAXK6CFxifK3lZGOHWKAUqWAiTmZUsYzV4S0Kn7g==} + peerDependencies: + vite: ^8.0.3 + + '@vitejs/devtools-rolldown@0.1.13': + resolution: {integrity: sha512-VScSr/0+1+s3TBt5RFhv1dcRJSjWDUH3yJ8nc9+8zTOijzuKTjVo5yqfx0ISBro9CCeoPyXHuXntPqBSIhTTCA==} + '@vitejs/devtools-rpc@0.1.11': resolution: {integrity: sha512-APo34qbV05bNJB//Jmn4QLDrCU1CQuFvYbQdqvvyCKjxwWuoHhGobqzgoRS5V23tn8Sbliz7/Fyhfh+7C0LtKA==} peerDependencies: @@ -3733,6 +3776,20 @@ packages: ws: optional: true + '@vitejs/devtools-rpc@0.1.13': + resolution: {integrity: sha512-IbYRlvVJMdlQiRPU5fDnIAwgTu43O7v5/a1cUFp8t77zXLvg+3g2hbqrYzoqxIgAyLTr2KMY7HoYm6j/kIMB6Q==} + peerDependencies: + ws: '*' + peerDependenciesMeta: + ws: + optional: true + + '@vitejs/devtools@0.1.13': + resolution: {integrity: sha512-0PWKOrYyDiP+UFI0Sfqn3uTxRwQMnvFyA6t4vnj+0SpCEk+XNEP2igqjCp7/F9wU0JDH3SiWhfMe41za9BtwkA==} + hasBin: true + peerDependencies: + vite: ^8.0.3 + '@vitejs/plugin-vue-jsx@5.1.4': resolution: {integrity: sha512-70LmoVk9riR7qc4W2CpjsbNMWTPnuZb9dpFKX1emru0yP57nsc9k8nhLA6U93ngQapv5VDIUq2JatNfLbBIkrA==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4122,6 +4179,9 @@ packages: arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -5178,6 +5238,11 @@ packages: resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + esquery@1.7.0: resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} @@ -5234,6 +5299,10 @@ packages: exsolve@1.0.8: resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} + extend-shallow@2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -5439,6 +5508,10 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + gray-matter@4.0.3: + resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} + engines: {node: '>=6.0'} + gzip-size@6.0.0: resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} engines: {node: '>=10'} @@ -5596,6 +5669,10 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true + is-extendable@0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -5694,6 +5771,10 @@ packages: js-tokens@9.0.1: resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + js-yaml@3.14.2: + resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} + hasBin: true + js-yaml@4.1.1: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true @@ -5751,6 +5832,10 @@ packages: khroma@2.1.0: resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==} + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} @@ -7046,6 +7131,10 @@ packages: scule@1.3.0: resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} + section-matter@1.0.0: + resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} + engines: {node: '>=4'} + semver@7.7.4: resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} engines: {node: '>=10'} @@ -7137,6 +7226,10 @@ packages: sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + skills-npm@1.1.1: + resolution: {integrity: sha512-qbRSzorWK3fVdpKzZquehYlWzmC29/MOh8AqWoX7NAZiCSAX/RuTpyqAml7hWBe7NM9DDx472kZ0hKO7CCXRkA==} + hasBin: true + slash@5.1.0: resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} engines: {node: '>=14.16'} @@ -7188,6 +7281,9 @@ packages: peerDependencies: vue: ^3.2.0 + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + srvx@0.11.9: resolution: {integrity: sha512-97wWJS6F0KTKAhDlHVmBzMvlBOp5FiNp3XrLoodIgYJpXxgG5tE9rX4Pg7s46n2shI4wtEsMATTS1+rI3/ubzA==} engines: {node: '>=20.16.0'} @@ -7251,6 +7347,10 @@ packages: resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} engines: {node: '>=12'} + strip-bom-string@1.0.0: + resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} + engines: {node: '>=0.10.0'} + strip-bom@4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} @@ -8129,6 +8229,10 @@ packages: resolution: {integrity: sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==} engines: {node: '>=20'} + xdg-basedir@5.1.0: + resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} + engines: {node: '>=12'} + xml-name-validator@4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -8187,7 +8291,7 @@ packages: snapshots: - '@antfu/eslint-config@8.0.0(@typescript-eslint/rule-tester@8.56.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(@typescript-eslint/typescript-estree@8.58.0(typescript@6.0.2))(@typescript-eslint/utils@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(@unocss/eslint-plugin@66.6.7(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(@vue/compiler-sfc@3.5.31)(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)(vitest@4.1.2(@opentelemetry/api@1.9.0)(@types/node@25.0.3)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))': + '@antfu/eslint-config@8.0.0(@typescript-eslint/rule-tester@8.56.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(@typescript-eslint/typescript-estree@8.58.0(typescript@6.0.2))(@typescript-eslint/utils@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(@unocss/eslint-plugin@66.6.7(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(@vue/compiler-sfc@3.5.31)(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)(vitest@4.1.2(@opentelemetry/api@1.9.0)(@types/node@25.0.3)(vite@8.0.3))': dependencies: '@antfu/install-pkg': 1.1.0 '@clack/prompts': 1.2.0 @@ -8197,7 +8301,7 @@ snapshots: '@stylistic/eslint-plugin': 5.10.0(eslint@10.1.0(jiti@2.6.1)) '@typescript-eslint/eslint-plugin': 8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) '@typescript-eslint/parser': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) - '@vitest/eslint-plugin': 1.6.14(@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)(vitest@4.1.2(@opentelemetry/api@1.9.0)(@types/node@25.0.3)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))) + '@vitest/eslint-plugin': 1.6.14(@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)(vitest@4.1.2(@opentelemetry/api@1.9.0)(@types/node@25.0.3)(vite@8.0.3)) ansis: 4.2.0 cac: 7.0.0 eslint: 10.1.0(jiti@2.6.1) @@ -8239,6 +8343,12 @@ snapshots: - typescript - vitest + '@antfu/experimental-logs-sdk@0.0.3(magic-string@0.30.21)(oxc-parser@0.117.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1))(unplugin@3.0.0)': + optionalDependencies: + magic-string: 0.30.21 + oxc-parser: 0.117.0(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) + unplugin: 3.0.0 + '@antfu/install-pkg@1.1.0': dependencies: package-manager-detector: 1.6.0 @@ -9024,6 +9134,14 @@ snapshots: transitivePeerDependencies: - magicast + '@nuxt/devtools-kit@3.2.4(magicast@0.5.2)(vite@8.0.3)': + dependencies: + '@nuxt/kit': 4.4.2(magicast@0.5.2) + execa: 8.0.1 + vite: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + transitivePeerDependencies: + - magicast + '@nuxt/devtools-wizard@3.2.4': dependencies: '@clack/prompts': 1.2.0 @@ -9035,6 +9153,49 @@ snapshots: pkg-types: 2.3.0 semver: 7.7.4 + '@nuxt/devtools@3.2.4(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(vite@8.0.3)(vue@3.5.31(typescript@6.0.2))': + dependencies: + '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@8.0.3) + '@nuxt/devtools-wizard': 3.2.4 + '@nuxt/kit': 4.4.2(magicast@0.5.2) + '@vue/devtools-core': 8.1.0(vue@3.5.31(typescript@6.0.2)) + '@vue/devtools-kit': 8.1.0 + birpc: 4.0.0 + consola: 3.4.2 + destr: 2.0.5 + error-stack-parser-es: 1.0.5 + execa: 8.0.1 + fast-npm-meta: 1.4.2 + get-port-please: 3.2.0 + hookable: 6.1.0 + image-meta: 0.2.2 + is-installed-globally: 1.0.0 + launch-editor: 2.13.2 + local-pkg: 1.1.2 + magicast: 0.5.2 + nypm: 0.6.5 + ohash: 2.0.11 + pathe: 2.0.3 + perfect-debounce: 2.1.0 + pkg-types: 2.3.0 + semver: 7.7.4 + simple-git: 3.33.0 + sirv: 3.0.2 + structured-clone-es: 2.0.0 + tinyglobby: 0.2.15 + vite: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite-plugin-inspect: 11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@8.0.3) + vite-plugin-vue-tracer: 1.3.0(vite@8.0.3)(vue@3.5.31(typescript@6.0.2)) + which: 6.0.1 + ws: 8.20.0 + optionalDependencies: + '@vitejs/devtools': 0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + - vue + '@nuxt/devtools@3.2.4(@vitejs/devtools@packages+core)(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.2))': dependencies: '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) @@ -9118,10 +9279,10 @@ snapshots: - supports-color - typescript - '@nuxt/eslint@1.15.2(@typescript-eslint/utils@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(@vue/compiler-sfc@3.5.31)(eslint@10.1.0(jiti@2.6.1))(magicast@0.5.2)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': + '@nuxt/eslint@1.15.2(@typescript-eslint/utils@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(@vue/compiler-sfc@3.5.31)(eslint@10.1.0(jiti@2.6.1))(magicast@0.5.2)(typescript@6.0.2)(vite@8.0.3)': dependencies: '@eslint/config-inspector': 1.4.2(eslint@10.1.0(jiti@2.6.1)) - '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@8.0.3) '@nuxt/eslint-config': 1.15.2(@typescript-eslint/utils@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(@vue/compiler-sfc@3.5.31)(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) '@nuxt/eslint-plugin': 1.15.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) '@nuxt/kit': 4.4.2(magicast@0.5.2) @@ -9171,7 +9332,7 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxt/nitro-server@4.4.2(@babel/core@7.29.0)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vitejs/devtools@packages+core)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3))(rolldown@1.0.0-rc.13)(typescript@6.0.2)': + '@nuxt/nitro-server@4.4.2(@babel/core@7.29.0)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3)(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3))(rolldown@1.0.0-rc.13)(typescript@6.0.2)': dependencies: '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) '@nuxt/devalue': 2.0.2 @@ -9190,7 +9351,7 @@ snapshots: klona: 2.0.6 mocked-exports: 0.1.1 nitropack: 2.13.2(idb-keyval@6.2.2)(rolldown@1.0.0-rc.13) - nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vitejs/devtools@packages+core)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3) + nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3)(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3) nypm: 0.6.5 ohash: 2.0.11 pathe: 2.0.3 @@ -9239,7 +9400,7 @@ snapshots: - uploadthing - xml2js - '@nuxt/nitro-server@4.4.2(@babel/core@7.29.0)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3))(rolldown@1.0.0-rc.13)(typescript@6.0.2)': + '@nuxt/nitro-server@4.4.2(@babel/core@7.29.0)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(@vue/compiler-sfc@3.5.31)(cac@7.0.0)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3)(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3))(rolldown@1.0.0-rc.13)(typescript@6.0.2)': dependencies: '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) '@nuxt/devalue': 2.0.2 @@ -9258,7 +9419,7 @@ snapshots: klona: 2.0.6 mocked-exports: 0.1.1 nitropack: 2.13.2(idb-keyval@6.2.2)(rolldown@1.0.0-rc.13) - nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3) + nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(@vue/compiler-sfc@3.5.31)(cac@7.0.0)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3)(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3) nypm: 0.6.5 ohash: 2.0.11 pathe: 2.0.3 @@ -9307,7 +9468,7 @@ snapshots: - uploadthing - xml2js - '@nuxt/nitro-server@4.4.2(@babel/core@7.29.0)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vue/compiler-sfc@3.5.31)(cac@7.0.0)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3))(rolldown@1.0.0-rc.13)(typescript@6.0.2)': + '@nuxt/nitro-server@4.4.2(@babel/core@7.29.0)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vitejs/devtools@packages+core)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3))(rolldown@1.0.0-rc.13)(typescript@6.0.2)': dependencies: '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) '@nuxt/devalue': 2.0.2 @@ -9326,7 +9487,7 @@ snapshots: klona: 2.0.6 mocked-exports: 0.1.1 nitropack: 2.13.2(idb-keyval@6.2.2)(rolldown@1.0.0-rc.13) - nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vue/compiler-sfc@3.5.31)(cac@7.0.0)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3) + nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vitejs/devtools@packages+core)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3) nypm: 0.6.5 ohash: 2.0.11 pathe: 2.0.3 @@ -9392,12 +9553,12 @@ snapshots: rc9: 3.0.0 std-env: 3.10.0 - '@nuxt/vite-builder@4.4.2(8fefe7d9cc7f0c6db76bce221514ab63)': + '@nuxt/vite-builder@4.4.2(1e96f70ee8c8cd514e7fd32a27a45029)': dependencies: '@nuxt/kit': 4.4.2(magicast@0.5.2) '@rollup/plugin-replace': 6.0.3(rollup@4.60.0) - '@vitejs/plugin-vue': 6.0.5(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.2)) - '@vitejs/plugin-vue-jsx': 5.1.4(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.2)) + '@vitejs/plugin-vue': 6.0.5(vite@8.0.3)(vue@3.5.31(typescript@6.0.2)) + '@vitejs/plugin-vue-jsx': 5.1.4(vite@8.0.3)(vue@3.5.31(typescript@6.0.2)) autoprefixer: 10.4.27(postcss@8.5.8) consola: 3.4.2 cssnano: 7.1.3(postcss@8.5.8) @@ -9410,7 +9571,7 @@ snapshots: magic-string: 0.30.21 mlly: 1.8.2 mocked-exports: 0.1.1 - nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vitejs/devtools@packages+core)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3) + nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3)(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3) nypm: 0.6.5 pathe: 2.0.3 pkg-types: 2.3.0 @@ -9419,9 +9580,9 @@ snapshots: std-env: 4.0.0 ufo: 1.6.3 unenv: 2.0.0-rc.24 - vite: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) - vite-node: 5.3.0(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) - vite-plugin-checker: 0.12.0(eslint@10.1.0(jiti@2.6.1))(optionator@0.9.4)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2)) + vite: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite-node: 5.3.0(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite-plugin-checker: 0.12.0(eslint@10.1.0(jiti@2.6.1))(optionator@0.9.4)(typescript@6.0.2)(vite@8.0.3)(vue-tsc@3.2.6(typescript@6.0.2)) vue: 3.5.31(typescript@6.0.2) vue-bundle-renderer: 2.2.0 optionalDependencies: @@ -9454,12 +9615,12 @@ snapshots: - vue-tsc - yaml - ? '@nuxt/vite-builder@4.4.2(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@types/node@25.0.3)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3))(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2))(vue@3.5.31(typescript@6.0.2))(yaml@2.8.3)' - : dependencies: + '@nuxt/vite-builder@4.4.2(4904bcda8b51a3d9796307f16642e898)': + dependencies: '@nuxt/kit': 4.4.2(magicast@0.5.2) '@rollup/plugin-replace': 6.0.3(rollup@4.60.0) - '@vitejs/plugin-vue': 6.0.5(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.2)) - '@vitejs/plugin-vue-jsx': 5.1.4(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.2)) + '@vitejs/plugin-vue': 6.0.5(vite@8.0.3)(vue@3.5.31(typescript@6.0.2)) + '@vitejs/plugin-vue-jsx': 5.1.4(vite@8.0.3)(vue@3.5.31(typescript@6.0.2)) autoprefixer: 10.4.27(postcss@8.5.8) consola: 3.4.2 cssnano: 7.1.3(postcss@8.5.8) @@ -9472,7 +9633,7 @@ snapshots: magic-string: 0.30.21 mlly: 1.8.2 mocked-exports: 0.1.1 - nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3) + nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(@vue/compiler-sfc@3.5.31)(cac@7.0.0)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3)(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3) nypm: 0.6.5 pathe: 2.0.3 pkg-types: 2.3.0 @@ -9481,9 +9642,9 @@ snapshots: std-env: 4.0.0 ufo: 1.6.3 unenv: 2.0.0-rc.24 - vite: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) - vite-node: 5.3.0(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) - vite-plugin-checker: 0.12.0(eslint@10.1.0(jiti@2.6.1))(optionator@0.9.4)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2)) + vite: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite-node: 5.3.0(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite-plugin-checker: 0.12.0(eslint@10.1.0(jiti@2.6.1))(optionator@0.9.4)(typescript@6.0.2)(vite@8.0.3)(vue-tsc@3.2.6(typescript@6.0.2)) vue: 3.5.31(typescript@6.0.2) vue-bundle-renderer: 2.2.0 optionalDependencies: @@ -9516,8 +9677,8 @@ snapshots: - vue-tsc - yaml - ? '@nuxt/vite-builder@4.4.2(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@types/node@25.0.3)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vue/compiler-sfc@3.5.31)(cac@7.0.0)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3))(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2))(vue@3.5.31(typescript@6.0.2))(yaml@2.8.3)' - : dependencies: + '@nuxt/vite-builder@4.4.2(8fefe7d9cc7f0c6db76bce221514ab63)': + dependencies: '@nuxt/kit': 4.4.2(magicast@0.5.2) '@rollup/plugin-replace': 6.0.3(rollup@4.60.0) '@vitejs/plugin-vue': 6.0.5(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.2)) @@ -9534,7 +9695,7 @@ snapshots: magic-string: 0.30.21 mlly: 1.8.2 mocked-exports: 0.1.1 - nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vue/compiler-sfc@3.5.31)(cac@7.0.0)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3) + nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vitejs/devtools@packages+core)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3) nypm: 0.6.5 pathe: 2.0.3 pkg-types: 2.3.0 @@ -10951,9 +11112,34 @@ snapshots: '@unocss/preset-wind3': 66.6.7 '@unocss/preset-wind4': 66.6.7 '@unocss/reset': 66.6.7 - '@unocss/vite': 66.6.7(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + '@unocss/vite': 66.6.7(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) '@unocss/webpack': 66.6.7(webpack@5.104.1(esbuild@0.27.5)) - unocss: 66.6.7(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@unocss/webpack@66.6.7(webpack@5.104.1(esbuild@0.27.5)))(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + unocss: 66.6.7(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@unocss/webpack@66.6.7(webpack@5.104.1(esbuild@0.27.5)))(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + - '@unocss/astro' + - '@unocss/postcss' + - magicast + - vite + - webpack + + '@unocss/nuxt@66.6.7(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(magicast@0.5.2)(vite@8.0.3)(webpack@5.104.1(esbuild@0.27.5))': + dependencies: + '@nuxt/kit': 4.4.2(magicast@0.5.2) + '@unocss/config': 66.6.7 + '@unocss/core': 66.6.7 + '@unocss/preset-attributify': 66.6.7 + '@unocss/preset-icons': 66.6.7 + '@unocss/preset-tagify': 66.6.7 + '@unocss/preset-typography': 66.6.7 + '@unocss/preset-web-fonts': 66.6.7 + '@unocss/preset-wind3': 66.6.7 + '@unocss/preset-wind4': 66.6.7 + '@unocss/reset': 66.6.7 + '@unocss/vite': 66.6.7(vite@8.0.3) + '@unocss/webpack': 66.6.7(webpack@5.104.1(esbuild@0.27.5)) + unocss: 66.6.7(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@unocss/webpack@66.6.7(webpack@5.104.1(esbuild@0.27.5)))(vite@8.0.3) transitivePeerDependencies: - '@emnapi/core' - '@emnapi/runtime' @@ -11045,7 +11231,7 @@ snapshots: dependencies: '@unocss/core': 66.6.7 - '@unocss/vite@66.6.7(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': + '@unocss/vite@66.6.7(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@jridgewell/remapping': 2.3.5 '@unocss/config': 66.6.7 @@ -11058,6 +11244,19 @@ snapshots: unplugin-utils: 0.3.1 vite: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + '@unocss/vite@66.6.7(vite@8.0.3)': + dependencies: + '@jridgewell/remapping': 2.3.5 + '@unocss/config': 66.6.7 + '@unocss/core': 66.6.7 + '@unocss/inspector': 66.6.7 + chokidar: 5.0.0 + magic-string: 0.30.21 + pathe: 2.0.3 + tinyglobby: 0.2.15 + unplugin-utils: 0.3.1 + vite: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + '@unocss/webpack@66.6.7(webpack@5.104.1(esbuild@0.27.5))': dependencies: '@jridgewell/remapping': 2.3.5 @@ -11162,15 +11361,82 @@ snapshots: '@visual-json/core': 0.3.1 vue: 3.5.31(typescript@6.0.2) - '@vitejs/devtools-kit@0.1.11(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(ws@8.20.0)': + '@vitejs/devtools-kit@0.1.11(typescript@6.0.2)(vite@8.0.3)(ws@8.20.0)': dependencies: '@vitejs/devtools-rpc': 0.1.11(typescript@6.0.2)(ws@8.20.0) birpc: 4.0.0 ohash: 2.0.11 - vite: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + transitivePeerDependencies: + - typescript + - ws + + '@vitejs/devtools-kit@0.1.13(typescript@6.0.2)(vite@8.0.3)(ws@8.20.0)': + dependencies: + '@vitejs/devtools-rpc': 0.1.13(typescript@6.0.2)(ws@8.20.0) + birpc: 4.0.0 + ohash: 2.0.11 + vite: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) transitivePeerDependencies: - typescript - ws + optional: true + + '@vitejs/devtools-rolldown@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3)(vue@3.5.31(typescript@6.0.2))': + dependencies: + '@floating-ui/dom': 1.7.6 + '@pnpm/read-project-manifest': 1001.2.6(@pnpm/logger@1001.0.1) + '@rolldown/debug': 1.0.0-rc.13 + '@vitejs/devtools-kit': 0.1.13(typescript@6.0.2)(vite@8.0.3)(ws@8.20.0) + '@vitejs/devtools-rpc': 0.1.13(typescript@6.0.2)(ws@8.20.0) + ansis: 4.2.0 + birpc: 4.0.0 + cac: 7.0.0 + d3-shape: 3.2.0 + diff: 8.0.4 + get-port-please: 3.2.0 + h3: 1.15.11 + mlly: 1.8.2 + mrmime: 2.0.1 + ohash: 2.0.11 + p-limit: 7.3.0 + pathe: 2.0.3 + publint: 0.3.18 + sirv: 3.0.2 + split2: 4.2.0 + structured-clone-es: 2.0.0 + tinyglobby: 0.2.15 + unconfig: 7.5.0 + unstorage: 1.17.5(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1) + vue-virtual-scroller: 2.0.0(vue@3.5.31(typescript@6.0.2)) + ws: 8.20.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@pnpm/logger' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - idb-keyval + - ioredis + - typescript + - uploadthing + - utf-8-validate + - vite + - vue + optional: true '@vitejs/devtools-rpc@0.1.11(typescript@6.0.2)(ws@8.20.0)': dependencies: @@ -11184,6 +11450,65 @@ snapshots: transitivePeerDependencies: - typescript + '@vitejs/devtools-rpc@0.1.13(typescript@6.0.2)(ws@8.20.0)': + dependencies: + birpc: 4.0.0 + ohash: 2.0.11 + p-limit: 7.3.0 + structured-clone-es: 2.0.0 + valibot: 1.3.1(typescript@6.0.2) + optionalDependencies: + ws: 8.20.0 + transitivePeerDependencies: + - typescript + optional: true + + '@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3)': + dependencies: + '@vitejs/devtools-kit': 0.1.13(typescript@6.0.2)(vite@8.0.3)(ws@8.20.0) + '@vitejs/devtools-rolldown': 0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3)(vue@3.5.31(typescript@6.0.2)) + '@vitejs/devtools-rpc': 0.1.13(typescript@6.0.2)(ws@8.20.0) + birpc: 4.0.0 + cac: 7.0.0 + h3: 1.15.11 + immer: 11.1.4 + launch-editor: 2.13.2 + mlly: 1.8.2 + obug: 2.1.1 + open: 11.0.0 + pathe: 2.0.3 + perfect-debounce: 2.1.0 + sirv: 3.0.2 + tinyexec: 1.0.4 + vite: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vue: 3.5.31(typescript@6.0.2) + ws: 8.20.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@pnpm/logger' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - aws4fetch + - bufferutil + - db0 + - idb-keyval + - ioredis + - typescript + - uploadthing + - utf-8-validate + optional: true + '@vitejs/plugin-vue-jsx@5.1.4(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.2))': dependencies: '@babel/core': 7.29.0 @@ -11196,13 +11521,31 @@ snapshots: transitivePeerDependencies: - supports-color + '@vitejs/plugin-vue-jsx@5.1.4(vite@8.0.3)(vue@3.5.31(typescript@6.0.2))': + dependencies: + '@babel/core': 7.29.0 + '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) + '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) + '@rolldown/pluginutils': 1.0.0-rc.13 + '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.0) + vite: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vue: 3.5.31(typescript@6.0.2) + transitivePeerDependencies: + - supports-color + '@vitejs/plugin-vue@6.0.5(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.2))': dependencies: '@rolldown/pluginutils': 1.0.0-rc.2 vite: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) vue: 3.5.31(typescript@6.0.2) - '@vitest/eslint-plugin@1.6.14(@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)(vitest@4.1.2(@opentelemetry/api@1.9.0)(@types/node@25.0.3)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)))': + '@vitejs/plugin-vue@6.0.5(vite@8.0.3)(vue@3.5.31(typescript@6.0.2))': + dependencies: + '@rolldown/pluginutils': 1.0.0-rc.2 + vite: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@0.1.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vue: 3.5.31(typescript@6.0.2) + + '@vitest/eslint-plugin@1.6.14(@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)(vitest@4.1.2(@opentelemetry/api@1.9.0)(@types/node@25.0.3)(vite@8.0.3))': dependencies: '@typescript-eslint/scope-manager': 8.58.0 '@typescript-eslint/utils': 8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) @@ -11210,7 +11553,7 @@ snapshots: optionalDependencies: '@typescript-eslint/eslint-plugin': 8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) typescript: 6.0.2 - vitest: 4.1.2(@opentelemetry/api@1.9.0)(@types/node@25.0.3)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + vitest: 4.1.2(@opentelemetry/api@1.9.0)(@types/node@25.0.3)(vite@8.0.3) transitivePeerDependencies: - supports-color @@ -11223,13 +11566,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.2(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitest/mocker@4.1.2(vite@8.0.3)': dependencies: '@vitest/spy': 4.1.2 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) '@vitest/pretty-format@4.1.2': dependencies: @@ -11470,35 +11813,35 @@ snapshots: '@vueuse/metadata@14.2.1': {} - '@vueuse/nuxt@14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vitejs/devtools@packages+core)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3))(vue@3.5.31(typescript@6.0.2))': + '@vueuse/nuxt@14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3)(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3))(vue@3.5.31(typescript@6.0.2))': dependencies: '@nuxt/kit': 4.4.2(magicast@0.5.2) '@vueuse/core': 14.2.1(vue@3.5.31(typescript@6.0.2)) '@vueuse/metadata': 14.2.1 local-pkg: 1.1.2 - nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vitejs/devtools@packages+core)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3) + nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3)(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3) vue: 3.5.31(typescript@6.0.2) transitivePeerDependencies: - magicast - '@vueuse/nuxt@14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3))(vue@3.5.31(typescript@6.0.2))': + '@vueuse/nuxt@14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(@vue/compiler-sfc@3.5.31)(cac@7.0.0)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3)(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3))(vue@3.5.31(typescript@6.0.2))': dependencies: '@nuxt/kit': 4.4.2(magicast@0.5.2) '@vueuse/core': 14.2.1(vue@3.5.31(typescript@6.0.2)) '@vueuse/metadata': 14.2.1 local-pkg: 1.1.2 - nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3) + nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(@vue/compiler-sfc@3.5.31)(cac@7.0.0)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3)(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3) vue: 3.5.31(typescript@6.0.2) transitivePeerDependencies: - magicast - '@vueuse/nuxt@14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vue/compiler-sfc@3.5.31)(cac@7.0.0)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3))(vue@3.5.31(typescript@6.0.2))': + '@vueuse/nuxt@14.2.1(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vitejs/devtools@packages+core)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3))(vue@3.5.31(typescript@6.0.2))': dependencies: '@nuxt/kit': 4.4.2(magicast@0.5.2) '@vueuse/core': 14.2.1(vue@3.5.31(typescript@6.0.2)) '@vueuse/metadata': 14.2.1 local-pkg: 1.1.2 - nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vue/compiler-sfc@3.5.31)(cac@7.0.0)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3) + nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vitejs/devtools@packages+core)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3) vue: 3.5.31(typescript@6.0.2) transitivePeerDependencies: - magicast @@ -11702,6 +12045,10 @@ snapshots: arg@5.0.2: {} + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + argparse@2.0.1: {} args-tokenizer@0.3.0: {} @@ -12832,6 +13179,8 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.16.0) eslint-visitor-keys: 5.0.1 + esprima@4.0.1: {} + esquery@1.7.0: dependencies: estraverse: 5.3.0 @@ -12892,6 +13241,10 @@ snapshots: exsolve@1.0.8: {} + extend-shallow@2.0.1: + dependencies: + is-extendable: 0.1.1 + fast-deep-equal@3.1.3: {} fast-fifo@1.3.2: {} @@ -13074,6 +13427,13 @@ snapshots: graceful-fs@4.2.11: {} + gray-matter@4.0.3: + dependencies: + js-yaml: 3.14.2 + kind-of: 6.0.3 + section-matter: 1.0.0 + strip-bom-string: 1.0.0 + gzip-size@6.0.0: dependencies: duplexer: 0.1.2 @@ -13227,6 +13587,8 @@ snapshots: is-docker@3.0.0: {} + is-extendable@0.1.1: {} + is-extglob@2.1.1: {} is-fullwidth-code-point@3.0.0: {} @@ -13302,6 +13664,11 @@ snapshots: js-tokens@9.0.1: {} + js-yaml@3.14.2: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + js-yaml@4.1.1: dependencies: argparse: 2.0.1 @@ -13347,6 +13714,8 @@ snapshots: khroma@2.1.0: {} + kind-of@6.0.3: {} + kleur@4.1.5: {} klona@2.0.6: {} @@ -14220,16 +14589,16 @@ snapshots: dependencies: boolbase: 1.0.0 - nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vitejs/devtools@packages+core)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3): + nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3)(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3): dependencies: '@dxup/nuxt': 0.4.0(magicast@0.5.2)(typescript@6.0.2) '@nuxt/cli': 3.34.0(@nuxt/schema@4.4.2)(cac@6.7.14)(magicast@0.5.2) - '@nuxt/devtools': 3.2.4(@vitejs/devtools@packages+core)(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.2)) + '@nuxt/devtools': 3.2.4(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(vite@8.0.3)(vue@3.5.31(typescript@6.0.2)) '@nuxt/kit': 4.4.2(magicast@0.5.2) - '@nuxt/nitro-server': 4.4.2(@babel/core@7.29.0)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vitejs/devtools@packages+core)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3))(rolldown@1.0.0-rc.13)(typescript@6.0.2) + '@nuxt/nitro-server': 4.4.2(@babel/core@7.29.0)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3)(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3))(rolldown@1.0.0-rc.13)(typescript@6.0.2) '@nuxt/schema': 4.4.2 '@nuxt/telemetry': 2.7.0(@nuxt/kit@4.4.2(magicast@0.5.2)) - '@nuxt/vite-builder': 4.4.2(8fefe7d9cc7f0c6db76bce221514ab63) + '@nuxt/vite-builder': 4.4.2(1e96f70ee8c8cd514e7fd32a27a45029) '@unhead/vue': 2.1.12(vue@3.5.31(typescript@6.0.2)) '@vue/shared': 3.5.31 c12: 3.3.3(magicast@0.5.2) @@ -14351,16 +14720,16 @@ snapshots: - xml2js - yaml - nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3): + nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(@vue/compiler-sfc@3.5.31)(cac@7.0.0)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3)(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3): dependencies: '@dxup/nuxt': 0.4.0(magicast@0.5.2)(typescript@6.0.2) - '@nuxt/cli': 3.34.0(@nuxt/schema@4.4.2)(cac@6.7.14)(magicast@0.5.2) - '@nuxt/devtools': 3.2.4(@vitejs/devtools@packages+core)(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.2)) + '@nuxt/cli': 3.34.0(@nuxt/schema@4.4.2)(cac@7.0.0)(magicast@0.5.2) + '@nuxt/devtools': 3.2.4(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(vite@8.0.3)(vue@3.5.31(typescript@6.0.2)) '@nuxt/kit': 4.4.2(magicast@0.5.2) - '@nuxt/nitro-server': 4.4.2(@babel/core@7.29.0)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3))(rolldown@1.0.0-rc.13)(typescript@6.0.2) + '@nuxt/nitro-server': 4.4.2(@babel/core@7.29.0)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(@vue/compiler-sfc@3.5.31)(cac@7.0.0)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3)(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3))(rolldown@1.0.0-rc.13)(typescript@6.0.2) '@nuxt/schema': 4.4.2 '@nuxt/telemetry': 2.7.0(@nuxt/kit@4.4.2(magicast@0.5.2)) - '@nuxt/vite-builder': 4.4.2(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@types/node@25.0.3)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3))(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2))(vue@3.5.31(typescript@6.0.2))(yaml@2.8.3) + '@nuxt/vite-builder': 4.4.2(4904bcda8b51a3d9796307f16642e898) '@unhead/vue': 2.1.12(vue@3.5.31(typescript@6.0.2)) '@vue/shared': 3.5.31 c12: 3.3.3(magicast@0.5.2) @@ -14482,16 +14851,16 @@ snapshots: - xml2js - yaml - nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vue/compiler-sfc@3.5.31)(cac@7.0.0)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3): + nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vitejs/devtools@packages+core)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3): dependencies: '@dxup/nuxt': 0.4.0(magicast@0.5.2)(typescript@6.0.2) - '@nuxt/cli': 3.34.0(@nuxt/schema@4.4.2)(cac@7.0.0)(magicast@0.5.2) + '@nuxt/cli': 3.34.0(@nuxt/schema@4.4.2)(cac@6.7.14)(magicast@0.5.2) '@nuxt/devtools': 3.2.4(@vitejs/devtools@packages+core)(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.31(typescript@6.0.2)) '@nuxt/kit': 4.4.2(magicast@0.5.2) - '@nuxt/nitro-server': 4.4.2(@babel/core@7.29.0)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vue/compiler-sfc@3.5.31)(cac@7.0.0)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3))(rolldown@1.0.0-rc.13)(typescript@6.0.2) + '@nuxt/nitro-server': 4.4.2(@babel/core@7.29.0)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vitejs/devtools@packages+core)(@vue/compiler-sfc@3.5.31)(cac@6.7.14)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3))(rolldown@1.0.0-rc.13)(typescript@6.0.2) '@nuxt/schema': 4.4.2 '@nuxt/telemetry': 2.7.0(@nuxt/kit@4.4.2(magicast@0.5.2)) - '@nuxt/vite-builder': 4.4.2(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@types/node@25.0.3)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.29.0))(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@parcel/watcher@2.5.1)(@types/node@25.0.3)(@vue/compiler-sfc@3.5.31)(cac@7.0.0)(db0@0.3.4)(esbuild@0.27.5)(eslint@10.1.0(jiti@2.6.1))(idb-keyval@6.2.2)(ioredis@5.10.1)(magicast@0.5.2)(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(vue-tsc@3.2.6(typescript@6.0.2))(yaml@2.8.3))(optionator@0.9.4)(rolldown@1.0.0-rc.13)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.13)(rollup@4.60.0))(rollup@4.60.0)(terser@5.44.1)(tsx@4.21.0)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2))(vue@3.5.31(typescript@6.0.2))(yaml@2.8.3) + '@nuxt/vite-builder': 4.4.2(8fefe7d9cc7f0c6db76bce221514ab63) '@unhead/vue': 2.1.12(vue@3.5.31(typescript@6.0.2)) '@vue/shared': 3.5.31 c12: 3.3.3(magicast@0.5.2) @@ -15372,6 +15741,11 @@ snapshots: scule@1.3.0: {} + section-matter@1.0.0: + dependencies: + extend-shallow: 2.0.1 + kind-of: 6.0.3 + semver@7.7.4: {} send@1.2.1: @@ -15501,6 +15875,17 @@ snapshots: sisteransi@1.0.5: {} + skills-npm@1.1.1: + dependencies: + '@clack/prompts': 1.2.0 + cac: 7.0.0 + gray-matter: 4.0.3 + picocolors: 1.1.1 + tinyglobby: 0.2.15 + unconfig: 7.5.0 + xdg-basedir: 5.1.0 + yaml: 2.8.3 + slash@5.1.0: {} smob@1.5.0: {} @@ -15548,6 +15933,8 @@ snapshots: dependencies: vue: 3.5.31(typescript@6.0.2) + sprintf-js@1.0.3: {} + srvx@0.11.9: {} stable-hash-x@0.2.0: {} @@ -15616,6 +16003,8 @@ snapshots: dependencies: ansi-regex: 6.2.2 + strip-bom-string@1.0.0: {} + strip-bom@4.0.0: {} strip-comments-strings@1.2.0: {} @@ -15772,6 +16161,35 @@ snapshots: ts-dedent@2.2.0: {} + tsdown@0.21.7(@vitejs/devtools@0.1.13)(publint@0.3.18)(synckit@0.11.12)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2)): + dependencies: + ansis: 4.2.0 + cac: 7.0.0 + defu: 6.1.6 + empathic: 2.0.0 + hookable: 6.1.0 + import-without-cache: 0.2.5 + obug: 2.1.1 + picomatch: 4.0.4 + rolldown: 1.0.0-rc.13 + rolldown-plugin-dts: 0.23.2(rolldown@1.0.0-rc.13)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2)) + semver: 7.7.4 + tinyexec: 1.0.4 + tinyglobby: 0.2.15 + tree-kill: 1.2.2 + unconfig-core: 7.5.0 + unrun: 0.2.34(synckit@0.11.12) + optionalDependencies: + '@vitejs/devtools': 0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3) + publint: 0.3.18 + typescript: 6.0.2 + transitivePeerDependencies: + - '@ts-macro/tsc' + - '@typescript/native-preview' + - oxc-resolver + - synckit + - vue-tsc + tsdown@0.21.7(@vitejs/devtools@packages+core)(publint@0.3.18)(synckit@0.11.12)(typescript@6.0.2)(vue-tsc@3.2.6(typescript@6.0.2)): dependencies: ansis: 4.2.0 @@ -15958,7 +16376,33 @@ snapshots: unist-util-is: 6.0.1 unist-util-visit-parents: 6.0.2 - unocss@66.6.7(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@unocss/webpack@66.6.7(webpack@5.104.1(esbuild@0.27.5)))(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): + unocss@66.6.7(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@unocss/webpack@66.6.7(webpack@5.104.1(esbuild@0.27.5)))(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): + dependencies: + '@unocss/cli': 66.6.7 + '@unocss/core': 66.6.7 + '@unocss/preset-attributify': 66.6.7 + '@unocss/preset-icons': 66.6.7 + '@unocss/preset-mini': 66.6.7 + '@unocss/preset-tagify': 66.6.7 + '@unocss/preset-typography': 66.6.7 + '@unocss/preset-uno': 66.6.7 + '@unocss/preset-web-fonts': 66.6.7 + '@unocss/preset-wind': 66.6.7 + '@unocss/preset-wind3': 66.6.7 + '@unocss/preset-wind4': 66.6.7 + '@unocss/transformer-attributify-jsx': 66.6.7(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1) + '@unocss/transformer-compile-class': 66.6.7 + '@unocss/transformer-directives': 66.6.7 + '@unocss/transformer-variant-group': 66.6.7 + '@unocss/vite': 66.6.7(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + optionalDependencies: + '@unocss/webpack': 66.6.7(webpack@5.104.1(esbuild@0.27.5)) + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' + - vite + + unocss@66.6.7(@emnapi/core@1.9.1)(@emnapi/runtime@1.9.1)(@unocss/webpack@66.6.7(webpack@5.104.1(esbuild@0.27.5)))(vite@8.0.3): dependencies: '@unocss/cli': 66.6.7 '@unocss/core': 66.6.7 @@ -15976,7 +16420,7 @@ snapshots: '@unocss/transformer-compile-class': 66.6.7 '@unocss/transformer-directives': 66.6.7 '@unocss/transformer-variant-group': 66.6.7 - '@unocss/vite': 66.6.7(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + '@unocss/vite': 66.6.7(vite@8.0.3) optionalDependencies: '@unocss/webpack': 66.6.7(webpack@5.104.1(esbuild@0.27.5)) transitivePeerDependencies: @@ -15989,14 +16433,14 @@ snapshots: pathe: 2.0.3 picomatch: 4.0.4 - unplugin-vue@7.1.1(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(vue@3.5.31(typescript@6.0.2))(yaml@2.8.3): + unplugin-vue@7.1.1(@types/node@25.0.3)(@vitejs/devtools@0.1.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(vue@3.5.31(typescript@6.0.2))(yaml@2.8.3): dependencies: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 '@vue/reactivity': 3.5.31 obug: 2.1.1 unplugin: 3.0.0 - vite: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@0.1.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) vue: 3.5.31(typescript@6.0.2) transitivePeerDependencies: - '@types/node' @@ -16141,10 +16585,41 @@ snapshots: vite: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) vite-hot-client: 2.1.0(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + vite-dev-rpc@1.1.0(vite@8.0.3): + dependencies: + birpc: 2.9.0 + vite: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite-hot-client: 2.1.0(vite@8.0.3) + vite-hot-client@2.1.0(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: vite: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite-hot-client@2.1.0(vite@8.0.3): + dependencies: + vite: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + + vite-node@5.3.0(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): + dependencies: + cac: 6.7.14 + es-module-lexer: 2.0.0 + obug: 2.1.1 + pathe: 2.0.3 + vite: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + transitivePeerDependencies: + - '@types/node' + - '@vitejs/devtools' + - esbuild + - jiti + - less + - sass + - sass-embedded + - stylus + - sugarss + - terser + - tsx + - yaml + vite-node@5.3.0(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: cac: 6.7.14 @@ -16183,6 +16658,23 @@ snapshots: typescript: 6.0.2 vue-tsc: 3.2.6(typescript@6.0.2) + vite-plugin-checker@0.12.0(eslint@10.1.0(jiti@2.6.1))(optionator@0.9.4)(typescript@6.0.2)(vite@8.0.3)(vue-tsc@3.2.6(typescript@6.0.2)): + dependencies: + '@babel/code-frame': 7.29.0 + chokidar: 5.0.0 + npm-run-path: 6.0.0 + picocolors: 1.1.1 + picomatch: 4.0.4 + tiny-invariant: 1.3.3 + tinyglobby: 0.2.15 + vite: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vscode-uri: 3.1.0 + optionalDependencies: + eslint: 10.1.0(jiti@2.6.1) + optionator: 0.9.4 + typescript: 6.0.2 + vue-tsc: 3.2.6(typescript@6.0.2) + vite-plugin-inspect@11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: ansis: 4.2.0 @@ -16200,9 +16692,26 @@ snapshots: transitivePeerDependencies: - supports-color - vite-plugin-inspect@12.0.0-beta.1(@nuxt/kit@4.4.2(magicast@0.5.2))(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(ws@8.20.0): + vite-plugin-inspect@11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@8.0.3): + dependencies: + ansis: 4.2.0 + debug: 4.4.3 + error-stack-parser-es: 1.0.5 + ohash: 2.0.11 + open: 10.2.0 + perfect-debounce: 2.1.0 + sirv: 3.0.2 + unplugin-utils: 0.3.1 + vite: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite-dev-rpc: 1.1.0(vite@8.0.3) + optionalDependencies: + '@nuxt/kit': 4.4.2(magicast@0.5.2) + transitivePeerDependencies: + - supports-color + + vite-plugin-inspect@12.0.0-beta.1(@nuxt/kit@4.4.2(magicast@0.5.2))(typescript@6.0.2)(vite@8.0.3)(ws@8.20.0): dependencies: - '@vitejs/devtools-kit': 0.1.11(typescript@6.0.2)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3))(ws@8.20.0) + '@vitejs/devtools-kit': 0.1.11(typescript@6.0.2)(vite@8.0.3)(ws@8.20.0) ansis: 4.2.0 error-stack-parser-es: 1.0.5 obug: 2.1.1 @@ -16211,7 +16720,7 @@ snapshots: perfect-debounce: 2.1.0 sirv: 3.0.2 unplugin-utils: 0.3.1 - vite: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) optionalDependencies: '@nuxt/kit': 4.4.2(magicast@0.5.2) transitivePeerDependencies: @@ -16241,6 +16750,50 @@ snapshots: vite: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) vue: 3.5.31(typescript@6.0.2) + vite-plugin-vue-tracer@1.3.0(vite@8.0.3)(vue@3.5.31(typescript@6.0.2)): + dependencies: + estree-walker: 3.0.3 + exsolve: 1.0.8 + magic-string: 0.30.21 + pathe: 2.0.3 + source-map-js: 1.2.1 + vite: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vue: 3.5.31(typescript@6.0.2) + + vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.8 + rolldown: 1.0.0-rc.13 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 25.0.3 + '@vitejs/devtools': 0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3) + esbuild: 0.27.5 + fsevents: 2.3.3 + jiti: 2.6.1 + terser: 5.44.1 + tsx: 4.21.0 + yaml: 2.8.3 + + vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@0.1.13)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.8 + rolldown: 1.0.0-rc.13 + tinyglobby: 0.2.15 + optionalDependencies: + '@types/node': 25.0.3 + '@vitejs/devtools': 0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3) + esbuild: 0.27.5 + fsevents: 2.3.3 + jiti: 2.6.1 + terser: 5.44.1 + tsx: 4.21.0 + yaml: 2.8.3 + vite@8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: lightningcss: 1.32.0 @@ -16332,10 +16885,10 @@ snapshots: find-up-simple: 1.0.1 pathe: 2.0.3 - vitest@4.1.2(@opentelemetry/api@1.9.0)(@types/node@25.0.3)(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)): + vitest@4.1.2(@opentelemetry/api@1.9.0)(@types/node@25.0.3)(vite@8.0.3): dependencies: '@vitest/expect': 4.1.2 - '@vitest/mocker': 4.1.2(vite@8.0.3(@types/node@25.0.3)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/mocker': 4.1.2(vite@8.0.3) '@vitest/pretty-format': 4.1.2 '@vitest/runner': 4.1.2 '@vitest/snapshot': 4.1.2 @@ -16352,7 +16905,7 @@ snapshots: tinyexec: 1.0.4 tinyglobby: 0.2.15 tinyrainbow: 3.1.0 - vite: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@packages+core)(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) + vite: 8.0.3(@types/node@25.0.3)(@vitejs/devtools@0.1.13(@pnpm/logger@1001.0.1)(db0@0.3.4)(idb-keyval@6.2.2)(ioredis@5.10.1)(typescript@6.0.2)(vite@8.0.3))(esbuild@0.27.5)(jiti@2.6.1)(terser@5.44.1)(tsx@4.21.0)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 @@ -16568,6 +17121,8 @@ snapshots: is-wsl: 3.1.0 powershell-utils: 0.1.0 + xdg-basedir@5.1.0: {} + xml-name-validator@4.0.0: {} y18n@5.0.8: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 13bb65e7..22ae59b8 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -50,6 +50,7 @@ catalogs: unplugin-vue: ^7.1.1 vite: ^8.0.3 deps: + '@antfu/experimental-logs-sdk': ^0.0.3 '@pnpm/read-project-manifest': ^1001.2.6 '@rolldown/debug': ^1.0.0-rc.13 ansis: ^4.2.0 @@ -94,6 +95,7 @@ catalogs: nano-staged: ^0.9.0 serve: ^14.2.6 simple-git-hooks: ^2.13.1 + skills-npm: ^1.1.1 solid-js: ^1.9.12 typescript: ^6.0.2 vite-plugin-inspect: ^12.0.0-beta.1