almostnode 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +731 -0
- package/dist/__sw__.js +394 -0
- package/dist/ai-chatbot-demo-entry.d.ts +6 -0
- package/dist/ai-chatbot-demo-entry.d.ts.map +1 -0
- package/dist/ai-chatbot-demo.d.ts +42 -0
- package/dist/ai-chatbot-demo.d.ts.map +1 -0
- package/dist/assets/runtime-worker-D9x_Ddwz.js +60543 -0
- package/dist/assets/runtime-worker-D9x_Ddwz.js.map +1 -0
- package/dist/convex-app-demo-entry.d.ts +6 -0
- package/dist/convex-app-demo-entry.d.ts.map +1 -0
- package/dist/convex-app-demo.d.ts +68 -0
- package/dist/convex-app-demo.d.ts.map +1 -0
- package/dist/cors-proxy.d.ts +46 -0
- package/dist/cors-proxy.d.ts.map +1 -0
- package/dist/create-runtime.d.ts +42 -0
- package/dist/create-runtime.d.ts.map +1 -0
- package/dist/demo.d.ts +6 -0
- package/dist/demo.d.ts.map +1 -0
- package/dist/dev-server.d.ts +97 -0
- package/dist/dev-server.d.ts.map +1 -0
- package/dist/frameworks/next-dev-server.d.ts +202 -0
- package/dist/frameworks/next-dev-server.d.ts.map +1 -0
- package/dist/frameworks/vite-dev-server.d.ts +85 -0
- package/dist/frameworks/vite-dev-server.d.ts.map +1 -0
- package/dist/index.cjs +14965 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +71 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +14867 -0
- package/dist/index.mjs.map +1 -0
- package/dist/next-demo.d.ts +49 -0
- package/dist/next-demo.d.ts.map +1 -0
- package/dist/npm/index.d.ts +71 -0
- package/dist/npm/index.d.ts.map +1 -0
- package/dist/npm/registry.d.ts +66 -0
- package/dist/npm/registry.d.ts.map +1 -0
- package/dist/npm/resolver.d.ts +52 -0
- package/dist/npm/resolver.d.ts.map +1 -0
- package/dist/npm/tarball.d.ts +29 -0
- package/dist/npm/tarball.d.ts.map +1 -0
- package/dist/runtime-interface.d.ts +90 -0
- package/dist/runtime-interface.d.ts.map +1 -0
- package/dist/runtime.d.ts +103 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/sandbox-helpers.d.ts +43 -0
- package/dist/sandbox-helpers.d.ts.map +1 -0
- package/dist/sandbox-runtime.d.ts +65 -0
- package/dist/sandbox-runtime.d.ts.map +1 -0
- package/dist/server-bridge.d.ts +89 -0
- package/dist/server-bridge.d.ts.map +1 -0
- package/dist/shims/assert.d.ts +51 -0
- package/dist/shims/assert.d.ts.map +1 -0
- package/dist/shims/async_hooks.d.ts +37 -0
- package/dist/shims/async_hooks.d.ts.map +1 -0
- package/dist/shims/buffer.d.ts +20 -0
- package/dist/shims/buffer.d.ts.map +1 -0
- package/dist/shims/child_process-browser.d.ts +92 -0
- package/dist/shims/child_process-browser.d.ts.map +1 -0
- package/dist/shims/child_process.d.ts +93 -0
- package/dist/shims/child_process.d.ts.map +1 -0
- package/dist/shims/chokidar.d.ts +55 -0
- package/dist/shims/chokidar.d.ts.map +1 -0
- package/dist/shims/cluster.d.ts +52 -0
- package/dist/shims/cluster.d.ts.map +1 -0
- package/dist/shims/crypto.d.ts +122 -0
- package/dist/shims/crypto.d.ts.map +1 -0
- package/dist/shims/dgram.d.ts +34 -0
- package/dist/shims/dgram.d.ts.map +1 -0
- package/dist/shims/diagnostics_channel.d.ts +80 -0
- package/dist/shims/diagnostics_channel.d.ts.map +1 -0
- package/dist/shims/dns.d.ts +87 -0
- package/dist/shims/dns.d.ts.map +1 -0
- package/dist/shims/domain.d.ts +25 -0
- package/dist/shims/domain.d.ts.map +1 -0
- package/dist/shims/esbuild.d.ts +105 -0
- package/dist/shims/esbuild.d.ts.map +1 -0
- package/dist/shims/events.d.ts +37 -0
- package/dist/shims/events.d.ts.map +1 -0
- package/dist/shims/fs.d.ts +115 -0
- package/dist/shims/fs.d.ts.map +1 -0
- package/dist/shims/fsevents.d.ts +67 -0
- package/dist/shims/fsevents.d.ts.map +1 -0
- package/dist/shims/http.d.ts +217 -0
- package/dist/shims/http.d.ts.map +1 -0
- package/dist/shims/http2.d.ts +81 -0
- package/dist/shims/http2.d.ts.map +1 -0
- package/dist/shims/https.d.ts +36 -0
- package/dist/shims/https.d.ts.map +1 -0
- package/dist/shims/inspector.d.ts +25 -0
- package/dist/shims/inspector.d.ts.map +1 -0
- package/dist/shims/module.d.ts +22 -0
- package/dist/shims/module.d.ts.map +1 -0
- package/dist/shims/net.d.ts +100 -0
- package/dist/shims/net.d.ts.map +1 -0
- package/dist/shims/os.d.ts +159 -0
- package/dist/shims/os.d.ts.map +1 -0
- package/dist/shims/path.d.ts +72 -0
- package/dist/shims/path.d.ts.map +1 -0
- package/dist/shims/perf_hooks.d.ts +50 -0
- package/dist/shims/perf_hooks.d.ts.map +1 -0
- package/dist/shims/process.d.ts +93 -0
- package/dist/shims/process.d.ts.map +1 -0
- package/dist/shims/querystring.d.ts +23 -0
- package/dist/shims/querystring.d.ts.map +1 -0
- package/dist/shims/readdirp.d.ts +52 -0
- package/dist/shims/readdirp.d.ts.map +1 -0
- package/dist/shims/readline.d.ts +62 -0
- package/dist/shims/readline.d.ts.map +1 -0
- package/dist/shims/rollup.d.ts +34 -0
- package/dist/shims/rollup.d.ts.map +1 -0
- package/dist/shims/sentry.d.ts +163 -0
- package/dist/shims/sentry.d.ts.map +1 -0
- package/dist/shims/stream.d.ts +181 -0
- package/dist/shims/stream.d.ts.map +1 -0
- package/dist/shims/tls.d.ts +53 -0
- package/dist/shims/tls.d.ts.map +1 -0
- package/dist/shims/tty.d.ts +30 -0
- package/dist/shims/tty.d.ts.map +1 -0
- package/dist/shims/url.d.ts +64 -0
- package/dist/shims/url.d.ts.map +1 -0
- package/dist/shims/util.d.ts +106 -0
- package/dist/shims/util.d.ts.map +1 -0
- package/dist/shims/v8.d.ts +73 -0
- package/dist/shims/v8.d.ts.map +1 -0
- package/dist/shims/vfs-adapter.d.ts +126 -0
- package/dist/shims/vfs-adapter.d.ts.map +1 -0
- package/dist/shims/vm.d.ts +45 -0
- package/dist/shims/vm.d.ts.map +1 -0
- package/dist/shims/worker_threads.d.ts +66 -0
- package/dist/shims/worker_threads.d.ts.map +1 -0
- package/dist/shims/ws.d.ts +66 -0
- package/dist/shims/ws.d.ts.map +1 -0
- package/dist/shims/zlib.d.ts +161 -0
- package/dist/shims/zlib.d.ts.map +1 -0
- package/dist/transform.d.ts +24 -0
- package/dist/transform.d.ts.map +1 -0
- package/dist/virtual-fs.d.ts +226 -0
- package/dist/virtual-fs.d.ts.map +1 -0
- package/dist/vite-demo.d.ts +35 -0
- package/dist/vite-demo.d.ts.map +1 -0
- package/dist/vite-sw.js +132 -0
- package/dist/worker/runtime-worker.d.ts +8 -0
- package/dist/worker/runtime-worker.d.ts.map +1 -0
- package/dist/worker-runtime.d.ts +50 -0
- package/dist/worker-runtime.d.ts.map +1 -0
- package/package.json +85 -0
- package/src/ai-chatbot-demo-entry.ts +244 -0
- package/src/ai-chatbot-demo.ts +509 -0
- package/src/convex-app-demo-entry.ts +1107 -0
- package/src/convex-app-demo.ts +1316 -0
- package/src/cors-proxy.ts +81 -0
- package/src/create-runtime.ts +147 -0
- package/src/demo.ts +304 -0
- package/src/dev-server.ts +274 -0
- package/src/frameworks/next-dev-server.ts +2224 -0
- package/src/frameworks/vite-dev-server.ts +702 -0
- package/src/index.ts +101 -0
- package/src/next-demo.ts +1784 -0
- package/src/npm/index.ts +347 -0
- package/src/npm/registry.ts +152 -0
- package/src/npm/resolver.ts +385 -0
- package/src/npm/tarball.ts +209 -0
- package/src/runtime-interface.ts +103 -0
- package/src/runtime.ts +1046 -0
- package/src/sandbox-helpers.ts +173 -0
- package/src/sandbox-runtime.ts +252 -0
- package/src/server-bridge.ts +426 -0
- package/src/shims/assert.ts +664 -0
- package/src/shims/async_hooks.ts +86 -0
- package/src/shims/buffer.ts +75 -0
- package/src/shims/child_process-browser.ts +217 -0
- package/src/shims/child_process.ts +463 -0
- package/src/shims/chokidar.ts +313 -0
- package/src/shims/cluster.ts +67 -0
- package/src/shims/crypto.ts +830 -0
- package/src/shims/dgram.ts +47 -0
- package/src/shims/diagnostics_channel.ts +196 -0
- package/src/shims/dns.ts +172 -0
- package/src/shims/domain.ts +58 -0
- package/src/shims/esbuild.ts +805 -0
- package/src/shims/events.ts +195 -0
- package/src/shims/fs.ts +803 -0
- package/src/shims/fsevents.ts +63 -0
- package/src/shims/http.ts +904 -0
- package/src/shims/http2.ts +96 -0
- package/src/shims/https.ts +86 -0
- package/src/shims/inspector.ts +30 -0
- package/src/shims/module.ts +82 -0
- package/src/shims/net.ts +359 -0
- package/src/shims/os.ts +195 -0
- package/src/shims/path.ts +199 -0
- package/src/shims/perf_hooks.ts +92 -0
- package/src/shims/process.ts +346 -0
- package/src/shims/querystring.ts +97 -0
- package/src/shims/readdirp.ts +228 -0
- package/src/shims/readline.ts +110 -0
- package/src/shims/rollup.ts +80 -0
- package/src/shims/sentry.ts +133 -0
- package/src/shims/stream.ts +1126 -0
- package/src/shims/tls.ts +95 -0
- package/src/shims/tty.ts +64 -0
- package/src/shims/url.ts +171 -0
- package/src/shims/util.ts +312 -0
- package/src/shims/v8.ts +113 -0
- package/src/shims/vfs-adapter.ts +402 -0
- package/src/shims/vm.ts +83 -0
- package/src/shims/worker_threads.ts +111 -0
- package/src/shims/ws.ts +382 -0
- package/src/shims/zlib.ts +289 -0
- package/src/transform.ts +313 -0
- package/src/types/external.d.ts +67 -0
- package/src/virtual-fs.ts +903 -0
- package/src/vite-demo.ts +577 -0
- package/src/worker/runtime-worker.ts +128 -0
- package/src/worker-runtime.ts +145 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convex-app-demo-entry.d.ts","sourceRoot":"","sources":["../src/convex-app-demo-entry.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Realistic Next.js + Convex App Demo
|
|
3
|
+
*
|
|
4
|
+
* This demo creates a more realistic Next.js application structure
|
|
5
|
+
* with Radix UI components, Tailwind CSS, and a mocked Convex backend.
|
|
6
|
+
*/
|
|
7
|
+
import { VirtualFS } from './virtual-fs';
|
|
8
|
+
import { Runtime } from './runtime';
|
|
9
|
+
import { NextDevServer } from './frameworks/next-dev-server';
|
|
10
|
+
/**
|
|
11
|
+
* Package.json for a realistic Next.js + Convex app
|
|
12
|
+
*/
|
|
13
|
+
declare const PACKAGE_JSON: {
|
|
14
|
+
name: string;
|
|
15
|
+
version: string;
|
|
16
|
+
private: boolean;
|
|
17
|
+
scripts: {
|
|
18
|
+
dev: string;
|
|
19
|
+
build: string;
|
|
20
|
+
start: string;
|
|
21
|
+
};
|
|
22
|
+
dependencies: {
|
|
23
|
+
next: string;
|
|
24
|
+
react: string;
|
|
25
|
+
"react-dom": string;
|
|
26
|
+
clsx: string;
|
|
27
|
+
"tailwind-merge": string;
|
|
28
|
+
"lucide-react": string;
|
|
29
|
+
zod: string;
|
|
30
|
+
"date-fns": string;
|
|
31
|
+
};
|
|
32
|
+
devDependencies: {
|
|
33
|
+
"@types/node": string;
|
|
34
|
+
"@types/react": string;
|
|
35
|
+
"@types/react-dom": string;
|
|
36
|
+
typescript: string;
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Minimal packages to install for demo (others loaded from CDN)
|
|
41
|
+
*/
|
|
42
|
+
declare const DEMO_PACKAGES: string[];
|
|
43
|
+
/**
|
|
44
|
+
* Create the project structure in the virtual filesystem
|
|
45
|
+
*/
|
|
46
|
+
export declare function createConvexAppProject(vfs: VirtualFS): void;
|
|
47
|
+
/**
|
|
48
|
+
* Initialize the Convex App demo
|
|
49
|
+
*/
|
|
50
|
+
export declare function initConvexAppDemo(outputElement: HTMLElement, options?: {
|
|
51
|
+
installPackages?: boolean;
|
|
52
|
+
}): Promise<{
|
|
53
|
+
vfs: VirtualFS;
|
|
54
|
+
runtime: Runtime;
|
|
55
|
+
}>;
|
|
56
|
+
/**
|
|
57
|
+
* Start the dev server for Convex App demo
|
|
58
|
+
*/
|
|
59
|
+
export declare function startConvexAppDevServer(vfs: VirtualFS, options?: {
|
|
60
|
+
port?: number;
|
|
61
|
+
log?: (message: string) => void;
|
|
62
|
+
}): Promise<{
|
|
63
|
+
server: NextDevServer;
|
|
64
|
+
url: string;
|
|
65
|
+
stop: () => void;
|
|
66
|
+
}>;
|
|
67
|
+
export { PACKAGE_JSON, DEMO_PACKAGES };
|
|
68
|
+
//# sourceMappingURL=convex-app-demo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convex-app-demo.d.ts","sourceRoot":"","sources":["../src/convex-app-demo.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAK7D;;GAEG;AACH,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;CA6BjB,CAAC;AAEF;;GAEG;AACH,QAAA,MAAM,aAAa,UAKlB,CAAC;AAEF;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,CAuiC3D;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,aAAa,EAAE,WAAW,EAC1B,OAAO,GAAE;IACP,eAAe,CAAC,EAAE,OAAO,CAAC;CACtB,GACL,OAAO,CAAC;IAAE,GAAG,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAsD/C;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,SAAS,EACd,OAAO,GAAE;IACP,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5B,GACL,OAAO,CAAC;IACT,MAAM,EAAE,aAAa,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB,CAAC,CAuDD;AAyDD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CORS Proxy Utility
|
|
3
|
+
*
|
|
4
|
+
* Provides optional CORS proxy support for fetching external APIs
|
|
5
|
+
* that don't allow browser origins.
|
|
6
|
+
*
|
|
7
|
+
* No default proxy is configured for security reasons.
|
|
8
|
+
* Users must explicitly set a proxy URL if needed.
|
|
9
|
+
*
|
|
10
|
+
* Example usage:
|
|
11
|
+
* setCorsProxy('https://corsproxy.io/?');
|
|
12
|
+
* const response = await proxyFetch('https://api.example.com/data');
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Set the CORS proxy URL
|
|
16
|
+
* @param url - Proxy URL (e.g., 'https://corsproxy.io/?')
|
|
17
|
+
* The target URL will be appended as an encoded parameter.
|
|
18
|
+
* Set to null to disable proxy and use direct fetch.
|
|
19
|
+
*/
|
|
20
|
+
export declare function setCorsProxy(url: string | null): void;
|
|
21
|
+
/**
|
|
22
|
+
* Get the current CORS proxy URL
|
|
23
|
+
* @returns The configured proxy URL, or null if not set
|
|
24
|
+
*/
|
|
25
|
+
export declare function getCorsProxy(): string | null;
|
|
26
|
+
/**
|
|
27
|
+
* Check if a proxy is configured
|
|
28
|
+
*/
|
|
29
|
+
export declare function hasProxy(): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Fetch with optional CORS proxy
|
|
32
|
+
*
|
|
33
|
+
* If a proxy is configured, the request goes through the proxy.
|
|
34
|
+
* Otherwise, a direct fetch is performed (may hit CORS issues).
|
|
35
|
+
*
|
|
36
|
+
* @param url - The target URL to fetch
|
|
37
|
+
* @param options - Standard fetch options
|
|
38
|
+
* @returns Promise<Response>
|
|
39
|
+
*/
|
|
40
|
+
export declare function proxyFetch(url: string, options?: RequestInit): Promise<Response>;
|
|
41
|
+
/**
|
|
42
|
+
* Build a proxied URL without fetching
|
|
43
|
+
* Useful for displaying the URL or using with other fetch mechanisms
|
|
44
|
+
*/
|
|
45
|
+
export declare function buildProxyUrl(url: string): string;
|
|
46
|
+
//# sourceMappingURL=cors-proxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cors-proxy.d.ts","sourceRoot":"","sources":["../src/cors-proxy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAOrD;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,MAAM,GAAG,IAAI,CAE5C;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,OAAO,CAElC;AAED;;;;;;;;;GASG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,QAAQ,CAAC,CASnB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKjD"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime Factory - Create sandboxed, worker, or main-thread runtime
|
|
3
|
+
*
|
|
4
|
+
* SECURITY: By default, createRuntime requires either:
|
|
5
|
+
* 1. A sandbox URL for cross-origin isolation (recommended)
|
|
6
|
+
* 2. Explicit opt-in via dangerouslyAllowSameOrigin for trusted code
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* // Secure: Cross-origin sandbox (recommended for untrusted code)
|
|
10
|
+
* const runtime = await createRuntime(vfs, {
|
|
11
|
+
* sandbox: 'https://myapp-sandbox.vercel.app'
|
|
12
|
+
* });
|
|
13
|
+
*
|
|
14
|
+
* // Same-origin with Worker (for demos/trusted code)
|
|
15
|
+
* const runtime = await createRuntime(vfs, {
|
|
16
|
+
* dangerouslyAllowSameOrigin: true,
|
|
17
|
+
* useWorker: true
|
|
18
|
+
* });
|
|
19
|
+
*
|
|
20
|
+
* // Same-origin main thread (least secure, trusted code only)
|
|
21
|
+
* const runtime = await createRuntime(vfs, {
|
|
22
|
+
* dangerouslyAllowSameOrigin: true
|
|
23
|
+
* });
|
|
24
|
+
*/
|
|
25
|
+
import type { VirtualFS } from './virtual-fs';
|
|
26
|
+
import type { IRuntime, CreateRuntimeOptions } from './runtime-interface';
|
|
27
|
+
/**
|
|
28
|
+
* Create a runtime instance based on configuration
|
|
29
|
+
*
|
|
30
|
+
* SECURITY: Requires either sandbox URL or explicit dangerouslyAllowSameOrigin.
|
|
31
|
+
*
|
|
32
|
+
* @param vfs - Virtual file system instance
|
|
33
|
+
* @param options - Runtime options including sandbox/security settings
|
|
34
|
+
* @returns Promise resolving to IRuntime instance
|
|
35
|
+
* @throws Error if neither sandbox nor dangerouslyAllowSameOrigin is specified
|
|
36
|
+
*/
|
|
37
|
+
export declare function createRuntime(vfs: VirtualFS, options?: CreateRuntimeOptions): Promise<IRuntime>;
|
|
38
|
+
export { Runtime } from './runtime';
|
|
39
|
+
export { WorkerRuntime } from './worker-runtime';
|
|
40
|
+
export { SandboxRuntime } from './sandbox-runtime';
|
|
41
|
+
export type { IRuntime, IExecuteResult, IRuntimeOptions, CreateRuntimeOptions, VFSSnapshot, } from './runtime-interface';
|
|
42
|
+
//# sourceMappingURL=create-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-runtime.d.ts","sourceRoot":"","sources":["../src/create-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAkB,oBAAoB,EAAmB,MAAM,qBAAqB,CAAC;AA2C3G;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,SAAS,EACd,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,QAAQ,CAAC,CAiDnB;AAGD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,YAAY,EACV,QAAQ,EACR,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,WAAW,GACZ,MAAM,qBAAqB,CAAC"}
|
package/dist/demo.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demo.d.ts","sourceRoot":"","sources":["../src/demo.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base DevServer class for framework-specific dev servers
|
|
3
|
+
* This is a framework-agnostic base that can be extended for Vite, Next.js, etc.
|
|
4
|
+
*/
|
|
5
|
+
import { EventEmitter } from './shims/events';
|
|
6
|
+
import { VirtualFS } from './virtual-fs';
|
|
7
|
+
import { Buffer } from './shims/stream';
|
|
8
|
+
export interface DevServerOptions {
|
|
9
|
+
port: number;
|
|
10
|
+
root?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface ResponseData {
|
|
13
|
+
statusCode: number;
|
|
14
|
+
statusMessage: string;
|
|
15
|
+
headers: Record<string, string>;
|
|
16
|
+
body: Buffer;
|
|
17
|
+
}
|
|
18
|
+
export interface HMRUpdate {
|
|
19
|
+
type: 'update' | 'full-reload';
|
|
20
|
+
path: string;
|
|
21
|
+
timestamp?: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Base class for framework-specific dev servers.
|
|
25
|
+
* Extend this to create Vite, Next.js, etc. implementations.
|
|
26
|
+
*/
|
|
27
|
+
export declare abstract class DevServer extends EventEmitter {
|
|
28
|
+
protected vfs: VirtualFS;
|
|
29
|
+
protected port: number;
|
|
30
|
+
protected root: string;
|
|
31
|
+
protected running: boolean;
|
|
32
|
+
constructor(vfs: VirtualFS, options: DevServerOptions);
|
|
33
|
+
/**
|
|
34
|
+
* Handle an incoming HTTP request
|
|
35
|
+
* Must be implemented by framework-specific subclass
|
|
36
|
+
*/
|
|
37
|
+
abstract handleRequest(method: string, url: string, headers: Record<string, string>, body?: Buffer): Promise<ResponseData>;
|
|
38
|
+
/**
|
|
39
|
+
* Start file watching for HMR
|
|
40
|
+
* Must be implemented by framework-specific subclass
|
|
41
|
+
*/
|
|
42
|
+
abstract startWatching(): void;
|
|
43
|
+
/**
|
|
44
|
+
* Stop the server and cleanup
|
|
45
|
+
*/
|
|
46
|
+
stop(): void;
|
|
47
|
+
/**
|
|
48
|
+
* Start the server
|
|
49
|
+
*/
|
|
50
|
+
start(): void;
|
|
51
|
+
/**
|
|
52
|
+
* Check if server is running
|
|
53
|
+
*/
|
|
54
|
+
isRunning(): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Get the server's port
|
|
57
|
+
*/
|
|
58
|
+
getPort(): number;
|
|
59
|
+
/**
|
|
60
|
+
* Serve a static file from the virtual filesystem
|
|
61
|
+
*/
|
|
62
|
+
protected serveFile(filePath: string): ResponseData;
|
|
63
|
+
/**
|
|
64
|
+
* Resolve a URL path to a filesystem path
|
|
65
|
+
*/
|
|
66
|
+
protected resolvePath(urlPath: string): string;
|
|
67
|
+
/**
|
|
68
|
+
* Create a 404 Not Found response
|
|
69
|
+
*/
|
|
70
|
+
protected notFound(path: string): ResponseData;
|
|
71
|
+
/**
|
|
72
|
+
* Create a 500 Server Error response
|
|
73
|
+
*/
|
|
74
|
+
protected serverError(error: unknown): ResponseData;
|
|
75
|
+
/**
|
|
76
|
+
* Create a redirect response
|
|
77
|
+
*/
|
|
78
|
+
protected redirect(location: string, status?: 301 | 302 | 307 | 308): ResponseData;
|
|
79
|
+
/**
|
|
80
|
+
* Get MIME type for a file path
|
|
81
|
+
*/
|
|
82
|
+
protected getMimeType(path: string): string;
|
|
83
|
+
/**
|
|
84
|
+
* Check if a path exists in the virtual filesystem
|
|
85
|
+
*/
|
|
86
|
+
protected exists(path: string): boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Check if a path is a directory
|
|
89
|
+
*/
|
|
90
|
+
protected isDirectory(path: string): boolean;
|
|
91
|
+
/**
|
|
92
|
+
* Emit an HMR update event
|
|
93
|
+
*/
|
|
94
|
+
protected emitHMRUpdate(update: HMRUpdate): void;
|
|
95
|
+
}
|
|
96
|
+
export default DevServer;
|
|
97
|
+
//# sourceMappingURL=dev-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-server.d.ts","sourceRoot":"","sources":["../src/dev-server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,QAAQ,GAAG,aAAa,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAyCD;;;GAGG;AACH,8BAAsB,SAAU,SAAQ,YAAY;IAClD,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC;IACzB,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,OAAO,EAAE,OAAO,CAAS;gBAEvB,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB;IAOrD;;;OAGG;IACH,QAAQ,CAAC,aAAa,CACpB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,YAAY,CAAC;IAExB;;;OAGG;IACH,QAAQ,CAAC,aAAa,IAAI,IAAI;IAE9B;;OAEG;IACH,IAAI,IAAI,IAAI;IAKZ;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;OAEG;IACH,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY;IA4BnD;;OAEG;IACH,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAiB9C;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY;IAa9C;;OAEG;IACH,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY;IAcnD;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAS,GAAG,YAAY;IAavF;;OAEG;IACH,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAK3C;;OAEG;IACH,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IASvC;;OAEG;IACH,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAQ5C;;OAEG;IACH,SAAS,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;CAMjD;AAED,eAAe,SAAS,CAAC"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NextDevServer - Next.js-compatible dev server for browser environment
|
|
3
|
+
* Implements file-based routing, API routes, and HMR
|
|
4
|
+
*/
|
|
5
|
+
import { DevServer, DevServerOptions, ResponseData } from '../dev-server';
|
|
6
|
+
import { VirtualFS } from '../virtual-fs';
|
|
7
|
+
import { Buffer } from '../shims/stream';
|
|
8
|
+
export interface NextDevServerOptions extends DevServerOptions {
|
|
9
|
+
/** Pages directory (default: '/pages') */
|
|
10
|
+
pagesDir?: string;
|
|
11
|
+
/** App directory for App Router (default: '/app') */
|
|
12
|
+
appDir?: string;
|
|
13
|
+
/** Public directory for static assets (default: '/public') */
|
|
14
|
+
publicDir?: string;
|
|
15
|
+
/** Prefer App Router over Pages Router (default: auto-detect) */
|
|
16
|
+
preferAppRouter?: boolean;
|
|
17
|
+
/** Environment variables (NEXT_PUBLIC_* are available in browser code via process.env) */
|
|
18
|
+
env?: Record<string, string>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* NextDevServer - A lightweight Next.js-compatible development server
|
|
22
|
+
*
|
|
23
|
+
* Supports both routing paradigms:
|
|
24
|
+
*
|
|
25
|
+
* 1. PAGES ROUTER (legacy, /pages directory):
|
|
26
|
+
* - /pages/index.jsx -> /
|
|
27
|
+
* - /pages/about.jsx -> /about
|
|
28
|
+
* - /pages/users/[id].jsx -> /users/:id (dynamic)
|
|
29
|
+
* - /pages/api/hello.js -> /api/hello (API route)
|
|
30
|
+
* - Uses next/router for navigation
|
|
31
|
+
*
|
|
32
|
+
* 2. APP ROUTER (new, /app directory):
|
|
33
|
+
* - /app/page.jsx -> /
|
|
34
|
+
* - /app/about/page.jsx -> /about
|
|
35
|
+
* - /app/users/[id]/page.jsx -> /users/:id (dynamic)
|
|
36
|
+
* - /app/layout.jsx -> Root layout (wraps all pages)
|
|
37
|
+
* - /app/about/layout.jsx -> Nested layout (wraps /about/*)
|
|
38
|
+
* - Uses next/navigation for navigation
|
|
39
|
+
*
|
|
40
|
+
* The server auto-detects which router to use based on directory existence,
|
|
41
|
+
* preferring App Router if both exist. Can be overridden via options.
|
|
42
|
+
*/
|
|
43
|
+
export declare class NextDevServer extends DevServer {
|
|
44
|
+
/** Pages Router directory (default: '/pages') */
|
|
45
|
+
private pagesDir;
|
|
46
|
+
/** App Router directory (default: '/app') */
|
|
47
|
+
private appDir;
|
|
48
|
+
/** Static assets directory (default: '/public') */
|
|
49
|
+
private publicDir;
|
|
50
|
+
/** Whether to use App Router (true) or Pages Router (false) */
|
|
51
|
+
private useAppRouter;
|
|
52
|
+
/** Cleanup function for file watchers */
|
|
53
|
+
private watcherCleanup;
|
|
54
|
+
/** Target window for HMR updates (iframe contentWindow) */
|
|
55
|
+
private hmrTargetWindow;
|
|
56
|
+
/** Store options for later access (e.g., env vars) */
|
|
57
|
+
private options;
|
|
58
|
+
constructor(vfs: VirtualFS, options: NextDevServerOptions);
|
|
59
|
+
/**
|
|
60
|
+
* Set an environment variable at runtime
|
|
61
|
+
* NEXT_PUBLIC_* variables will be available via process.env in browser code
|
|
62
|
+
*/
|
|
63
|
+
setEnv(key: string, value: string): void;
|
|
64
|
+
/**
|
|
65
|
+
* Get current environment variables
|
|
66
|
+
*/
|
|
67
|
+
getEnv(): Record<string, string>;
|
|
68
|
+
/**
|
|
69
|
+
* Set the target window for HMR updates (typically iframe.contentWindow)
|
|
70
|
+
* This enables HMR to work with sandboxed iframes via postMessage
|
|
71
|
+
*/
|
|
72
|
+
setHMRTarget(targetWindow: Window): void;
|
|
73
|
+
/**
|
|
74
|
+
* Generate a script tag that defines process.env with NEXT_PUBLIC_* variables
|
|
75
|
+
* This makes environment variables available to browser code via process.env.NEXT_PUBLIC_*
|
|
76
|
+
*/
|
|
77
|
+
private generateEnvScript;
|
|
78
|
+
/**
|
|
79
|
+
* Check if App Router is available
|
|
80
|
+
*/
|
|
81
|
+
private hasAppRouter;
|
|
82
|
+
/**
|
|
83
|
+
* Handle an incoming HTTP request
|
|
84
|
+
*/
|
|
85
|
+
handleRequest(method: string, url: string, headers: Record<string, string>, body?: Buffer): Promise<ResponseData>;
|
|
86
|
+
/**
|
|
87
|
+
* Serve Next.js shims (link, router, head, navigation)
|
|
88
|
+
*/
|
|
89
|
+
private serveNextShim;
|
|
90
|
+
/**
|
|
91
|
+
* Serve static assets from /_next/static/
|
|
92
|
+
*/
|
|
93
|
+
private serveStaticAsset;
|
|
94
|
+
/**
|
|
95
|
+
* Handle API route requests
|
|
96
|
+
*/
|
|
97
|
+
private handleApiRoute;
|
|
98
|
+
/**
|
|
99
|
+
* Handle streaming API route requests
|
|
100
|
+
* This is called by the server bridge for requests that need streaming support
|
|
101
|
+
*/
|
|
102
|
+
handleStreamingRequest(method: string, url: string, headers: Record<string, string>, body: Buffer | undefined, onStart: (statusCode: number, statusMessage: string, headers: Record<string, string>) => void, onChunk: (chunk: string | Uint8Array) => void, onEnd: () => void): Promise<void>;
|
|
103
|
+
/**
|
|
104
|
+
* Create a streaming mock response that calls callbacks as data is written
|
|
105
|
+
*/
|
|
106
|
+
private createStreamingMockResponse;
|
|
107
|
+
/**
|
|
108
|
+
* Resolve API route to file path
|
|
109
|
+
*/
|
|
110
|
+
private resolveApiFile;
|
|
111
|
+
/**
|
|
112
|
+
* Create mock Next.js request object
|
|
113
|
+
*/
|
|
114
|
+
private createMockRequest;
|
|
115
|
+
/**
|
|
116
|
+
* Parse cookie header
|
|
117
|
+
*/
|
|
118
|
+
private parseCookies;
|
|
119
|
+
/**
|
|
120
|
+
* Create mock Next.js response object with streaming support
|
|
121
|
+
*/
|
|
122
|
+
private createMockResponse;
|
|
123
|
+
/**
|
|
124
|
+
* Execute API handler code
|
|
125
|
+
*/
|
|
126
|
+
private executeApiHandler;
|
|
127
|
+
/**
|
|
128
|
+
* Handle page route requests
|
|
129
|
+
*/
|
|
130
|
+
private handlePageRoute;
|
|
131
|
+
/**
|
|
132
|
+
* Handle App Router page requests
|
|
133
|
+
*/
|
|
134
|
+
private handleAppRouterPage;
|
|
135
|
+
/**
|
|
136
|
+
* Resolve App Router route to page and layout files
|
|
137
|
+
*/
|
|
138
|
+
private resolveAppRoute;
|
|
139
|
+
/**
|
|
140
|
+
* Resolve dynamic App Router routes like /app/[id]/page.jsx
|
|
141
|
+
*/
|
|
142
|
+
private resolveAppDynamicRoute;
|
|
143
|
+
/**
|
|
144
|
+
* Generate HTML for App Router with nested layouts
|
|
145
|
+
*/
|
|
146
|
+
private generateAppRouterHtml;
|
|
147
|
+
/**
|
|
148
|
+
* Resolve URL pathname to page file
|
|
149
|
+
*/
|
|
150
|
+
private resolvePageFile;
|
|
151
|
+
/**
|
|
152
|
+
* Resolve dynamic routes like /users/[id]
|
|
153
|
+
*/
|
|
154
|
+
private resolveDynamicRoute;
|
|
155
|
+
/**
|
|
156
|
+
* Generate HTML shell for a page
|
|
157
|
+
*/
|
|
158
|
+
private generatePageHtml;
|
|
159
|
+
/**
|
|
160
|
+
* Serve a basic 404 page
|
|
161
|
+
*/
|
|
162
|
+
private serve404Page;
|
|
163
|
+
/**
|
|
164
|
+
* Check if a file needs transformation
|
|
165
|
+
*/
|
|
166
|
+
private needsTransform;
|
|
167
|
+
/**
|
|
168
|
+
* Transform and serve a JSX/TS file
|
|
169
|
+
*/
|
|
170
|
+
private transformAndServe;
|
|
171
|
+
/**
|
|
172
|
+
* Transform JSX/TS code to browser-compatible JavaScript (ESM for browser)
|
|
173
|
+
*/
|
|
174
|
+
private transformCode;
|
|
175
|
+
/**
|
|
176
|
+
* Strip CSS imports from code (they are loaded via <link> tags instead)
|
|
177
|
+
* Handles: import './styles.css', import '../globals.css', etc.
|
|
178
|
+
*/
|
|
179
|
+
private stripCssImports;
|
|
180
|
+
/**
|
|
181
|
+
* Transform API handler code to CommonJS for eval execution
|
|
182
|
+
*/
|
|
183
|
+
private transformApiHandler;
|
|
184
|
+
/**
|
|
185
|
+
* Add React Refresh registration to transformed code
|
|
186
|
+
*/
|
|
187
|
+
private addReactRefresh;
|
|
188
|
+
/**
|
|
189
|
+
* Start file watching for HMR
|
|
190
|
+
*/
|
|
191
|
+
startWatching(): void;
|
|
192
|
+
/**
|
|
193
|
+
* Handle file change event
|
|
194
|
+
*/
|
|
195
|
+
private handleFileChange;
|
|
196
|
+
/**
|
|
197
|
+
* Stop the server
|
|
198
|
+
*/
|
|
199
|
+
stop(): void;
|
|
200
|
+
}
|
|
201
|
+
export default NextDevServer;
|
|
202
|
+
//# sourceMappingURL=next-dev-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next-dev-server.d.ts","sourceRoot":"","sources":["../../src/frameworks/next-dev-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ViteDevServer - Vite-compatible dev server for browser environment
|
|
3
|
+
* Serves files from VirtualFS with JSX/TypeScript transformation
|
|
4
|
+
*/
|
|
5
|
+
import { DevServer, DevServerOptions, ResponseData } from '../dev-server';
|
|
6
|
+
import { VirtualFS } from '../virtual-fs';
|
|
7
|
+
import { Buffer } from '../shims/stream';
|
|
8
|
+
export interface ViteDevServerOptions extends DevServerOptions {
|
|
9
|
+
/**
|
|
10
|
+
* Enable JSX transformation (default: true)
|
|
11
|
+
*/
|
|
12
|
+
jsx?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* JSX factory function (default: 'React.createElement')
|
|
15
|
+
*/
|
|
16
|
+
jsxFactory?: string;
|
|
17
|
+
/**
|
|
18
|
+
* JSX fragment function (default: 'React.Fragment')
|
|
19
|
+
*/
|
|
20
|
+
jsxFragment?: string;
|
|
21
|
+
/**
|
|
22
|
+
* Auto-inject React import for JSX files (default: true)
|
|
23
|
+
*/
|
|
24
|
+
jsxAutoImport?: boolean;
|
|
25
|
+
}
|
|
26
|
+
export declare class ViteDevServer extends DevServer {
|
|
27
|
+
private watcherCleanup;
|
|
28
|
+
private options;
|
|
29
|
+
private hmrTargetWindow;
|
|
30
|
+
constructor(vfs: VirtualFS, options: ViteDevServerOptions);
|
|
31
|
+
/**
|
|
32
|
+
* Set the target window for HMR updates (typically iframe.contentWindow)
|
|
33
|
+
* This enables HMR to work with sandboxed iframes via postMessage
|
|
34
|
+
*/
|
|
35
|
+
setHMRTarget(targetWindow: Window): void;
|
|
36
|
+
/**
|
|
37
|
+
* Handle an incoming HTTP request
|
|
38
|
+
*/
|
|
39
|
+
handleRequest(method: string, url: string, headers: Record<string, string>, body?: Buffer): Promise<ResponseData>;
|
|
40
|
+
/**
|
|
41
|
+
* Start file watching for HMR
|
|
42
|
+
*/
|
|
43
|
+
startWatching(): void;
|
|
44
|
+
/**
|
|
45
|
+
* Handle file change event
|
|
46
|
+
*/
|
|
47
|
+
private handleFileChange;
|
|
48
|
+
/**
|
|
49
|
+
* Stop the server
|
|
50
|
+
*/
|
|
51
|
+
stop(): void;
|
|
52
|
+
/**
|
|
53
|
+
* Check if a file needs transformation
|
|
54
|
+
*/
|
|
55
|
+
private needsTransform;
|
|
56
|
+
/**
|
|
57
|
+
* Transform and serve a JSX/TS file
|
|
58
|
+
*/
|
|
59
|
+
private transformAndServe;
|
|
60
|
+
/**
|
|
61
|
+
* Transform JSX/TS code to browser-compatible JavaScript
|
|
62
|
+
*/
|
|
63
|
+
private transformCode;
|
|
64
|
+
/**
|
|
65
|
+
* Add React Refresh registration to transformed code
|
|
66
|
+
* This enables true HMR (state-preserving) for React components
|
|
67
|
+
*/
|
|
68
|
+
private addReactRefresh;
|
|
69
|
+
/**
|
|
70
|
+
* Serve CSS file as a JavaScript module that injects styles
|
|
71
|
+
* This is needed because ES module imports of CSS files need to return JS
|
|
72
|
+
*/
|
|
73
|
+
private serveCssAsModule;
|
|
74
|
+
/**
|
|
75
|
+
* Serve HTML file with HMR client script injected
|
|
76
|
+
*
|
|
77
|
+
* IMPORTANT: React Refresh preamble MUST be injected before any module scripts.
|
|
78
|
+
* The preamble uses top-level await to block until React Refresh is loaded
|
|
79
|
+
* and injectIntoGlobalHook is called. This ensures React Refresh hooks into
|
|
80
|
+
* React BEFORE React is imported by any module.
|
|
81
|
+
*/
|
|
82
|
+
private serveHtmlWithHMR;
|
|
83
|
+
}
|
|
84
|
+
export default ViteDevServer;
|
|
85
|
+
//# sourceMappingURL=vite-dev-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite-dev-server.d.ts","sourceRoot":"","sources":["../../src/frameworks/vite-dev-server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,EAAa,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAqEzC,MAAM,WAAW,oBAAqB,SAAQ,gBAAgB;IAC5D;;OAEG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;IAEd;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAqLD,qBAAa,aAAc,SAAQ,SAAS;IAC1C,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,eAAe,CAAuB;gBAElC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,oBAAoB;IAWzD;;;OAGG;IACH,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAIxC;;OAEG;IACG,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,YAAY,CAAC;IA0ExB;;OAEG;IACH,aAAa,IAAI,IAAI;IAqCrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA2BxB;;OAEG;IACH,IAAI,IAAI,IAAI;IAWZ;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;YACW,iBAAiB;IAiC/B;;OAEG;YACW,aAAa;IAsC3B;;;OAGG;IACH,OAAO,CAAC,eAAe;IA4DvB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IA+BxB;;;;;;;OAOG;IACH,OAAO,CAAC,gBAAgB;CAyCzB;AAED,eAAe,aAAa,CAAC"}
|