@seanhogg/builderforce-webcontainers-core 2026.10.4 → 2026.10.6
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/README.md +1 -1
- package/dist/build.d.ts +3 -3
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +1 -1
- package/dist/build.js.map +1 -1
- package/dist/buildHost.js +3 -3
- package/dist/buildHost.js.map +1 -1
- package/dist/check/typecheck.d.ts +2 -2
- package/dist/check/typecheck.d.ts.map +1 -1
- package/dist/check/typecheck.js +1 -1
- package/dist/check/typecheck.js.map +1 -1
- package/dist/compileScript.js +2 -2
- package/dist/compileScript.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/node/childProcess.js +1 -1
- package/dist/node/childProcess.js.map +1 -1
- package/dist/node/misc.js +1 -1
- package/dist/node/misc.js.map +1 -1
- package/dist/projectConfig.d.ts +2 -0
- package/dist/projectConfig.d.ts.map +1 -1
- package/dist/projectConfig.js +20 -1
- package/dist/projectConfig.js.map +1 -1
- package/dist/resolve.d.ts +9 -0
- package/dist/resolve.d.ts.map +1 -1
- package/dist/resolve.js +9 -0
- package/dist/resolve.js.map +1 -1
- package/dist/shell/builtins.d.ts.map +1 -1
- package/dist/shell/builtins.js +2 -2
- package/dist/shell/builtins.js.map +1 -1
- package/dist/shell/devHandoff.d.ts +1 -1
- package/dist/shell/exec.js +4 -4
- package/dist/shell/exec.js.map +1 -1
- package/dist/shell/expand.js +1 -1
- package/dist/shell/expand.js.map +1 -1
- package/dist/shell/program.d.ts +1 -1
- package/dist/shell/program.js +3 -3
- package/dist/shell/program.js.map +1 -1
- package/dist/system/commands.d.ts +4 -4
- package/dist/system/commands.d.ts.map +1 -1
- package/dist/system/commands.js +3 -3
- package/dist/system/commands.js.map +1 -1
- package/dist/system/index.d.ts +6 -4
- package/dist/system/index.d.ts.map +1 -1
- package/dist/system/index.js +2 -1
- package/dist/system/index.js.map +1 -1
- package/dist/system/kernel.d.ts +9 -16
- package/dist/system/kernel.d.ts.map +1 -1
- package/dist/system/kernel.js +10 -23
- package/dist/system/kernel.js.map +1 -1
- package/dist/system/process.d.ts +18 -14
- package/dist/system/process.d.ts.map +1 -1
- package/dist/system/process.js +12 -10
- package/dist/system/process.js.map +1 -1
- package/dist/system/programs.js +1 -1
- package/dist/system/programs.js.map +1 -1
- package/dist/system/serverEvents.d.ts +27 -0
- package/dist/system/serverEvents.d.ts.map +1 -0
- package/dist/system/serverEvents.js +33 -0
- package/dist/system/serverEvents.js.map +1 -0
- package/dist/system/types.d.ts +4 -4
- package/dist/system/types.d.ts.map +1 -1
- package/dist/vfs.d.ts +11 -16
- package/dist/vfs.d.ts.map +1 -1
- package/dist/vfs.js +3 -8
- package/dist/vfs.js.map +1 -1
- package/package.json +1 -1
- package/src/build.ts +4 -4
- package/src/buildHost.ts +3 -3
- package/src/check/typecheck.ts +4 -4
- package/src/compileScript.ts +2 -2
- package/src/index.ts +2 -2
- package/src/node/childProcess.ts +1 -1
- package/src/node/misc.ts +1 -1
- package/src/projectConfig.ts +22 -1
- package/src/resolve.ts +10 -0
- package/src/shell/builtins.ts +2 -2
- package/src/shell/devHandoff.ts +1 -1
- package/src/shell/exec.ts +4 -4
- package/src/shell/expand.ts +1 -1
- package/src/shell/program.ts +4 -4
- package/src/system/commands.ts +6 -6
- package/src/system/index.ts +6 -4
- package/src/system/kernel.ts +15 -32
- package/src/system/process.ts +28 -20
- package/src/system/programs.ts +1 -1
- package/src/system/serverEvents.ts +44 -0
- package/src/system/types.ts +4 -4
- package/src/vfs.ts +13 -13
package/dist/system/process.js
CHANGED
|
@@ -103,8 +103,12 @@ export function runProgram(options) {
|
|
|
103
103
|
exit,
|
|
104
104
|
};
|
|
105
105
|
}
|
|
106
|
-
|
|
107
|
-
|
|
106
|
+
/** `run(command, args?, options?)` and `run(command, options)` — the same call either way. */
|
|
107
|
+
export function runArguments(args = [], options = {}) {
|
|
108
|
+
return Array.isArray(args) ? [args, options] : [[], args];
|
|
109
|
+
}
|
|
110
|
+
export function toRuntimeProcess(child, terminal) {
|
|
111
|
+
const combinedOutput = new ReadableStream({
|
|
108
112
|
start(controller) {
|
|
109
113
|
const push = (chunk) => controller.enqueue(terminal ? toTerminal(chunk) : chunk);
|
|
110
114
|
child.onStdout(push);
|
|
@@ -112,19 +116,17 @@ export function toWebContainerProcess(child, terminal) {
|
|
|
112
116
|
void child.exit.then(() => controller.close());
|
|
113
117
|
},
|
|
114
118
|
});
|
|
115
|
-
const
|
|
119
|
+
const stdin = new WritableStream({
|
|
116
120
|
write: (chunk) => child.write(chunk),
|
|
117
121
|
close: () => child.closeStdin(),
|
|
118
122
|
});
|
|
119
123
|
return {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
124
|
+
pid: child.pid,
|
|
125
|
+
combinedOutput,
|
|
126
|
+
stdin,
|
|
127
|
+
wait: () => child.exit,
|
|
123
128
|
kill: (signal) => child.kill(signal),
|
|
124
|
-
resize(
|
|
125
|
-
const size = typeof dimensions === 'number' ? { cols: dimensions, rows: rows ?? 24 } : dimensions;
|
|
126
|
-
child.resize?.(size.cols, size.rows);
|
|
127
|
-
},
|
|
129
|
+
resizeTerminal: (cols, rows) => child.resize?.(cols, rows),
|
|
128
130
|
};
|
|
129
131
|
}
|
|
130
132
|
//# sourceMappingURL=process.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/system/process.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/system/process.ts"],"names":[],"mappings":"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"}
|
package/dist/system/programs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"programs.js","sourceRoot":"","sources":["../../src/system/programs.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;AAExG,SAAS,QAAQ,CAAC,OAAe;IAC/B,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACtG,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,QAAQ,GAA4B;QACxC,IAAI,EAAE,WAAW;QACjB,
|
|
1
|
+
{"version":3,"file":"programs.js","sourceRoot":"","sources":["../../src/system/programs.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;AAExG,SAAS,QAAQ,CAAC,OAAe;IAC/B,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AACtG,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,QAAQ,GAA4B;QACxC,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,YAAY;QAClB,EAAE,EAAE,YAAY;QAChB,IAAI,EAAE,YAAY;QAClB,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC;QACpB,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC;KACrB,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACnG,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Who hears about servers in a runtime: a port opening or closing, and a
|
|
3
|
+
* server becoming reachable (which a dev-server handoff announces without
|
|
4
|
+
* opening a port). One instance per runtime — the core `Kernel` and the
|
|
5
|
+
* browser's process host both own one, so the listener contract is the same.
|
|
6
|
+
*/
|
|
7
|
+
export interface ServerAddress {
|
|
8
|
+
port: number;
|
|
9
|
+
/** Where a browser reaches it (the preview URL for that port). */
|
|
10
|
+
url: string;
|
|
11
|
+
}
|
|
12
|
+
export interface PortChange extends ServerAddress {
|
|
13
|
+
type: 'open' | 'close';
|
|
14
|
+
}
|
|
15
|
+
export declare class ServerEvents {
|
|
16
|
+
private readonly listening;
|
|
17
|
+
private readonly changes;
|
|
18
|
+
/** A server started listening (or a dev script handed off to the preview); `url` loads it in an iframe. */
|
|
19
|
+
onListening(listener: (server: ServerAddress) => void): () => void;
|
|
20
|
+
/** A virtual server opened or closed its port. */
|
|
21
|
+
onPortChange(listener: (change: PortChange) => void): () => void;
|
|
22
|
+
/** Report a port table change; an opened port is also a server listening. */
|
|
23
|
+
portChanged(change: PortChange): void;
|
|
24
|
+
/** Report a reachable server that did not open a port of its own. */
|
|
25
|
+
announce(server: ServerAddress): void;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=serverEvents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serverEvents.d.ts","sourceRoot":"","sources":["../../src/system/serverEvents.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,UAAW,SAAQ,aAAa;IAC/C,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8C;IACxE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2C;IAEnE,2GAA2G;IAC3G,WAAW,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,GAAG,MAAM,IAAI;IAKlE,kDAAkD;IAClD,YAAY,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,GAAG,MAAM,IAAI;IAKhE,6EAA6E;IAC7E,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAKrC,qEAAqE;IACrE,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;CAGtC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Who hears about servers in a runtime: a port opening or closing, and a
|
|
3
|
+
* server becoming reachable (which a dev-server handoff announces without
|
|
4
|
+
* opening a port). One instance per runtime — the core `Kernel` and the
|
|
5
|
+
* browser's process host both own one, so the listener contract is the same.
|
|
6
|
+
*/
|
|
7
|
+
export class ServerEvents {
|
|
8
|
+
listening = new Set();
|
|
9
|
+
changes = new Set();
|
|
10
|
+
/** A server started listening (or a dev script handed off to the preview); `url` loads it in an iframe. */
|
|
11
|
+
onListening(listener) {
|
|
12
|
+
this.listening.add(listener);
|
|
13
|
+
return () => this.listening.delete(listener);
|
|
14
|
+
}
|
|
15
|
+
/** A virtual server opened or closed its port. */
|
|
16
|
+
onPortChange(listener) {
|
|
17
|
+
this.changes.add(listener);
|
|
18
|
+
return () => this.changes.delete(listener);
|
|
19
|
+
}
|
|
20
|
+
/** Report a port table change; an opened port is also a server listening. */
|
|
21
|
+
portChanged(change) {
|
|
22
|
+
for (const listener of this.changes)
|
|
23
|
+
listener(change);
|
|
24
|
+
if (change.type === 'open')
|
|
25
|
+
this.announce({ port: change.port, url: change.url });
|
|
26
|
+
}
|
|
27
|
+
/** Report a reachable server that did not open a port of its own. */
|
|
28
|
+
announce(server) {
|
|
29
|
+
for (const listener of this.listening)
|
|
30
|
+
listener(server);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=serverEvents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serverEvents.js","sourceRoot":"","sources":["../../src/system/serverEvents.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,MAAM,OAAO,YAAY;IACN,SAAS,GAAG,IAAI,GAAG,EAAmC,CAAC;IACvD,OAAO,GAAG,IAAI,GAAG,EAAgC,CAAC;IAEnE,2GAA2G;IAC3G,WAAW,CAAC,QAAyC;QACnD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED,kDAAkD;IAClD,YAAY,CAAC,QAAsC;QACjD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3B,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED,6EAA6E;IAC7E,WAAW,CAAC,MAAkB;QAC5B,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,OAAO;YAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM;YAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,qEAAqE;IACrE,QAAQ,CAAC,MAAqB;QAC5B,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS;YAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1D,CAAC;CACF"}
|
package/dist/system/types.d.ts
CHANGED
|
@@ -21,7 +21,7 @@ export interface ProgramIO {
|
|
|
21
21
|
/** Present when attached to a terminal (xterm.js). */
|
|
22
22
|
terminal?: TerminalPort;
|
|
23
23
|
}
|
|
24
|
-
export interface
|
|
24
|
+
export interface ProcessOptions {
|
|
25
25
|
cwd?: string;
|
|
26
26
|
env?: Record<string, string>;
|
|
27
27
|
/** Attach to a terminal of this size (`isTTY`, line discipline, `\r\n` output). */
|
|
@@ -30,7 +30,7 @@ export interface SpawnOptions {
|
|
|
30
30
|
rows: number;
|
|
31
31
|
};
|
|
32
32
|
}
|
|
33
|
-
/** A child as its parent sees it (separate stdout/stderr, unlike the public
|
|
33
|
+
/** A child as its parent sees it (separate stdout/stderr listeners, unlike the streams of the public `RuntimeProcess`). */
|
|
34
34
|
export interface ChildHandle {
|
|
35
35
|
readonly pid: number;
|
|
36
36
|
onStdout(listener: (chunk: string) => void): () => void;
|
|
@@ -59,7 +59,7 @@ export interface System {
|
|
|
59
59
|
fs: VirtualFileSystem;
|
|
60
60
|
/** Outbound network (registry, `http.request`, `fetch`). */
|
|
61
61
|
fetch(input: string, init?: RequestInit): Promise<Response>;
|
|
62
|
-
spawn(command: string, args: string[], options?:
|
|
62
|
+
spawn(command: string, args: string[], options?: ProcessOptions): ChildHandle;
|
|
63
63
|
/** Register a virtual server; throws `EADDRINUSE`. Port 0 picks a free one. Returns the port and an unlisten. */
|
|
64
64
|
listen(port: number, handler: HttpHandler): {
|
|
65
65
|
port: number;
|
|
@@ -69,7 +69,7 @@ export interface System {
|
|
|
69
69
|
loopback(port: number, request: HttpRequestData): Promise<HttpResponseData | undefined>;
|
|
70
70
|
/** Where a browser reaches a server on `port` (the preview URL), if known. */
|
|
71
71
|
serverUrl(port: number): string | undefined;
|
|
72
|
-
/** Tell the host a server is
|
|
72
|
+
/** Tell the host a server is reachable without opening a port; used by the dev-server handoff. */
|
|
73
73
|
announceServer(port: number, url: string): void;
|
|
74
74
|
/** The in-browser dev server's preview URL, for `vite`/`react-scripts start` handoff. */
|
|
75
75
|
previewUrl?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/system/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE7D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACrE,kFAAkF;IAClF,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;IACzC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;IACzC,+FAA+F;IAC/F,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC9D,sDAAsD;IACtD,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAED,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/system/types.ts"],"names":[],"mappings":"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"}
|
package/dist/vfs.d.ts
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
export type FileContent = string | Uint8Array;
|
|
2
|
-
/**
|
|
3
|
-
export interface FileSystemTree {
|
|
4
|
-
[name: string]: {
|
|
5
|
-
file: {
|
|
6
|
-
contents: FileContent;
|
|
7
|
-
};
|
|
8
|
-
} | {
|
|
9
|
-
directory: FileSystemTree;
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
/** A flat `{ 'src/main.tsx': '...' }` map, the other shape callers commonly hold. */
|
|
2
|
+
/** A flat `{ 'src/main.tsx': '...' }` map: path → contents. */
|
|
13
3
|
export type FlatFiles = Record<string, FileContent>;
|
|
4
|
+
/**
|
|
5
|
+
* Files to write: a name maps to contents (a file) or to another tree (a
|
|
6
|
+
* directory). Names may hold slashes, so a {@link FlatFiles} map is a tree too,
|
|
7
|
+
* and the two styles mix freely: `{ src: { 'main.tsx': '…' }, 'public/a.svg': '…' }`.
|
|
8
|
+
*/
|
|
9
|
+
export interface FileTree {
|
|
10
|
+
[name: string]: FileContent | FileTree;
|
|
11
|
+
}
|
|
14
12
|
export interface FsChange {
|
|
15
13
|
/** `mkdir` is an explicitly created (possibly empty) directory. */
|
|
16
14
|
type: 'write' | 'remove' | 'mkdir';
|
|
@@ -61,11 +59,8 @@ export declare class VirtualFileSystem {
|
|
|
61
59
|
version(path: string): number | undefined;
|
|
62
60
|
/** When the file was last written (epoch ms), or undefined when absent. */
|
|
63
61
|
mtime(path: string): number | undefined;
|
|
64
|
-
/**
|
|
65
|
-
|
|
66
|
-
* path→contents map — or a mix, since each entry is judged on its own.
|
|
67
|
-
*/
|
|
68
|
-
mount(files: FileSystemTree | FlatFiles, at?: string): void;
|
|
62
|
+
/** Write many files at once, under `at` (default `/`). A nested object is a directory, created even when empty. */
|
|
63
|
+
writeTree(files: FileTree, at?: string): void;
|
|
69
64
|
/** Flat snapshot keyed without the leading slash (`src/main.tsx`). */
|
|
70
65
|
toFlat(): FlatFiles;
|
|
71
66
|
watch(listener: (change: FsChange) => void): () => void;
|
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
|
|
1
|
+
{"version":3,"file":"vfs.d.ts","sourceRoot":"","sources":["../src/vfs.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,CAAC;AAE9C,+DAA+D;AAC/D,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAEpD;;;;GAIG;AACH,MAAM,WAAW,QAAQ;IACvB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;CACxC;AAED,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,mHAAmH;IACnH,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,SAAM,GAAG,IAAI;IAW1C,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
|
@@ -106,20 +106,15 @@ export class VirtualFileSystem {
|
|
|
106
106
|
mtime(path) {
|
|
107
107
|
return this.mtimes.get(normalizePath(path));
|
|
108
108
|
}
|
|
109
|
-
/**
|
|
110
|
-
|
|
111
|
-
* path→contents map — or a mix, since each entry is judged on its own.
|
|
112
|
-
*/
|
|
113
|
-
mount(files, at = '/') {
|
|
109
|
+
/** Write many files at once, under `at` (default `/`). A nested object is a directory, created even when empty. */
|
|
110
|
+
writeTree(files, at = '/') {
|
|
114
111
|
for (const [name, entry] of Object.entries(files)) {
|
|
115
112
|
const path = join(at, name);
|
|
116
113
|
if (typeof entry === 'string' || entry instanceof Uint8Array)
|
|
117
114
|
this.writeFile(path, entry);
|
|
118
|
-
else if ('file' in entry)
|
|
119
|
-
this.writeFile(path, entry.file.contents);
|
|
120
115
|
else {
|
|
121
116
|
this.mkdir(path);
|
|
122
|
-
this.
|
|
117
|
+
this.writeTree(entry, path);
|
|
123
118
|
}
|
|
124
119
|
}
|
|
125
120
|
}
|
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,OAAO,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"vfs.js","sourceRoot":"","sources":["../src/vfs.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seanhogg/builderforce-webcontainers-core",
|
|
3
|
-
"version": "2026.10.
|
|
3
|
+
"version": "2026.10.6",
|
|
4
4
|
"description": "BuilderForce WebContainers — core. A runtime-agnostic in-browser dev server: virtual file system, module resolution, import rewriting to a package CDN, CSS/JSON/asset modules and project detection. No COOP/COEP required.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.js",
|
package/src/build.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { VirtualFileSystem, type
|
|
1
|
+
import { VirtualFileSystem, type FileTree } from './vfs.js';
|
|
2
2
|
import type { Bundler, BundleOutput } from './bundler.js';
|
|
3
3
|
import type { PackageCdnFactory } from './packageCdn.js';
|
|
4
4
|
import { esmShCdnFactory } from './packageCdn.js';
|
|
@@ -18,8 +18,8 @@ import { findHtmlEntries, rewriteBuiltHtml } from './buildHtml.js';
|
|
|
18
18
|
* content hash in its name and can be cached forever.
|
|
19
19
|
*/
|
|
20
20
|
export interface BuildOptions {
|
|
21
|
-
/** The project: a file system, or files as `
|
|
22
|
-
files: VirtualFileSystem |
|
|
21
|
+
/** The project: a file system, or files as `writeTree()` takes them. */
|
|
22
|
+
files: VirtualFileSystem | FileTree;
|
|
23
23
|
bundler: Bundler;
|
|
24
24
|
/** Package CDN factory (called with `dev: false`). Default: esm.sh. */
|
|
25
25
|
cdn?: PackageCdnFactory;
|
|
@@ -50,7 +50,7 @@ const encoder = new TextEncoder();
|
|
|
50
50
|
function toFileSystem(files: BuildOptions['files']): VirtualFileSystem {
|
|
51
51
|
if (files instanceof VirtualFileSystem) return files;
|
|
52
52
|
const fs = new VirtualFileSystem();
|
|
53
|
-
fs.
|
|
53
|
+
fs.writeTree(files);
|
|
54
54
|
return fs;
|
|
55
55
|
}
|
|
56
56
|
|
package/src/buildHost.ts
CHANGED
|
@@ -6,7 +6,7 @@ import type { ComponentCompilers } from './components.js';
|
|
|
6
6
|
import { componentExtension } from './components.js';
|
|
7
7
|
import { loaderFor } from './transformer.js';
|
|
8
8
|
import { basename, dirname, extname, join } from './paths.js';
|
|
9
|
-
import { isBareSpecifier, resolveAlias, resolveLocal,
|
|
9
|
+
import { isBareSpecifier, resolveAlias, resolveLocal, resolvePackage } from './resolve.js';
|
|
10
10
|
import { contentHash } from './hash.js';
|
|
11
11
|
|
|
12
12
|
/**
|
|
@@ -110,7 +110,7 @@ export function createBuildHost(options: BuildHostOptions): BuildHost {
|
|
|
110
110
|
if (isBareSpecifier(path)) {
|
|
111
111
|
file = (css ? resolveLocal(fs, fromDir, `./${path}`) : undefined) ?? resolveAlias(fs, config.aliases, path);
|
|
112
112
|
if (!file) {
|
|
113
|
-
const { name, subpath } =
|
|
113
|
+
const { name, subpath } = resolvePackage(config.packageAliases, path);
|
|
114
114
|
// A package stylesheet imported from JS (`import 'bootstrap/dist/css/bootstrap.css'`)
|
|
115
115
|
// can't stay a JS import of a CSS URL; it joins the CSS bundle as an @import.
|
|
116
116
|
if (!css && extname(subpath) === '.css') return { path: `/${PACKAGE_CSS}/${path}`, query: PACKAGE_CSS };
|
|
@@ -128,7 +128,7 @@ export function createBuildHost(options: BuildHostOptions): BuildHost {
|
|
|
128
128
|
if (query === 'raw') return { contents: fs.readText(path) ?? '', loader: 'text' };
|
|
129
129
|
if (query === COMPONENT_CSS) return { contents: componentCss.get(path) ?? '', loader: 'css' };
|
|
130
130
|
if (query === PACKAGE_CSS) {
|
|
131
|
-
const { name, subpath } =
|
|
131
|
+
const { name, subpath } = resolvePackage(config.packageAliases, path.slice(PACKAGE_CSS.length + 2));
|
|
132
132
|
return { contents: `@import ${JSON.stringify(cdn.urlFor(name, subpath))};`, loader: 'css' };
|
|
133
133
|
}
|
|
134
134
|
|
package/src/check/typecheck.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type * as TS from 'typescript';
|
|
2
|
-
import { VirtualFileSystem, type
|
|
2
|
+
import { VirtualFileSystem, type FileTree } from '../vfs.js';
|
|
3
3
|
import { readProjectConfig } from '../projectConfig.js';
|
|
4
4
|
import { isBareSpecifier, resolveAlias, splitPackageSpecifier } from '../resolve.js';
|
|
5
5
|
import { acquireExtendedConfigs, acquireTypes, type FetchLike } from './acquire.js';
|
|
@@ -46,10 +46,10 @@ interface Reach {
|
|
|
46
46
|
libFiles: Set<string>;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
function toFileSystem(files: VirtualFileSystem |
|
|
49
|
+
function toFileSystem(files: VirtualFileSystem | FileTree): VirtualFileSystem {
|
|
50
50
|
if (files instanceof VirtualFileSystem) return files;
|
|
51
51
|
const fs = new VirtualFileSystem();
|
|
52
|
-
fs.
|
|
52
|
+
fs.writeTree(files);
|
|
53
53
|
return fs;
|
|
54
54
|
}
|
|
55
55
|
|
|
@@ -78,7 +78,7 @@ function collectReach(ts: typeof TS, fs: VirtualFileSystem, projects: CheckProje
|
|
|
78
78
|
|
|
79
79
|
export async function typecheckProject(
|
|
80
80
|
ts: typeof TS,
|
|
81
|
-
files: VirtualFileSystem |
|
|
81
|
+
files: VirtualFileSystem | FileTree,
|
|
82
82
|
options: TypecheckOptions,
|
|
83
83
|
): Promise<TypecheckResult> {
|
|
84
84
|
const fs = toFileSystem(files);
|
package/src/compileScript.ts
CHANGED
|
@@ -6,7 +6,7 @@ import type { ComponentCompilers } from './components.js';
|
|
|
6
6
|
import { componentExtension } from './components.js';
|
|
7
7
|
import { loaderFor } from './transformer.js';
|
|
8
8
|
import { dirname, extname } from './paths.js';
|
|
9
|
-
import { isBareSpecifier, resolveAlias, resolveLocal,
|
|
9
|
+
import { isBareSpecifier, resolveAlias, resolveLocal, resolvePackage } from './resolve.js';
|
|
10
10
|
import { rewriteImports } from './rewriteImports.js';
|
|
11
11
|
|
|
12
12
|
export interface CompileContext {
|
|
@@ -63,7 +63,7 @@ export function mapSpecifier(ctx: CompileContext, fromDir: string, specifier: st
|
|
|
63
63
|
if (isBareSpecifier(path)) {
|
|
64
64
|
const aliased = resolveAlias(ctx.fs, ctx.config.aliases, path);
|
|
65
65
|
if (aliased) return moduleUrl(ctx.base, aliased, query);
|
|
66
|
-
const { name, subpath } =
|
|
66
|
+
const { name, subpath } = resolvePackage(ctx.config.packageAliases, path);
|
|
67
67
|
return ctx.cdn.urlFor(name, subpath);
|
|
68
68
|
}
|
|
69
69
|
const resolved = resolveLocal(ctx.fs, fromDir, path);
|
package/src/index.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { VirtualFileSystem } from './vfs.js';
|
|
2
|
-
export type { FileContent,
|
|
2
|
+
export type { FileContent, FileTree, FlatFiles, FsChange } from './vfs.js';
|
|
3
3
|
export { normalizePath, dirname, basename, join, extname } from './paths.js';
|
|
4
4
|
export { DevServer } from './devServer.js';
|
|
5
5
|
export type { DevServerOptions, ServedFile } from './devServer.js';
|
|
@@ -38,7 +38,7 @@ export { createSvelteCompiler } from './svelteCompiler.js';
|
|
|
38
38
|
export type { SvelteCompilerLike } from './svelteCompiler.js';
|
|
39
39
|
export { contentHash } from './hash.js';
|
|
40
40
|
export { rewriteImports } from './rewriteImports.js';
|
|
41
|
-
export { resolveLocal, resolveAlias, isBareSpecifier, splitPackageSpecifier, RESOLVE_EXTENSIONS } from './resolve.js';
|
|
41
|
+
export { resolveLocal, resolveAlias, isBareSpecifier, splitPackageSpecifier, resolvePackage, RESOLVE_EXTENSIONS } from './resolve.js';
|
|
42
42
|
export { compileScript, compileModule, isScriptPath, mapSpecifier, moduleUrl, buildDefine } from './compileScript.js';
|
|
43
43
|
export { compileComponent } from './compileComponent.js';
|
|
44
44
|
export { transformHtml, errorBridgeScript, liveReloadScript, reloadChannelName, ERROR_MESSAGE_TYPE } from './html.js';
|
package/src/node/childProcess.ts
CHANGED
|
@@ -68,7 +68,7 @@ class ChildProcess extends EventEmitterBase {
|
|
|
68
68
|
|
|
69
69
|
const env: Record<string, string> = {};
|
|
70
70
|
for (const [k, v] of Object.entries(options.env ?? deps.env())) if (v !== undefined) env[k] = String(v);
|
|
71
|
-
const [file, argv] = options.shell ? ['
|
|
71
|
+
const [file, argv] = options.shell ? ['bfsh', ['-c', [command, ...args].join(' ')]] : [command, args];
|
|
72
72
|
const release = deps.loop.hold();
|
|
73
73
|
try {
|
|
74
74
|
this.handle = deps.system.spawn(file, argv, { cwd: options.cwd ?? deps.cwd(), env });
|
package/src/node/misc.ts
CHANGED
|
@@ -27,7 +27,7 @@ export function createOsModule(env: () => Record<string, string | undefined>): R
|
|
|
27
27
|
hostname: () => 'localhost',
|
|
28
28
|
homedir: () => env().HOME ?? '/home/user',
|
|
29
29
|
tmpdir: () => env().TMPDIR ?? '/tmp',
|
|
30
|
-
userInfo: () => ({ uid: 1000, gid: 1000, username: env().USER ?? 'user', homedir: env().HOME ?? '/home/user', shell: '/bin/
|
|
30
|
+
userInfo: () => ({ uid: 1000, gid: 1000, username: env().USER ?? 'user', homedir: env().HOME ?? '/home/user', shell: '/bin/bfsh' }),
|
|
31
31
|
cpus: () => cpus,
|
|
32
32
|
availableParallelism: () => cpus.length,
|
|
33
33
|
totalmem: () => 4 * 1024 ** 3,
|
package/src/projectConfig.ts
CHANGED
|
@@ -41,6 +41,8 @@ export interface ProjectConfig {
|
|
|
41
41
|
/** dependencies + devDependencies, name → version range. */
|
|
42
42
|
dependencies: Record<string, string>;
|
|
43
43
|
aliases: PathAlias[];
|
|
44
|
+
/** Bare package names served as another package (`react-native` → `react-native-web`). */
|
|
45
|
+
packageAliases: Record<string, string>;
|
|
44
46
|
jsx: { runtime: 'automatic' | 'classic'; importSource: string };
|
|
45
47
|
/** `VITE_*` and `NODE_ENV` style variables from the `.env` files, in load order. */
|
|
46
48
|
env: Record<string, string>;
|
|
@@ -133,6 +135,23 @@ function readAliases(options: Record<string, unknown>): PathAlias[] {
|
|
|
133
135
|
return aliases.sort((a, b) => b.prefix.length - a.prefix.length);
|
|
134
136
|
}
|
|
135
137
|
|
|
138
|
+
/**
|
|
139
|
+
* Packages a project serves as their browser twin. A React Native Web app aliases
|
|
140
|
+
* `react-native` to `react-native-web` in its Vite or webpack config, which this
|
|
141
|
+
* runtime does not execute; depending on the twin is the same signal, read from
|
|
142
|
+
* package.json. Without it the app imports the real `react-native`, which does not
|
|
143
|
+
* load in a browser. Data, not branches: another twin is another row.
|
|
144
|
+
*/
|
|
145
|
+
const BROWSER_TWINS: ReadonlyArray<{ name: string; twin: string }> = [
|
|
146
|
+
{ name: 'react-native', twin: 'react-native-web' },
|
|
147
|
+
];
|
|
148
|
+
|
|
149
|
+
function readPackageAliases(dependencies: Record<string, string>): Record<string, string> {
|
|
150
|
+
const aliases: Record<string, string> = {};
|
|
151
|
+
for (const { name, twin } of BROWSER_TWINS) if (twin in dependencies) aliases[name] = twin;
|
|
152
|
+
return aliases;
|
|
153
|
+
}
|
|
154
|
+
|
|
136
155
|
function readJsx(options: Record<string, unknown>): ProjectConfig['jsx'] {
|
|
137
156
|
const importSource = typeof options.jsxImportSource === 'string' ? options.jsxImportSource : 'react';
|
|
138
157
|
const runtime = options.jsx === 'react' ? 'classic' : 'automatic';
|
|
@@ -168,9 +187,11 @@ function readEnv(fs: VirtualFileSystem, mode: BuildMode): Record<string, string>
|
|
|
168
187
|
|
|
169
188
|
export function readProjectConfig(fs: VirtualFileSystem, mode: BuildMode = 'development'): ProjectConfig {
|
|
170
189
|
const options = readCompilerOptions(fs);
|
|
190
|
+
const dependencies = readDependencies(fs);
|
|
171
191
|
return {
|
|
172
|
-
dependencies
|
|
192
|
+
dependencies,
|
|
173
193
|
aliases: readAliases(options),
|
|
194
|
+
packageAliases: readPackageAliases(dependencies),
|
|
174
195
|
jsx: readJsx(options),
|
|
175
196
|
env: readEnv(fs, mode),
|
|
176
197
|
};
|
package/src/resolve.ts
CHANGED
|
@@ -18,6 +18,16 @@ export function splitPackageSpecifier(specifier: string): { name: string; subpat
|
|
|
18
18
|
return { name: parts.slice(0, take).join('/'), subpath: parts.length > take ? '/' + parts.slice(take).join('/') : '' };
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
+
/**
|
|
22
|
+
* The package a bare specifier is served from: {@link splitPackageSpecifier}, with
|
|
23
|
+
* the project's package aliases applied to the name (`react-native/x` →
|
|
24
|
+
* `react-native-web` + `/x`), as a bundler alias would.
|
|
25
|
+
*/
|
|
26
|
+
export function resolvePackage(packageAliases: Readonly<Record<string, string>>, specifier: string): { name: string; subpath: string } {
|
|
27
|
+
const { name, subpath } = splitPackageSpecifier(specifier);
|
|
28
|
+
return { name: Object.hasOwn(packageAliases, name) ? packageAliases[name]! : name, subpath };
|
|
29
|
+
}
|
|
30
|
+
|
|
21
31
|
function probe(fs: VirtualFileSystem, base: string): string | undefined {
|
|
22
32
|
if (fs.isFile(base)) return base;
|
|
23
33
|
for (const ext of RESOLVE_EXTENSIONS) if (fs.isFile(base + ext)) return base + ext;
|
package/src/shell/builtins.ts
CHANGED
|
@@ -31,9 +31,9 @@ export const COREUTILS: Record<string, Command> = {
|
|
|
31
31
|
};
|
|
32
32
|
|
|
33
33
|
/** Programs the runtime provides besides coreutils (reported by `which`/`type`). */
|
|
34
|
-
export const SYSTEM_PROGRAMS = ['node', 'npm', 'npx', '
|
|
34
|
+
export const SYSTEM_PROGRAMS = ['node', 'npm', 'npx', 'bfsh', 'sh', 'bash'];
|
|
35
35
|
|
|
36
|
-
const HELP = `
|
|
36
|
+
const HELP = `bfsh — BuilderForce WebContainers shell
|
|
37
37
|
|
|
38
38
|
Builtins: cd, pwd, export, unset, exit, source, history, type, which, help
|
|
39
39
|
Files: ls [-la], cat, mkdir [-p], rm [-rf], cp [-r], mv, touch
|
package/src/shell/devHandoff.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* dev` / `npm start` usually run) cannot run here as-is — Vite itself needs
|
|
4
4
|
* esbuild's native binary — but the runtime already IS a Vite-style dev server:
|
|
5
5
|
* the in-browser DevServer serving the preview. So these commands announce that
|
|
6
|
-
* preview as their server (
|
|
6
|
+
* preview as their server (a listening announcement) and stay "running" until Ctrl-C,
|
|
7
7
|
* which is exactly what a host waiting on `npm run dev` expects.
|
|
8
8
|
*/
|
|
9
9
|
import type { CommandContext } from './context.js';
|
package/src/shell/exec.ts
CHANGED
|
@@ -73,7 +73,7 @@ export class Shell implements ShellState {
|
|
|
73
73
|
script = parse(source);
|
|
74
74
|
} catch (error) {
|
|
75
75
|
if (!(error instanceof ShellSyntaxError)) throw error;
|
|
76
|
-
io.stderr(`
|
|
76
|
+
io.stderr(`bfsh: ${error.message}\n`);
|
|
77
77
|
this.lastStatus = 2;
|
|
78
78
|
return 2;
|
|
79
79
|
}
|
|
@@ -176,7 +176,7 @@ export class Shell implements ShellState {
|
|
|
176
176
|
if (redirect.op === '<') {
|
|
177
177
|
const text = this.system.fs.readText(path);
|
|
178
178
|
if (text === undefined) {
|
|
179
|
-
io.stderr(`
|
|
179
|
+
io.stderr(`bfsh: ${target}: No such file or directory\n`);
|
|
180
180
|
return 1;
|
|
181
181
|
}
|
|
182
182
|
const queue = new InputQueue();
|
|
@@ -186,7 +186,7 @@ export class Shell implements ShellState {
|
|
|
186
186
|
continue;
|
|
187
187
|
}
|
|
188
188
|
if (this.system.fs.isDirectory(path)) {
|
|
189
|
-
io.stderr(`
|
|
189
|
+
io.stderr(`bfsh: ${target}: Is a directory\n`);
|
|
190
190
|
return 1;
|
|
191
191
|
}
|
|
192
192
|
const append = redirect.op === '>>' || redirect.op === '2>>';
|
|
@@ -240,7 +240,7 @@ export class Shell implements ShellState {
|
|
|
240
240
|
child = this.system.spawn(name, args, { cwd: this.cwd, env, terminal: size });
|
|
241
241
|
} catch (error) {
|
|
242
242
|
if ((error as { code?: string }).code !== 'ENOENT') throw error;
|
|
243
|
-
io.stderr(`
|
|
243
|
+
io.stderr(`bfsh: command not found: ${name}\n`);
|
|
244
244
|
return 127;
|
|
245
245
|
}
|
|
246
246
|
child.onStdout(io.stdout);
|
package/src/shell/expand.ts
CHANGED
|
@@ -29,7 +29,7 @@ async function paramValue(seg: Extract<Segment, { kind: 'var' }>, ctx: ExpandCon
|
|
|
29
29
|
case '@':
|
|
30
30
|
case '*': value = ctx.positional.join(' '); break;
|
|
31
31
|
case '!': value = ''; break;
|
|
32
|
-
case '0': value = '
|
|
32
|
+
case '0': value = 'bfsh'; break;
|
|
33
33
|
default: value = /^\d$/.test(seg.name) ? ctx.positional[Number(seg.name) - 1] : ctx.get(seg.name);
|
|
34
34
|
}
|
|
35
35
|
if (!seg.op) return value ?? '';
|