@seanhogg/builderforce-webcontainers-core 2026.10.7 → 2026.10.8
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/archive.d.ts +2 -0
- package/dist/archive.d.ts.map +1 -1
- package/dist/archive.js +6 -4
- package/dist/archive.js.map +1 -1
- package/dist/html.d.ts +2 -0
- package/dist/html.d.ts.map +1 -1
- package/dist/html.js +5 -3
- package/dist/html.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/node/http/client.d.ts +3 -1
- package/dist/node/http/client.d.ts.map +1 -1
- package/dist/node/http/client.js +74 -5
- package/dist/node/http/client.js.map +1 -1
- package/dist/node/http/index.d.ts.map +1 -1
- package/dist/node/http/index.js +2 -1
- package/dist/node/http/index.js.map +1 -1
- package/dist/node/http/messages.d.ts +87 -0
- package/dist/node/http/messages.d.ts.map +1 -0
- package/dist/node/http/messages.js +146 -0
- package/dist/node/http/messages.js.map +1 -0
- package/dist/node/http/server.d.ts +13 -98
- package/dist/node/http/server.d.ts.map +1 -1
- package/dist/node/http/server.js +34 -202
- package/dist/node/http/server.js.map +1 -1
- package/dist/node/http/serverResponse.d.ts +42 -0
- package/dist/node/http/serverResponse.d.ts.map +1 -0
- package/dist/node/http/serverResponse.js +89 -0
- package/dist/node/http/serverResponse.js.map +1 -0
- package/dist/node/http/upgradeSocket.d.ts +34 -0
- package/dist/node/http/upgradeSocket.d.ts.map +1 -0
- package/dist/node/http/upgradeSocket.js +73 -0
- package/dist/node/http/upgradeSocket.js.map +1 -0
- package/dist/node/runtime.js +2 -2
- package/dist/node/runtime.js.map +1 -1
- package/dist/previewBridge.d.ts +42 -0
- package/dist/previewBridge.d.ts.map +1 -0
- package/dist/previewBridge.js +192 -0
- package/dist/previewBridge.js.map +1 -0
- package/dist/shell/ast.d.ts +101 -0
- package/dist/shell/ast.d.ts.map +1 -0
- package/dist/shell/ast.js +7 -0
- package/dist/shell/ast.js.map +1 -0
- package/dist/shell/builtins.d.ts +14 -0
- package/dist/shell/builtins.d.ts.map +1 -1
- package/dist/shell/builtins.js +87 -7
- package/dist/shell/builtins.js.map +1 -1
- package/dist/shell/compound.d.ts +30 -0
- package/dist/shell/compound.d.ts.map +1 -0
- package/dist/shell/compound.js +73 -0
- package/dist/shell/compound.js.map +1 -0
- package/dist/shell/exec.d.ts +27 -6
- package/dist/shell/exec.d.ts.map +1 -1
- package/dist/shell/exec.js +127 -41
- package/dist/shell/exec.js.map +1 -1
- package/dist/shell/expand.d.ts +5 -1
- package/dist/shell/expand.d.ts.map +1 -1
- package/dist/shell/expand.js +7 -5
- package/dist/shell/expand.js.map +1 -1
- package/dist/shell/lineReader.d.ts +9 -0
- package/dist/shell/lineReader.d.ts.map +1 -0
- package/dist/shell/lineReader.js +42 -0
- package/dist/shell/lineReader.js.map +1 -0
- package/dist/shell/packageManagers.d.ts +20 -0
- package/dist/shell/packageManagers.d.ts.map +1 -0
- package/dist/shell/packageManagers.js +74 -0
- package/dist/shell/packageManagers.js.map +1 -0
- package/dist/shell/parse.d.ts +16 -66
- package/dist/shell/parse.d.ts.map +1 -1
- package/dist/shell/parse.js +244 -243
- package/dist/shell/parse.js.map +1 -1
- package/dist/shell/program.d.ts.map +1 -1
- package/dist/shell/program.js +2 -1
- package/dist/shell/program.js.map +1 -1
- package/dist/shell/testCommand.d.ts +9 -0
- package/dist/shell/testCommand.d.ts.map +1 -0
- package/dist/shell/testCommand.js +105 -0
- package/dist/shell/testCommand.js.map +1 -0
- package/dist/shell/tokenize.d.ts +25 -0
- package/dist/shell/tokenize.d.ts.map +1 -0
- package/dist/shell/tokenize.js +279 -0
- package/dist/shell/tokenize.js.map +1 -0
- package/dist/system/cookieJar.d.ts +59 -0
- package/dist/system/cookieJar.d.ts.map +1 -0
- package/dist/system/cookieJar.js +187 -0
- package/dist/system/cookieJar.js.map +1 -0
- package/dist/system/httpStream.d.ts +40 -0
- package/dist/system/httpStream.d.ts.map +1 -0
- package/dist/system/httpStream.js +156 -0
- package/dist/system/httpStream.js.map +1 -0
- package/dist/system/index.d.ts +9 -1
- package/dist/system/index.d.ts.map +1 -1
- package/dist/system/index.js +4 -0
- package/dist/system/index.js.map +1 -1
- package/dist/system/kernel.d.ts +10 -2
- package/dist/system/kernel.d.ts.map +1 -1
- package/dist/system/kernel.js +12 -3
- package/dist/system/kernel.js.map +1 -1
- package/dist/system/ports.d.ts +9 -4
- package/dist/system/ports.d.ts.map +1 -1
- package/dist/system/ports.js +21 -2
- package/dist/system/ports.js.map +1 -1
- package/dist/system/programs.d.ts +1 -1
- package/dist/system/programs.d.ts.map +1 -1
- package/dist/system/programs.js +2 -0
- package/dist/system/programs.js.map +1 -1
- package/dist/system/types.d.ts +36 -6
- package/dist/system/types.d.ts.map +1 -1
- package/dist/system/webSocketClient.d.ts +37 -0
- package/dist/system/webSocketClient.d.ts.map +1 -0
- package/dist/system/webSocketClient.js +152 -0
- package/dist/system/webSocketClient.js.map +1 -0
- package/dist/system/webSocketFrames.d.ts +39 -0
- package/dist/system/webSocketFrames.d.ts.map +1 -0
- package/dist/system/webSocketFrames.js +117 -0
- package/dist/system/webSocketFrames.js.map +1 -0
- package/package.json +1 -1
- package/src/archive.ts +8 -4
- package/src/html.ts +5 -3
- package/src/index.ts +2 -1
- package/src/node/http/client.ts +69 -6
- package/src/node/http/index.ts +2 -1
- package/src/node/http/messages.ts +150 -0
- package/src/node/http/server.ts +37 -202
- package/src/node/http/serverResponse.ts +98 -0
- package/src/node/http/upgradeSocket.ts +79 -0
- package/src/node/runtime.ts +2 -2
- package/src/previewBridge.ts +194 -0
- package/src/shell/ast.ts +85 -0
- package/src/shell/builtins.ts +97 -7
- package/src/shell/compound.ts +89 -0
- package/src/shell/exec.ts +128 -40
- package/src/shell/expand.ts +8 -6
- package/src/shell/lineReader.ts +46 -0
- package/src/shell/packageManagers.ts +75 -0
- package/src/shell/parse.ts +233 -236
- package/src/shell/program.ts +2 -1
- package/src/shell/testCommand.ts +105 -0
- package/src/shell/tokenize.ts +257 -0
- package/src/system/cookieJar.ts +187 -0
- package/src/system/httpStream.ts +168 -0
- package/src/system/index.ts +24 -1
- package/src/system/kernel.ts +16 -4
- package/src/system/ports.ts +23 -4
- package/src/system/programs.ts +3 -1
- package/src/system/types.ts +40 -6
- package/src/system/webSocketClient.ts +177 -0
- package/src/system/webSocketFrames.ts +118 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../../src/shell/builtins.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../../src/shell/builtins.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAM5D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,kCAAkC;AAClC,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;CACvB;AAED,mDAAmD;AACnD,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0FAA0F;IAC1F,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,iEAAiE;IACjE,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjD,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAClD,oDAAoD;IACpD,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAC7D,iDAAiD;IACjD,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACtC;AAED,MAAM,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAElF,wEAAwE;AACxE,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAK7C,CAAC;AAEF,oFAAoF;AACpF,eAAO,MAAM,eAAe,UAA+D,CAAC;AAe5F,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAuJ5C,CAAC"}
|
package/dist/shell/builtins.js
CHANGED
|
@@ -6,21 +6,27 @@ import { findExecutable } from '../system/commands.js';
|
|
|
6
6
|
import { resolvePath } from './context.js';
|
|
7
7
|
import { cat, cp, ls, mkdir, mv, pwd, rm, touch } from './fileCommands.js';
|
|
8
8
|
import { basename, clear, dirname, echo, env, falseCommand, grep, head, printf, sleep, tail, trueCommand, wc } from './textCommands.js';
|
|
9
|
+
import { bracket, test } from './testCommand.js';
|
|
10
|
+
import { readLine } from './lineReader.js';
|
|
9
11
|
/** Coreutils: plain commands, also spawnable as standalone programs. */
|
|
10
12
|
export const COREUTILS = {
|
|
11
|
-
ls, cat, mkdir, rm, cp, mv, touch, pwd, echo, printf, head, tail, grep, wc, env, clear, sleep, basename, dirname,
|
|
13
|
+
ls, cat, mkdir, rm, cp, mv, touch, pwd, echo, printf, head, tail, grep, wc, env, clear, sleep, basename, dirname, test,
|
|
14
|
+
'[': bracket,
|
|
12
15
|
true: trueCommand,
|
|
13
16
|
false: falseCommand,
|
|
14
17
|
};
|
|
15
18
|
/** Programs the runtime provides besides coreutils (reported by `which`/`type`). */
|
|
16
|
-
export const SYSTEM_PROGRAMS = ['node', 'npm', 'npx', 'bfsh', 'sh', 'bash'];
|
|
19
|
+
export const SYSTEM_PROGRAMS = ['node', 'npm', 'npx', 'pnpm', 'yarn', 'bfsh', 'sh', 'bash'];
|
|
17
20
|
const HELP = `bfsh — BuilderForce WebContainers shell
|
|
18
21
|
|
|
19
|
-
Builtins: cd, pwd, export, unset, exit, source, history, type, which, help
|
|
20
|
-
|
|
22
|
+
Builtins: cd, pwd, export, unset, exit, source, history, type, which, help,
|
|
23
|
+
read, local, shift, return, break, continue, jobs, wait
|
|
24
|
+
Files: ls [-la], cat, mkdir [-p], rm [-rf], cp [-r], mv, touch, test / [ … ]
|
|
21
25
|
Text: echo, printf, head, tail, grep, wc, env, clear, sleep, basename, dirname
|
|
22
|
-
Node: node <file>, npm install|ci|run|start|test, npx <bin
|
|
26
|
+
Node: node <file>, npm install|ci|run|start|test, npx <bin>, pnpm, yarn
|
|
23
27
|
Syntax: 'quotes' "\$VARS" a && b || c; a | b > out.txt >> log 2>&1 2> err; FOO=bar cmd; $(cmd); *.js
|
|
28
|
+
if …; then …; elif …; else …; fi while|until …; do …; done for x in …; do …; done
|
|
29
|
+
case $x in a|b) …;; *) …;; esac name() { …; } { …; } ( … ) cat <<EOF … EOF
|
|
24
30
|
|
|
25
31
|
`;
|
|
26
32
|
export const BUILTINS = {
|
|
@@ -103,10 +109,12 @@ export const BUILTINS = {
|
|
|
103
109
|
}
|
|
104
110
|
return status;
|
|
105
111
|
},
|
|
106
|
-
async type(ctx) {
|
|
112
|
+
async type(ctx, shell) {
|
|
107
113
|
let status = 0;
|
|
108
114
|
for (const name of ctx.args) {
|
|
109
|
-
if (name
|
|
115
|
+
if (shell.functions.has(name))
|
|
116
|
+
ctx.io.stdout(`${name} is a function\n`);
|
|
117
|
+
else if (name in BUILTINS)
|
|
110
118
|
ctx.io.stdout(`${name} is a shell builtin\n`);
|
|
111
119
|
else if (name in COREUTILS || SYSTEM_PROGRAMS.includes(name))
|
|
112
120
|
ctx.io.stdout(`${name} is /usr/local/bin/${name}\n`);
|
|
@@ -125,7 +133,79 @@ export const BUILTINS = {
|
|
|
125
133
|
async set() {
|
|
126
134
|
return 0; // options (-e, -x) are accepted and ignored
|
|
127
135
|
},
|
|
136
|
+
async break(ctx, shell) {
|
|
137
|
+
return loopControl(ctx, shell, 'break');
|
|
138
|
+
},
|
|
139
|
+
async continue(ctx, shell) {
|
|
140
|
+
return loopControl(ctx, shell, 'continue');
|
|
141
|
+
},
|
|
142
|
+
async return(ctx, shell) {
|
|
143
|
+
if (!shell.localFrames.length) {
|
|
144
|
+
ctx.io.stderr('return: can only `return\' from a function or sourced script\n');
|
|
145
|
+
return 1;
|
|
146
|
+
}
|
|
147
|
+
const status = ctx.args[0] === undefined ? shell.lastStatus : Number(ctx.args[0]) & 255;
|
|
148
|
+
shell.flow = { kind: 'return', status };
|
|
149
|
+
return status;
|
|
150
|
+
},
|
|
151
|
+
async local(ctx, shell) {
|
|
152
|
+
const frame = shell.localFrames[shell.localFrames.length - 1];
|
|
153
|
+
if (!frame) {
|
|
154
|
+
ctx.io.stderr('local: can only be used in a function\n');
|
|
155
|
+
return 1;
|
|
156
|
+
}
|
|
157
|
+
for (const arg of ctx.args) {
|
|
158
|
+
const eq = arg.indexOf('=');
|
|
159
|
+
const name = eq > 0 ? arg.slice(0, eq) : arg;
|
|
160
|
+
if (!frame.has(name))
|
|
161
|
+
frame.set(name, shell.env[name]);
|
|
162
|
+
shell.env[name] = eq > 0 ? arg.slice(eq + 1) : '';
|
|
163
|
+
}
|
|
164
|
+
return 0;
|
|
165
|
+
},
|
|
166
|
+
async shift(ctx, shell) {
|
|
167
|
+
const count = ctx.args[0] === undefined ? 1 : Number(ctx.args[0]);
|
|
168
|
+
if (!Number.isInteger(count) || count < 0 || count > shell.positional.length)
|
|
169
|
+
return 1;
|
|
170
|
+
shell.positional = shell.positional.slice(count);
|
|
171
|
+
return 0;
|
|
172
|
+
},
|
|
173
|
+
async read(ctx, shell) {
|
|
174
|
+
const raw = ctx.args.includes('-r');
|
|
175
|
+
const names = ctx.args.filter((a) => !a.startsWith('-'));
|
|
176
|
+
let line = await readLine(ctx.io.stdin, ctx.signal);
|
|
177
|
+
if (line === null)
|
|
178
|
+
return 1;
|
|
179
|
+
if (!raw)
|
|
180
|
+
line = line.replace(/\\(.)/g, '$1');
|
|
181
|
+
const targets = names.length ? names : ['REPLY'];
|
|
182
|
+
const fields = names.length ? line.trim().split(/\s+/) : [line];
|
|
183
|
+
targets.forEach((name, i) => {
|
|
184
|
+
shell.env[name] = i === targets.length - 1 ? fields.slice(i).join(' ') : fields[i] ?? '';
|
|
185
|
+
});
|
|
186
|
+
return 0;
|
|
187
|
+
},
|
|
188
|
+
async jobs(ctx, shell) {
|
|
189
|
+
for (const job of shell.jobs.values())
|
|
190
|
+
ctx.io.stdout(`[${job.id}] Running\n`);
|
|
191
|
+
return 0;
|
|
192
|
+
},
|
|
193
|
+
async wait(ctx, shell) {
|
|
194
|
+
const ids = ctx.args.map((a) => Number(a.replace(/^%/, '')));
|
|
195
|
+
const jobs = ids.length ? ids.map((id) => shell.jobs.get(id)).filter((j) => !!j) : [...shell.jobs.values()];
|
|
196
|
+
const statuses = await Promise.all(jobs.map((job) => job.done));
|
|
197
|
+
return statuses.length ? statuses[statuses.length - 1] : 0;
|
|
198
|
+
},
|
|
128
199
|
};
|
|
200
|
+
function loopControl(ctx, shell, kind) {
|
|
201
|
+
const levels = ctx.args[0] === undefined ? 1 : Number(ctx.args[0]);
|
|
202
|
+
if (!Number.isInteger(levels) || levels < 1) {
|
|
203
|
+
ctx.io.stderr(`${kind}: ${ctx.args[0]}: loop count out of range\n`);
|
|
204
|
+
return 1;
|
|
205
|
+
}
|
|
206
|
+
shell.flow = { kind, levels };
|
|
207
|
+
return 0;
|
|
208
|
+
}
|
|
129
209
|
BUILTINS['.'] = BUILTINS.source;
|
|
130
210
|
BUILTINS[':'] = async () => 0;
|
|
131
211
|
//# sourceMappingURL=builtins.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builtins.js","sourceRoot":"","sources":["../../src/shell/builtins.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"builtins.js","sourceRoot":"","sources":["../../src/shell/builtins.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Running compound commands (`if`, `while`/`until`, `for`, `case`, `{ }`,
|
|
3
|
+
* `( )`) against a narrow {@link ScriptRunner}, so the executor stays a
|
|
4
|
+
* dispatcher. Loop control (`break`, `continue`) and `return` travel as a
|
|
5
|
+
* {@link Flow} the runner holds: lists stop running while one is set, and the
|
|
6
|
+
* construct it targets clears it.
|
|
7
|
+
*/
|
|
8
|
+
import type { CompoundCommand, Script, Word } from './ast.js';
|
|
9
|
+
import type { JobInput, ShellIO } from './exec.js';
|
|
10
|
+
export type Flow = {
|
|
11
|
+
kind: 'break' | 'continue';
|
|
12
|
+
levels: number;
|
|
13
|
+
} | {
|
|
14
|
+
kind: 'return';
|
|
15
|
+
status: number;
|
|
16
|
+
};
|
|
17
|
+
export interface ScriptRunner {
|
|
18
|
+
flow?: Flow;
|
|
19
|
+
readonly positional: readonly string[];
|
|
20
|
+
runScript(script: Script, io: ShellIO, input: JobInput, signal: AbortSignal): Promise<number>;
|
|
21
|
+
/** Words with splitting and globbing, as command arguments. */
|
|
22
|
+
expandWords(words: Word[], io: ShellIO, signal: AbortSignal): Promise<string[]>;
|
|
23
|
+
/** One word as a single string: no splitting, no globbing. */
|
|
24
|
+
expandText(word: Word, io: ShellIO, signal: AbortSignal): Promise<string>;
|
|
25
|
+
setVar(name: string, value: string): void;
|
|
26
|
+
/** A copy of this shell for `( … )`: changes inside do not leak out. */
|
|
27
|
+
subshell(): ScriptRunner;
|
|
28
|
+
}
|
|
29
|
+
export declare function runCompound(node: CompoundCommand, runner: ScriptRunner, io: ShellIO, input: JobInput, signal: AbortSignal): Promise<number>;
|
|
30
|
+
//# sourceMappingURL=compound.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compound.d.ts","sourceRoot":"","sources":["../../src/shell/compound.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGnD,MAAM,MAAM,IAAI,GAAG;IAAE,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvG,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9F,+DAA+D;IAC/D,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAChF,8DAA8D;IAC9D,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1E,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,wEAAwE;IACxE,QAAQ,IAAI,YAAY,CAAC;CAC1B;AAeD,wBAAsB,WAAW,CAAC,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAiDjJ"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { patternToRegExp } from './expand.js';
|
|
2
|
+
/** After one pass of a loop body: whether the loop goes on. Consumes the flow aimed at this loop. */
|
|
3
|
+
function continueLoop(runner) {
|
|
4
|
+
const flow = runner.flow;
|
|
5
|
+
if (!flow)
|
|
6
|
+
return true;
|
|
7
|
+
if (flow.kind === 'return')
|
|
8
|
+
return false;
|
|
9
|
+
if (flow.levels > 1) {
|
|
10
|
+
runner.flow = { kind: flow.kind, levels: flow.levels - 1 };
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
runner.flow = undefined;
|
|
14
|
+
return flow.kind === 'continue';
|
|
15
|
+
}
|
|
16
|
+
export async function runCompound(node, runner, io, input, signal) {
|
|
17
|
+
switch (node.type) {
|
|
18
|
+
case 'group':
|
|
19
|
+
return runner.runScript(node.body, io, input, signal);
|
|
20
|
+
case 'subshell':
|
|
21
|
+
return runner.subshell().runScript(node.body, io, input, signal);
|
|
22
|
+
case 'if': {
|
|
23
|
+
for (const clause of node.clauses) {
|
|
24
|
+
const condition = await runner.runScript(clause.condition, io, input, signal);
|
|
25
|
+
if (runner.flow)
|
|
26
|
+
return condition;
|
|
27
|
+
if (condition === 0)
|
|
28
|
+
return runner.runScript(clause.body, io, input, signal);
|
|
29
|
+
}
|
|
30
|
+
return node.otherwise ? runner.runScript(node.otherwise, io, input, signal) : 0;
|
|
31
|
+
}
|
|
32
|
+
case 'while':
|
|
33
|
+
case 'until': {
|
|
34
|
+
let status = 0;
|
|
35
|
+
while (!signal.aborted) {
|
|
36
|
+
const condition = await runner.runScript(node.condition, io, input, signal);
|
|
37
|
+
if (runner.flow && !continueLoop(runner))
|
|
38
|
+
break;
|
|
39
|
+
if ((condition === 0) !== (node.type === 'while'))
|
|
40
|
+
break;
|
|
41
|
+
status = await runner.runScript(node.body, io, input, signal);
|
|
42
|
+
if (!continueLoop(runner))
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
return status;
|
|
46
|
+
}
|
|
47
|
+
case 'for': {
|
|
48
|
+
const items = node.items ? await runner.expandWords(node.items, io, signal) : [...runner.positional];
|
|
49
|
+
let status = 0;
|
|
50
|
+
for (const item of items) {
|
|
51
|
+
if (signal.aborted)
|
|
52
|
+
break;
|
|
53
|
+
runner.setVar(node.name, item);
|
|
54
|
+
status = await runner.runScript(node.body, io, input, signal);
|
|
55
|
+
if (!continueLoop(runner))
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
return status;
|
|
59
|
+
}
|
|
60
|
+
case 'case': {
|
|
61
|
+
const subject = await runner.expandText(node.subject, io, signal);
|
|
62
|
+
for (const arm of node.arms) {
|
|
63
|
+
for (const pattern of arm.patterns) {
|
|
64
|
+
if (patternToRegExp(await runner.expandText(pattern, io, signal), { slash: true }).test(subject)) {
|
|
65
|
+
return runner.runScript(arm.body, io, input, signal);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return 0;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=compound.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compound.js","sourceRoot":"","sources":["../../src/shell/compound.ts"],"names":[],"mappings":"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"}
|
package/dist/shell/exec.d.ts
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The executor: runs a parsed script. Lists honour `&&`/`||`/`;`/`&`; pipeline
|
|
3
|
-
* stages run concurrently, joined by in-memory pipes; redirects
|
|
4
|
-
* stdin/stdout/stderr
|
|
3
|
+
* stages run concurrently, joined by in-memory pipes; redirects (here-documents
|
|
4
|
+
* included) swap a stage's stdin/stdout/stderr. Compound commands run through
|
|
5
|
+
* compound.ts. Dispatch order per simple command: shell functions, builtins,
|
|
5
6
|
* extra in-process commands (npm, npx), the dev-server handoff, coreutils, and
|
|
6
7
|
* finally `system.spawn` (node, scripts on PATH, `.bin` entries) — which in the
|
|
7
8
|
* browser is a separate Web Worker.
|
|
8
9
|
*/
|
|
9
10
|
import type { System } from '../system/types.js';
|
|
10
11
|
import { InputQueue } from '../system/terminal.js';
|
|
11
|
-
import {
|
|
12
|
+
import type { FunctionDefinition, Script, Word } from './ast.js';
|
|
13
|
+
import { type BackgroundJob, type ShellState } from './builtins.js';
|
|
12
14
|
import { type CommandContext } from './context.js';
|
|
15
|
+
import { type Flow, type ScriptRunner } from './compound.js';
|
|
13
16
|
export interface ShellIO {
|
|
14
17
|
stdout(text: string): void;
|
|
15
18
|
stderr(text: string): void;
|
|
@@ -35,33 +38,51 @@ export interface ShellOptions {
|
|
|
35
38
|
rows: number;
|
|
36
39
|
} | undefined;
|
|
37
40
|
commands?: Record<string, ShellCommand>;
|
|
41
|
+
/** Functions inherited from a parent shell (subshells and `$(…)`). */
|
|
42
|
+
functions?: Map<string, FunctionDefinition>;
|
|
38
43
|
}
|
|
39
|
-
export declare class Shell implements ShellState {
|
|
44
|
+
export declare class Shell implements ShellState, ScriptRunner {
|
|
40
45
|
readonly options: ShellOptions;
|
|
41
46
|
cwd: string;
|
|
42
47
|
env: Record<string, string>;
|
|
43
48
|
lastStatus: number;
|
|
44
49
|
history: string[];
|
|
45
50
|
exitRequested?: number;
|
|
51
|
+
flow?: Flow;
|
|
52
|
+
positional: string[];
|
|
53
|
+
readonly functions: Map<string, FunctionDefinition>;
|
|
54
|
+
readonly jobs: Map<number, BackgroundJob>;
|
|
55
|
+
/** One frame per running function: names declared `local`, with the value to restore. */
|
|
56
|
+
readonly localFrames: Array<Map<string, string | undefined>>;
|
|
46
57
|
readonly pid: number;
|
|
47
58
|
readonly system: System;
|
|
48
|
-
private
|
|
59
|
+
private nextJob;
|
|
49
60
|
private current?;
|
|
50
61
|
constructor(options: ShellOptions);
|
|
51
|
-
/** A child shell for `npm run` / subshells: same IO, its own cwd and
|
|
62
|
+
/** A child shell for `npm run` / subshells: same IO, its own cwd, environment and functions. */
|
|
52
63
|
fork(overrides: {
|
|
53
64
|
cwd?: string;
|
|
54
65
|
env?: Record<string, string>;
|
|
55
66
|
positional?: string[];
|
|
56
67
|
}): Shell;
|
|
68
|
+
subshell(): Shell;
|
|
57
69
|
/** Parse and run `source`. Syntax errors print and return 2. */
|
|
58
70
|
exec(source: string, io: ShellIO, input: JobInput, signal: AbortSignal): Promise<number>;
|
|
59
71
|
/** `source` and friends: run in this shell with the current job's IO. */
|
|
60
72
|
run(source: string): Promise<number>;
|
|
73
|
+
runScript(script: Script, io: ShellIO, input: JobInput, signal: AbortSignal): Promise<number>;
|
|
74
|
+
expandWords(words: Word[], io: ShellIO, signal: AbortSignal): Promise<string[]>;
|
|
75
|
+
expandText(word: Word, io: ShellIO, signal: AbortSignal): Promise<string>;
|
|
76
|
+
setVar(name: string, value: string): void;
|
|
61
77
|
private expandContext;
|
|
62
78
|
private runPipeline;
|
|
63
79
|
private runCommand;
|
|
80
|
+
private runSimple;
|
|
81
|
+
/** Apply redirects; returns the new IO, or an exit status when a redirect fails. */
|
|
82
|
+
private applyRedirects;
|
|
64
83
|
private dispatch;
|
|
84
|
+
/** A shell function: its own positional parameters and `local` frame; `return` ends it. */
|
|
85
|
+
private callFunction;
|
|
65
86
|
private spawnExternal;
|
|
66
87
|
}
|
|
67
88
|
//# sourceMappingURL=exec.d.ts.map
|
package/dist/shell/exec.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../src/shell/exec.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../src/shell/exec.ts"],"names":[],"mappings":"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"}
|
package/dist/shell/exec.js
CHANGED
|
@@ -4,6 +4,7 @@ import { expandWord, expandWords } from './expand.js';
|
|
|
4
4
|
import { BUILTINS, COREUTILS } from './builtins.js';
|
|
5
5
|
import { resolvePath } from './context.js';
|
|
6
6
|
import { matchDevServer, runDevServerHandoff } from './devHandoff.js';
|
|
7
|
+
import { runCompound } from './compound.js';
|
|
7
8
|
let nextShellPid = 500;
|
|
8
9
|
export class Shell {
|
|
9
10
|
options;
|
|
@@ -12,20 +13,30 @@ export class Shell {
|
|
|
12
13
|
lastStatus = 0;
|
|
13
14
|
history = [];
|
|
14
15
|
exitRequested;
|
|
16
|
+
flow;
|
|
17
|
+
positional;
|
|
18
|
+
functions;
|
|
19
|
+
jobs = new Map();
|
|
20
|
+
/** One frame per running function: names declared `local`, with the value to restore. */
|
|
21
|
+
localFrames = [];
|
|
15
22
|
pid = nextShellPid++;
|
|
16
23
|
system;
|
|
17
|
-
|
|
24
|
+
nextJob = 1;
|
|
18
25
|
current;
|
|
19
26
|
constructor(options) {
|
|
20
27
|
this.options = options;
|
|
21
28
|
this.system = options.system;
|
|
22
29
|
this.cwd = options.cwd;
|
|
23
30
|
this.env = { ...options.env, PWD: options.cwd };
|
|
24
|
-
this.positional = options.positional ?? [];
|
|
31
|
+
this.positional = [...(options.positional ?? [])];
|
|
32
|
+
this.functions = new Map(options.functions);
|
|
25
33
|
}
|
|
26
|
-
/** A child shell for `npm run` / subshells: same IO, its own cwd and
|
|
34
|
+
/** A child shell for `npm run` / subshells: same IO, its own cwd, environment and functions. */
|
|
27
35
|
fork(overrides) {
|
|
28
|
-
return new Shell({ ...this.options, cwd: overrides.cwd ?? this.cwd, env: { ...this.env, ...overrides.env }, positional: overrides.positional });
|
|
36
|
+
return new Shell({ ...this.options, cwd: overrides.cwd ?? this.cwd, env: { ...this.env, ...overrides.env }, positional: overrides.positional ?? this.positional, functions: this.functions });
|
|
37
|
+
}
|
|
38
|
+
subshell() {
|
|
39
|
+
return this.fork({});
|
|
29
40
|
}
|
|
30
41
|
/** Parse and run `source`. Syntax errors print and return 2. */
|
|
31
42
|
async exec(source, io, input, signal) {
|
|
@@ -43,29 +54,13 @@ export class Shell {
|
|
|
43
54
|
const previous = this.current;
|
|
44
55
|
this.current = { io, input, signal };
|
|
45
56
|
try {
|
|
46
|
-
|
|
47
|
-
if (this.exitRequested !== undefined || signal.aborted)
|
|
48
|
-
break;
|
|
49
|
-
const run = async () => {
|
|
50
|
-
let status = await this.runPipeline(list.first, io, input, signal);
|
|
51
|
-
for (const { op, pipeline } of list.rest) {
|
|
52
|
-
if (this.exitRequested !== undefined || signal.aborted)
|
|
53
|
-
break;
|
|
54
|
-
if ((op === '&&') === (status === 0))
|
|
55
|
-
status = await this.runPipeline(pipeline, io, input, signal);
|
|
56
|
-
}
|
|
57
|
-
return status;
|
|
58
|
-
};
|
|
59
|
-
if (list.background) {
|
|
60
|
-
void run();
|
|
61
|
-
this.lastStatus = 0;
|
|
62
|
-
}
|
|
63
|
-
else
|
|
64
|
-
this.lastStatus = await run();
|
|
65
|
-
}
|
|
57
|
+
await this.runScript(script, io, input, signal);
|
|
66
58
|
}
|
|
67
59
|
finally {
|
|
68
60
|
this.current = previous;
|
|
61
|
+
// A `break`/`continue` outside any loop (or `return` outside a function) must not stop later lines.
|
|
62
|
+
if (!this.localFrames.length)
|
|
63
|
+
this.flow = undefined;
|
|
69
64
|
}
|
|
70
65
|
if (signal.aborted && this.lastStatus === 0)
|
|
71
66
|
this.lastStatus = 130;
|
|
@@ -78,6 +73,41 @@ export class Shell {
|
|
|
78
73
|
throw new Error('Shell.run outside a job');
|
|
79
74
|
return this.exec(source, job.io, job.input, job.signal);
|
|
80
75
|
}
|
|
76
|
+
async runScript(script, io, input, signal) {
|
|
77
|
+
for (const list of script) {
|
|
78
|
+
if (this.exitRequested !== undefined || signal.aborted || this.flow)
|
|
79
|
+
break;
|
|
80
|
+
const run = async () => {
|
|
81
|
+
let status = await this.runPipeline(list.first, io, input, signal);
|
|
82
|
+
for (const { op, pipeline } of list.rest) {
|
|
83
|
+
if (this.exitRequested !== undefined || signal.aborted || this.flow)
|
|
84
|
+
break;
|
|
85
|
+
if ((op === '&&') === (status === 0))
|
|
86
|
+
status = await this.runPipeline(pipeline, io, input, signal);
|
|
87
|
+
}
|
|
88
|
+
return status;
|
|
89
|
+
};
|
|
90
|
+
if (list.background) {
|
|
91
|
+
const id = this.nextJob++;
|
|
92
|
+
const done = run();
|
|
93
|
+
this.jobs.set(id, { id, done });
|
|
94
|
+
void done.finally(() => this.jobs.delete(id));
|
|
95
|
+
this.lastStatus = 0;
|
|
96
|
+
}
|
|
97
|
+
else
|
|
98
|
+
this.lastStatus = await run();
|
|
99
|
+
}
|
|
100
|
+
return this.lastStatus;
|
|
101
|
+
}
|
|
102
|
+
expandWords(words, io, signal) {
|
|
103
|
+
return expandWords(words, this.expandContext(io, signal));
|
|
104
|
+
}
|
|
105
|
+
async expandText(word, io, signal) {
|
|
106
|
+
return (await expandWord(word, this.expandContext(io, signal), { split: false, glob: false })).join('');
|
|
107
|
+
}
|
|
108
|
+
setVar(name, value) {
|
|
109
|
+
this.env[name] = value;
|
|
110
|
+
}
|
|
81
111
|
expandContext(io, signal) {
|
|
82
112
|
return {
|
|
83
113
|
fs: this.system.fs,
|
|
@@ -114,6 +144,23 @@ export class Shell {
|
|
|
114
144
|
return pipeline.negate ? (status === 0 ? 1 : 0) : status;
|
|
115
145
|
}
|
|
116
146
|
async runCommand(node, io, input, signal, alone) {
|
|
147
|
+
if (node.type === 'function') {
|
|
148
|
+
this.functions.set(node.name, node);
|
|
149
|
+
return 0;
|
|
150
|
+
}
|
|
151
|
+
if (node.type === 'simple')
|
|
152
|
+
return this.runSimple(node, io, input, signal, alone);
|
|
153
|
+
const redirected = await this.applyRedirects(node.redirects, io, input, signal);
|
|
154
|
+
if (typeof redirected === 'number')
|
|
155
|
+
return redirected;
|
|
156
|
+
try {
|
|
157
|
+
return await runCompound(node, this, redirected.io, redirected.input, signal);
|
|
158
|
+
}
|
|
159
|
+
finally {
|
|
160
|
+
redirected.flush();
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
async runSimple(node, io, input, signal, alone) {
|
|
117
164
|
const ectx = this.expandContext(io, signal);
|
|
118
165
|
const argv = await expandWords(node.words, ectx);
|
|
119
166
|
const assigned = {};
|
|
@@ -123,13 +170,28 @@ export class Shell {
|
|
|
123
170
|
Object.assign(this.env, assigned);
|
|
124
171
|
return 0;
|
|
125
172
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
173
|
+
const redirected = await this.applyRedirects(node.redirects, io, input, signal);
|
|
174
|
+
if (typeof redirected === 'number')
|
|
175
|
+
return redirected;
|
|
176
|
+
try {
|
|
177
|
+
return await this.dispatch(argv, assigned, redirected.io, redirected.input, signal, alone && redirected.io.isTerminal);
|
|
178
|
+
}
|
|
179
|
+
finally {
|
|
180
|
+
redirected.flush();
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/** Apply redirects; returns the new IO, or an exit status when a redirect fails. */
|
|
184
|
+
async applyRedirects(redirects, io, input, signal) {
|
|
185
|
+
let { stdout, stderr, isTerminal } = io;
|
|
129
186
|
let stdin = input;
|
|
130
|
-
let isTerminal = io.isTerminal;
|
|
131
187
|
const flushes = [];
|
|
132
|
-
|
|
188
|
+
const fromText = (text) => {
|
|
189
|
+
const queue = new InputQueue();
|
|
190
|
+
queue.push(text);
|
|
191
|
+
queue.push(null);
|
|
192
|
+
return { queue };
|
|
193
|
+
};
|
|
194
|
+
for (const redirect of redirects) {
|
|
133
195
|
if (redirect.op === '2>&1') {
|
|
134
196
|
stderr = stdout;
|
|
135
197
|
continue;
|
|
@@ -138,7 +200,12 @@ export class Shell {
|
|
|
138
200
|
stdout = stderr;
|
|
139
201
|
continue;
|
|
140
202
|
}
|
|
141
|
-
|
|
203
|
+
if (redirect.heredoc) {
|
|
204
|
+
const text = await this.expandText(redirect.heredoc.body, io, signal);
|
|
205
|
+
stdin = fromText(text);
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
const target = (await expandWord(redirect.target, this.expandContext(io, signal))).join(' ');
|
|
142
209
|
const path = resolvePath(this, target);
|
|
143
210
|
if (redirect.op === '<') {
|
|
144
211
|
const text = this.system.fs.readText(path);
|
|
@@ -146,10 +213,7 @@ export class Shell {
|
|
|
146
213
|
io.stderr(`bfsh: ${target}: No such file or directory\n`);
|
|
147
214
|
return 1;
|
|
148
215
|
}
|
|
149
|
-
|
|
150
|
-
queue.push(text);
|
|
151
|
-
queue.push(null);
|
|
152
|
-
stdin = { queue };
|
|
216
|
+
stdin = fromText(text);
|
|
153
217
|
continue;
|
|
154
218
|
}
|
|
155
219
|
if (this.system.fs.isDirectory(path)) {
|
|
@@ -170,16 +234,13 @@ export class Shell {
|
|
|
170
234
|
isTerminal = false;
|
|
171
235
|
}
|
|
172
236
|
}
|
|
173
|
-
|
|
174
|
-
return await this.dispatch(argv, assigned, { stdout, stderr, isTerminal }, stdin, signal, alone && isTerminal);
|
|
175
|
-
}
|
|
176
|
-
finally {
|
|
177
|
-
for (const flush of flushes)
|
|
178
|
-
flush();
|
|
179
|
-
}
|
|
237
|
+
return { io: { stdout, stderr, isTerminal }, input: stdin, flush: () => flushes.forEach((flush) => flush()) };
|
|
180
238
|
}
|
|
181
239
|
async dispatch(argv, assigned, io, input, signal, attachTerminal) {
|
|
182
240
|
const [name, ...args] = argv;
|
|
241
|
+
const fn = this.functions.get(name);
|
|
242
|
+
if (fn)
|
|
243
|
+
return this.callFunction(fn, args, io, input, signal);
|
|
183
244
|
const env = { ...this.env, ...assigned };
|
|
184
245
|
const ctx = {
|
|
185
246
|
args,
|
|
@@ -205,6 +266,31 @@ export class Shell {
|
|
|
205
266
|
return coreutil(ctx);
|
|
206
267
|
return this.spawnExternal(name, args, env, io, input, signal, attachTerminal);
|
|
207
268
|
}
|
|
269
|
+
/** A shell function: its own positional parameters and `local` frame; `return` ends it. */
|
|
270
|
+
async callFunction(fn, args, io, input, signal) {
|
|
271
|
+
const savedPositional = this.positional;
|
|
272
|
+
this.positional = args;
|
|
273
|
+
const frame = new Map();
|
|
274
|
+
this.localFrames.push(frame);
|
|
275
|
+
try {
|
|
276
|
+
let status = await runCompound(fn.body, this, io, input, signal);
|
|
277
|
+
if (this.flow?.kind === 'return') {
|
|
278
|
+
status = this.flow.status;
|
|
279
|
+
this.flow = undefined;
|
|
280
|
+
}
|
|
281
|
+
return status;
|
|
282
|
+
}
|
|
283
|
+
finally {
|
|
284
|
+
this.localFrames.pop();
|
|
285
|
+
for (const [name, value] of frame) {
|
|
286
|
+
if (value === undefined)
|
|
287
|
+
delete this.env[name];
|
|
288
|
+
else
|
|
289
|
+
this.env[name] = value;
|
|
290
|
+
}
|
|
291
|
+
this.positional = savedPositional;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
208
294
|
async spawnExternal(name, args, env, io, input, signal, attachTerminal) {
|
|
209
295
|
const size = attachTerminal ? this.options.terminalSize?.() : undefined;
|
|
210
296
|
let child;
|