@seanhogg/builderforce-webcontainers-core 2026.10.2 → 2026.10.4
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/dist/build.d.ts +42 -0
- package/dist/build.d.ts.map +1 -0
- package/dist/build.js +65 -0
- package/dist/build.js.map +1 -0
- package/dist/buildHost.d.ts +31 -0
- package/dist/buildHost.d.ts.map +1 -0
- package/dist/buildHost.js +125 -0
- package/dist/buildHost.js.map +1 -0
- package/dist/buildHtml.d.ts +28 -0
- package/dist/buildHtml.d.ts.map +1 -0
- package/dist/buildHtml.js +74 -0
- package/dist/buildHtml.js.map +1 -0
- package/dist/bundler.d.ts +129 -0
- package/dist/bundler.d.ts.map +1 -0
- package/dist/bundler.js +79 -0
- package/dist/bundler.js.map +1 -0
- package/dist/check/acquire.d.ts +46 -0
- package/dist/check/acquire.d.ts.map +1 -0
- package/dist/check/acquire.js +179 -0
- package/dist/check/acquire.js.map +1 -0
- package/dist/check/compilerHost.d.ts +22 -0
- package/dist/check/compilerHost.d.ts.map +1 -0
- package/dist/check/compilerHost.js +128 -0
- package/dist/check/compilerHost.js.map +1 -0
- package/dist/check/diagnostics.d.ts +23 -0
- package/dist/check/diagnostics.d.ts.map +1 -0
- package/dist/check/diagnostics.js +28 -0
- package/dist/check/diagnostics.js.map +1 -0
- package/dist/check/index.d.ts +19 -0
- package/dist/check/index.d.ts.map +1 -0
- package/dist/check/index.js +13 -0
- package/dist/check/index.js.map +1 -0
- package/dist/check/projects.d.ts +26 -0
- package/dist/check/projects.d.ts.map +1 -0
- package/dist/check/projects.js +124 -0
- package/dist/check/projects.js.map +1 -0
- package/dist/check/shims.d.ts +29 -0
- package/dist/check/shims.d.ts.map +1 -0
- package/dist/check/shims.js +76 -0
- package/dist/check/shims.js.map +1 -0
- package/dist/check/typeStore.d.ts +57 -0
- package/dist/check/typeStore.d.ts.map +1 -0
- package/dist/check/typeStore.js +89 -0
- package/dist/check/typeStore.js.map +1 -0
- package/dist/check/typecheck.d.ts +29 -0
- package/dist/check/typecheck.d.ts.map +1 -0
- package/dist/check/typecheck.js +91 -0
- package/dist/check/typecheck.js.map +1 -0
- package/dist/compileComponent.d.ts +8 -0
- package/dist/compileComponent.d.ts.map +1 -0
- package/dist/compileComponent.js +22 -0
- package/dist/compileComponent.js.map +1 -0
- package/dist/compileScript.d.ts +19 -4
- package/dist/compileScript.d.ts.map +1 -1
- package/dist/compileScript.js +37 -12
- package/dist/compileScript.js.map +1 -1
- package/dist/components.d.ts +41 -0
- package/dist/components.d.ts.map +1 -0
- package/dist/components.js +14 -0
- package/dist/components.js.map +1 -0
- package/dist/detectProject.d.ts +3 -0
- package/dist/detectProject.d.ts.map +1 -1
- package/dist/detectProject.js +16 -6
- package/dist/detectProject.js.map +1 -1
- package/dist/devServer.d.ts +5 -2
- package/dist/devServer.d.ts.map +1 -1
- package/dist/devServer.js +12 -8
- package/dist/devServer.js.map +1 -1
- package/dist/hash.d.ts +2 -0
- package/dist/hash.d.ts.map +1 -0
- package/dist/hash.js +22 -0
- package/dist/hash.js.map +1 -0
- package/dist/index.d.ts +24 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -3
- package/dist/index.js.map +1 -1
- package/dist/installer/bins.d.ts +24 -0
- package/dist/installer/bins.d.ts.map +1 -0
- package/dist/installer/bins.js +56 -0
- package/dist/installer/bins.js.map +1 -0
- package/dist/installer/index.d.ts +14 -0
- package/dist/installer/index.d.ts.map +1 -0
- package/dist/installer/index.js +9 -0
- package/dist/installer/index.js.map +1 -0
- package/dist/installer/install.d.ts +46 -0
- package/dist/installer/install.d.ts.map +1 -0
- package/dist/installer/install.js +245 -0
- package/dist/installer/install.js.map +1 -0
- package/dist/installer/lockfile.d.ts +49 -0
- package/dist/installer/lockfile.d.ts.map +1 -0
- package/dist/installer/lockfile.js +110 -0
- package/dist/installer/lockfile.js.map +1 -0
- package/dist/installer/registry.d.ts +84 -0
- package/dist/installer/registry.d.ts.map +1 -0
- package/dist/installer/registry.js +130 -0
- package/dist/installer/registry.js.map +1 -0
- package/dist/installer/semver.d.ts +38 -0
- package/dist/installer/semver.d.ts.map +1 -0
- package/dist/installer/semver.js +187 -0
- package/dist/installer/semver.js.map +1 -0
- package/dist/installer/spec.d.ts +30 -0
- package/dist/installer/spec.d.ts.map +1 -0
- package/dist/installer/spec.js +30 -0
- package/dist/installer/spec.js.map +1 -0
- package/dist/installer/tar.d.ts +17 -0
- package/dist/installer/tar.d.ts.map +1 -0
- package/dist/installer/tar.js +150 -0
- package/dist/installer/tar.js.map +1 -0
- package/dist/installer/tree.d.ts +48 -0
- package/dist/installer/tree.d.ts.map +1 -0
- package/dist/installer/tree.js +179 -0
- package/dist/installer/tree.js.map +1 -0
- package/dist/node/assert.d.ts +15 -0
- package/dist/node/assert.d.ts.map +1 -0
- package/dist/node/assert.js +137 -0
- package/dist/node/assert.js.map +1 -0
- package/dist/node/buffer.d.ts +84 -0
- package/dist/node/buffer.d.ts.map +1 -0
- package/dist/node/buffer.js +304 -0
- package/dist/node/buffer.js.map +1 -0
- package/dist/node/builtins.d.ts +25 -0
- package/dist/node/builtins.d.ts.map +1 -0
- package/dist/node/builtins.js +101 -0
- package/dist/node/builtins.js.map +1 -0
- package/dist/node/callable.d.ts +13 -0
- package/dist/node/callable.d.ts.map +1 -0
- package/dist/node/callable.js +26 -0
- package/dist/node/callable.js.map +1 -0
- package/dist/node/childProcess.d.ts +13 -0
- package/dist/node/childProcess.d.ts.map +1 -0
- package/dist/node/childProcess.js +143 -0
- package/dist/node/childProcess.js.map +1 -0
- package/dist/node/crypto.d.ts +3 -0
- package/dist/node/crypto.d.ts.map +1 -0
- package/dist/node/crypto.js +180 -0
- package/dist/node/crypto.js.map +1 -0
- package/dist/node/esm.d.ts +9 -0
- package/dist/node/esm.d.ts.map +1 -0
- package/dist/node/esm.js +202 -0
- package/dist/node/esm.js.map +1 -0
- package/dist/node/events.d.ts +40 -0
- package/dist/node/events.d.ts.map +1 -0
- package/dist/node/events.js +160 -0
- package/dist/node/events.js.map +1 -0
- package/dist/node/fs/index.d.ts +7 -0
- package/dist/node/fs/index.d.ts.map +1 -0
- package/dist/node/fs/index.js +270 -0
- package/dist/node/fs/index.js.map +1 -0
- package/dist/node/fs/stats.d.ts +93 -0
- package/dist/node/fs/stats.d.ts.map +1 -0
- package/dist/node/fs/stats.js +104 -0
- package/dist/node/fs/stats.js.map +1 -0
- package/dist/node/fs/sync.d.ts +98 -0
- package/dist/node/fs/sync.d.ts.map +1 -0
- package/dist/node/fs/sync.js +348 -0
- package/dist/node/fs/sync.js.map +1 -0
- package/dist/node/hashes.d.ts +15 -0
- package/dist/node/hashes.d.ts.map +1 -0
- package/dist/node/hashes.js +195 -0
- package/dist/node/hashes.js.map +1 -0
- package/dist/node/http/client.d.ts +35 -0
- package/dist/node/http/client.d.ts.map +1 -0
- package/dist/node/http/client.js +161 -0
- package/dist/node/http/client.js.map +1 -0
- package/dist/node/http/index.d.ts +5 -0
- package/dist/node/http/index.d.ts.map +1 -0
- package/dist/node/http/index.js +125 -0
- package/dist/node/http/index.js.map +1 -0
- package/dist/node/http/server.d.ts +135 -0
- package/dist/node/http/server.d.ts.map +1 -0
- package/dist/node/http/server.js +308 -0
- package/dist/node/http/server.js.map +1 -0
- package/dist/node/http/status.d.ts +3 -0
- package/dist/node/http/status.d.ts.map +1 -0
- package/dist/node/http/status.js +13 -0
- package/dist/node/http/status.js.map +1 -0
- package/dist/node/inspect.d.ts +22 -0
- package/dist/node/inspect.d.ts.map +1 -0
- package/dist/node/inspect.js +172 -0
- package/dist/node/inspect.js.map +1 -0
- package/dist/node/loader.d.ts +91 -0
- package/dist/node/loader.d.ts.map +1 -0
- package/dist/node/loader.js +265 -0
- package/dist/node/loader.js.map +1 -0
- package/dist/node/loop.d.ts +71 -0
- package/dist/node/loop.d.ts.map +1 -0
- package/dist/node/loop.js +189 -0
- package/dist/node/loop.js.map +1 -0
- package/dist/node/misc.d.ts +10 -0
- package/dist/node/misc.d.ts.map +1 -0
- package/dist/node/misc.js +256 -0
- package/dist/node/misc.js.map +1 -0
- package/dist/node/path.d.ts +14 -0
- package/dist/node/path.d.ts.map +1 -0
- package/dist/node/path.js +128 -0
- package/dist/node/path.js.map +1 -0
- package/dist/node/process.d.ts +31 -0
- package/dist/node/process.d.ts.map +1 -0
- package/dist/node/process.js +309 -0
- package/dist/node/process.js.map +1 -0
- package/dist/node/program.d.ts +19 -0
- package/dist/node/program.d.ts.map +1 -0
- package/dist/node/program.js +165 -0
- package/dist/node/program.js.map +1 -0
- package/dist/node/readline.d.ts +2 -0
- package/dist/node/readline.d.ts.map +1 -0
- package/dist/node/readline.js +155 -0
- package/dist/node/readline.js.map +1 -0
- package/dist/node/resolve.d.ts +45 -0
- package/dist/node/resolve.d.ts.map +1 -0
- package/dist/node/resolve.js +206 -0
- package/dist/node/resolve.js.map +1 -0
- package/dist/node/runtime.d.ts +40 -0
- package/dist/node/runtime.d.ts.map +1 -0
- package/dist/node/runtime.js +149 -0
- package/dist/node/runtime.js.map +1 -0
- package/dist/node/stream/index.d.ts +52 -0
- package/dist/node/stream/index.d.ts.map +1 -0
- package/dist/node/stream/index.js +184 -0
- package/dist/node/stream/index.js.map +1 -0
- package/dist/node/stream/readable.d.ts +83 -0
- package/dist/node/stream/readable.d.ts.map +1 -0
- package/dist/node/stream/readable.js +325 -0
- package/dist/node/stream/readable.js.map +1 -0
- package/dist/node/stream/writable.d.ts +80 -0
- package/dist/node/stream/writable.d.ts.map +1 -0
- package/dist/node/stream/writable.js +224 -0
- package/dist/node/stream/writable.js.map +1 -0
- package/dist/node/urlqs.d.ts +22 -0
- package/dist/node/urlqs.d.ts.map +1 -0
- package/dist/node/urlqs.js +165 -0
- package/dist/node/urlqs.js.map +1 -0
- package/dist/node/util.d.ts +37 -0
- package/dist/node/util.d.ts.map +1 -0
- package/dist/node/util.js +160 -0
- package/dist/node/util.js.map +1 -0
- package/dist/node/zlib.d.ts +2 -0
- package/dist/node/zlib.d.ts.map +1 -0
- package/dist/node/zlib.js +133 -0
- package/dist/node/zlib.js.map +1 -0
- package/dist/packageCdn.d.ts +40 -0
- package/dist/packageCdn.d.ts.map +1 -1
- package/dist/packageCdn.js +54 -7
- package/dist/packageCdn.js.map +1 -1
- package/dist/projectConfig.d.ts +6 -2
- package/dist/projectConfig.d.ts.map +1 -1
- package/dist/projectConfig.js +32 -8
- package/dist/projectConfig.js.map +1 -1
- package/dist/shell/builtins.d.ts +23 -0
- package/dist/shell/builtins.d.ts.map +1 -0
- package/dist/shell/builtins.js +131 -0
- package/dist/shell/builtins.js.map +1 -0
- package/dist/shell/context.d.ts +41 -0
- package/dist/shell/context.d.ts.map +1 -0
- package/dist/shell/context.js +65 -0
- package/dist/shell/context.js.map +1 -0
- package/dist/shell/devHandoff.d.ts +18 -0
- package/dist/shell/devHandoff.d.ts.map +1 -0
- package/dist/shell/devHandoff.js +36 -0
- package/dist/shell/devHandoff.js.map +1 -0
- package/dist/shell/exec.d.ts +67 -0
- package/dist/shell/exec.d.ts.map +1 -0
- package/dist/shell/exec.js +247 -0
- package/dist/shell/exec.js.map +1 -0
- package/dist/shell/expand.d.ts +28 -0
- package/dist/shell/expand.d.ts.map +1 -0
- package/dist/shell/expand.js +149 -0
- package/dist/shell/expand.js.map +1 -0
- package/dist/shell/fileCommands.d.ts +10 -0
- package/dist/shell/fileCommands.d.ts.map +1 -0
- package/dist/shell/fileCommands.js +208 -0
- package/dist/shell/fileCommands.js.map +1 -0
- package/dist/shell/lineEditor.d.ts +43 -0
- package/dist/shell/lineEditor.d.ts.map +1 -0
- package/dist/shell/lineEditor.js +234 -0
- package/dist/shell/lineEditor.js.map +1 -0
- package/dist/shell/npm.d.ts +6 -0
- package/dist/shell/npm.d.ts.map +1 -0
- package/dist/shell/npm.js +234 -0
- package/dist/shell/npm.js.map +1 -0
- package/dist/shell/parse.d.ts +73 -0
- package/dist/shell/parse.d.ts.map +1 -0
- package/dist/shell/parse.js +300 -0
- package/dist/shell/parse.js.map +1 -0
- package/dist/shell/program.d.ts +12 -0
- package/dist/shell/program.d.ts.map +1 -0
- package/dist/shell/program.js +219 -0
- package/dist/shell/program.js.map +1 -0
- package/dist/shell/textCommands.d.ts +15 -0
- package/dist/shell/textCommands.d.ts.map +1 -0
- package/dist/shell/textCommands.js +185 -0
- package/dist/shell/textCommands.js.map +1 -0
- package/dist/styleModules.d.ts +6 -0
- package/dist/styleModules.d.ts.map +1 -1
- package/dist/styleModules.js +14 -4
- package/dist/styleModules.js.map +1 -1
- package/dist/svelteCompiler.d.ts +28 -0
- package/dist/svelteCompiler.d.ts.map +1 -0
- package/dist/svelteCompiler.js +13 -0
- package/dist/svelteCompiler.js.map +1 -0
- package/dist/system/commands.d.ts +26 -0
- package/dist/system/commands.d.ts.map +1 -0
- package/dist/system/commands.js +53 -0
- package/dist/system/commands.js.map +1 -0
- package/dist/system/index.d.ts +23 -0
- package/dist/system/index.d.ts.map +1 -0
- package/dist/system/index.js +16 -0
- package/dist/system/index.js.map +1 -0
- package/dist/system/kernel.d.ts +54 -0
- package/dist/system/kernel.d.ts.map +1 -0
- package/dist/system/kernel.js +81 -0
- package/dist/system/kernel.js.map +1 -0
- package/dist/system/ports.d.ts +32 -0
- package/dist/system/ports.d.ts.map +1 -0
- package/dist/system/ports.js +57 -0
- package/dist/system/ports.js.map +1 -0
- package/dist/system/process.d.ts +32 -0
- package/dist/system/process.d.ts.map +1 -0
- package/dist/system/process.js +130 -0
- package/dist/system/process.js.map +1 -0
- package/dist/system/programs.d.ts +10 -0
- package/dist/system/programs.d.ts.map +1 -0
- package/dist/system/programs.js +22 -0
- package/dist/system/programs.js.map +1 -0
- package/dist/system/terminal.d.ts +45 -0
- package/dist/system/terminal.d.ts.map +1 -0
- package/dist/system/terminal.js +127 -0
- package/dist/system/terminal.js.map +1 -0
- package/dist/system/types.d.ts +100 -0
- package/dist/system/types.d.ts.map +1 -0
- package/dist/system/types.js +2 -0
- package/dist/system/types.js.map +1 -0
- package/dist/vfs.d.ts +28 -4
- package/dist/vfs.d.ts.map +1 -1
- package/dist/vfs.js +95 -32
- package/dist/vfs.js.map +1 -1
- package/dist/vueCompiler.d.ts +75 -0
- package/dist/vueCompiler.d.ts.map +1 -0
- package/dist/vueCompiler.js +67 -0
- package/dist/vueCompiler.js.map +1 -0
- package/package.json +18 -2
- package/src/build.ts +105 -0
- package/src/buildHost.ts +154 -0
- package/src/buildHtml.ts +101 -0
- package/src/bundler.ts +190 -0
- package/src/check/acquire.ts +212 -0
- package/src/check/compilerHost.ts +138 -0
- package/src/check/diagnostics.ts +48 -0
- package/src/check/index.ts +28 -0
- package/src/check/projects.ts +149 -0
- package/src/check/shims.ts +88 -0
- package/src/check/typeStore.ts +103 -0
- package/src/check/typecheck.ts +134 -0
- package/src/compileComponent.ts +21 -0
- package/src/compileScript.ts +42 -13
- package/src/components.ts +59 -0
- package/src/detectProject.ts +18 -6
- package/src/devServer.ts +16 -11
- package/src/hash.ts +22 -0
- package/src/index.ts +35 -6
- package/src/installer/bins.ts +64 -0
- package/src/installer/index.ts +13 -0
- package/src/installer/install.ts +275 -0
- package/src/installer/lockfile.ts +146 -0
- package/src/installer/registry.ts +175 -0
- package/src/installer/semver.ts +190 -0
- package/src/installer/spec.ts +53 -0
- package/src/installer/tar.ts +155 -0
- package/src/installer/tree.ts +236 -0
- package/src/node/assert.ts +127 -0
- package/src/node/buffer.ts +304 -0
- package/src/node/builtins.ts +123 -0
- package/src/node/callable.ts +25 -0
- package/src/node/childProcess.ts +164 -0
- package/src/node/crypto.ts +187 -0
- package/src/node/esm.ts +196 -0
- package/src/node/events.ts +176 -0
- package/src/node/fs/index.ts +277 -0
- package/src/node/fs/stats.ts +110 -0
- package/src/node/fs/sync.ts +335 -0
- package/src/node/hashes.ts +171 -0
- package/src/node/http/client.ts +173 -0
- package/src/node/http/index.ts +122 -0
- package/src/node/http/server.ts +308 -0
- package/src/node/http/status.ts +13 -0
- package/src/node/inspect.ts +166 -0
- package/src/node/loader.ts +293 -0
- package/src/node/loop.ts +193 -0
- package/src/node/misc.ts +250 -0
- package/src/node/path.ts +135 -0
- package/src/node/process.ts +324 -0
- package/src/node/program.ts +170 -0
- package/src/node/readline.ts +157 -0
- package/src/node/resolve.ts +216 -0
- package/src/node/runtime.ts +184 -0
- package/src/node/stream/index.ts +196 -0
- package/src/node/stream/readable.ts +345 -0
- package/src/node/stream/writable.ts +244 -0
- package/src/node/urlqs.ts +162 -0
- package/src/node/util.ts +145 -0
- package/src/node/zlib.ts +145 -0
- package/src/packageCdn.ts +91 -7
- package/src/projectConfig.ts +34 -7
- package/src/shell/builtins.ts +141 -0
- package/src/shell/context.ts +89 -0
- package/src/shell/devHandoff.ts +49 -0
- package/src/shell/exec.ts +268 -0
- package/src/shell/expand.ts +145 -0
- package/src/shell/fileCommands.ts +206 -0
- package/src/shell/lineEditor.ts +233 -0
- package/src/shell/npm.ts +229 -0
- package/src/shell/parse.ts +295 -0
- package/src/shell/program.ts +223 -0
- package/src/shell/textCommands.ts +177 -0
- package/src/styleModules.ts +15 -4
- package/src/svelteCompiler.ts +31 -0
- package/src/system/commands.ts +72 -0
- package/src/system/index.ts +22 -0
- package/src/system/kernel.ts +106 -0
- package/src/system/ports.ts +73 -0
- package/src/system/process.ts +158 -0
- package/src/system/programs.ts +31 -0
- package/src/system/terminal.ts +135 -0
- package/src/system/types.ts +103 -0
- package/src/vfs.ts +92 -28
- package/src/vueCompiler.ts +121 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a kernel's TTY layer does between xterm.js and a program:
|
|
3
|
+
*
|
|
4
|
+
* - InputQueue: stdin as a buffered stream of string chunks (data that arrives
|
|
5
|
+
* before the program subscribes is kept, not dropped).
|
|
6
|
+
* - LineDiscipline: "cooked" mode — echo, backspace, Ctrl-U, Enter delivers the
|
|
7
|
+
* line, Ctrl-C raises SIGINT, Ctrl-D is end-of-file. A program that calls
|
|
8
|
+
* `setRawMode(true)` (the shell, prompts libraries) gets keystrokes untouched.
|
|
9
|
+
* - toTerminal: `\n` → `\r\n` on output (the TTY's ONLCR), since xterm.js
|
|
10
|
+
* only moves to column 0 on `\r`.
|
|
11
|
+
*/
|
|
12
|
+
export class InputQueue {
|
|
13
|
+
buffered = [];
|
|
14
|
+
listeners = new Set();
|
|
15
|
+
ended = false;
|
|
16
|
+
draining = false;
|
|
17
|
+
push(chunk) {
|
|
18
|
+
if (this.ended)
|
|
19
|
+
return;
|
|
20
|
+
if (chunk === null)
|
|
21
|
+
this.ended = true;
|
|
22
|
+
this.buffered.push(chunk);
|
|
23
|
+
this.drain();
|
|
24
|
+
}
|
|
25
|
+
subscribe(listener) {
|
|
26
|
+
this.listeners.add(listener);
|
|
27
|
+
this.drain();
|
|
28
|
+
return () => this.listeners.delete(listener);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Deliver on a microtask: a subscriber has always stored its unsubscribe
|
|
32
|
+
* function by then, and chunks stay buffered until someone is actually
|
|
33
|
+
* listening — one that leaves early does not take data with it.
|
|
34
|
+
*/
|
|
35
|
+
drain() {
|
|
36
|
+
if (this.draining || !this.listeners.size || !this.buffered.length)
|
|
37
|
+
return;
|
|
38
|
+
this.draining = true;
|
|
39
|
+
queueMicrotask(() => {
|
|
40
|
+
this.draining = false;
|
|
41
|
+
while (this.buffered.length && this.listeners.size) {
|
|
42
|
+
const chunk = this.buffered.shift();
|
|
43
|
+
for (const listener of [...this.listeners])
|
|
44
|
+
listener(chunk);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
/** Everything until end-of-file. */
|
|
49
|
+
readAll() {
|
|
50
|
+
return new Promise((resolve) => {
|
|
51
|
+
let text = '';
|
|
52
|
+
const stop = this.subscribe((chunk) => {
|
|
53
|
+
if (chunk === null) {
|
|
54
|
+
stop();
|
|
55
|
+
resolve(text);
|
|
56
|
+
}
|
|
57
|
+
else
|
|
58
|
+
text += chunk;
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
get isEnded() {
|
|
63
|
+
return this.ended;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
export function toTerminal(text) {
|
|
67
|
+
return text.replace(/\r?\n/g, '\r\n');
|
|
68
|
+
}
|
|
69
|
+
export class LineDiscipline {
|
|
70
|
+
options;
|
|
71
|
+
raw = false;
|
|
72
|
+
line = '';
|
|
73
|
+
constructor(options) {
|
|
74
|
+
this.options = options;
|
|
75
|
+
}
|
|
76
|
+
input(data) {
|
|
77
|
+
if (this.raw) {
|
|
78
|
+
this.options.deliver(data);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
// Arrow keys and other escape sequences have no meaning in cooked mode.
|
|
82
|
+
const text = data.replace(/\x1b\[[0-9;]*[A-Za-z~]|\x1bO[A-Za-z]/g, '');
|
|
83
|
+
for (const ch of text) {
|
|
84
|
+
switch (ch) {
|
|
85
|
+
case '\r':
|
|
86
|
+
case '\n':
|
|
87
|
+
this.options.echo('\r\n');
|
|
88
|
+
this.options.deliver(this.line + '\n');
|
|
89
|
+
this.line = '';
|
|
90
|
+
break;
|
|
91
|
+
case '\x7f':
|
|
92
|
+
case '\b':
|
|
93
|
+
if (this.line) {
|
|
94
|
+
this.line = [...this.line].slice(0, -1).join('');
|
|
95
|
+
this.options.echo('\b \b');
|
|
96
|
+
}
|
|
97
|
+
break;
|
|
98
|
+
case '\x03':
|
|
99
|
+
this.options.echo('^C\r\n');
|
|
100
|
+
this.line = '';
|
|
101
|
+
this.options.signal('SIGINT');
|
|
102
|
+
break;
|
|
103
|
+
case '\x1c':
|
|
104
|
+
this.options.signal('SIGQUIT');
|
|
105
|
+
break;
|
|
106
|
+
case '\x04':
|
|
107
|
+
if (this.line) {
|
|
108
|
+
this.options.deliver(this.line);
|
|
109
|
+
this.line = '';
|
|
110
|
+
}
|
|
111
|
+
else
|
|
112
|
+
this.options.deliver(null);
|
|
113
|
+
break;
|
|
114
|
+
case '\x15':
|
|
115
|
+
this.options.echo('\b \b'.repeat([...this.line].length));
|
|
116
|
+
this.line = '';
|
|
117
|
+
break;
|
|
118
|
+
default:
|
|
119
|
+
if (ch >= ' ' || ch === '\t') {
|
|
120
|
+
this.line += ch;
|
|
121
|
+
this.options.echo(ch);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=terminal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../src/system/terminal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,OAAO,UAAU;IACJ,QAAQ,GAAyB,EAAE,CAAC;IACpC,SAAS,GAAG,IAAI,GAAG,EAAkC,CAAC;IAC/D,KAAK,GAAG,KAAK,CAAC;IAEd,QAAQ,GAAG,KAAK,CAAC;IAEzB,IAAI,CAAC,KAAoB;QACvB,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO;QACvB,IAAI,KAAK,KAAK,IAAI;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QACtC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,SAAS,CAAC,QAAwC;QAChD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED;;;;OAIG;IACK,KAAK;QACX,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM;YAAE,OAAO;QAC3E,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,cAAc,CAAC,GAAG,EAAE;YAClB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;gBACnD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAG,CAAC;gBACrC,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;oBAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,oCAAoC;IACpC,OAAO;QACL,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;gBACpC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBACnB,IAAI,EAAE,CAAC;oBACP,OAAO,CAAC,IAAI,CAAC,CAAC;gBAChB,CAAC;;oBAAM,IAAI,IAAI,KAAK,CAAC;YACvB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC;AAWD,MAAM,OAAO,cAAc;IAII;IAH7B,GAAG,GAAG,KAAK,CAAC;IACJ,IAAI,GAAG,EAAE,CAAC;IAElB,YAA6B,OAA8B;QAA9B,YAAO,GAAP,OAAO,CAAuB;IAAG,CAAC;IAE/D,KAAK,CAAC,IAAY;QAChB,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO;QACT,CAAC;QACD,wEAAwE;QACxE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,uCAAuC,EAAE,EAAE,CAAC,CAAC;QACvE,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;YACtB,QAAQ,EAAE,EAAE,CAAC;gBACX,KAAK,IAAI,CAAC;gBACV,KAAK,IAAI;oBACP,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAC1B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;oBACvC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;oBACf,MAAM;gBACR,KAAK,MAAM,CAAC;gBACZ,KAAK,IAAI;oBACP,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;wBACd,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBACjD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC7B,CAAC;oBACD,MAAM;gBACR,KAAK,MAAM;oBACT,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC5B,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;oBACf,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAC9B,MAAM;gBACR,KAAK,MAAM;oBACT,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;oBAC/B,MAAM;gBACR,KAAK,MAAM;oBACT,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;wBACd,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAChC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;oBACjB,CAAC;;wBAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBAClC,MAAM;gBACR,KAAK,MAAM;oBACT,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;oBACzD,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;oBACf,MAAM;gBACR;oBACE,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;wBAC7B,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;wBAChB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACxB,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The contract between programs (node, the shell, npm, coreutils) and whatever
|
|
3
|
+
* hosts them. Programs only ever see these ports, so the same program code runs
|
|
4
|
+
* in-process under the core `Kernel` (Node tests) and one-per-Web-Worker in the
|
|
5
|
+
* browser runtime, where `spawn` and `listen` are relayed to the page.
|
|
6
|
+
*/
|
|
7
|
+
import type { VirtualFileSystem } from '../vfs.js';
|
|
8
|
+
import type { PackageCache } from '../installer/registry.js';
|
|
9
|
+
export interface TerminalPort {
|
|
10
|
+
cols: number;
|
|
11
|
+
rows: number;
|
|
12
|
+
onResize(listener: (cols: number, rows: number) => void): () => void;
|
|
13
|
+
/** Raw mode: the program handles keystrokes itself (no line editing, no echo). */
|
|
14
|
+
setRawMode(raw: boolean): void;
|
|
15
|
+
}
|
|
16
|
+
export interface ProgramIO {
|
|
17
|
+
stdout(chunk: string | Uint8Array): void;
|
|
18
|
+
stderr(chunk: string | Uint8Array): void;
|
|
19
|
+
/** Stdin chunks as they arrive; `null` is end-of-file. Buffered until the first subscriber. */
|
|
20
|
+
onStdin(listener: (chunk: string | null) => void): () => void;
|
|
21
|
+
/** Present when attached to a terminal (xterm.js). */
|
|
22
|
+
terminal?: TerminalPort;
|
|
23
|
+
}
|
|
24
|
+
export interface SpawnOptions {
|
|
25
|
+
cwd?: string;
|
|
26
|
+
env?: Record<string, string>;
|
|
27
|
+
/** Attach to a terminal of this size (`isTTY`, line discipline, `\r\n` output). */
|
|
28
|
+
terminal?: {
|
|
29
|
+
cols: number;
|
|
30
|
+
rows: number;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/** A child as its parent sees it (separate stdout/stderr, unlike the public API). */
|
|
34
|
+
export interface ChildHandle {
|
|
35
|
+
readonly pid: number;
|
|
36
|
+
onStdout(listener: (chunk: string) => void): () => void;
|
|
37
|
+
onStderr(listener: (chunk: string) => void): () => void;
|
|
38
|
+
write(data: string): void;
|
|
39
|
+
closeStdin(): void;
|
|
40
|
+
kill(signal?: string): void;
|
|
41
|
+
resize?(cols: number, rows: number): void;
|
|
42
|
+
readonly exit: Promise<number>;
|
|
43
|
+
}
|
|
44
|
+
export interface HttpRequestData {
|
|
45
|
+
method: string;
|
|
46
|
+
/** Path and query, as the server sees it (`/api?x=1`). */
|
|
47
|
+
url: string;
|
|
48
|
+
headers: Record<string, string>;
|
|
49
|
+
body: Uint8Array | null;
|
|
50
|
+
}
|
|
51
|
+
export interface HttpResponseData {
|
|
52
|
+
status: number;
|
|
53
|
+
statusText?: string;
|
|
54
|
+
headers: Record<string, string | string[]>;
|
|
55
|
+
body: Uint8Array;
|
|
56
|
+
}
|
|
57
|
+
export type HttpHandler = (request: HttpRequestData) => Promise<HttpResponseData>;
|
|
58
|
+
export interface System {
|
|
59
|
+
fs: VirtualFileSystem;
|
|
60
|
+
/** Outbound network (registry, `http.request`, `fetch`). */
|
|
61
|
+
fetch(input: string, init?: RequestInit): Promise<Response>;
|
|
62
|
+
spawn(command: string, args: string[], options?: SpawnOptions): ChildHandle;
|
|
63
|
+
/** Register a virtual server; throws `EADDRINUSE`. Port 0 picks a free one. Returns the port and an unlisten. */
|
|
64
|
+
listen(port: number, handler: HttpHandler): {
|
|
65
|
+
port: number;
|
|
66
|
+
close(): void;
|
|
67
|
+
};
|
|
68
|
+
/** Send a request to a virtual server in this runtime (`http.get('http://localhost:3000')`); undefined when nothing listens. */
|
|
69
|
+
loopback(port: number, request: HttpRequestData): Promise<HttpResponseData | undefined>;
|
|
70
|
+
/** Where a browser reaches a server on `port` (the preview URL), if known. */
|
|
71
|
+
serverUrl(port: number): string | undefined;
|
|
72
|
+
/** Tell the host a server is ready (`server-ready`); used by the dev-server handoff. */
|
|
73
|
+
announceServer(port: number, url: string): void;
|
|
74
|
+
/** The in-browser dev server's preview URL, for `vite`/`react-scripts start` handoff. */
|
|
75
|
+
previewUrl?: string;
|
|
76
|
+
/**
|
|
77
|
+
* This program has the JS realm to itself (one process per Web Worker): node
|
|
78
|
+
* may install `process`, `Buffer`, timers on `globalThis`, and the host routes
|
|
79
|
+
* the realm's uncaught errors to it through `trapUncaught`.
|
|
80
|
+
*/
|
|
81
|
+
ownsRealm?: boolean;
|
|
82
|
+
/** Register for the realm's uncaught errors and unhandled rejections. */
|
|
83
|
+
trapUncaught?(handler: (error: unknown) => void): () => void;
|
|
84
|
+
/** npm registry and cache for `npm install`. */
|
|
85
|
+
registry?: string;
|
|
86
|
+
packageCache?: PackageCache;
|
|
87
|
+
}
|
|
88
|
+
export interface ProgramContext {
|
|
89
|
+
/** Arguments after the program name. */
|
|
90
|
+
args: string[];
|
|
91
|
+
cwd: string;
|
|
92
|
+
env: Record<string, string>;
|
|
93
|
+
io: ProgramIO;
|
|
94
|
+
system: System;
|
|
95
|
+
/** Aborted by kill(): in-process programs stop at their next await. */
|
|
96
|
+
signal: AbortSignal;
|
|
97
|
+
}
|
|
98
|
+
/** A program resolves with its exit code. */
|
|
99
|
+
export type Program = (ctx: ProgramContext) => Promise<number>;
|
|
100
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/system/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/system/types.ts"],"names":[],"mappings":""}
|
package/dist/vfs.d.ts
CHANGED
|
@@ -12,15 +12,21 @@ export interface FileSystemTree {
|
|
|
12
12
|
/** A flat `{ 'src/main.tsx': '...' }` map, the other shape callers commonly hold. */
|
|
13
13
|
export type FlatFiles = Record<string, FileContent>;
|
|
14
14
|
export interface FsChange {
|
|
15
|
-
|
|
15
|
+
/** `mkdir` is an explicitly created (possibly empty) directory. */
|
|
16
|
+
type: 'write' | 'remove' | 'mkdir';
|
|
16
17
|
path: string;
|
|
17
18
|
/** For a write: the file did not exist before. A new file can change how imports resolve. */
|
|
18
19
|
created?: boolean;
|
|
19
20
|
}
|
|
20
21
|
/**
|
|
21
|
-
* An in-memory file system. Files
|
|
22
|
-
*
|
|
23
|
-
*
|
|
22
|
+
* An in-memory file system. Files are the store; a directory exists while it
|
|
23
|
+
* contains something, or because it was created explicitly with `mkdir` (shells
|
|
24
|
+
* and Node programs create empty directories, a preview never needs to).
|
|
25
|
+
*
|
|
26
|
+
* A directory index (dir → child names) is maintained alongside the files, so
|
|
27
|
+
* `isDirectory`/`readdir` stay O(1)/O(children) even with a populated
|
|
28
|
+
* `node_modules` of tens of thousands of files — module resolution probes those
|
|
29
|
+
* constantly.
|
|
24
30
|
*
|
|
25
31
|
* Every write bumps a per-file version, so a transform cache can key on
|
|
26
32
|
* (path, version) instead of hashing contents.
|
|
@@ -28,6 +34,11 @@ export interface FsChange {
|
|
|
28
34
|
export declare class VirtualFileSystem {
|
|
29
35
|
private readonly files;
|
|
30
36
|
private readonly versions;
|
|
37
|
+
private readonly mtimes;
|
|
38
|
+
/** dir → names of its direct children (files and directories). */
|
|
39
|
+
private readonly children;
|
|
40
|
+
/** Directories created with `mkdir`: they outlive their last file. */
|
|
41
|
+
private readonly explicit;
|
|
31
42
|
private readonly listeners;
|
|
32
43
|
private clock;
|
|
33
44
|
writeFile(path: string, contents: FileContent): void;
|
|
@@ -36,14 +47,20 @@ export declare class VirtualFileSystem {
|
|
|
36
47
|
isFile(path: string): boolean;
|
|
37
48
|
isDirectory(path: string): boolean;
|
|
38
49
|
exists(path: string): boolean;
|
|
50
|
+
/** Create a directory (and its parents). A no-op when it already exists. */
|
|
51
|
+
mkdir(path: string): void;
|
|
39
52
|
/** Direct children of a directory (files and sub-directories), sorted. */
|
|
40
53
|
readdir(path: string): string[];
|
|
41
54
|
/** Every file path, sorted. */
|
|
42
55
|
list(): string[];
|
|
56
|
+
/** Directories created explicitly with `mkdir` — what `list()` cannot reproduce. */
|
|
57
|
+
explicitDirectories(): string[];
|
|
43
58
|
/** Remove a file, or a directory and everything under it. */
|
|
44
59
|
rm(path: string): void;
|
|
45
60
|
/** The file's version (bumped on every write), or undefined when absent. */
|
|
46
61
|
version(path: string): number | undefined;
|
|
62
|
+
/** When the file was last written (epoch ms), or undefined when absent. */
|
|
63
|
+
mtime(path: string): number | undefined;
|
|
47
64
|
/**
|
|
48
65
|
* Write many files at once. Takes either the nested WebContainer tree or a flat
|
|
49
66
|
* path→contents map — or a mix, since each entry is judged on its own.
|
|
@@ -52,6 +69,13 @@ export declare class VirtualFileSystem {
|
|
|
52
69
|
/** Flat snapshot keyed without the leading slash (`src/main.tsx`). */
|
|
53
70
|
toFlat(): FlatFiles;
|
|
54
71
|
watch(listener: (change: FsChange) => void): () => void;
|
|
72
|
+
private removeFile;
|
|
73
|
+
/** Register `key` under its parent, creating implicit ancestors as needed. */
|
|
74
|
+
private link;
|
|
75
|
+
private ensureDir;
|
|
76
|
+
/** Detach `key` from its parent, pruning implicit ancestors left empty. */
|
|
77
|
+
private unlink;
|
|
78
|
+
private unlinkDir;
|
|
55
79
|
private emit;
|
|
56
80
|
}
|
|
57
81
|
//# sourceMappingURL=vfs.d.ts.map
|
package/dist/vfs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vfs.d.ts","sourceRoot":"","sources":["../src/vfs.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,CAAC;AAE9C,oFAAoF;AACpF,MAAM,WAAW,cAAc;IAC7B,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE;YAAE,QAAQ,EAAE,WAAW,CAAA;SAAE,CAAA;KAAE,GAAG;QAAE,SAAS,EAAE,cAAc,CAAA;KAAE,CAAC;CACrF;AAED,qFAAqF;AACrF,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAEpD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"vfs.d.ts","sourceRoot":"","sources":["../src/vfs.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,CAAC;AAE9C,oFAAoF;AACpF,MAAM,WAAW,cAAc;IAC7B,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE;YAAE,QAAQ,EAAE,WAAW,CAAA;SAAE,CAAA;KAAE,GAAG;QAAE,SAAS,EAAE,cAAc,CAAA;KAAE,CAAC;CACrF;AAED,qFAAqF;AACrF,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAEpD,MAAM,WAAW,QAAQ;IACvB,mEAAmE;IACnE,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,6FAA6F;IAC7F,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAID;;;;;;;;;;;;GAYG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAkC;IACxD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IACtD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;IACpD,kEAAkE;IAClE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoD;IAC7E,sEAAsE;IACtE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyC;IACnE,OAAO,CAAC,KAAK,CAAK;IAElB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI;IAWpD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAI/C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAM1C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI7B,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIlC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI7B,4EAA4E;IAC5E,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAWzB,0EAA0E;IAC1E,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAI/B,+BAA+B;IAC/B,IAAI,IAAI,MAAM,EAAE;IAIhB,oFAAoF;IACpF,mBAAmB,IAAI,MAAM,EAAE;IAI/B,6DAA6D;IAC7D,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IActB,4EAA4E;IAC5E,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIzC,2EAA2E;IAC3E,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIvC;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,EAAE,EAAE,SAAM,GAAG,IAAI;IAYxD,sEAAsE;IACtE,MAAM,IAAI,SAAS;IAMnB,KAAK,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,KAAK,IAAI,GAAG,MAAM,IAAI;IAKvD,OAAO,CAAC,UAAU;IAQlB,8EAA8E;IAC9E,OAAO,CAAC,IAAI;IAMZ,OAAO,CAAC,SAAS;IAOjB,2EAA2E;IAC3E,OAAO,CAAC,MAAM;IAQd,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,IAAI;CAGb"}
|
package/dist/vfs.js
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
|
-
import { normalizePath, join } from './paths.js';
|
|
1
|
+
import { normalizePath, join, dirname } from './paths.js';
|
|
2
2
|
const decoder = new TextDecoder();
|
|
3
3
|
/**
|
|
4
|
-
* An in-memory file system. Files
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* An in-memory file system. Files are the store; a directory exists while it
|
|
5
|
+
* contains something, or because it was created explicitly with `mkdir` (shells
|
|
6
|
+
* and Node programs create empty directories, a preview never needs to).
|
|
7
|
+
*
|
|
8
|
+
* A directory index (dir → child names) is maintained alongside the files, so
|
|
9
|
+
* `isDirectory`/`readdir` stay O(1)/O(children) even with a populated
|
|
10
|
+
* `node_modules` of tens of thousands of files — module resolution probes those
|
|
11
|
+
* constantly.
|
|
7
12
|
*
|
|
8
13
|
* Every write bumps a per-file version, so a transform cache can key on
|
|
9
14
|
* (path, version) instead of hashing contents.
|
|
@@ -11,13 +16,23 @@ const decoder = new TextDecoder();
|
|
|
11
16
|
export class VirtualFileSystem {
|
|
12
17
|
files = new Map();
|
|
13
18
|
versions = new Map();
|
|
19
|
+
mtimes = new Map();
|
|
20
|
+
/** dir → names of its direct children (files and directories). */
|
|
21
|
+
children = new Map([['/', new Set()]]);
|
|
22
|
+
/** Directories created with `mkdir`: they outlive their last file. */
|
|
23
|
+
explicit = new Set();
|
|
14
24
|
listeners = new Set();
|
|
15
25
|
clock = 0;
|
|
16
26
|
writeFile(path, contents) {
|
|
17
27
|
const key = normalizePath(path);
|
|
28
|
+
if (key === '/' || this.children.has(key))
|
|
29
|
+
throw new Error(`EISDIR: illegal operation on a directory, open '${key}'`);
|
|
18
30
|
const created = !this.files.has(key);
|
|
31
|
+
if (created)
|
|
32
|
+
this.link(key);
|
|
19
33
|
this.files.set(key, contents);
|
|
20
34
|
this.versions.set(key, ++this.clock);
|
|
35
|
+
this.mtimes.set(key, Date.now());
|
|
21
36
|
this.emit({ type: 'write', path: key, created });
|
|
22
37
|
}
|
|
23
38
|
readFile(path) {
|
|
@@ -33,53 +48,64 @@ export class VirtualFileSystem {
|
|
|
33
48
|
return this.files.has(normalizePath(path));
|
|
34
49
|
}
|
|
35
50
|
isDirectory(path) {
|
|
36
|
-
|
|
37
|
-
if (key === '/')
|
|
38
|
-
return true;
|
|
39
|
-
const prefix = key + '/';
|
|
40
|
-
for (const file of this.files.keys())
|
|
41
|
-
if (file.startsWith(prefix))
|
|
42
|
-
return true;
|
|
43
|
-
return false;
|
|
51
|
+
return this.children.has(normalizePath(path));
|
|
44
52
|
}
|
|
45
53
|
exists(path) {
|
|
46
54
|
return this.isFile(path) || this.isDirectory(path);
|
|
47
55
|
}
|
|
56
|
+
/** Create a directory (and its parents). A no-op when it already exists. */
|
|
57
|
+
mkdir(path) {
|
|
58
|
+
const key = normalizePath(path);
|
|
59
|
+
if (this.files.has(key))
|
|
60
|
+
throw new Error(`EEXIST: file already exists, mkdir '${key}'`);
|
|
61
|
+
if (key === '/')
|
|
62
|
+
return;
|
|
63
|
+
const existed = this.children.has(key);
|
|
64
|
+
this.explicit.add(key);
|
|
65
|
+
if (existed)
|
|
66
|
+
return;
|
|
67
|
+
this.ensureDir(key);
|
|
68
|
+
this.emit({ type: 'mkdir', path: key });
|
|
69
|
+
}
|
|
48
70
|
/** Direct children of a directory (files and sub-directories), sorted. */
|
|
49
71
|
readdir(path) {
|
|
50
|
-
|
|
51
|
-
const prefix = key === '/' ? '/' : key + '/';
|
|
52
|
-
const names = new Set();
|
|
53
|
-
for (const file of this.files.keys()) {
|
|
54
|
-
if (!file.startsWith(prefix))
|
|
55
|
-
continue;
|
|
56
|
-
const rest = file.slice(prefix.length);
|
|
57
|
-
const name = rest.split('/')[0];
|
|
58
|
-
if (name)
|
|
59
|
-
names.add(name);
|
|
60
|
-
}
|
|
61
|
-
return [...names].sort();
|
|
72
|
+
return [...(this.children.get(normalizePath(path)) ?? [])].sort();
|
|
62
73
|
}
|
|
63
74
|
/** Every file path, sorted. */
|
|
64
75
|
list() {
|
|
65
76
|
return [...this.files.keys()].sort();
|
|
66
77
|
}
|
|
78
|
+
/** Directories created explicitly with `mkdir` — what `list()` cannot reproduce. */
|
|
79
|
+
explicitDirectories() {
|
|
80
|
+
return [...this.explicit].sort();
|
|
81
|
+
}
|
|
67
82
|
/** Remove a file, or a directory and everything under it. */
|
|
68
83
|
rm(path) {
|
|
69
84
|
const key = normalizePath(path);
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
this.files.delete(file);
|
|
74
|
-
this.versions.delete(file);
|
|
75
|
-
this.emit({ type: 'remove', path: file });
|
|
76
|
-
}
|
|
85
|
+
if (this.files.has(key)) {
|
|
86
|
+
this.removeFile(key);
|
|
87
|
+
return;
|
|
77
88
|
}
|
|
89
|
+
if (!this.children.has(key))
|
|
90
|
+
return;
|
|
91
|
+
for (const name of [...(this.children.get(key) ?? [])])
|
|
92
|
+
this.rm(key === '/' ? '/' + name : `${key}/${name}`);
|
|
93
|
+
if (key === '/')
|
|
94
|
+
return;
|
|
95
|
+
const wasExplicit = this.explicit.delete(key);
|
|
96
|
+
if (this.children.has(key))
|
|
97
|
+
this.unlinkDir(key);
|
|
98
|
+
if (wasExplicit)
|
|
99
|
+
this.emit({ type: 'remove', path: key });
|
|
78
100
|
}
|
|
79
101
|
/** The file's version (bumped on every write), or undefined when absent. */
|
|
80
102
|
version(path) {
|
|
81
103
|
return this.versions.get(normalizePath(path));
|
|
82
104
|
}
|
|
105
|
+
/** When the file was last written (epoch ms), or undefined when absent. */
|
|
106
|
+
mtime(path) {
|
|
107
|
+
return this.mtimes.get(normalizePath(path));
|
|
108
|
+
}
|
|
83
109
|
/**
|
|
84
110
|
* Write many files at once. Takes either the nested WebContainer tree or a flat
|
|
85
111
|
* path→contents map — or a mix, since each entry is judged on its own.
|
|
@@ -91,8 +117,10 @@ export class VirtualFileSystem {
|
|
|
91
117
|
this.writeFile(path, entry);
|
|
92
118
|
else if ('file' in entry)
|
|
93
119
|
this.writeFile(path, entry.file.contents);
|
|
94
|
-
else
|
|
120
|
+
else {
|
|
121
|
+
this.mkdir(path);
|
|
95
122
|
this.mount(entry.directory, path);
|
|
123
|
+
}
|
|
96
124
|
}
|
|
97
125
|
}
|
|
98
126
|
/** Flat snapshot keyed without the leading slash (`src/main.tsx`). */
|
|
@@ -106,6 +134,41 @@ export class VirtualFileSystem {
|
|
|
106
134
|
this.listeners.add(listener);
|
|
107
135
|
return () => this.listeners.delete(listener);
|
|
108
136
|
}
|
|
137
|
+
removeFile(key) {
|
|
138
|
+
this.files.delete(key);
|
|
139
|
+
this.versions.delete(key);
|
|
140
|
+
this.mtimes.delete(key);
|
|
141
|
+
this.unlink(key);
|
|
142
|
+
this.emit({ type: 'remove', path: key });
|
|
143
|
+
}
|
|
144
|
+
/** Register `key` under its parent, creating implicit ancestors as needed. */
|
|
145
|
+
link(key) {
|
|
146
|
+
const parent = dirname(key);
|
|
147
|
+
this.ensureDir(parent);
|
|
148
|
+
this.children.get(parent).add(key.slice(key.lastIndexOf('/') + 1));
|
|
149
|
+
}
|
|
150
|
+
ensureDir(dir) {
|
|
151
|
+
if (this.children.has(dir))
|
|
152
|
+
return;
|
|
153
|
+
if (this.files.has(dir))
|
|
154
|
+
throw new Error(`ENOTDIR: not a directory, '${dir}'`);
|
|
155
|
+
this.children.set(dir, new Set());
|
|
156
|
+
this.link(dir);
|
|
157
|
+
}
|
|
158
|
+
/** Detach `key` from its parent, pruning implicit ancestors left empty. */
|
|
159
|
+
unlink(key) {
|
|
160
|
+
const parent = dirname(key);
|
|
161
|
+
const siblings = this.children.get(parent);
|
|
162
|
+
if (!siblings)
|
|
163
|
+
return;
|
|
164
|
+
siblings.delete(key.slice(key.lastIndexOf('/') + 1));
|
|
165
|
+
if (siblings.size === 0 && parent !== '/' && !this.explicit.has(parent))
|
|
166
|
+
this.unlinkDir(parent);
|
|
167
|
+
}
|
|
168
|
+
unlinkDir(dir) {
|
|
169
|
+
this.children.delete(dir);
|
|
170
|
+
this.unlink(dir);
|
|
171
|
+
}
|
|
109
172
|
emit(change) {
|
|
110
173
|
for (const listener of this.listeners)
|
|
111
174
|
listener(change);
|
package/dist/vfs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vfs.js","sourceRoot":"","sources":["../src/vfs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"vfs.js","sourceRoot":"","sources":["../src/vfs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { ComponentCompiler } from './components.js';
|
|
2
|
+
/**
|
|
3
|
+
* Vue single-file components through `@vue/compiler-sfc` — the same steps
|
|
4
|
+
* `@vitejs/plugin-vue` takes, minus HMR: script (with `<script setup>` and its
|
|
5
|
+
* template inlined), a separate render function for options-API components, and
|
|
6
|
+
* each `<style>` compiled with the component's scope id.
|
|
7
|
+
*/
|
|
8
|
+
interface VueBlock {
|
|
9
|
+
content: string;
|
|
10
|
+
lang?: string;
|
|
11
|
+
}
|
|
12
|
+
interface VueStyleBlock extends VueBlock {
|
|
13
|
+
scoped?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface VueDescriptor {
|
|
16
|
+
script: VueBlock | null;
|
|
17
|
+
scriptSetup: VueBlock | null;
|
|
18
|
+
template: VueBlock | null;
|
|
19
|
+
styles: VueStyleBlock[];
|
|
20
|
+
}
|
|
21
|
+
type Problem = string | {
|
|
22
|
+
message: string;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* The script's binding analysis, passed from compileScript to compileTemplate
|
|
26
|
+
* untouched. Opaque here (`any`) so the real compiler's precise type fits.
|
|
27
|
+
*/
|
|
28
|
+
type BindingMetadata = any;
|
|
29
|
+
/** The subset of `@vue/compiler-sfc` used (its browser build has the same API). */
|
|
30
|
+
export interface VueCompilerSfcLike {
|
|
31
|
+
parse(source: string, options: {
|
|
32
|
+
filename: string;
|
|
33
|
+
sourceMap: boolean;
|
|
34
|
+
}): {
|
|
35
|
+
descriptor: VueDescriptor;
|
|
36
|
+
errors: Problem[];
|
|
37
|
+
};
|
|
38
|
+
compileScript(descriptor: VueDescriptor, options: {
|
|
39
|
+
id: string;
|
|
40
|
+
inlineTemplate: boolean;
|
|
41
|
+
genDefaultAs: string;
|
|
42
|
+
isProd: boolean;
|
|
43
|
+
sourceMap: boolean;
|
|
44
|
+
}): {
|
|
45
|
+
content: string;
|
|
46
|
+
bindings?: BindingMetadata;
|
|
47
|
+
};
|
|
48
|
+
compileTemplate(options: {
|
|
49
|
+
source: string;
|
|
50
|
+
filename: string;
|
|
51
|
+
id: string;
|
|
52
|
+
scoped: boolean;
|
|
53
|
+
isProd: boolean;
|
|
54
|
+
compilerOptions: {
|
|
55
|
+
bindingMetadata?: BindingMetadata;
|
|
56
|
+
isTS?: boolean;
|
|
57
|
+
};
|
|
58
|
+
}): {
|
|
59
|
+
code: string;
|
|
60
|
+
errors: Problem[];
|
|
61
|
+
};
|
|
62
|
+
compileStyle(options: {
|
|
63
|
+
source: string;
|
|
64
|
+
filename: string;
|
|
65
|
+
id: string;
|
|
66
|
+
scoped: boolean;
|
|
67
|
+
isProd: boolean;
|
|
68
|
+
}): {
|
|
69
|
+
code: string;
|
|
70
|
+
errors: Problem[];
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
export declare function createVueCompiler(sfc: VueCompilerSfcLike): ComponentCompiler;
|
|
74
|
+
export {};
|
|
75
|
+
//# sourceMappingURL=vueCompiler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vueCompiler.d.ts","sourceRoot":"","sources":["../src/vueCompiler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAIzD;;;;;GAKG;AAEH,UAAU,QAAQ;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,aAAc,SAAQ,QAAQ;IACtC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAC;IACxB,WAAW,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAED,KAAK,OAAO,GAAG,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAC5C;;;GAGG;AACH,KAAK,eAAe,GAAG,GAAG,CAAC;AAE3B,mFAAmF;AACnF,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,GAAG;QAAE,UAAU,EAAE,aAAa,CAAC;QAAC,MAAM,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC;IAC3H,aAAa,CACX,UAAU,EAAE,aAAa,EACzB,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,GAC1G;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,eAAe,CAAA;KAAE,CAAC;IACnD,eAAe,CAAC,OAAO,EAAE;QACvB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,OAAO,CAAC;QAChB,MAAM,EAAE,OAAO,CAAC;QAChB,eAAe,EAAE;YAAE,eAAe,CAAC,EAAE,eAAe,CAAC;YAAC,IAAI,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC;KACxE,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC;IACxC,YAAY,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,GAAG;QACzG,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,OAAO,EAAE,CAAC;KACnB,CAAC;CACH;AASD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,kBAAkB,GAAG,iBAAiB,CA0D5E"}
|