diff --git a/package.json b/package.json
index e5f7592..0215f9a 100644
--- a/package.json
+++ b/package.json
@@ -16,6 +16,8 @@
"@types/encodeurl": "^1.0.3",
"@types/mime-types": "^3.0.1",
"@types/node": "^24.10.0",
+ "@types/react": "^19.2.7",
+ "@types/react-dom": "^19.2.3",
"cross-spawn": "^7.0.6",
"eslint": "^9.39.0",
"eslint-config-prettier": "^10.1.8",
@@ -38,6 +40,9 @@
"lint-fix": "eslint --fix --ext .js,.ts .",
"test": "vitest run",
"build": "tsdown",
+ "build:ui": "yarn workspace @dobsjs/dev vite build",
+ "dev": "tsdown --watch",
+ "dev:ui": "yarn workspace @dobsjs/dev vite dev",
"run-script": "node -r @swc-node/register",
"publish": "lerna version && yarn build && lerna publish from-package"
},
diff --git a/packages/create-dobs/common-template/package.json b/packages/create-dobs/common-template/package.json
index dd5cf21..b1596bc 100644
--- a/packages/create-dobs/common-template/package.json
+++ b/packages/create-dobs/common-template/package.json
@@ -7,6 +7,7 @@
"build": "dobs build"
},
"devDependencies": {
+ "@dobsjs/dev": "latest",
"dobs": "latest"
}
}
diff --git a/packages/create-dobs/with-javascript/dobs.config.js b/packages/create-dobs/with-javascript/dobs.config.js
index f053ebf..3c931e5 100644
--- a/packages/create-dobs/with-javascript/dobs.config.js
+++ b/packages/create-dobs/with-javascript/dobs.config.js
@@ -1 +1,3 @@
-module.exports = {};
+module.exports = {
+ devtool: true,
+};
diff --git a/packages/create-dobs/with-typescript/dobs.config.ts b/packages/create-dobs/with-typescript/dobs.config.ts
index 1358253..f7eb368 100644
--- a/packages/create-dobs/with-typescript/dobs.config.ts
+++ b/packages/create-dobs/with-typescript/dobs.config.ts
@@ -1,3 +1,5 @@
import { defineConfig } from 'dobs';
-export default defineConfig({});
+export default defineConfig({
+ devtool: true,
+});
diff --git a/packages/dobs-dev/compiled-ui/index.html b/packages/dobs-dev/compiled-ui/index.html
new file mode 100644
index 0000000..f8936b8
--- /dev/null
+++ b/packages/dobs-dev/compiled-ui/index.html
@@ -0,0 +1,12663 @@
+
+
+
+
+
+ Document
+
+
+
+
+
+
+
+
+d
diff --git a/packages/dobs-dev/index.html b/packages/dobs-dev/index.html
new file mode 100644
index 0000000..c21860f
--- /dev/null
+++ b/packages/dobs-dev/index.html
@@ -0,0 +1,15 @@
+
+
+
+
+
+ Document
+
+
+
+
+
+
+
diff --git a/packages/dobs-dev/package.json b/packages/dobs-dev/package.json
new file mode 100644
index 0000000..939ac2a
--- /dev/null
+++ b/packages/dobs-dev/package.json
@@ -0,0 +1,33 @@
+{
+ "name": "@dobsjs/dev",
+ "version": "0.1.0-beta.3",
+ "main": "./dist/index.js",
+ "module": "./dist/index.mjs",
+ "types": "./dist/index.d.ts",
+ "repository": "https://github.com/zely-js/dobs",
+ "description": "Devtool for dobs",
+ "files": [
+ "dist",
+ "compiled-ui"
+ ],
+ "exports": {
+ ".": {
+ "import": {
+ "types": "./dist/index.d.mts",
+ "default": "./dist/index.mjs"
+ },
+ "require": {
+ "types": "./dist/index.d.ts",
+ "default": "./dist/index.js"
+ }
+ }
+ },
+ "devDependencies": {
+ "@vitejs/plugin-react": "^5.1.1",
+ "react": "^19.2.0",
+ "react-dom": "^19.2.0",
+ "sass": "^1.94.2",
+ "vite": "^7.2.4",
+ "vite-plugin-singlefile": "^2.3.0"
+ }
+}
diff --git a/packages/dobs-dev/src/index.ts b/packages/dobs-dev/src/index.ts
new file mode 100644
index 0000000..728fd7a
--- /dev/null
+++ b/packages/dobs-dev/src/index.ts
@@ -0,0 +1,5 @@
+import { join } from 'node:path';
+
+const path = join(__dirname, '../compiled-ui/index.html');
+
+export { path, path as default };
diff --git a/packages/dobs-dev/src/render.tsx b/packages/dobs-dev/src/render.tsx
new file mode 100644
index 0000000..7193256
--- /dev/null
+++ b/packages/dobs-dev/src/render.tsx
@@ -0,0 +1,4 @@
+import reactDOM from 'react-dom/client';
+import App from './ui';
+
+reactDOM.createRoot(document.getElementById('main') as any).render();
diff --git a/packages/dobs-dev/src/styles/global.scss b/packages/dobs-dev/src/styles/global.scss
new file mode 100644
index 0000000..a1001cb
--- /dev/null
+++ b/packages/dobs-dev/src/styles/global.scss
@@ -0,0 +1,63 @@
+@import url('https://fonts.googleapis.com/css2?family=Inter:opsz,wght@14..32,100..900&display=swap');
+
+@import './variables';
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ margin: 0;
+ background: var(--background);
+ color: var(--foreground);
+ font-family: 'Inter', sans-serif;
+}
+
+button,
+input {
+ font-family: 'Inter', sans-serif;
+}
+
+.card {
+ background: var(--card);
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+ padding: 20px;
+ max-width: 470px;
+ overflow: auto;
+}
+
+.button {
+ padding: 10px 14px;
+ background: var(--primary);
+ color: var(--primary-foreground);
+ border: none;
+ border-radius: var(--radius);
+ cursor: pointer;
+
+ &:disabled {
+ opacity: 0.5;
+ cursor: not-allowed;
+ }
+}
+
+.input {
+ width: 100%;
+ padding: 10px;
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+}
+
+.textarea {
+ width: 100%;
+ min-height: 160px;
+ padding: 10px;
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+}
+
+.header {
+ border-bottom: 1px solid var(--border);
+ padding: 20px;
+ background: var(--card);
+}
diff --git a/packages/dobs-dev/src/styles/variables.scss b/packages/dobs-dev/src/styles/variables.scss
new file mode 100644
index 0000000..7d3ea04
--- /dev/null
+++ b/packages/dobs-dev/src/styles/variables.scss
@@ -0,0 +1,21 @@
+:root {
+ --background: oklch(0.99 0 0);
+ --foreground: oklch(0.15 0 0);
+ --primary: oklch(0.28 0 0);
+ --primary-foreground: oklch(0.99 0 0);
+ --border: oklch(0.9 0 0);
+ --card: oklch(1 0 0);
+ --card-foreground: oklch(0.15 0 0);
+
+ --radius: 8px;
+}
+
+.dark {
+ --background: oklch(0.11 0 0);
+ --foreground: oklch(0.98 0 0);
+ --primary: oklch(0.98 0 0);
+ --primary-foreground: oklch(0.11 0 0);
+ --border: oklch(0.24 0 0);
+ --card: oklch(0.14 0 0);
+ --card-foreground: oklch(0.98 0 0);
+}
diff --git a/packages/dobs-dev/src/ui/components/RequestBuilder.tsx b/packages/dobs-dev/src/ui/components/RequestBuilder.tsx
new file mode 100644
index 0000000..94488a6
--- /dev/null
+++ b/packages/dobs-dev/src/ui/components/RequestBuilder.tsx
@@ -0,0 +1,138 @@
+import { useState } from 'react';
+
+interface Header {
+ key: string;
+ value: string;
+}
+
+export default function RequestBuilder({ onResponse, isLoading, setIsLoading }) {
+ const [method, setMethod] = useState('GET');
+ const [url, setUrl] = useState('/');
+ const [headers, setHeaders] = useState([
+ { key: 'Content-Type', value: 'application/json' },
+ ]);
+ const [body, setBody] = useState(
+ `{\n "title": "foo",\n "body": "bar",\n "userId": 1\n}`,
+ );
+
+ const addHeader = () => setHeaders([...headers, { key: '', value: '' }]);
+ const removeHeader = (i: number) => setHeaders(headers.filter((_, idx) => idx !== i));
+
+ const updateHeader = (index: number, field: 'key' | 'value', val: string) => {
+ const newHeaders = [...headers];
+ newHeaders[index][field] = val;
+ setHeaders(newHeaders);
+ };
+
+ const sendRequest = async () => {
+ setIsLoading(true);
+ const start = Date.now();
+
+ try {
+ const headerObj = Object.fromEntries(
+ headers.filter((h) => h.key && h.value).map((h) => [h.key, h.value]),
+ );
+
+ const opts: RequestInit = {
+ method,
+ headers: headerObj,
+ body: method !== 'GET' && method !== 'HEAD' ? body : undefined,
+ };
+
+ const res = await fetch(url, opts);
+ const end = Date.now();
+
+ const contentType = res.headers.get('content-type');
+ const data = contentType?.includes('json') ? await res.json() : await res.text();
+
+ onResponse({
+ status: res.status,
+ statusText: res.statusText,
+ headers: Object.fromEntries(res.headers.entries()),
+ data,
+ time: end - start,
+ });
+ } catch (err: any) {
+ onResponse({
+ status: 0,
+ statusText: 'Error',
+ headers: {},
+ data: err.message,
+ time: Date.now() - start,
+ });
+ } finally {
+ setIsLoading(false);
+ }
+ };
+
+ const config = JSON.parse(document.getElementById('_config').textContent);
+
+ return (
+
+
+
+
+
+ setUrl(e.target.value)} />
+
+
+
+
Headers
+
+ {headers.map((h, i) => (
+
+ updateHeader(i, 'key', e.target.value)}
+ />
+ updateHeader(i, 'value', e.target.value)}
+ />
+
+
+ ))}
+
+
+
+
Body
+
+ );
+}
diff --git a/packages/dobs-dev/src/ui/components/ResponseViewer.tsx b/packages/dobs-dev/src/ui/components/ResponseViewer.tsx
new file mode 100644
index 0000000..5f3cfbf
--- /dev/null
+++ b/packages/dobs-dev/src/ui/components/ResponseViewer.tsx
@@ -0,0 +1,27 @@
+export default function ResponseViewer({ response, isLoading }) {
+ if (isLoading) {
+ return Loading...
;
+ }
+
+ if (!response) {
+ return Waiting for request...
;
+ }
+
+ return (
+
+
Status
+
+ {response.status} {response.statusText}
+
+
+
Time
+
{response.time} ms
+
+
Headers
+
{JSON.stringify(response.headers, null, 2)}
+
+
Body
+
{JSON.stringify(response.data, null, 2)}
+
+ );
+}
diff --git a/packages/dobs-dev/src/ui/index.tsx b/packages/dobs-dev/src/ui/index.tsx
new file mode 100644
index 0000000..6646430
--- /dev/null
+++ b/packages/dobs-dev/src/ui/index.tsx
@@ -0,0 +1,26 @@
+// eslint-disable-next-line @typescript-eslint/ban-ts-comment
+// @ts-ignore
+import '../styles/global.scss';
+import { useState } from 'react';
+import RequestBuilder from './components/RequestBuilder';
+import ResponseViewer from './components/ResponseViewer';
+
+export default function App() {
+ const [response, setResponse] = useState(null);
+ const [isLoading, setIsLoading] = useState(false);
+
+ return (
+
+ );
+}
diff --git a/packages/dobs-dev/tsdown.config.ts b/packages/dobs-dev/tsdown.config.ts
new file mode 100644
index 0000000..beb8948
--- /dev/null
+++ b/packages/dobs-dev/tsdown.config.ts
@@ -0,0 +1,9 @@
+import { defineConfig } from 'tsdown';
+
+export default defineConfig([
+ {
+ entry: './src/index.ts',
+ platform: 'node',
+ format: ['cjs', 'esm'],
+ },
+]);
diff --git a/packages/dobs-dev/vite.config.ts b/packages/dobs-dev/vite.config.ts
new file mode 100644
index 0000000..c31f25b
--- /dev/null
+++ b/packages/dobs-dev/vite.config.ts
@@ -0,0 +1,18 @@
+import { dirname, resolve } from 'node:path';
+import { fileURLToPath } from 'node:url';
+
+import { defineConfig } from 'vite';
+import react from '@vitejs/plugin-react';
+import { viteSingleFile } from 'vite-plugin-singlefile';
+
+const __dirname = dirname(fileURLToPath(import.meta.url));
+
+export default defineConfig({
+ build: {
+ rollupOptions: {
+ input: resolve(__dirname, 'index.html'),
+ },
+ outDir: './compiled-ui/',
+ },
+ plugins: [react(), viteSingleFile()],
+});
diff --git a/packages/dobs/src/cli.ts b/packages/dobs/src/cli.ts
index b2a7bed..fd4c0ec 100644
--- a/packages/dobs/src/cli.ts
+++ b/packages/dobs/src/cli.ts
@@ -46,8 +46,15 @@ app
console.log(
chalk.white(
`\n${chalk.dim('$')} Server is running on ${chalk.cyan(chalk.underline(chalk.bold(`http://localhost:${port}`)))}`,
- ) + chalk.dim(` (Ready in ${(performance.now() - startTime).toFixed(2)}ms)\n`),
+ ) + chalk.dim(` (Ready in ${(performance.now() - startTime).toFixed(2)}ms)`),
);
+
+ if (config?.devtool) {
+ console.log(
+ chalk.dim(` - devtool : ${chalk.cyan(`http://localhost:${port}/_dev_`)}`),
+ );
+ }
+ console.log();
});
});
diff --git a/packages/dobs/src/config.ts b/packages/dobs/src/config.ts
index fdcae7f..04d143e 100644
--- a/packages/dobs/src/config.ts
+++ b/packages/dobs/src/config.ts
@@ -34,6 +34,9 @@ export interface ResolvedServerConfig {
plugins: Plugin[];
serverEntry: string;
+
+ /** enable devtool. (@dobsjs/dev package must have been installed.) */
+ devtool: boolean;
}
export type ServerConfig = Partial;
@@ -50,6 +53,7 @@ export const DEFAULT_CONFIG: ResolvedServerConfig = {
},
plugins: [],
serverEntry: 'server.entry',
+ devtool: false,
};
export function resolveConfig(config: ServerConfig): ResolvedServerConfig {
diff --git a/packages/dobs/src/server/index.ts b/packages/dobs/src/server/index.ts
index b915787..6601031 100644
--- a/packages/dobs/src/server/index.ts
+++ b/packages/dobs/src/server/index.ts
@@ -6,6 +6,7 @@ import { createPluginRunner } from '~/dobs/plugin';
import { createRouterMiddleware } from './router';
import { loadServerEntry } from './server-entry';
+import { devtool } from './plugins/devtool';
type CreateServerReturn = T['mode'] extends 'middleware'
? Middleware[]
@@ -15,6 +16,12 @@ export async function createDobsServer(
config?: T,
): Promise> {
const plugins = config?.plugins || [];
+
+ // optional plugins
+ if (config?.devtool) {
+ plugins.push(devtool());
+ }
+
const runner = createPluginRunner(plugins);
const resolvedConfig = resolveConfig(config);
diff --git a/packages/dobs/src/server/plugins/devtool.ts b/packages/dobs/src/server/plugins/devtool.ts
new file mode 100644
index 0000000..6fdd4de
--- /dev/null
+++ b/packages/dobs/src/server/plugins/devtool.ts
@@ -0,0 +1,39 @@
+import { readFileSync } from 'node:fs';
+import type { ResolvedServerConfig, Plugin } from 'dobs';
+
+export function devtool(): Plugin {
+ let config: ResolvedServerConfig;
+ return {
+ name: 'dobs/devtool',
+
+ resolvedConfig(_config) {
+ config = _config;
+ },
+
+ server(server) {
+ server.use(async (req, res, next) => {
+ if (!req.URL.pathname.startsWith('/_dev_')) return next();
+
+ try {
+ const path = await import('@dobsjs/dev');
+ const rawHTML = readFileSync(path.path).toString();
+
+ const replaced = rawHTML.replace(
+ /`;
+ },
+ );
+
+ res.html(replaced);
+ } catch (e) {
+ console.error(e);
+ throw new Error(
+ 'You have to install @dobsjs/dev to enable devtool plugin.\nnpm i --save-dev @dobsjs/dev',
+ );
+ }
+ });
+ },
+ };
+}
diff --git a/packages/dobs/tsdown.config.ts b/packages/dobs/tsdown.config.ts
index 8ebb5b5..abb058b 100644
--- a/packages/dobs/tsdown.config.ts
+++ b/packages/dobs/tsdown.config.ts
@@ -5,21 +5,25 @@ export default defineConfig([
entry: './src/index.ts',
platform: 'node',
format: ['cjs', 'esm'],
+ external: ['@dobsjs/dev'],
},
{
entry: './src/builder/exports.ts',
platform: 'node',
+ external: ['@dobsjs/dev'],
format: ['cjs', 'esm'],
},
{
entry: './src/experimental.ts',
platform: 'node',
+ external: ['@dobsjs/dev'],
format: ['cjs', 'esm'],
},
{
entry: './src/cli.ts',
platform: 'node',
format: ['cjs'],
+ external: ['@dobsjs/dev'],
dts: false,
},
]);
diff --git a/playgrounds/default/dobs.config.ts b/playgrounds/default/dobs.config.ts
index 04ec8cd..fc4bffb 100644
--- a/playgrounds/default/dobs.config.ts
+++ b/playgrounds/default/dobs.config.ts
@@ -3,7 +3,8 @@ import { websocket } from '@dobsjs/websocket';
import { cachePlugin } from 'dobs/experimental';
export default {
- port: 3000,
+ port: 3001,
+ devtool: true,
plugins: [
cachePlugin({ ttl: 1000 }),
websocket({
diff --git a/playgrounds/default/package.json b/playgrounds/default/package.json
index bc69c95..f365aa2 100644
--- a/playgrounds/default/package.json
+++ b/playgrounds/default/package.json
@@ -3,6 +3,7 @@
"version": "0.0.1-alpha.2",
"private": true,
"dependencies": {
+ "@dobsjs/dev": "workspace:*",
"@dobsjs/websocket": "workspace:*",
"dobs": "workspace:*"
},
diff --git a/tsconfig.json b/tsconfig.json
index 55842e9..b0f6745 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -2,6 +2,7 @@
"extends": "./tsconfig.base.json",
"include": [
"packages/**/*.ts",
+ "packages/**/*.tsx",
"packages/**/*.d.ts",
"packages/**/*.test.ts",
"packages/**/*.test.tsx",
@@ -12,7 +13,7 @@
"compilerOptions": {
"rootDir": ".",
"paths": {
- "~/dobs/*": ["./packages/dobs/src/*"],
+ "~/dobs/*": ["./packages/dobs/src/*"]
}
}
}
diff --git a/yarn.lock b/yarn.lock
index e2fc5f3..38091c2 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -16,6 +16,36 @@ __metadata:
languageName: node
linkType: hard
+"@babel/compat-data@npm:^7.27.2":
+ version: 7.28.5
+ resolution: "@babel/compat-data@npm:7.28.5"
+ checksum: 10c0/702a25de73087b0eba325c1d10979eed7c9b6662677386ba7b5aa6eace0fc0676f78343bae080a0176ae26f58bd5535d73b9d0fbb547fef377692e8b249353a7
+ languageName: node
+ linkType: hard
+
+"@babel/core@npm:^7.28.5":
+ version: 7.28.5
+ resolution: "@babel/core@npm:7.28.5"
+ dependencies:
+ "@babel/code-frame": "npm:^7.27.1"
+ "@babel/generator": "npm:^7.28.5"
+ "@babel/helper-compilation-targets": "npm:^7.27.2"
+ "@babel/helper-module-transforms": "npm:^7.28.3"
+ "@babel/helpers": "npm:^7.28.4"
+ "@babel/parser": "npm:^7.28.5"
+ "@babel/template": "npm:^7.27.2"
+ "@babel/traverse": "npm:^7.28.5"
+ "@babel/types": "npm:^7.28.5"
+ "@jridgewell/remapping": "npm:^2.3.5"
+ convert-source-map: "npm:^2.0.0"
+ debug: "npm:^4.1.0"
+ gensync: "npm:^1.0.0-beta.2"
+ json5: "npm:^2.2.3"
+ semver: "npm:^6.3.1"
+ checksum: 10c0/535f82238027621da6bdffbdbe896ebad3558b311d6f8abc680637a9859b96edbf929ab010757055381570b29cf66c4a295b5618318d27a4273c0e2033925e72
+ languageName: node
+ linkType: hard
+
"@babel/generator@npm:^7.28.5":
version: 7.28.5
resolution: "@babel/generator@npm:7.28.5"
@@ -29,6 +59,56 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-compilation-targets@npm:^7.27.2":
+ version: 7.27.2
+ resolution: "@babel/helper-compilation-targets@npm:7.27.2"
+ dependencies:
+ "@babel/compat-data": "npm:^7.27.2"
+ "@babel/helper-validator-option": "npm:^7.27.1"
+ browserslist: "npm:^4.24.0"
+ lru-cache: "npm:^5.1.1"
+ semver: "npm:^6.3.1"
+ checksum: 10c0/f338fa00dcfea931804a7c55d1a1c81b6f0a09787e528ec580d5c21b3ecb3913f6cb0f361368973ce953b824d910d3ac3e8a8ee15192710d3563826447193ad1
+ languageName: node
+ linkType: hard
+
+"@babel/helper-globals@npm:^7.28.0":
+ version: 7.28.0
+ resolution: "@babel/helper-globals@npm:7.28.0"
+ checksum: 10c0/5a0cd0c0e8c764b5f27f2095e4243e8af6fa145daea2b41b53c0c1414fe6ff139e3640f4e2207ae2b3d2153a1abd346f901c26c290ee7cb3881dd922d4ee9232
+ languageName: node
+ linkType: hard
+
+"@babel/helper-module-imports@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/helper-module-imports@npm:7.27.1"
+ dependencies:
+ "@babel/traverse": "npm:^7.27.1"
+ "@babel/types": "npm:^7.27.1"
+ checksum: 10c0/e00aace096e4e29290ff8648455c2bc4ed982f0d61dbf2db1b5e750b9b98f318bf5788d75a4f974c151bd318fd549e81dbcab595f46b14b81c12eda3023f51e8
+ languageName: node
+ linkType: hard
+
+"@babel/helper-module-transforms@npm:^7.28.3":
+ version: 7.28.3
+ resolution: "@babel/helper-module-transforms@npm:7.28.3"
+ dependencies:
+ "@babel/helper-module-imports": "npm:^7.27.1"
+ "@babel/helper-validator-identifier": "npm:^7.27.1"
+ "@babel/traverse": "npm:^7.28.3"
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: 10c0/549be62515a6d50cd4cfefcab1b005c47f89bd9135a22d602ee6a5e3a01f27571868ada10b75b033569f24dc4a2bb8d04bfa05ee75c16da7ade2d0db1437fcdb
+ languageName: node
+ linkType: hard
+
+"@babel/helper-plugin-utils@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/helper-plugin-utils@npm:7.27.1"
+ checksum: 10c0/94cf22c81a0c11a09b197b41ab488d416ff62254ce13c57e62912c85700dc2e99e555225787a4099ff6bae7a1812d622c80fbaeda824b79baa10a6c5ac4cf69b
+ languageName: node
+ linkType: hard
+
"@babel/helper-string-parser@npm:^7.27.1":
version: 7.27.1
resolution: "@babel/helper-string-parser@npm:7.27.1"
@@ -43,7 +123,24 @@ __metadata:
languageName: node
linkType: hard
-"@babel/parser@npm:^7.28.5":
+"@babel/helper-validator-option@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/helper-validator-option@npm:7.27.1"
+ checksum: 10c0/6fec5f006eba40001a20f26b1ef5dbbda377b7b68c8ad518c05baa9af3f396e780bdfded24c4eef95d14bb7b8fd56192a6ed38d5d439b97d10efc5f1a191d148
+ languageName: node
+ linkType: hard
+
+"@babel/helpers@npm:^7.28.4":
+ version: 7.28.4
+ resolution: "@babel/helpers@npm:7.28.4"
+ dependencies:
+ "@babel/template": "npm:^7.27.2"
+ "@babel/types": "npm:^7.28.4"
+ checksum: 10c0/aaa5fb8098926dfed5f223adf2c5e4c7fbba4b911b73dfec2d7d3083f8ba694d201a206db673da2d9b3ae8c01793e795767654558c450c8c14b4c2175b4fcb44
+ languageName: node
+ linkType: hard
+
+"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.27.2, @babel/parser@npm:^7.28.5":
version: 7.28.5
resolution: "@babel/parser@npm:7.28.5"
dependencies:
@@ -54,7 +151,55 @@ __metadata:
languageName: node
linkType: hard
-"@babel/types@npm:^7.28.5":
+"@babel/plugin-transform-react-jsx-self@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-react-jsx-self@npm:7.27.1"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/00a4f917b70a608f9aca2fb39aabe04a60aa33165a7e0105fd44b3a8531630eb85bf5572e9f242f51e6ad2fa38c2e7e780902176c863556c58b5ba6f6e164031
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-transform-react-jsx-source@npm:^7.27.1":
+ version: 7.27.1
+ resolution: "@babel/plugin-transform-react-jsx-source@npm:7.27.1"
+ dependencies:
+ "@babel/helper-plugin-utils": "npm:^7.27.1"
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 10c0/5e67b56c39c4d03e59e03ba80692b24c5a921472079b63af711b1d250fc37c1733a17069b63537f750f3e937ec44a42b1ee6a46cd23b1a0df5163b17f741f7f2
+ languageName: node
+ linkType: hard
+
+"@babel/template@npm:^7.27.2":
+ version: 7.27.2
+ resolution: "@babel/template@npm:7.27.2"
+ dependencies:
+ "@babel/code-frame": "npm:^7.27.1"
+ "@babel/parser": "npm:^7.27.2"
+ "@babel/types": "npm:^7.27.1"
+ checksum: 10c0/ed9e9022651e463cc5f2cc21942f0e74544f1754d231add6348ff1b472985a3b3502041c0be62dc99ed2d12cfae0c51394bf827452b98a2f8769c03b87aadc81
+ languageName: node
+ linkType: hard
+
+"@babel/traverse@npm:^7.27.1, @babel/traverse@npm:^7.28.3, @babel/traverse@npm:^7.28.5":
+ version: 7.28.5
+ resolution: "@babel/traverse@npm:7.28.5"
+ dependencies:
+ "@babel/code-frame": "npm:^7.27.1"
+ "@babel/generator": "npm:^7.28.5"
+ "@babel/helper-globals": "npm:^7.28.0"
+ "@babel/parser": "npm:^7.28.5"
+ "@babel/template": "npm:^7.27.2"
+ "@babel/types": "npm:^7.28.5"
+ debug: "npm:^4.3.1"
+ checksum: 10c0/f6c4a595993ae2b73f2d4cd9c062f2e232174d293edd4abe1d715bd6281da8d99e47c65857e8d0917d9384c65972f4acdebc6749a7c40a8fcc38b3c7fb3e706f
+ languageName: node
+ linkType: hard
+
+"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.27.1, @babel/types@npm:^7.28.2, @babel/types@npm:^7.28.4, @babel/types@npm:^7.28.5":
version: 7.28.5
resolution: "@babel/types@npm:7.28.5"
dependencies:
@@ -104,6 +249,19 @@ __metadata:
languageName: node
linkType: hard
+"@dobsjs/dev@workspace:*, @dobsjs/dev@workspace:packages/dobs-dev":
+ version: 0.0.0-use.local
+ resolution: "@dobsjs/dev@workspace:packages/dobs-dev"
+ dependencies:
+ "@vitejs/plugin-react": "npm:^5.1.1"
+ react: "npm:^19.2.0"
+ react-dom: "npm:^19.2.0"
+ sass: "npm:^1.94.2"
+ vite: "npm:^7.2.4"
+ vite-plugin-singlefile: "npm:^2.3.0"
+ languageName: unknown
+ linkType: soft
+
"@dobsjs/http@workspace:*, @dobsjs/http@workspace:packages/dobs-http":
version: 0.0.0-use.local
resolution: "@dobsjs/http@workspace:packages/dobs-http"
@@ -593,7 +751,7 @@ __metadata:
languageName: node
linkType: hard
-"@jridgewell/gen-mapping@npm:^0.3.12":
+"@jridgewell/gen-mapping@npm:^0.3.12, @jridgewell/gen-mapping@npm:^0.3.5":
version: 0.3.13
resolution: "@jridgewell/gen-mapping@npm:0.3.13"
dependencies:
@@ -603,6 +761,16 @@ __metadata:
languageName: node
linkType: hard
+"@jridgewell/remapping@npm:^2.3.5":
+ version: 2.3.5
+ resolution: "@jridgewell/remapping@npm:2.3.5"
+ dependencies:
+ "@jridgewell/gen-mapping": "npm:^0.3.5"
+ "@jridgewell/trace-mapping": "npm:^0.3.24"
+ checksum: 10c0/3de494219ffeb2c5c38711d0d7bb128097edf91893090a2dbc8ee0b55d092bb7347b1fd0f478486c5eab010e855c73927b1666f2107516d472d24a73017d1194
+ languageName: node
+ linkType: hard
+
"@jridgewell/resolve-uri@npm:^3.1.0":
version: 3.1.2
resolution: "@jridgewell/resolve-uri@npm:3.1.2"
@@ -1526,6 +1694,150 @@ __metadata:
languageName: node
linkType: hard
+"@parcel/watcher-android-arm64@npm:2.5.1":
+ version: 2.5.1
+ resolution: "@parcel/watcher-android-arm64@npm:2.5.1"
+ conditions: os=android & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@parcel/watcher-darwin-arm64@npm:2.5.1":
+ version: 2.5.1
+ resolution: "@parcel/watcher-darwin-arm64@npm:2.5.1"
+ conditions: os=darwin & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@parcel/watcher-darwin-x64@npm:2.5.1":
+ version: 2.5.1
+ resolution: "@parcel/watcher-darwin-x64@npm:2.5.1"
+ conditions: os=darwin & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@parcel/watcher-freebsd-x64@npm:2.5.1":
+ version: 2.5.1
+ resolution: "@parcel/watcher-freebsd-x64@npm:2.5.1"
+ conditions: os=freebsd & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@parcel/watcher-linux-arm-glibc@npm:2.5.1":
+ version: 2.5.1
+ resolution: "@parcel/watcher-linux-arm-glibc@npm:2.5.1"
+ conditions: os=linux & cpu=arm & libc=glibc
+ languageName: node
+ linkType: hard
+
+"@parcel/watcher-linux-arm-musl@npm:2.5.1":
+ version: 2.5.1
+ resolution: "@parcel/watcher-linux-arm-musl@npm:2.5.1"
+ conditions: os=linux & cpu=arm & libc=musl
+ languageName: node
+ linkType: hard
+
+"@parcel/watcher-linux-arm64-glibc@npm:2.5.1":
+ version: 2.5.1
+ resolution: "@parcel/watcher-linux-arm64-glibc@npm:2.5.1"
+ conditions: os=linux & cpu=arm64 & libc=glibc
+ languageName: node
+ linkType: hard
+
+"@parcel/watcher-linux-arm64-musl@npm:2.5.1":
+ version: 2.5.1
+ resolution: "@parcel/watcher-linux-arm64-musl@npm:2.5.1"
+ conditions: os=linux & cpu=arm64 & libc=musl
+ languageName: node
+ linkType: hard
+
+"@parcel/watcher-linux-x64-glibc@npm:2.5.1":
+ version: 2.5.1
+ resolution: "@parcel/watcher-linux-x64-glibc@npm:2.5.1"
+ conditions: os=linux & cpu=x64 & libc=glibc
+ languageName: node
+ linkType: hard
+
+"@parcel/watcher-linux-x64-musl@npm:2.5.1":
+ version: 2.5.1
+ resolution: "@parcel/watcher-linux-x64-musl@npm:2.5.1"
+ conditions: os=linux & cpu=x64 & libc=musl
+ languageName: node
+ linkType: hard
+
+"@parcel/watcher-win32-arm64@npm:2.5.1":
+ version: 2.5.1
+ resolution: "@parcel/watcher-win32-arm64@npm:2.5.1"
+ conditions: os=win32 & cpu=arm64
+ languageName: node
+ linkType: hard
+
+"@parcel/watcher-win32-ia32@npm:2.5.1":
+ version: 2.5.1
+ resolution: "@parcel/watcher-win32-ia32@npm:2.5.1"
+ conditions: os=win32 & cpu=ia32
+ languageName: node
+ linkType: hard
+
+"@parcel/watcher-win32-x64@npm:2.5.1":
+ version: 2.5.1
+ resolution: "@parcel/watcher-win32-x64@npm:2.5.1"
+ conditions: os=win32 & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@parcel/watcher@npm:^2.4.1":
+ version: 2.5.1
+ resolution: "@parcel/watcher@npm:2.5.1"
+ dependencies:
+ "@parcel/watcher-android-arm64": "npm:2.5.1"
+ "@parcel/watcher-darwin-arm64": "npm:2.5.1"
+ "@parcel/watcher-darwin-x64": "npm:2.5.1"
+ "@parcel/watcher-freebsd-x64": "npm:2.5.1"
+ "@parcel/watcher-linux-arm-glibc": "npm:2.5.1"
+ "@parcel/watcher-linux-arm-musl": "npm:2.5.1"
+ "@parcel/watcher-linux-arm64-glibc": "npm:2.5.1"
+ "@parcel/watcher-linux-arm64-musl": "npm:2.5.1"
+ "@parcel/watcher-linux-x64-glibc": "npm:2.5.1"
+ "@parcel/watcher-linux-x64-musl": "npm:2.5.1"
+ "@parcel/watcher-win32-arm64": "npm:2.5.1"
+ "@parcel/watcher-win32-ia32": "npm:2.5.1"
+ "@parcel/watcher-win32-x64": "npm:2.5.1"
+ detect-libc: "npm:^1.0.3"
+ is-glob: "npm:^4.0.3"
+ micromatch: "npm:^4.0.5"
+ node-addon-api: "npm:^7.0.0"
+ node-gyp: "npm:latest"
+ dependenciesMeta:
+ "@parcel/watcher-android-arm64":
+ optional: true
+ "@parcel/watcher-darwin-arm64":
+ optional: true
+ "@parcel/watcher-darwin-x64":
+ optional: true
+ "@parcel/watcher-freebsd-x64":
+ optional: true
+ "@parcel/watcher-linux-arm-glibc":
+ optional: true
+ "@parcel/watcher-linux-arm-musl":
+ optional: true
+ "@parcel/watcher-linux-arm64-glibc":
+ optional: true
+ "@parcel/watcher-linux-arm64-musl":
+ optional: true
+ "@parcel/watcher-linux-x64-glibc":
+ optional: true
+ "@parcel/watcher-linux-x64-musl":
+ optional: true
+ "@parcel/watcher-win32-arm64":
+ optional: true
+ "@parcel/watcher-win32-ia32":
+ optional: true
+ "@parcel/watcher-win32-x64":
+ optional: true
+ checksum: 10c0/8f35073d0c0b34a63d4c8d2213482f0ebc6a25de7b2cdd415d19cb929964a793cb285b68d1d50bfb732b070b3c82a2fdb4eb9c250eab709a1cd9d63345455a82
+ languageName: node
+ linkType: hard
+
"@pkgjs/parseargs@npm:^0.11.0":
version: 0.11.0
resolution: "@pkgjs/parseargs@npm:0.11.0"
@@ -1544,6 +1856,7 @@ __metadata:
version: 0.0.0-use.local
resolution: "@playgrounds/default@workspace:playgrounds/default"
dependencies:
+ "@dobsjs/dev": "workspace:*"
"@dobsjs/websocket": "workspace:*"
dobs: "workspace:*"
languageName: unknown
@@ -1765,6 +2078,13 @@ __metadata:
languageName: node
linkType: hard
+"@rolldown/pluginutils@npm:1.0.0-beta.47":
+ version: 1.0.0-beta.47
+ resolution: "@rolldown/pluginutils@npm:1.0.0-beta.47"
+ checksum: 10c0/eb0cfa7334d66f090c47eaac612174936b05f26e789352428cb6e03575b590f355de30d26b42576ea4e613d8887b587119d19b2e4b3a8909ceb232ca1cf746c8
+ languageName: node
+ linkType: hard
+
"@rolldown/pluginutils@npm:1.0.0-beta.50":
version: 1.0.0-beta.50
resolution: "@rolldown/pluginutils@npm:1.0.0-beta.50"
@@ -2245,6 +2565,47 @@ __metadata:
languageName: node
linkType: hard
+"@types/babel__core@npm:^7.20.5":
+ version: 7.20.5
+ resolution: "@types/babel__core@npm:7.20.5"
+ dependencies:
+ "@babel/parser": "npm:^7.20.7"
+ "@babel/types": "npm:^7.20.7"
+ "@types/babel__generator": "npm:*"
+ "@types/babel__template": "npm:*"
+ "@types/babel__traverse": "npm:*"
+ checksum: 10c0/bdee3bb69951e833a4b811b8ee9356b69a61ed5b7a23e1a081ec9249769117fa83aaaf023bb06562a038eb5845155ff663e2d5c75dd95c1d5ccc91db012868ff
+ languageName: node
+ linkType: hard
+
+"@types/babel__generator@npm:*":
+ version: 7.27.0
+ resolution: "@types/babel__generator@npm:7.27.0"
+ dependencies:
+ "@babel/types": "npm:^7.0.0"
+ checksum: 10c0/9f9e959a8792df208a9d048092fda7e1858bddc95c6314857a8211a99e20e6830bdeb572e3587ae8be5429e37f2a96fcf222a9f53ad232f5537764c9e13a2bbd
+ languageName: node
+ linkType: hard
+
+"@types/babel__template@npm:*":
+ version: 7.4.4
+ resolution: "@types/babel__template@npm:7.4.4"
+ dependencies:
+ "@babel/parser": "npm:^7.1.0"
+ "@babel/types": "npm:^7.0.0"
+ checksum: 10c0/cc84f6c6ab1eab1427e90dd2b76ccee65ce940b778a9a67be2c8c39e1994e6f5bbc8efa309f6cea8dc6754994524cd4d2896558df76d92e7a1f46ecffee7112b
+ languageName: node
+ linkType: hard
+
+"@types/babel__traverse@npm:*":
+ version: 7.28.0
+ resolution: "@types/babel__traverse@npm:7.28.0"
+ dependencies:
+ "@babel/types": "npm:^7.28.2"
+ checksum: 10c0/b52d7d4e8fc6a9018fe7361c4062c1c190f5778cf2466817cb9ed19d69fbbb54f9a85ffedeb748ed8062d2cf7d4cc088ee739848f47c57740de1c48cbf0d0994
+ languageName: node
+ linkType: hard
+
"@types/chai@npm:^5.2.2":
version: 5.2.3
resolution: "@types/chai@npm:5.2.3"
@@ -2338,6 +2699,24 @@ __metadata:
languageName: node
linkType: hard
+"@types/react-dom@npm:^19.2.3":
+ version: 19.2.3
+ resolution: "@types/react-dom@npm:19.2.3"
+ peerDependencies:
+ "@types/react": ^19.2.0
+ checksum: 10c0/b486ebe0f4e2fb35e2e108df1d8fc0927ca5d6002d5771e8a739de11239fe62d0e207c50886185253c99eb9dedfeeb956ea7429e5ba17f6693c7acb4c02f8cd1
+ languageName: node
+ linkType: hard
+
+"@types/react@npm:^19.2.7":
+ version: 19.2.7
+ resolution: "@types/react@npm:19.2.7"
+ dependencies:
+ csstype: "npm:^3.2.2"
+ checksum: 10c0/a7b75f1f9fcb34badd6f84098be5e35a0aeca614bc91f93d2698664c0b2ba5ad128422bd470ada598238cebe4f9e604a752aead7dc6f5a92261d0c7f9b27cfd1
+ languageName: node
+ linkType: hard
+
"@types/ws@npm:^8":
version: 8.18.1
resolution: "@types/ws@npm:8.18.1"
@@ -2484,6 +2863,22 @@ __metadata:
languageName: node
linkType: hard
+"@vitejs/plugin-react@npm:^5.1.1":
+ version: 5.1.1
+ resolution: "@vitejs/plugin-react@npm:5.1.1"
+ dependencies:
+ "@babel/core": "npm:^7.28.5"
+ "@babel/plugin-transform-react-jsx-self": "npm:^7.27.1"
+ "@babel/plugin-transform-react-jsx-source": "npm:^7.27.1"
+ "@rolldown/pluginutils": "npm:1.0.0-beta.47"
+ "@types/babel__core": "npm:^7.20.5"
+ react-refresh: "npm:^0.18.0"
+ peerDependencies:
+ vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0
+ checksum: 10c0/e590efaea1eabfbb1beb6e8c9fac0742fd299808e3368e63b2825ce24740adb8a28fcb2668b14b7ca1bdb42890cfefe94d02dd358dcbbf8a27ddf377b9a82abf
+ languageName: node
+ linkType: hard
+
"@vitest/expect@npm:4.0.8":
version: 4.0.8
resolution: "@vitest/expect@npm:4.0.8"
@@ -2811,6 +3206,15 @@ __metadata:
languageName: node
linkType: hard
+"baseline-browser-mapping@npm:^2.8.25":
+ version: 2.8.32
+ resolution: "baseline-browser-mapping@npm:2.8.32"
+ bin:
+ baseline-browser-mapping: dist/cli.js
+ checksum: 10c0/6c4aa0338ad177e946a27412de11769fb6474389a59cc03e13e0538d7285a94052a11525d46bb605ddb913a0c8a1180292d6f05cd4d6bc05bbf597c26bf5ce66
+ languageName: node
+ linkType: hard
+
"before-after-hook@npm:^4.0.0":
version: 4.0.0
resolution: "before-after-hook@npm:4.0.0"
@@ -2866,6 +3270,21 @@ __metadata:
languageName: node
linkType: hard
+"browserslist@npm:^4.24.0":
+ version: 4.28.0
+ resolution: "browserslist@npm:4.28.0"
+ dependencies:
+ baseline-browser-mapping: "npm:^2.8.25"
+ caniuse-lite: "npm:^1.0.30001754"
+ electron-to-chromium: "npm:^1.5.249"
+ node-releases: "npm:^2.0.27"
+ update-browserslist-db: "npm:^1.1.4"
+ bin:
+ browserslist: cli.js
+ checksum: 10c0/4284fd568f7d40a496963083860d488cb2a89fb055b6affd316bebc59441fec938e090b3e62c0ee065eb0bc88cd1bc145f4300a16c75f3f565621c5823715ae1
+ languageName: node
+ linkType: hard
+
"buffer-from@npm:^1.0.0":
version: 1.1.2
resolution: "buffer-from@npm:1.1.2"
@@ -2970,6 +3389,13 @@ __metadata:
languageName: node
linkType: hard
+"caniuse-lite@npm:^1.0.30001754":
+ version: 1.0.30001757
+ resolution: "caniuse-lite@npm:1.0.30001757"
+ checksum: 10c0/3ccb71fa2bf1f8c96ff1bf9b918b08806fed33307e20a3ce3259155fda131eaf96cfcd88d3d309c8fd7f8285cc71d89a3b93648a1c04814da31c301f98508d42
+ languageName: node
+ linkType: hard
+
"chai@npm:^6.2.0":
version: 6.2.0
resolution: "chai@npm:6.2.0"
@@ -2987,7 +3413,7 @@ __metadata:
languageName: node
linkType: hard
-"chokidar@npm:^4.0.3":
+"chokidar@npm:^4.0.0, chokidar@npm:^4.0.3":
version: 4.0.3
resolution: "chokidar@npm:4.0.3"
dependencies:
@@ -3197,6 +3623,13 @@ __metadata:
languageName: node
linkType: hard
+"convert-source-map@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "convert-source-map@npm:2.0.0"
+ checksum: 10c0/8f2f7a27a1a011cc6cc88cc4da2d7d0cfa5ee0369508baae3d98c260bb3ac520691464e5bbe4ae7cdf09860c1d69ecc6f70c63c6e7c7f7e3f18ec08484dc7d9b
+ languageName: node
+ linkType: hard
+
"create-dobs@workspace:packages/create-dobs":
version: 0.0.0-use.local
resolution: "create-dobs@workspace:packages/create-dobs"
@@ -3230,6 +3663,13 @@ __metadata:
languageName: node
linkType: hard
+"csstype@npm:^3.2.2":
+ version: 3.2.3
+ resolution: "csstype@npm:3.2.3"
+ checksum: 10c0/cd29c51e70fa822f1cecd8641a1445bed7063697469d35633b516e60fe8c1bde04b08f6c5b6022136bb669b64c63d4173af54864510fbb4ee23281801841a3ce
+ languageName: node
+ linkType: hard
+
"data-view-buffer@npm:^1.0.2":
version: 1.0.2
resolution: "data-view-buffer@npm:1.0.2"
@@ -3263,7 +3703,7 @@ __metadata:
languageName: node
linkType: hard
-"debug@npm:4, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.4.1, debug@npm:^4.4.3":
+"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.4.1, debug@npm:^4.4.3":
version: 4.4.3
resolution: "debug@npm:4.4.3"
dependencies:
@@ -3355,6 +3795,15 @@ __metadata:
languageName: node
linkType: hard
+"detect-libc@npm:^1.0.3":
+ version: 1.0.3
+ resolution: "detect-libc@npm:1.0.3"
+ bin:
+ detect-libc: ./bin/detect-libc.js
+ checksum: 10c0/4da0deae9f69e13bc37a0902d78bf7169480004b1fed3c19722d56cff578d16f0e11633b7fbf5fb6249181236c72e90024cbd68f0b9558ae06e281f47326d50d
+ languageName: node
+ linkType: hard
+
"diff@npm:^8.0.2":
version: 8.0.2
resolution: "diff@npm:8.0.2"
@@ -3434,6 +3883,13 @@ __metadata:
languageName: node
linkType: hard
+"electron-to-chromium@npm:^1.5.249":
+ version: 1.5.262
+ resolution: "electron-to-chromium@npm:1.5.262"
+ checksum: 10c0/4e4e3a307f662991145fd0bbd9045e17af547987a9dc33c30239b1a7b60874989f9b71c636b6c7d2b9052777344d4358a7cf76924203873a392ea1568bf88e5d
+ languageName: node
+ linkType: hard
+
"emoji-regex@npm:^10.3.0":
version: 10.6.0
resolution: "emoji-regex@npm:10.6.0"
@@ -3705,7 +4161,7 @@ __metadata:
languageName: node
linkType: hard
-"escalade@npm:^3.1.1":
+"escalade@npm:^3.1.1, escalade@npm:^3.2.0":
version: 3.2.0
resolution: "escalade@npm:3.2.0"
checksum: 10c0/ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65
@@ -4226,6 +4682,13 @@ __metadata:
languageName: node
linkType: hard
+"gensync@npm:^1.0.0-beta.2":
+ version: 1.0.0-beta.2
+ resolution: "gensync@npm:1.0.0-beta.2"
+ checksum: 10c0/782aba6cba65b1bb5af3b095d96249d20edbe8df32dbf4696fd49be2583faf676173bf4809386588828e4dd76a3354fcbeb577bab1c833ccd9fc4577f26103f8
+ languageName: node
+ linkType: hard
+
"get-caller-file@npm:^2.0.5":
version: 2.0.5
resolution: "get-caller-file@npm:2.0.5"
@@ -4618,6 +5081,13 @@ __metadata:
languageName: node
linkType: hard
+"immutable@npm:^5.0.2":
+ version: 5.1.4
+ resolution: "immutable@npm:5.1.4"
+ checksum: 10c0/f1c98382e4cde14a0b218be3b9b2f8441888da8df3b8c064aa756071da55fbed6ad696e5959982508456332419be9fdeaf29b2e58d0eadc45483cc16963c0446
+ languageName: node
+ linkType: hard
+
"import-fresh@npm:^3.2.1":
version: 3.3.1
resolution: "import-fresh@npm:3.3.1"
@@ -5236,6 +5706,15 @@ __metadata:
languageName: node
linkType: hard
+"lru-cache@npm:^5.1.1":
+ version: 5.1.1
+ resolution: "lru-cache@npm:5.1.1"
+ dependencies:
+ yallist: "npm:^3.0.2"
+ checksum: 10c0/89b2ef2ef45f543011e38737b8a8622a2f8998cddf0e5437174ef8f1f70a8b9d14a918ab3e232cb3ba343b7abddffa667f0b59075b2b80e6b4d63c3de6127482
+ languageName: node
+ linkType: hard
+
"magic-string@npm:^0.30.17, magic-string@npm:^0.30.21":
version: 0.30.21
resolution: "magic-string@npm:0.30.21"
@@ -5304,7 +5783,7 @@ __metadata:
languageName: node
linkType: hard
-"micromatch@npm:^4.0.8":
+"micromatch@npm:^4.0.5, micromatch@npm:^4.0.8":
version: 4.0.8
resolution: "micromatch@npm:4.0.8"
dependencies:
@@ -5501,6 +5980,15 @@ __metadata:
languageName: node
linkType: hard
+"node-addon-api@npm:^7.0.0":
+ version: 7.1.1
+ resolution: "node-addon-api@npm:7.1.1"
+ dependencies:
+ node-gyp: "npm:latest"
+ checksum: 10c0/fb32a206276d608037fa1bcd7e9921e177fe992fc610d098aa3128baca3c0050fc1e014fa007e9b3874cf865ddb4f5bd9f43ccb7cbbbe4efaff6a83e920b17e9
+ languageName: node
+ linkType: hard
+
"node-gyp@npm:^11.0.0, node-gyp@npm:latest":
version: 11.5.0
resolution: "node-gyp@npm:11.5.0"
@@ -5521,6 +6009,13 @@ __metadata:
languageName: node
linkType: hard
+"node-releases@npm:^2.0.27":
+ version: 2.0.27
+ resolution: "node-releases@npm:2.0.27"
+ checksum: 10c0/f1e6583b7833ea81880627748d28a3a7ff5703d5409328c216ae57befbced10ce2c991bea86434e8ec39003bd017f70481e2e5f8c1f7e0a7663241f81d6e00e2
+ languageName: node
+ linkType: hard
+
"nopt@npm:^8.0.0":
version: 8.1.0
resolution: "nopt@npm:8.1.0"
@@ -6332,6 +6827,31 @@ __metadata:
languageName: node
linkType: hard
+"react-dom@npm:^19.2.0":
+ version: 19.2.0
+ resolution: "react-dom@npm:19.2.0"
+ dependencies:
+ scheduler: "npm:^0.27.0"
+ peerDependencies:
+ react: ^19.2.0
+ checksum: 10c0/fa2cae05248d01288e91523b590ce4e7635b1e13f1344e225f850d722a8da037bf0782f63b1c1d46353334e0c696909b82e582f8cad607948fde6f7646cc18d9
+ languageName: node
+ linkType: hard
+
+"react-refresh@npm:^0.18.0":
+ version: 0.18.0
+ resolution: "react-refresh@npm:0.18.0"
+ checksum: 10c0/34a262f7fd803433a534f50deb27a148112a81adcae440c7d1cbae7ef14d21ea8f2b3d783e858cb7698968183b77755a38b4d4b5b1d79b4f4689c2f6d358fff2
+ languageName: node
+ linkType: hard
+
+"react@npm:^19.2.0":
+ version: 19.2.0
+ resolution: "react@npm:19.2.0"
+ checksum: 10c0/1b6d64eacb9324725bfe1e7860cb7a6b8a34bc89a482920765ebff5c10578eb487e6b46b2f0df263bd27a25edbdae2c45e5ea5d81ae61404301c1a7192c38330
+ languageName: node
+ linkType: hard
+
"read-cmd-shim@npm:^5.0.0":
version: 5.0.0
resolution: "read-cmd-shim@npm:5.0.0"
@@ -6711,6 +7231,8 @@ __metadata:
"@types/encodeurl": "npm:^1.0.3"
"@types/mime-types": "npm:^3.0.1"
"@types/node": "npm:^24.10.0"
+ "@types/react": "npm:^19.2.7"
+ "@types/react-dom": "npm:^19.2.3"
cross-spawn: "npm:^7.0.6"
eslint: "npm:^9.39.0"
eslint-config-prettier: "npm:^10.1.8"
@@ -6781,6 +7303,30 @@ __metadata:
languageName: node
linkType: hard
+"sass@npm:^1.94.2":
+ version: 1.94.2
+ resolution: "sass@npm:1.94.2"
+ dependencies:
+ "@parcel/watcher": "npm:^2.4.1"
+ chokidar: "npm:^4.0.0"
+ immutable: "npm:^5.0.2"
+ source-map-js: "npm:>=0.6.2 <2.0.0"
+ dependenciesMeta:
+ "@parcel/watcher":
+ optional: true
+ bin:
+ sass: sass.js
+ checksum: 10c0/49a656dfab58299165ef94e71483a333972daee68c49fa542858d4912accdfb1707338226a165b1a2dfcdb2509fcda5a5b4f3780d14e49b6d38d93c8043475d3
+ languageName: node
+ linkType: hard
+
+"scheduler@npm:^0.27.0":
+ version: 0.27.0
+ resolution: "scheduler@npm:0.27.0"
+ checksum: 10c0/4f03048cb05a3c8fddc45813052251eca00688f413a3cee236d984a161da28db28ba71bd11e7a3dd02f7af84ab28d39fb311431d3b3772fed557945beb00c452
+ languageName: node
+ linkType: hard
+
"semver@npm:^6.3.1":
version: 6.3.1
resolution: "semver@npm:6.3.1"
@@ -7016,7 +7562,7 @@ __metadata:
languageName: node
linkType: hard
-"source-map-js@npm:^1.2.1":
+"source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.2.1":
version: 1.2.1
resolution: "source-map-js@npm:1.2.1"
checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf
@@ -7654,6 +8200,20 @@ __metadata:
languageName: node
linkType: hard
+"update-browserslist-db@npm:^1.1.4":
+ version: 1.1.4
+ resolution: "update-browserslist-db@npm:1.1.4"
+ dependencies:
+ escalade: "npm:^3.2.0"
+ picocolors: "npm:^1.1.1"
+ peerDependencies:
+ browserslist: ">= 4.21.0"
+ bin:
+ update-browserslist-db: cli.js
+ checksum: 10c0/db0c9aaecf1258a6acda5e937fc27a7996ccca7a7580a1b4aa8bba6a9b0e283e5e65c49ebbd74ec29288ef083f1b88d4da13e3d4d326c1e5fc55bf72d7390702
+ languageName: node
+ linkType: hard
+
"uri-js@npm:^4.2.2":
version: 4.4.1
resolution: "uri-js@npm:4.4.1"
@@ -7696,6 +8256,18 @@ __metadata:
languageName: node
linkType: hard
+"vite-plugin-singlefile@npm:^2.3.0":
+ version: 2.3.0
+ resolution: "vite-plugin-singlefile@npm:2.3.0"
+ dependencies:
+ micromatch: "npm:^4.0.8"
+ peerDependencies:
+ rollup: ^4.44.1
+ vite: ^5.4.11 || ^6.0.0 || ^7.0.0
+ checksum: 10c0/d6ebb545d749b228bbd8fd8746a954f09d000dd69d200a651358e74136947b932f7f869536e1698e0d81e2f0694357c8bec3a957101a7e77d0d3c40193eb4cf1
+ languageName: node
+ linkType: hard
+
"vite-tsconfig-paths@npm:^5.1.4":
version: 5.1.4
resolution: "vite-tsconfig-paths@npm:5.1.4"
@@ -7767,6 +8339,61 @@ __metadata:
languageName: node
linkType: hard
+"vite@npm:^7.2.4":
+ version: 7.2.4
+ resolution: "vite@npm:7.2.4"
+ dependencies:
+ esbuild: "npm:^0.25.0"
+ fdir: "npm:^6.5.0"
+ fsevents: "npm:~2.3.3"
+ picomatch: "npm:^4.0.3"
+ postcss: "npm:^8.5.6"
+ rollup: "npm:^4.43.0"
+ tinyglobby: "npm:^0.2.15"
+ peerDependencies:
+ "@types/node": ^20.19.0 || >=22.12.0
+ jiti: ">=1.21.0"
+ less: ^4.0.0
+ lightningcss: ^1.21.0
+ sass: ^1.70.0
+ sass-embedded: ^1.70.0
+ stylus: ">=0.54.8"
+ sugarss: ^5.0.0
+ terser: ^5.16.0
+ tsx: ^4.8.1
+ yaml: ^2.4.2
+ dependenciesMeta:
+ fsevents:
+ optional: true
+ peerDependenciesMeta:
+ "@types/node":
+ optional: true
+ jiti:
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ tsx:
+ optional: true
+ yaml:
+ optional: true
+ bin:
+ vite: bin/vite.js
+ checksum: 10c0/26aa0cad01d6e00f17c837b2a0587ab52f6bd0d0e64606b4220cfc58fa5fa76a4095ef3ea27c886bea542a346363912c4fad9f9462ef1e6757262fedfd5196b2
+ languageName: node
+ linkType: hard
+
"vitest@npm:^4.0.8":
version: 4.0.8
resolution: "vitest@npm:4.0.8"
@@ -8100,6 +8727,13 @@ __metadata:
languageName: node
linkType: hard
+"yallist@npm:^3.0.2":
+ version: 3.1.1
+ resolution: "yallist@npm:3.1.1"
+ checksum: 10c0/c66a5c46bc89af1625476f7f0f2ec3653c1a1791d2f9407cfb4c2ba812a1e1c9941416d71ba9719876530e3340a99925f697142989371b72d93b9ee628afd8c1
+ languageName: node
+ linkType: hard
+
"yallist@npm:^4.0.0":
version: 4.0.0
resolution: "yallist@npm:4.0.0"