/` segment; the
+ // assets watcher is off since this host demonstrates mounting, not authoring.
+ devframes: [
+ createGitDevframe(),
+ createTerminalsDevframe(),
+ createCodeServerDevframe(),
+ createInspectDevframe(),
+ createDataInspectorDevframe({ id: 'devframes_plugin_data-inspector' }),
+ createA11yDevframe(),
+ createMessagesDevframe(),
+ createOgDevframe(),
+ createAssetsDevframe({ watch: false }),
+ ],
+ // Rebrand the reference UI to Fastify's own black — one field, no CSS:
+ // `createUi`'s `branding` option publishes `ConnectionMeta.configs.ui.branding`,
+ // which the dock reads at connect time and feeds into `--devframe-primary`
+ // (see `@devframes/hub-ui`'s `primary-ramp.css`).
+ ui: createUi({ branding: { primaryColor: '#2f2f2f', productName: 'Devframes on Fastify' } }),
+ // Gate with devframe's interactive OTP (the default). The hub prints a
+ // 6-digit code + magic link on startup, and the reference UI's authorization
+ // view exchanges it for a bearer token. See docs/guide/security.md.
+ configure(ctx) {
+ ctx.commands.register({
+ id: 'example:hub-fastify-minimal:ping',
+ title: 'Fastify Hub · Ping',
+ icon: 'ph:bell-duotone',
+ category: 'kit',
+ handler: () => 'pong',
+ })
+ },
+})
+
+/** The host page — one script tag turns any page into a devtools host. */
+export const hostPage = `
+
+
+
+
+ Fastify Devframe Hub
+
+
+ Fastify Devframe Hub
+ This page is the host app. The devtools ride along:
+
+
+
+`
diff --git a/examples/hub-fastify-minimal/src/server.ts b/examples/hub-fastify-minimal/src/server.ts
new file mode 100644
index 00000000..8b650c5a
--- /dev/null
+++ b/examples/hub-fastify-minimal/src/server.ts
@@ -0,0 +1,46 @@
+import process from 'node:process'
+import middie from '@fastify/middie'
+import Fastify from 'fastify'
+import { hostPage, hub } from './hub'
+
+// Fastify is the connect-middleware host: rather than bridging every request
+// to `hub.handler` (web Request → Response), it registers `hub.nodeMiddleware`
+// — the same `(req, res, next)` shape a Vite dev server consumes — through
+// `@fastify/middie`. Requests under `/__devframes/` are served by the hub;
+// everything else falls through `next()` to Fastify's own routes.
+//
+// The RPC socket rides Fastify's own `node:http` server: `fastify.server` is
+// that server, and `hub.attach(server)` routes its `upgrade` events to
+// `/__devframes/__ws` on the app's origin — no side-car port to discover.
+export async function startFastifyServer(port: number): Promise<{ port: number, close: () => Promise }> {
+ const app = Fastify()
+ await app.register(middie)
+ app.use(hub.nodeMiddleware)
+
+ app.get('/', (_request, reply) => {
+ reply.type('text/html').send(hostPage)
+ })
+
+ const detach = hub.attach(app.server)
+ await app.listen({ port, host: '0.0.0.0' })
+ const address = app.server.address()
+ const boundPort = typeof address === 'object' && address ? address.port : port
+
+ return {
+ port: boundPort,
+ close: async () => {
+ detach()
+ await hub.close()
+ await app.close()
+ },
+ }
+}
+
+if (import.meta.url === `file://${process.argv[1]}`) {
+ const port = Number(process.env.PORT ?? 5183)
+ void startFastifyServer(port).then(({ port }) => {
+ // eslint-disable-next-line no-console
+ console.log(`fastify-devframe-hub on http://localhost:${port} — devtools at /__devframes/`)
+ })
+ process.on('SIGINT', () => process.exit(0))
+}
diff --git a/examples/hub-fastify-minimal/tsconfig.json b/examples/hub-fastify-minimal/tsconfig.json
new file mode 100644
index 00000000..11916e28
--- /dev/null
+++ b/examples/hub-fastify-minimal/tsconfig.json
@@ -0,0 +1,19 @@
+{
+ "extends": "../../tsconfig.base.json",
+ "compilerOptions": {
+ "lib": [
+ "esnext",
+ "dom"
+ ],
+ "types": [
+ "node"
+ ]
+ },
+ "include": [
+ "src"
+ ],
+ "exclude": [
+ "dist",
+ "node_modules"
+ ]
+}
diff --git a/examples/hub-sveltekit-minimal/.gitignore b/examples/hub-sveltekit-minimal/.gitignore
new file mode 100644
index 00000000..5318938b
--- /dev/null
+++ b/examples/hub-sveltekit-minimal/.gitignore
@@ -0,0 +1,3 @@
+.svelte-kit
+.output
+build
diff --git a/examples/hub-sveltekit-minimal/README.md b/examples/hub-sveltekit-minimal/README.md
new file mode 100644
index 00000000..830ae71d
--- /dev/null
+++ b/examples/hub-sveltekit-minimal/README.md
@@ -0,0 +1,17 @@
+# hub-sveltekit-minimal
+
+The minimal [SvelteKit](https://svelte.dev/docs/kit) host for `@devframes/hub`: one `initHub()` call behind a single catch-all endpoint, the whole devtools installation live under `/__devframes/`.
+
+```sh
+pnpm --filter hub-sveltekit-minimal dev
+```
+
+Open — the host page carries the floating dock via one script tag — or for the standalone viewer.
+
+## How it works
+
+- [`src/hub.ts`](./src/hub.ts) — `initHub({ devframes, ui: createUi({ branding }) })` (rebranded to Svelte's own orange, `#ff3e00`), memoized on `globalThis` so SvelteKit's dev-time reload reuses the live hub. The RPC socket runs on a side-car port (`ws: { sidecar: true }`) advertised via `__connection.json` — SvelteKit's `+server.ts` handlers hand over `Request`s and never see WebSocket upgrades, so the hub takes a socket of its own; the browser client discovers it automatically.
+- [`src/routes/__devframes/[...path]/+server.ts`](./src/routes/__devframes/%5B...path%5D/+server.ts) — the whole namespace behind one catch-all: `fallback` answers every method with `hub.handler(event.request)`, web-standard `Request` in, `Response` out. Its `[...path]` rest param matches the namespace root (`/__devframes/`) as well as everything beneath it. It exports `trailingSlash = 'ignore'` so SvelteKit serves the hub's trailing-slash URLs (the standalone viewer and each frame SPA) verbatim instead of 308-redirecting them.
+- [`src/app.html`](./src/app.html) injects `/__devframes/embedded.js` — the one script tag that mounts the floating dock on every page.
+
+The same `initHub` instance mounts identically on Vite, Hono, Nitro, Fastify, and Next.js — see the sibling examples.
diff --git a/examples/hub-sveltekit-minimal/package.json b/examples/hub-sveltekit-minimal/package.json
new file mode 100644
index 00000000..ff5511d3
--- /dev/null
+++ b/examples/hub-sveltekit-minimal/package.json
@@ -0,0 +1,33 @@
+{
+ "name": "hub-sveltekit-minimal",
+ "type": "module",
+ "version": "0.9.1",
+ "private": true,
+ "description": "Minimal SvelteKit host that mounts the devframe hub on a catch-all endpoint.",
+ "scripts": {
+ "dev": "vite dev",
+ "typecheck": "tsc --noEmit"
+ },
+ "dependencies": {
+ "@devframes/hub": "workspace:*",
+ "@devframes/hub-ui": "workspace:*",
+ "@devframes/plugin-a11y": "workspace:*",
+ "@devframes/plugin-assets": "workspace:*",
+ "@devframes/plugin-code-server": "workspace:*",
+ "@devframes/plugin-data-inspector": "workspace:*",
+ "@devframes/plugin-git": "workspace:*",
+ "@devframes/plugin-inspect": "workspace:*",
+ "@devframes/plugin-messages": "workspace:*",
+ "@devframes/plugin-og": "workspace:*",
+ "@devframes/plugin-terminals": "workspace:*",
+ "devframe": "workspace:*"
+ },
+ "devDependencies": {
+ "@sveltejs/adapter-node": "catalog:build",
+ "@sveltejs/kit": "catalog:build",
+ "@sveltejs/vite-plugin-svelte": "catalog:frontend",
+ "@types/node": "catalog:types",
+ "svelte": "catalog:frontend",
+ "vite": "catalog:build"
+ }
+}
diff --git a/examples/hub-sveltekit-minimal/src/app.d.ts b/examples/hub-sveltekit-minimal/src/app.d.ts
new file mode 100644
index 00000000..f8810623
--- /dev/null
+++ b/examples/hub-sveltekit-minimal/src/app.d.ts
@@ -0,0 +1,6 @@
+// See https://svelte.dev/docs/kit/types#app.d.ts
+declare global {
+ namespace App {}
+}
+
+export {}
diff --git a/examples/hub-sveltekit-minimal/src/app.html b/examples/hub-sveltekit-minimal/src/app.html
new file mode 100644
index 00000000..27ac87af
--- /dev/null
+++ b/examples/hub-sveltekit-minimal/src/app.html
@@ -0,0 +1,15 @@
+
+
+
+
+
+ %sveltekit.head%
+
+
+ %sveltekit.body%
+
+
+
+
diff --git a/examples/hub-sveltekit-minimal/src/hub.ts b/examples/hub-sveltekit-minimal/src/hub.ts
new file mode 100644
index 00000000..60f3856a
--- /dev/null
+++ b/examples/hub-sveltekit-minimal/src/hub.ts
@@ -0,0 +1,57 @@
+import type { HubInstance } from '@devframes/hub/initiate'
+import { createUi } from '@devframes/hub-ui'
+import { DEVFRAMES_HUB_BASE, initHub } from '@devframes/hub/initiate'
+import { createA11yDevframe } from '@devframes/plugin-a11y'
+import { createAssetsDevframe } from '@devframes/plugin-assets'
+import { createCodeServerDevframe } from '@devframes/plugin-code-server'
+import { createDataInspectorDevframe } from '@devframes/plugin-data-inspector'
+import { createGitDevframe } from '@devframes/plugin-git'
+import { createInspectDevframe } from '@devframes/plugin-inspect'
+import { createMessagesDevframe } from '@devframes/plugin-messages'
+import { createOgDevframe } from '@devframes/plugin-og'
+import { createTerminalsDevframe } from '@devframes/plugin-terminals'
+
+// One `initHub` call, memoized on globalThis so SvelteKit's dev-time module
+// reload returns the live hub instead of leaking transports. The RPC socket
+// runs on a side-car port advertised via __connection.json: SvelteKit's
+// `+server.ts` handlers hand over `Request`s and never see WebSocket
+// upgrades, so `ws.sidecar` asks for a socket of its own — the browser client
+// discovers it automatically.
+const globalRef = globalThis as { __hubSvelteKitMinimal?: HubInstance }
+
+export const hub: HubInstance = globalRef.__hubSvelteKitMinimal ??= initHub({
+ base: DEVFRAMES_HUB_BASE,
+ ws: { sidecar: true },
+ // Every built-in plugin, dogfooded end to end through the hub mount path.
+ // `data-inspector`'s default id carries `:` (a route-param marker), so it
+ // gets a colon-free id override to be a valid `/` segment; the
+ // assets watcher is off since this host demonstrates mounting, not authoring.
+ devframes: [
+ createGitDevframe(),
+ createTerminalsDevframe(),
+ createCodeServerDevframe(),
+ createInspectDevframe(),
+ createDataInspectorDevframe({ id: 'devframes_plugin_data-inspector' }),
+ createA11yDevframe(),
+ createMessagesDevframe(),
+ createOgDevframe(),
+ createAssetsDevframe({ watch: false }),
+ ],
+ // Rebrand the reference UI to Svelte's own orange — one field, no CSS:
+ // `createUi`'s `branding` option publishes `ConnectionMeta.configs.ui.branding`,
+ // which the dock reads at connect time and feeds into `--devframe-primary`
+ // (see `@devframes/hub-ui`'s `primary-ramp.css`).
+ ui: createUi({ branding: { primaryColor: '#ff3e00', productName: 'Devframes on SvelteKit' } }),
+ // Gate with devframe's interactive OTP (the default). The hub prints a
+ // 6-digit code + magic link on startup, and the reference UI's authorization
+ // view exchanges it for a bearer token. See docs/guide/security.md.
+ configure(ctx) {
+ ctx.commands.register({
+ id: 'example:hub-sveltekit-minimal:ping',
+ title: 'SvelteKit Hub · Ping',
+ icon: 'ph:bell-duotone',
+ category: 'kit',
+ handler: () => 'pong',
+ })
+ },
+})
diff --git a/examples/hub-sveltekit-minimal/src/routes/+page.svelte b/examples/hub-sveltekit-minimal/src/routes/+page.svelte
new file mode 100644
index 00000000..a5e81e26
--- /dev/null
+++ b/examples/hub-sveltekit-minimal/src/routes/+page.svelte
@@ -0,0 +1,13 @@
+
+ SvelteKit Devframe Hub
+ This page is the host app. The devtools ride along:
+
+
diff --git a/examples/hub-sveltekit-minimal/src/routes/__devframes/[...path]/+server.ts b/examples/hub-sveltekit-minimal/src/routes/__devframes/[...path]/+server.ts
new file mode 100644
index 00000000..bade5293
--- /dev/null
+++ b/examples/hub-sveltekit-minimal/src/routes/__devframes/[...path]/+server.ts
@@ -0,0 +1,16 @@
+import type { RequestHandler } from '@sveltejs/kit'
+import { hub } from '../../../hub'
+
+// Serve both `/__devframes/foo` and `/__devframes/foo/` verbatim. SvelteKit
+// defaults to `trailingSlash: 'never'`, which would 308-redirect the hub's
+// trailing-slash URLs (the standalone viewer at `/__devframes/` and each
+// frame SPA at `/__devframes//`) and break the SPAs' relative asset
+// resolution — the hub owns the exact paths, so opt its routes out.
+export const trailingSlash = 'ignore'
+
+// The whole hub namespace behind one catch-all route: web-standard Request
+// in, Response out. `fallback` answers every method, and the `[...path]` rest
+// param matches the namespace root (`/__devframes/`) as well as everything
+// beneath it. Frame SPAs, __connection.json, __index.json, embedded.js,
+// __client-imports.js — all flow through here.
+export const fallback: RequestHandler = ({ request }) => hub.handler(request)
diff --git a/examples/hub-sveltekit-minimal/svelte.config.js b/examples/hub-sveltekit-minimal/svelte.config.js
new file mode 100644
index 00000000..2eac065a
--- /dev/null
+++ b/examples/hub-sveltekit-minimal/svelte.config.js
@@ -0,0 +1,10 @@
+import adapter from '@sveltejs/adapter-node'
+import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'
+
+/** @type {import('@sveltejs/kit').Config} */
+export default {
+ preprocess: vitePreprocess(),
+ kit: {
+ adapter: adapter(),
+ },
+}
diff --git a/examples/hub-sveltekit-minimal/tsconfig.json b/examples/hub-sveltekit-minimal/tsconfig.json
new file mode 100644
index 00000000..8e330a33
--- /dev/null
+++ b/examples/hub-sveltekit-minimal/tsconfig.json
@@ -0,0 +1,21 @@
+{
+ "extends": "../../tsconfig.base.json",
+ "compilerOptions": {
+ "lib": [
+ "esnext",
+ "dom"
+ ],
+ "types": [
+ "node"
+ ]
+ },
+ "include": [
+ "src/**/*.ts",
+ "vite.config.ts"
+ ],
+ "exclude": [
+ "dist",
+ "node_modules",
+ ".svelte-kit"
+ ]
+}
diff --git a/examples/hub-sveltekit-minimal/vite.config.ts b/examples/hub-sveltekit-minimal/vite.config.ts
new file mode 100644
index 00000000..dd1b8b7f
--- /dev/null
+++ b/examples/hub-sveltekit-minimal/vite.config.ts
@@ -0,0 +1,6 @@
+import { sveltekit } from '@sveltejs/kit/vite'
+import { defineConfig } from 'vite'
+
+export default defineConfig({
+ plugins: [sveltekit()],
+})
diff --git a/knip.jsonc b/knip.jsonc
index 2ddea837..85af4b90 100644
--- a/knip.jsonc
+++ b/knip.jsonc
@@ -104,6 +104,12 @@
"config": ["src/client/postcss.config.mjs"]
}
},
+ // The Deno entry runs via `deno run src/server.ts`, a command string knip
+ // doesn't parse (unlike `tsx`/`bun`), so name the entry explicitly — it
+ // pulls in `src/hub.ts` and every plugin dependency from there.
+ "examples/hub-deno-minimal": {
+ "entry": ["src/server.ts"]
+ },
"packages/devframe": {
// Every `package.json#exports` subpath maps to one of these source
// files (see `tsdown.config.ts`'s `serverEntries`/`clientEntries`).
@@ -124,7 +130,7 @@
"src/recipes/{common-rpc-functions,interactive-auth}.ts",
"src/rpc/{index,client,server}.ts",
"src/rpc/dump/index.ts",
- "src/rpc/transports/{sse-client,sse-server,ws-bun,ws-client,ws-server}.ts",
+ "src/rpc/transports/{sse-client,sse-server,ws-bun,ws-deno,ws-client,ws-server}.ts",
"src/types/index.ts",
"src/utils/*.ts"
]
diff --git a/packages/devframe/package.json b/packages/devframe/package.json
index d0303199..9beab9cb 100644
--- a/packages/devframe/package.json
+++ b/packages/devframe/package.json
@@ -41,6 +41,7 @@
"./rpc/transports/sse-client": "./dist/rpc/transports/sse-client.mjs",
"./rpc/transports/sse-server": "./dist/rpc/transports/sse-server.mjs",
"./rpc/transports/ws-bun": "./dist/rpc/transports/ws-bun.mjs",
+ "./rpc/transports/ws-deno": "./dist/rpc/transports/ws-deno.mjs",
"./rpc/transports/ws-client": "./dist/rpc/transports/ws-client.mjs",
"./rpc/transports/ws-server": "./dist/rpc/transports/ws-server.mjs",
"./types": "./dist/types/index.mjs",
diff --git a/packages/devframe/src/rpc/transports/ws-deno.ts b/packages/devframe/src/rpc/transports/ws-deno.ts
new file mode 100644
index 00000000..4d080e40
--- /dev/null
+++ b/packages/devframe/src/rpc/transports/ws-deno.ts
@@ -0,0 +1,59 @@
+import type { ContextRpcServer } from '../../node/rpc-core'
+import type { WsOriginRegistry } from './ws-server'
+import { createWsRpcPeerHooks, isAllowedOrigin } from './ws-server'
+
+export interface AttachDenoWsTransportOptions {
+ /** Same contract as `WsRpcTransportOptions.allowedOrigins`. */
+ allowedOrigins?: readonly string[] | WsOriginRegistry | false
+}
+
+export interface DenoWsTier {
+ /**
+ * Complete a WS upgrade request — `Deno.serve`'s handler info as the 2nd
+ * argument. Unlike Bun, Deno's adapter attaches the socket to the returned
+ * `Response` itself, so there is no `websocket` handler object to register.
+ */
+ handleUpgrade: (request: Request, info: unknown) => Promise
+ close: () => Promise
+}
+
+/**
+ * The Deno fetch-upgrade WebSocket tier for `initDevframe` / `initHub` — the
+ * same RPC peer wiring as `attachWsRpcTransport`, driven by crossws's Deno
+ * adapter so upgrades complete through `handleUpgrade(request, info)` on the
+ * app's own origin, with no side-car server. Load it dynamically so the Deno
+ * adapter never enters a Node-only bundle path.
+ */
+export async function attachDenoWsTransport(
+ core: ContextRpcServer,
+ options: AttachDenoWsTransportOptions = {},
+): Promise {
+ const { default: denoAdapter } = await import('crossws/adapters/deno')
+ const { allowedOrigins } = options
+
+ const ws = denoAdapter({
+ hooks: {
+ ...createWsRpcPeerHooks(core.rpcGroup, {
+ onConnected: core.onConnected,
+ onDisconnected: core.onDisconnected,
+ }),
+ // The same origin policy `routeUpgrades` applies for the Node
+ // transport, enforced at the upgrade hook since Deno upgrades arrive
+ // as fetch requests rather than `upgrade` socket events.
+ upgrade(request) {
+ const origin = request.headers.get('origin') ?? undefined
+ const allowed = allowedOrigins && !Array.isArray(allowedOrigins)
+ ? (allowedOrigins as WsOriginRegistry).isAllowed(origin)
+ : isAllowedOrigin(origin, (allowedOrigins as readonly string[] | false | undefined) || [])
+ if (allowedOrigins !== false && !allowed)
+ return new Response('Forbidden', { status: 403 })
+ },
+ },
+ })
+
+ return {
+ handleUpgrade: (request, info) =>
+ ws.handleUpgrade(request, info as Parameters[1]),
+ close: () => ws.close(),
+ }
+}
diff --git a/packages/devframe/tsdown.config.ts b/packages/devframe/tsdown.config.ts
index cc4a01e7..36ac4568 100644
--- a/packages/devframe/tsdown.config.ts
+++ b/packages/devframe/tsdown.config.ts
@@ -96,6 +96,7 @@ const serverEntries = {
'rpc/transports/sse-client': 'src/rpc/transports/sse-client.ts',
'rpc/transports/sse-server': 'src/rpc/transports/sse-server.ts',
'rpc/transports/ws-bun': 'src/rpc/transports/ws-bun.ts',
+ 'rpc/transports/ws-deno': 'src/rpc/transports/ws-deno.ts',
'rpc/transports/ws-client': 'src/rpc/transports/ws-client.ts',
'rpc/transports/ws-server': 'src/rpc/transports/ws-server.ts',
'node/index': 'src/node/index.ts',
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 3ad1a32b..eb467ffd 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -15,6 +15,12 @@ catalogs:
'@rsbuild/core':
specifier: ^2.1.13
version: 2.1.13
+ '@sveltejs/adapter-node':
+ specifier: ^5.3.3
+ version: 5.5.7
+ '@sveltejs/kit':
+ specifier: ^2.46.4
+ version: 2.70.2
'@vitejs/plugin-vue':
specifier: ^6.0.8
version: 6.0.8
@@ -46,6 +52,9 @@ catalogs:
specifier: ^2.11.14
version: 2.11.14
deps:
+ '@fastify/middie':
+ specifier: ^9.0.3
+ version: 9.3.3
'@hono/node-server':
specifier: ^1.19.17
version: 1.19.17
@@ -70,6 +79,9 @@ catalogs:
destr:
specifier: ^2.0.5
version: 2.0.5
+ fastify:
+ specifier: ^5.7.1
+ version: 5.12.0
get-port-please:
specifier: ^3.2.0
version: 3.2.0
@@ -584,6 +596,101 @@ importers:
specifier: catalog:deps
version: 8.21.3
+ examples/hub-deno-minimal:
+ dependencies:
+ '@devframes/hub':
+ specifier: workspace:*
+ version: link:../../packages/hub
+ '@devframes/hub-ui':
+ specifier: workspace:*
+ version: link:../../packages/hub-ui
+ '@devframes/plugin-a11y':
+ specifier: workspace:*
+ version: link:../../plugins/a11y
+ '@devframes/plugin-assets':
+ specifier: workspace:*
+ version: link:../../plugins/assets
+ '@devframes/plugin-code-server':
+ specifier: workspace:*
+ version: link:../../plugins/code-server
+ '@devframes/plugin-data-inspector':
+ specifier: workspace:*
+ version: link:../../plugins/data-inspector
+ '@devframes/plugin-git':
+ specifier: workspace:*
+ version: link:../../plugins/git
+ '@devframes/plugin-inspect':
+ specifier: workspace:*
+ version: link:../../plugins/inspect
+ '@devframes/plugin-messages':
+ specifier: workspace:*
+ version: link:../../plugins/messages
+ '@devframes/plugin-og':
+ specifier: workspace:*
+ version: link:../../plugins/og
+ '@devframes/plugin-terminals':
+ specifier: workspace:*
+ version: link:../../plugins/terminals
+ devframe:
+ specifier: workspace:*
+ version: link:../../packages/devframe
+ devDependencies:
+ '@types/node':
+ specifier: catalog:types
+ version: 26.2.0
+
+ examples/hub-fastify-minimal:
+ dependencies:
+ '@devframes/hub':
+ specifier: workspace:*
+ version: link:../../packages/hub
+ '@devframes/hub-ui':
+ specifier: workspace:*
+ version: link:../../packages/hub-ui
+ '@devframes/plugin-a11y':
+ specifier: workspace:*
+ version: link:../../plugins/a11y
+ '@devframes/plugin-assets':
+ specifier: workspace:*
+ version: link:../../plugins/assets
+ '@devframes/plugin-code-server':
+ specifier: workspace:*
+ version: link:../../plugins/code-server
+ '@devframes/plugin-data-inspector':
+ specifier: workspace:*
+ version: link:../../plugins/data-inspector
+ '@devframes/plugin-git':
+ specifier: workspace:*
+ version: link:../../plugins/git
+ '@devframes/plugin-inspect':
+ specifier: workspace:*
+ version: link:../../plugins/inspect
+ '@devframes/plugin-messages':
+ specifier: workspace:*
+ version: link:../../plugins/messages
+ '@devframes/plugin-og':
+ specifier: workspace:*
+ version: link:../../plugins/og
+ '@devframes/plugin-terminals':
+ specifier: workspace:*
+ version: link:../../plugins/terminals
+ '@fastify/middie':
+ specifier: catalog:deps
+ version: 9.3.3
+ devframe:
+ specifier: workspace:*
+ version: link:../../packages/devframe
+ fastify:
+ specifier: catalog:deps
+ version: 5.12.0
+ devDependencies:
+ '@types/node':
+ specifier: catalog:types
+ version: 26.2.0
+ tsx:
+ specifier: catalog:build
+ version: 4.23.12
+
examples/hub-hono-minimal:
dependencies:
'@devframes/hub':
@@ -898,6 +1005,64 @@ importers:
specifier: catalog:types
version: 26.2.0
+ examples/hub-sveltekit-minimal:
+ dependencies:
+ '@devframes/hub':
+ specifier: workspace:*
+ version: link:../../packages/hub
+ '@devframes/hub-ui':
+ specifier: workspace:*
+ version: link:../../packages/hub-ui
+ '@devframes/plugin-a11y':
+ specifier: workspace:*
+ version: link:../../plugins/a11y
+ '@devframes/plugin-assets':
+ specifier: workspace:*
+ version: link:../../plugins/assets
+ '@devframes/plugin-code-server':
+ specifier: workspace:*
+ version: link:../../plugins/code-server
+ '@devframes/plugin-data-inspector':
+ specifier: workspace:*
+ version: link:../../plugins/data-inspector
+ '@devframes/plugin-git':
+ specifier: workspace:*
+ version: link:../../plugins/git
+ '@devframes/plugin-inspect':
+ specifier: workspace:*
+ version: link:../../plugins/inspect
+ '@devframes/plugin-messages':
+ specifier: workspace:*
+ version: link:../../plugins/messages
+ '@devframes/plugin-og':
+ specifier: workspace:*
+ version: link:../../plugins/og
+ '@devframes/plugin-terminals':
+ specifier: workspace:*
+ version: link:../../plugins/terminals
+ devframe:
+ specifier: workspace:*
+ version: link:../../packages/devframe
+ devDependencies:
+ '@sveltejs/adapter-node':
+ specifier: catalog:build
+ version: 5.5.7(@sveltejs/kit@2.70.2(@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.56.9(@typescript-eslint/types@8.67.0))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0)))(svelte@5.56.9(@typescript-eslint/types@8.67.0))(typescript@6.0.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0)))
+ '@sveltejs/kit':
+ specifier: catalog:build
+ version: 2.70.2(@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.56.9(@typescript-eslint/types@8.67.0))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0)))(svelte@5.56.9(@typescript-eslint/types@8.67.0))(typescript@6.0.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0))
+ '@sveltejs/vite-plugin-svelte':
+ specifier: catalog:frontend
+ version: 7.3.0(svelte@5.56.9(@typescript-eslint/types@8.67.0))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0))
+ '@types/node':
+ specifier: catalog:types
+ version: 26.2.0
+ svelte:
+ specifier: catalog:frontend
+ version: 5.56.9(@typescript-eslint/types@8.67.0)
+ vite:
+ specifier: catalog:build
+ version: 8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0)
+
examples/hub-vite:
dependencies:
'@antfu/design':
@@ -2902,6 +3067,27 @@ packages:
resolution: {integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ '@fastify/ajv-compiler@4.0.6':
+ resolution: {integrity: sha512-NtuzM0SfaMJbGlnjr9LWQUN5LzgSrbB8tf/wRZNas+4E1O/Nmzl53e7ruT61HDZyRCJGC6FxIogmNZO1c5ETBA==}
+
+ '@fastify/error@4.2.0':
+ resolution: {integrity: sha512-RSo3sVDXfHskiBZKBPRgnQTtIqpi/7zhJOEmAxCiBcM7d0uwdGdxLlsCaLzGs8v8NnxIRlfG0N51p5yFaOentQ==}
+
+ '@fastify/fast-json-stringify-compiler@5.1.0':
+ resolution: {integrity: sha512-PxcYtKLbQ8Z+yApiqjK8FwxIwvEj38k2OiLc17u8dkJSlmfi2wHHPaSnaoqBPQqtvF8YVsDgDpP2snDCfFrpfw==}
+
+ '@fastify/forwarded@3.0.2':
+ resolution: {integrity: sha512-NE8HgKLgYejV9lDpqkEFaDKMLYelJBVfHekhB0UKvX0ghagXRJqg68feg8er1NPXxG4N9i6vPxzt8E+3wHfcmA==}
+
+ '@fastify/merge-json-schemas@0.2.1':
+ resolution: {integrity: sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A==}
+
+ '@fastify/middie@9.3.3':
+ resolution: {integrity: sha512-N2VRS+sfw/lxA/uLD6TvBpvfPfOV/RdYzM7ctAB58Cn2TAYxbRd8+JLFhNhMJoXlSbgChXYUnkn3hPU/JdA4Pg==}
+
+ '@fastify/proxy-addr@5.1.0':
+ resolution: {integrity: sha512-INS+6gh91cLUjB+PVHfu1UqcB76Sqtpyp7bnL+FYojhjygvOPA9ctiD/JDKsyD9Xgu4hUhCSJBPig/w7duNajw==}
+
'@floating-ui/core@1.8.0':
resolution: {integrity: sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==}
@@ -4350,6 +4536,9 @@ packages:
shiki:
optional: true
+ '@pinojs/redact@0.4.0':
+ resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==}
+
'@pkgjs/parseargs@0.11.0':
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
@@ -5277,6 +5466,27 @@ packages:
peerDependencies:
acorn: ^8.9.0
+ '@sveltejs/adapter-node@5.5.7':
+ resolution: {integrity: sha512-uOfc9eVlI3A37RRSaKcgrheBYPrfJwC9VMqDp8x/O6tlKdcLLvHThSWD0KNIbjQ/d+7bwLGx3vx6aowAcRfd2g==}
+ peerDependencies:
+ '@sveltejs/kit': ^2.4.0
+
+ '@sveltejs/kit@2.70.2':
+ resolution: {integrity: sha512-RzRoRpuR2KXqc5yMO0akQHDZeT4AslOlznGITURsqHaVbtyYP4Wn3eE3gxj9JcDyNYO0crkxhdwFHc+2vkVm6w==}
+ engines: {node: '>=18.13'}
+ hasBin: true
+ peerDependencies:
+ '@opentelemetry/api': ^1.0.0
+ '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0 || ^7.0.0
+ svelte: ^4.0.0 || ^5.0.0-next.0
+ typescript: ^5.3.3 || ^6.0.0
+ vite: ^5.0.3 || ^6.0.0 || ^7.0.0-beta.0 || ^8.0.0
+ peerDependenciesMeta:
+ '@opentelemetry/api':
+ optional: true
+ typescript:
+ optional: true
+
'@sveltejs/vite-plugin-svelte@7.3.0':
resolution: {integrity: sha512-QbRoJyD92e9R0ufeQIWRHrCC0ObcqSv/aBDdrQMoU+sypav3cDx5wytdQ6GLdXjEMO6xjrXGzfkUygng8JMv0A==}
engines: {node: ^20.19 || ^22.12 || >=24}
@@ -5366,6 +5576,9 @@ packages:
'@types/codemirror@5.60.18':
resolution: {integrity: sha512-aSBOPXH2PXRYixxUpVP1sJ5+S0vEfKDvR+lABZ7Kju/9Qb0SSbZk72NihWaKoQbANyibs92q4DBfYasywxnNkA==}
+ '@types/cookie@0.6.0':
+ resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
+
'@types/d3-array@3.2.2':
resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==}
@@ -6154,6 +6367,9 @@ packages:
resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
engines: {node: '>=6.5'}
+ abstract-logging@2.0.1:
+ resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==}
+
acorn-import-attributes@1.9.5:
resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==}
peerDependencies:
@@ -6183,9 +6399,20 @@ packages:
resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==}
engines: {node: '>= 14'}
+ ajv-formats@3.0.1:
+ resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==}
+ peerDependencies:
+ ajv: ^8.0.0
+ peerDependenciesMeta:
+ ajv:
+ optional: true
+
ajv@6.15.0:
resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==}
+ ajv@8.20.0:
+ resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==}
+
alien-signals@3.2.1:
resolution: {integrity: sha512-I8FjmltrfnDFoZedi5CG8DghVYNhzb/Ijluz7tCSJH0xpd0484Kowhbb1XDYOxfJpU1p5wnM2X54dA+IfGyD1g==}
@@ -6278,6 +6505,10 @@ packages:
async@3.2.6:
resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
+ atomic-sleep@1.0.0:
+ resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
+ engines: {node: '>=8.0.0'}
+
autoprefixer@10.5.4:
resolution: {integrity: sha512-MaU0U/za7N3r6brxD4YB/l4NSrFzLPlANv6wEuQVaIPlD3L4W9rFcQPbL/EilY9BHhHvhfcz3gInDLrEtWT4EA==}
engines: {node: ^10 || ^12 || >=14}
@@ -6285,6 +6516,9 @@ packages:
peerDependencies:
postcss: ^8.1.0
+ avvio@9.3.0:
+ resolution: {integrity: sha512-g2tQ7LE7oOSqDfwEm3M+ZCMTJc7KiZCdJ4UwyZJb5ckTKyYu50OYmvv0mCFXPuYXoM4zkSt8zM9XQ9KCvxA74A==}
+
axe-core@4.13.0:
resolution: {integrity: sha512-UzGt8zg7Ny8djbYMhxl2zuEevVa7r2gJjYY5Lwr1xM7+XU2nd6CkIWFTVcCIbAP63vSz71NaVyyuSk9lHKcy0A==}
engines: {node: '>=4'}
@@ -6609,6 +6843,14 @@ packages:
cookie-es@3.1.1:
resolution: {integrity: sha512-UaXxwISYJPTr9hwQxMFYZ7kNhSXboMXP+Z3TRX6f1/NyaGPfuNUZOWP1pUEb75B2HjfklIYLVRfWiFZJyC6Npg==}
+ cookie@0.6.0:
+ resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
+ engines: {node: '>= 0.6'}
+
+ cookie@1.1.1:
+ resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==}
+ engines: {node: '>=18'}
+
core-js-compat@3.49.0:
resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==}
@@ -7395,6 +7637,9 @@ packages:
resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==}
engines: {node: '>=0.10.0'}
+ fast-decode-uri-component@1.0.1:
+ resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==}
+
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
@@ -7408,6 +7653,9 @@ packages:
fast-json-stable-stringify@2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+ fast-json-stringify@7.0.1:
+ resolution: {integrity: sha512-eRSayARSbbwlBjpP4vnTTIRD5QPcIrmihPxDeN1DtKnHPg66UuJLx+8hlK1kaFdjvzyQ/dzALoi4vwAQ+T+iZA==}
+
fast-levenshtein@2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
@@ -7415,15 +7663,30 @@ packages:
resolution: {integrity: sha512-99jPl8JkCSCa4VlboNU1XuL98ijm74Pm9CGo6H4BoMVoVh1uhguQcvwLgXDT8Vkl2qj/UEQ0J9gD8beHjTFk1w==}
hasBin: true
+ fast-querystring@1.1.2:
+ resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==}
+
fast-string-truncated-width@3.0.3:
resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==}
fast-string-width@3.0.2:
resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==}
+ fast-uri@3.1.5:
+ resolution: {integrity: sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw==}
+
+ fast-uri@4.1.2:
+ resolution: {integrity: sha512-TyGmBcbDTZXcb2cj5MV89DrF42DKvb3y5DDUNh95iO+IMeAzMkVSxK1PZRrRIpc9yg8U2GhGdbofNa0LS/a4Bw==}
+
fast-wrap-ansi@0.2.0:
resolution: {integrity: sha512-rLV8JHxTyhVmFYhBJuMujcrHqOT2cnO5Zxj37qROj23CP39GXubJRBUFF0z8KFK77Uc0SukZUf7JZhsVEQ6n8w==}
+ fastify-plugin@6.0.0:
+ resolution: {integrity: sha512-fZOty7z3O7vOliF6d8bHE3wiEh1KcNnKEQensSgTk9C1DvN6nRLS++XVd86v33Hw/8u9Un8A1zDrQ8ujcQDHEg==}
+
+ fastify@5.12.0:
+ resolution: {integrity: sha512-A3RNEaDIHWaxFW8n8rNJaW1wQ+XAXuoU71llfUQJjuh5WaYLmKfRhhanaJBOx8m2EBPQkR6sDBovYdHNe9F6rA==}
+
fastq@1.20.1:
resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==}
@@ -7453,6 +7716,10 @@ packages:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
+ find-my-way@9.8.0:
+ resolution: {integrity: sha512-JtyUgATO7qxRp2zKhrmWof74Mqxc1ikbwpwMY97p8ipuTj2QtreA4gK2JNAF6SOqqHnYYkwMUvsgQVi2AJxIyw==}
+ engines: {node: '>=20'}
+
find-up-simple@1.0.1:
resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==}
engines: {node: '>=18'}
@@ -7794,6 +8061,10 @@ packages:
resolution: {integrity: sha512-HuEDBTI70aYdx1v6U97SbNx9F1+svQKBDo30o0b9fw055LMepzpOOd0Ccg9Q6tbqmBSJaMuY0fB7yw9/vjBYCA==}
engines: {node: '>=12.22.0'}
+ ipaddr.js@2.5.0:
+ resolution: {integrity: sha512-aq+t5NAc+cS6rZQQVWC2x98CPqGtKKTMDd4Gaodv0wShnItdKg/51djkGJ1hqH+Oy0ivDftCbSLCQob8zso01w==}
+ engines: {node: '>= 10'}
+
iron-webcrypto@1.2.1:
resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==}
@@ -7950,9 +8221,15 @@ packages:
json-buffer@3.0.1:
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+ json-schema-ref-resolver@3.0.0:
+ resolution: {integrity: sha512-hOrZIVL5jyYFjzk7+y7n5JDzGlU8rfWDuYyHwGa2WA8/pcmMHezp2xsVwxrebD/Q9t8Nc5DboieySDpCp4WG4A==}
+
json-schema-traverse@0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+ json-schema-traverse@1.0.0:
+ resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
+
json-stable-stringify-without-jsonify@1.0.1:
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
@@ -8025,6 +8302,9 @@ packages:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
+ light-my-request@6.6.0:
+ resolution: {integrity: sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A==}
+
lightningcss-android-arm64@1.33.0:
resolution: {integrity: sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==}
engines: {node: '>= 12.0.0'}
@@ -8663,6 +8943,10 @@ packages:
resolution: {integrity: sha512-08+12qcOVEA0fS9g/VxKS27HaT94nRutUT77J2dr8zv/unzXopvhBuF8tNLWsoLQ5IgrQ6eptGeGqUYat82U1w==}
engines: {node: '>=20'}
+ on-exit-leak-free@2.1.2:
+ resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==}
+ engines: {node: '>=14.0.0'}
+
on-finished@2.4.1:
resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
engines: {node: '>= 0.8'}
@@ -8802,6 +9086,9 @@ packages:
resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==}
engines: {node: 18 || 20 || >=22}
+ path-to-regexp@8.4.2:
+ resolution: {integrity: sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==}
+
pathe@1.1.2:
resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
@@ -8826,6 +9113,16 @@ packages:
resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==}
engines: {node: '>=12'}
+ pino-abstract-transport@3.0.0:
+ resolution: {integrity: sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==}
+
+ pino-std-serializers@7.1.0:
+ resolution: {integrity: sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==}
+
+ pino@10.3.1:
+ resolution: {integrity: sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==}
+ hasBin: true
+
pkce-challenge@5.0.1:
resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==}
engines: {node: '>=16.20.0'}
@@ -9067,6 +9364,12 @@ packages:
process-nextick-args@2.0.1:
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
+ process-warning@4.0.1:
+ resolution: {integrity: sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==}
+
+ process-warning@5.1.0:
+ resolution: {integrity: sha512-jQSaVHsPgtyw60e1rQ/A+/ArPEj/S8pS/vFnyGa/gYFXrKk/6RuDkoqVDQ5NI5MmS01698ltlAk0NoDBNLujRw==}
+
process@0.11.10:
resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
engines: {node: '>= 0.6.0'}
@@ -9133,6 +9436,9 @@ packages:
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+ quick-format-unescaped@4.0.4:
+ resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==}
+
quote-js-string@0.1.0:
resolution: {integrity: sha512-Y3NoRtprEEZQD8RfxMCfS0ZTqc4e+i18OrXEXAvpM6TfC/3y+0L5rNbZiSnbBBEkDfFzbpd8o+cE8q3/anjMGA==}
engines: {node: '>=22'}
@@ -9182,6 +9488,13 @@ packages:
resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==}
engines: {node: '>= 20.19.0'}
+ real-require@0.2.0:
+ resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==}
+ engines: {node: '>= 12.13.0'}
+
+ real-require@1.0.0:
+ resolution: {integrity: sha512-P4nbQYQfePJxRSmY+v/KINxVucm4NF3p3s7pJveMTtom52FR4YGltUQLB8idDXwDDWW+eYrWDFbuzUnjoWHF7g==}
+
recast@0.23.11:
resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==}
engines: {node: '>= 4'}
@@ -9228,6 +9541,10 @@ packages:
peerDependencies:
vue: '>= 3.4.0'
+ require-from-string@2.0.2:
+ resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
+ engines: {node: '>=0.10.0'}
+
reserved-identifiers@1.2.0:
resolution: {integrity: sha512-yE7KUfFvaBFzGPs5H3Ops1RevfUEsDc5Iz65rOwWg4lE8HJSYtle77uul3+573457oHvBKuHYDl/xqUkKpEEdw==}
engines: {node: '>=18'}
@@ -9244,6 +9561,10 @@ packages:
engines: {node: '>= 0.4'}
hasBin: true
+ ret@0.5.0:
+ resolution: {integrity: sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==}
+ engines: {node: '>=10'}
+
retry@0.12.0:
resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==}
engines: {node: '>= 4'}
@@ -9252,6 +9573,9 @@ packages:
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+ rfdc@1.4.1:
+ resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
+
robust-predicates@3.0.3:
resolution: {integrity: sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==}
@@ -9336,6 +9660,14 @@ packages:
safe-buffer@5.2.1:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+ safe-regex2@5.1.1:
+ resolution: {integrity: sha512-mOSBvHGDZMuIEZMdOz/aCEYDCv0E7nfcNsIhUF+/P+xC7Hyf3FkvymqgPbg9D1EdSGu+uKbJgy09K/RKKc7kJA==}
+ hasBin: true
+
+ safe-stable-stringify@2.5.0:
+ resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==}
+ engines: {node: '>=10'}
+
safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
@@ -9357,6 +9689,9 @@ packages:
resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==}
engines: {node: '>=4'}
+ secure-json-parse@4.1.0:
+ resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==}
+
semver@7.8.5:
resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==}
engines: {node: '>=10'}
@@ -9391,6 +9726,12 @@ packages:
resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==}
engines: {node: '>= 18'}
+ set-cookie-parser@2.7.2:
+ resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==}
+
+ set-cookie-parser@3.1.2:
+ resolution: {integrity: sha512-5/r/lTwbJ3zQ+qwdUFZYeRNqda7P5HD8zQKqlSjdGt1/S0cjLAphHusj4Y58ahDtWn/g32xrIS58/ikOvwl0Lw==}
+
setprototypeof@1.2.0:
resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
@@ -9482,6 +9823,9 @@ packages:
peerDependencies:
solid-js: ^1.3
+ sonic-boom@4.2.1:
+ resolution: {integrity: sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==}
+
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
@@ -9509,6 +9853,10 @@ packages:
spdx-license-ids@3.0.23:
resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==}
+ split2@4.2.0:
+ resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
+ engines: {node: '>= 10.x'}
+
splitpanes@4.1.2:
resolution: {integrity: sha512-frNchoCv7w0nMQEuaDGgMGMU6jv3NhN6bBGQVfCNgwJdVcYaRmi1dwYDjp7SifAoUFdiQjBRB254LJNidzo15Q==}
peerDependencies:
@@ -9724,6 +10072,10 @@ packages:
text-decoder@1.2.7:
resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==}
+ thread-stream@4.2.0:
+ resolution: {integrity: sha512-e2zZ96wSChazBsbENf/Pcm/4swHt2cEKQ92rhUjkL9GCKiTDJIaTBenjE/m9DXi0QBmTMDkFDdOomUy20A1tDQ==}
+ engines: {node: '>=20'}
+
time-span@5.1.0:
resolution: {integrity: sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==}
engines: {node: '>=12'}
@@ -9770,6 +10122,10 @@ packages:
resolution: {integrity: sha512-41wJyvKep3yT2tyPqX/4blcfybknGB4D+oETKLs7Q76UiPqRpUJK3hr1nxelyYO0PHKVzJwlu0aCeEAsGI6rpw==}
engines: {node: '>=20'}
+ toad-cache@3.7.4:
+ resolution: {integrity: sha512-m1TdR/rvT7kgGJZhspNtXdsdYk0fddFpJJFlG5s+UkPFo6lkLoZ3YLOaovPYjq1R75NP5JfeTlSHaOsE09peCg==}
+ engines: {node: '>=20'}
+
toidentifier@1.0.1:
resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
engines: {node: '>=0.6'}
@@ -11147,11 +11503,11 @@ snapshots:
'@dxup/nuxt@0.5.6(@rspack/core@2.1.10(@swc/helpers@0.5.23))(esbuild@0.28.0)(magicast@0.5.2)(oxc-parser@0.143.0)(rolldown@1.2.3)(rollup@4.60.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0))':
dependencies:
'@dxup/unimport': 0.1.2
- '@nuxt/kit': 4.5.1(magic-string@1.1.1)(magicast@0.5.2)(oxc-parser@0.143.0)(rolldown@1.2.3)(unplugin@3.3.0(@rspack/core@2.1.10(@swc/helpers@0.5.23))(esbuild@0.28.0)(rolldown@1.2.3)(rollup@4.60.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0)))
+ '@nuxt/kit': 4.5.1(magic-string@1.2.0)(magicast@0.5.2)(oxc-parser@0.143.0)(rolldown@1.2.3)(unplugin@3.3.0(@rspack/core@2.1.10(@swc/helpers@0.5.23))(esbuild@0.28.0)(rolldown@1.2.3)(rollup@4.60.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0)))
'@vue/compiler-dom': 3.5.40
chokidar: 5.0.0
knitwork: 1.3.0
- magic-string: 1.1.1
+ magic-string: 1.2.0
pathe: 2.0.3
tinyglobby: 0.2.17
unplugin: 3.3.0(@rspack/core@2.1.10(@swc/helpers@0.5.23))(esbuild@0.28.0)(rolldown@1.2.3)(rollup@4.60.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0))
@@ -11411,6 +11767,37 @@ snapshots:
'@eslint/core': 1.2.1
levn: 0.4.1
+ '@fastify/ajv-compiler@4.0.6':
+ dependencies:
+ ajv: 8.20.0
+ ajv-formats: 3.0.1(ajv@8.20.0)
+ fast-uri: 4.1.2
+
+ '@fastify/error@4.2.0': {}
+
+ '@fastify/fast-json-stringify-compiler@5.1.0':
+ dependencies:
+ fast-json-stringify: 7.0.1
+
+ '@fastify/forwarded@3.0.2': {}
+
+ '@fastify/merge-json-schemas@0.2.1':
+ dependencies:
+ dequal: 2.0.3
+
+ '@fastify/middie@9.3.3':
+ dependencies:
+ '@fastify/error': 4.2.0
+ fastify-plugin: 6.0.0
+ find-my-way: 9.8.0
+ path-to-regexp: 8.4.2
+ reusify: 1.1.0
+
+ '@fastify/proxy-addr@5.1.0':
+ dependencies:
+ '@fastify/forwarded': 3.0.2
+ ipaddr.js: 2.5.0
+
'@floating-ui/core@1.8.0':
dependencies:
'@floating-ui/utils': 0.2.12
@@ -12075,9 +12462,9 @@ snapshots:
- utf-8-validate
- vue
- '@nuxt/kit@4.5.1(magic-string@1.1.1)(magicast@0.5.2)(oxc-parser@0.143.0)(rolldown@1.2.3)(unplugin@3.3.0(@rspack/core@2.1.10(@swc/helpers@0.5.23))(esbuild@0.28.0)(rolldown@1.2.3)(rollup@4.60.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0)))':
+ '@nuxt/kit@4.5.1(magic-string@1.1.1)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.3)(unplugin@3.3.0(@rspack/core@2.1.10(@swc/helpers@0.5.23))(esbuild@0.28.0)(rolldown@1.2.3)(rollup@4.60.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0)))':
dependencies:
- c12: 3.3.4(magicast@0.5.2)
+ c12: 3.3.4(magicast@0.5.4)
consola: 3.4.2
defu: 6.1.7
destr: 2.0.5
@@ -12105,9 +12492,9 @@ snapshots:
- rolldown
- unplugin
- '@nuxt/kit@4.5.1(magic-string@1.1.1)(magicast@0.5.4)(oxc-parser@0.143.0)(rolldown@1.2.3)(unplugin@3.3.0(@rspack/core@2.1.10(@swc/helpers@0.5.23))(esbuild@0.28.0)(rolldown@1.2.3)(rollup@4.60.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0)))':
+ '@nuxt/kit@4.5.1(magic-string@1.2.0)(magicast@0.5.2)(oxc-parser@0.143.0)(rolldown@1.2.3)(unplugin@3.3.0(@rspack/core@2.1.10(@swc/helpers@0.5.23))(esbuild@0.28.0)(rolldown@1.2.3)(rollup@4.60.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0)))':
dependencies:
- c12: 3.3.4(magicast@0.5.4)
+ c12: 3.3.4(magicast@0.5.2)
consola: 3.4.2
defu: 6.1.7
destr: 2.0.5
@@ -12125,7 +12512,7 @@ snapshots:
scule: 1.3.0
tinyglobby: 0.2.17
ufo: 1.6.4
- unctx: 3.0.0(magic-string@1.1.1)(oxc-parser@0.143.0)(rolldown@1.2.3)(unplugin@3.3.0(@rspack/core@2.1.10(@swc/helpers@0.5.23))(esbuild@0.28.0)(rolldown@1.2.3)(rollup@4.60.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0)))
+ unctx: 3.0.0(magic-string@1.2.0)(oxc-parser@0.143.0)(rolldown@1.2.3)(unplugin@3.3.0(@rspack/core@2.1.10(@swc/helpers@0.5.23))(esbuild@0.28.0)(rolldown@1.2.3)(rollup@4.60.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0)))
untyped: 2.0.0
verkit: 0.2.0
transitivePeerDependencies:
@@ -12748,6 +13135,8 @@ snapshots:
react-dom: 19.2.8(react@19.2.8)
shiki: 4.3.1
+ '@pinojs/redact@0.4.0': {}
+
'@pkgjs/parseargs@0.11.0':
optional: true
@@ -13553,10 +13942,39 @@ snapshots:
dependencies:
acorn: 8.18.0
+ '@sveltejs/adapter-node@5.5.7(@sveltejs/kit@2.70.2(@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.56.9(@typescript-eslint/types@8.67.0))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0)))(svelte@5.56.9(@typescript-eslint/types@8.67.0))(typescript@6.0.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0)))':
+ dependencies:
+ '@rollup/plugin-commonjs': 29.0.2(rollup@4.60.3)
+ '@rollup/plugin-json': 6.1.0(rollup@4.60.3)
+ '@rollup/plugin-node-resolve': 16.0.3(rollup@4.60.3)
+ '@rollup/plugin-replace': 6.0.3(rollup@4.60.3)
+ '@sveltejs/kit': 2.70.2(@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.56.9(@typescript-eslint/types@8.67.0))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0)))(svelte@5.56.9(@typescript-eslint/types@8.67.0))(typescript@6.0.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0))
+ rollup: 4.60.3
+
+ '@sveltejs/kit@2.70.2(@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.56.9(@typescript-eslint/types@8.67.0))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0)))(svelte@5.56.9(@typescript-eslint/types@8.67.0))(typescript@6.0.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0))':
+ dependencies:
+ '@standard-schema/spec': 1.1.0
+ '@sveltejs/acorn-typescript': 1.0.10(acorn@8.18.0)
+ '@sveltejs/vite-plugin-svelte': 7.3.0(svelte@5.56.9(@typescript-eslint/types@8.67.0))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0))
+ '@types/cookie': 0.6.0
+ acorn: 8.18.0
+ cookie: 0.6.0
+ devalue: 5.9.0
+ esm-env: 1.2.2
+ kleur: 4.1.5
+ magic-string: 0.30.21
+ mrmime: 2.0.1
+ set-cookie-parser: 3.1.2
+ sirv: 3.0.2
+ svelte: 5.56.9(@typescript-eslint/types@8.67.0)
+ vite: 8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0)
+ optionalDependencies:
+ typescript: 6.0.3
+
'@sveltejs/vite-plugin-svelte@7.3.0(svelte@5.56.9(@typescript-eslint/types@8.67.0))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0))':
dependencies:
deepmerge: 4.3.1
- magic-string: 1.1.1
+ magic-string: 1.2.0
obug: 2.1.4
svelte: 5.56.9(@typescript-eslint/types@8.67.0)
vite: 8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0)
@@ -13662,6 +14080,8 @@ snapshots:
dependencies:
'@types/tern': 0.23.9
+ '@types/cookie@0.6.0': {}
+
'@types/d3-array@3.2.2': {}
'@types/d3-axis@3.0.6':
@@ -14001,7 +14421,7 @@ snapshots:
'@unhead/bundler@3.3.1(@oxc-project/types@0.143.0)(@rspack/core@2.1.10(@swc/helpers@0.5.23))(@vitejs/devtools-kit@0.4.9(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0)))(esbuild@0.28.0)(lightningcss@1.33.0)(oxc-parser@0.143.0)(rolldown@1.2.3)(rollup@4.60.3)(unhead@3.3.1(@rspack/core@2.1.10(@swc/helpers@0.5.23))(esbuild@0.28.0)(rolldown@1.2.3)(rollup@4.60.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0)))(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0))':
dependencies:
- magic-string: 1.1.1
+ magic-string: 1.2.0
oxc-walker: 1.1.1(@oxc-project/types@0.143.0)(oxc-parser@0.143.0)(rolldown@1.2.3)
unhead: 3.3.1(@rspack/core@2.1.10(@swc/helpers@0.5.23))(esbuild@0.28.0)(rolldown@1.2.3)(rollup@4.60.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0))
unplugin: 3.3.0(@rspack/core@2.1.10(@swc/helpers@0.5.23))(esbuild@0.28.0)(rolldown@1.2.3)(rollup@4.60.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0))
@@ -14652,14 +15072,12 @@ snapshots:
dependencies:
event-target-shim: 5.0.1
+ abstract-logging@2.0.1: {}
+
acorn-import-attributes@1.9.5(acorn@8.18.0):
dependencies:
acorn: 8.18.0
- acorn-jsx@5.3.2(acorn@8.16.0):
- dependencies:
- acorn: 8.16.0
-
acorn-jsx@5.3.2(acorn@8.18.0):
dependencies:
acorn: 8.18.0
@@ -14672,6 +15090,10 @@ snapshots:
agent-base@7.1.4: {}
+ ajv-formats@3.0.1(ajv@8.20.0):
+ optionalDependencies:
+ ajv: 8.20.0
+
ajv@6.15.0:
dependencies:
fast-deep-equal: 3.1.3
@@ -14679,6 +15101,13 @@ snapshots:
json-schema-traverse: 0.4.1
uri-js: 4.4.1
+ ajv@8.20.0:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-uri: 3.1.5
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+
alien-signals@3.2.1: {}
ansi-regex@5.0.1: {}
@@ -14771,6 +15200,8 @@ snapshots:
async@3.2.6: {}
+ atomic-sleep@1.0.0: {}
+
autoprefixer@10.5.4(postcss@8.5.26):
dependencies:
browserslist: 4.28.6
@@ -14780,6 +15211,11 @@ snapshots:
postcss: 8.5.26
postcss-value-parser: 4.2.0
+ avvio@9.3.0:
+ dependencies:
+ '@fastify/error': 4.2.0
+ fastq: 1.20.1
+
axe-core@4.13.0: {}
axobject-query@4.1.0: {}
@@ -15080,6 +15516,10 @@ snapshots:
cookie-es@3.1.1: {}
+ cookie@0.6.0: {}
+
+ cookie@1.1.1: {}
+
core-js-compat@3.49.0:
dependencies:
browserslist: 4.28.6
@@ -15844,8 +16284,8 @@ snapshots:
espree@11.2.0:
dependencies:
- acorn: 8.16.0
- acorn-jsx: 5.3.2(acorn@8.16.0)
+ acorn: 8.18.0
+ acorn-jsx: 5.3.2(acorn@8.18.0)
eslint-visitor-keys: 5.0.1
esprima@4.0.1: {}
@@ -15914,6 +16354,8 @@ snapshots:
dependencies:
is-extendable: 0.1.1
+ fast-decode-uri-component@1.0.1: {}
+
fast-deep-equal@3.1.3: {}
fast-fifo@1.3.2: {}
@@ -15928,22 +16370,59 @@ snapshots:
fast-json-stable-stringify@2.1.0: {}
+ fast-json-stringify@7.0.1:
+ dependencies:
+ '@fastify/merge-json-schemas': 0.2.1
+ ajv: 8.20.0
+ ajv-formats: 3.0.1(ajv@8.20.0)
+ fast-uri: 4.1.2
+ json-schema-ref-resolver: 3.0.0
+ rfdc: 1.4.1
+
fast-levenshtein@2.0.6: {}
fast-npm-meta@2.2.0:
dependencies:
cac: 7.0.0
+ fast-querystring@1.1.2:
+ dependencies:
+ fast-decode-uri-component: 1.0.1
+
fast-string-truncated-width@3.0.3: {}
fast-string-width@3.0.2:
dependencies:
fast-string-truncated-width: 3.0.3
+ fast-uri@3.1.5: {}
+
+ fast-uri@4.1.2: {}
+
fast-wrap-ansi@0.2.0:
dependencies:
fast-string-width: 3.0.2
+ fastify-plugin@6.0.0: {}
+
+ fastify@5.12.0:
+ dependencies:
+ '@fastify/ajv-compiler': 4.0.6
+ '@fastify/error': 4.2.0
+ '@fastify/fast-json-stringify-compiler': 5.1.0
+ '@fastify/proxy-addr': 5.1.0
+ abstract-logging: 2.0.1
+ avvio: 9.3.0
+ fast-json-stringify: 7.0.1
+ find-my-way: 9.8.0
+ light-my-request: 6.6.0
+ pino: 10.3.1
+ process-warning: 5.1.0
+ rfdc: 1.4.1
+ secure-json-parse: 4.1.0
+ semver: 7.8.5
+ toad-cache: 3.7.4
+
fastq@1.20.1:
dependencies:
reusify: 1.1.0
@@ -15970,6 +16449,12 @@ snapshots:
dependencies:
to-regex-range: 5.0.1
+ find-my-way@9.8.0:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-querystring: 1.1.2
+ safe-regex2: 5.1.1
+
find-up-simple@1.0.1: {}
find-up@5.0.0:
@@ -16312,6 +16797,8 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ ipaddr.js@2.5.0: {}
+
iron-webcrypto@1.2.1: {}
is-builtin-module@5.0.0:
@@ -16437,8 +16924,14 @@ snapshots:
json-buffer@3.0.1: {}
+ json-schema-ref-resolver@3.0.0:
+ dependencies:
+ dequal: 2.0.3
+
json-schema-traverse@0.4.1: {}
+ json-schema-traverse@1.0.0: {}
+
json-stable-stringify-without-jsonify@1.0.1: {}
json5@2.2.3: {}
@@ -16512,6 +17005,12 @@ snapshots:
prelude-ls: 1.2.1
type-check: 0.4.0
+ light-my-request@6.6.0:
+ dependencies:
+ cookie: 1.1.1
+ process-warning: 4.0.1
+ set-cookie-parser: 2.7.2
+
lightningcss-android-arm64@1.33.0:
optional: true
@@ -17575,6 +18074,8 @@ snapshots:
on-change@6.0.2: {}
+ on-exit-leak-free@2.1.2: {}
+
on-finished@2.4.1:
dependencies:
ee-first: 1.1.1
@@ -17810,6 +18311,8 @@ snapshots:
lru-cache: 11.3.6
minipass: 7.1.3
+ path-to-regexp@8.4.2: {}
+
pathe@1.1.2: {}
pathe@2.0.3: {}
@@ -17824,6 +18327,26 @@ snapshots:
picomatch@4.0.5: {}
+ pino-abstract-transport@3.0.0:
+ dependencies:
+ split2: 4.2.0
+
+ pino-std-serializers@7.1.0: {}
+
+ pino@10.3.1:
+ dependencies:
+ '@pinojs/redact': 0.4.0
+ atomic-sleep: 1.0.0
+ on-exit-leak-free: 2.1.2
+ pino-abstract-transport: 3.0.0
+ pino-std-serializers: 7.1.0
+ process-warning: 5.1.0
+ quick-format-unescaped: 4.0.4
+ real-require: 0.2.0
+ safe-stable-stringify: 2.5.0
+ sonic-boom: 4.2.1
+ thread-stream: 4.2.0
+
pkce-challenge@5.0.1: {}
pkg-types@1.3.1:
@@ -18051,6 +18574,10 @@ snapshots:
process-nextick-args@2.0.1: {}
+ process-warning@4.0.1: {}
+
+ process-warning@5.1.0: {}
+
process@0.11.10: {}
promise@7.3.1:
@@ -18145,6 +18672,8 @@ snapshots:
queue-microtask@1.2.3: {}
+ quick-format-unescaped@4.0.4: {}
+
quote-js-string@0.1.0: {}
radix3@1.1.2: {}
@@ -18208,6 +18737,10 @@ snapshots:
readdirp@5.0.0: {}
+ real-require@0.2.0: {}
+
+ real-require@1.0.0: {}
+
recast@0.23.11:
dependencies:
ast-types: 0.16.1
@@ -18263,7 +18796,7 @@ snapshots:
'@vueuse/shared': 14.4.0(vue@3.5.41(typescript@5.9.3))
aria-hidden: 1.2.6
defu: 6.1.7
- ohash: 2.0.11
+ ohash: 2.0.12
vue: 3.5.41(typescript@5.9.3)
transitivePeerDependencies:
- '@vue/composition-api'
@@ -18280,11 +18813,13 @@ snapshots:
'@vueuse/shared': 14.4.0(vue@3.5.41(typescript@6.0.3))
aria-hidden: 1.2.6
defu: 6.1.7
- ohash: 2.0.11
+ ohash: 2.0.12
vue: 3.5.41(typescript@6.0.3)
transitivePeerDependencies:
- '@vue/composition-api'
+ require-from-string@2.0.2: {}
+
reserved-identifiers@1.2.0: {}
resolve-from@5.0.0: {}
@@ -18298,10 +18833,14 @@ snapshots:
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
+ ret@0.5.0: {}
+
retry@0.12.0: {}
reusify@1.1.0: {}
+ rfdc@1.4.1: {}
+
robust-predicates@3.0.3: {}
rolldown-plugin-dts@0.27.13(@volar/typescript@2.4.28(typescript@5.9.3))(oxc-resolver@11.24.2)(rolldown@1.2.3)(typescript@5.9.3):
@@ -18336,7 +18875,7 @@ snapshots:
rolldown-string@0.3.1(rolldown@1.2.3):
dependencies:
- magic-string: 1.1.1
+ magic-string: 1.2.0
optionalDependencies:
rolldown: 1.2.3
@@ -18445,6 +18984,12 @@ snapshots:
safe-buffer@5.2.1: {}
+ safe-regex2@5.1.1:
+ dependencies:
+ ret: 0.5.0
+
+ safe-stable-stringify@2.5.0: {}
+
safer-buffer@2.1.2: {}
sax@1.6.0: {}
@@ -18464,6 +19009,8 @@ snapshots:
extend-shallow: 2.0.1
kind-of: 6.0.3
+ secure-json-parse@4.1.0: {}
+
semver@7.8.5: {}
send@1.2.1(supports-color@10.2.2):
@@ -18505,6 +19052,10 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ set-cookie-parser@2.7.2: {}
+
+ set-cookie-parser@3.1.2: {}
+
setprototypeof@1.2.0: {}
sharp@0.34.5:
@@ -18676,6 +19227,10 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ sonic-boom@4.2.1:
+ dependencies:
+ atomic-sleep: 1.0.0
+
source-map-js@1.2.1: {}
source-map-support@0.5.21:
@@ -18698,6 +19253,8 @@ snapshots:
spdx-license-ids@3.0.23: {}
+ split2@4.2.0: {}
+
splitpanes@4.1.2(vue@3.5.41(typescript@5.9.3)):
dependencies:
vue: 3.5.41(typescript@5.9.3)
@@ -18954,6 +19511,10 @@ snapshots:
transitivePeerDependencies:
- react-native-b4a
+ thread-stream@4.2.0:
+ dependencies:
+ real-require: 1.0.0
+
time-span@5.1.0:
dependencies:
convert-hrtime: 5.0.0
@@ -18988,6 +19549,8 @@ snapshots:
'@sindresorhus/base62': 1.0.0
reserved-identifiers: 1.2.0
+ toad-cache@3.7.4: {}
+
toidentifier@1.0.1: {}
token-stream@1.0.0: {}
@@ -19150,6 +19713,13 @@ snapshots:
rolldown: 1.2.3
unplugin: 3.3.0(@rspack/core@2.1.10(@swc/helpers@0.5.23))(esbuild@0.28.0)(rolldown@1.2.3)(rollup@4.60.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0))
+ unctx@3.0.0(magic-string@1.2.0)(oxc-parser@0.143.0)(rolldown@1.2.3)(unplugin@3.3.0(@rspack/core@2.1.10(@swc/helpers@0.5.23))(esbuild@0.28.0)(rolldown@1.2.3)(rollup@4.60.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0))):
+ optionalDependencies:
+ magic-string: 1.2.0
+ oxc-parser: 0.143.0
+ rolldown: 1.2.3
+ unplugin: 3.3.0(@rspack/core@2.1.10(@swc/helpers@0.5.23))(esbuild@0.28.0)(rolldown@1.2.3)(rollup@4.60.3)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0))
+
undici-types@8.3.0: {}
undici@8.10.0: {}
@@ -19213,7 +19783,7 @@ snapshots:
escape-string-regexp: 5.0.0
estree-walker: 3.0.3
local-pkg: 1.2.1
- magic-string: 1.1.1
+ magic-string: 1.2.0
mlly: 1.8.2
pathe: 2.0.3
picomatch: 4.0.5
@@ -19486,7 +20056,7 @@ snapshots:
dependencies:
estree-walker: 3.0.3
exsolve: 1.1.1
- magic-string: 1.1.1
+ magic-string: 1.2.0
pathe: 2.0.3
source-map-js: 1.2.1
vite: 8.2.1(@types/node@26.2.0)(esbuild@0.28.0)(jiti@2.7.0)(terser@5.47.1)(tsx@4.23.12)(yaml@2.9.0)
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index b69cc635..45273549 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -64,6 +64,8 @@ catalogs:
'@nuxt/kit': *nuxt
'@preact/preset-vite': ^2.10.6
'@rsbuild/core': ^2.1.13
+ '@sveltejs/adapter-node': ^5.3.3
+ '@sveltejs/kit': ^2.46.4
'@vitejs/plugin-vue': ^6.0.8
lightningcss: ^1.33.0
magic-string: ^1.2.0
@@ -75,6 +77,7 @@ catalogs:
vite: ^8.2.1
vite-plugin-solid: ^2.11.14
deps:
+ '@fastify/middie': ^9.0.3
'@hono/node-server': ^1.19.17
'@json-render/core': ^0.19.0
'@modelcontextprotocol/client': ^2.0.0
@@ -85,6 +88,7 @@ catalogs:
chokidar: ^5.0.0
crossws: ^0.4.10
destr: ^2.0.5
+ fastify: ^5.7.1
get-port-please: ^3.2.0
h3: ^2.0.1-rc.26
hono: ^4.13.2
diff --git a/tests/__snapshots__/tsnapi/devframe/rpc/transports/ws-deno.snapshot.d.ts b/tests/__snapshots__/tsnapi/devframe/rpc/transports/ws-deno.snapshot.d.ts
new file mode 100644
index 00000000..28315ab8
--- /dev/null
+++ b/tests/__snapshots__/tsnapi/devframe/rpc/transports/ws-deno.snapshot.d.ts
@@ -0,0 +1,16 @@
+/**
+ * Generated by tsnapi — public API snapshot of `devframe/rpc/transports/ws-deno`
+ */
+// #region Interfaces
+export interface AttachDenoWsTransportOptions {
+ allowedOrigins?: readonly string[] | WsOriginRegistry | false;
+}
+export interface DenoWsTier {
+ handleUpgrade: (_: Request, _: unknown) => Promise;
+ close: () => Promise;
+}
+// #endregion
+
+// #region Functions
+export declare function attachDenoWsTransport(_: ContextRpcServer, _?: AttachDenoWsTransportOptions): Promise;
+// #endregion
\ No newline at end of file
diff --git a/tests/__snapshots__/tsnapi/devframe/rpc/transports/ws-deno.snapshot.js b/tests/__snapshots__/tsnapi/devframe/rpc/transports/ws-deno.snapshot.js
new file mode 100644
index 00000000..5e5fbef2
--- /dev/null
+++ b/tests/__snapshots__/tsnapi/devframe/rpc/transports/ws-deno.snapshot.js
@@ -0,0 +1,6 @@
+/**
+ * Generated by tsnapi — public API snapshot of `devframe/rpc/transports/ws-deno`
+ */
+// #region Functions
+export async function attachDenoWsTransport(_, _) {}
+// #endregion
\ No newline at end of file
diff --git a/tsconfig.base.json b/tsconfig.base.json
index 42c821d2..33dc4569 100644
--- a/tsconfig.base.json
+++ b/tsconfig.base.json
@@ -16,6 +16,9 @@
"devframe/rpc/transports/ws-bun": [
"./packages/devframe/src/rpc/transports/ws-bun.ts"
],
+ "devframe/rpc/transports/ws-deno": [
+ "./packages/devframe/src/rpc/transports/ws-deno.ts"
+ ],
"devframe/rpc/transports/ws-server": [
"./packages/devframe/src/rpc/transports/ws-server.ts"
],