@volter/browser-toolbelt 0.1.4 → 0.1.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.
Files changed (58) hide show
  1. package/README.md +15 -0
  2. package/dist/browser-git-http.d.ts +28 -2
  3. package/dist/browser-git-http.d.ts.map +1 -1
  4. package/dist/browser-git-http.js +5 -1
  5. package/dist/browser-git-http.js.map +1 -1
  6. package/dist/browser-git-remote-https.d.ts +34 -0
  7. package/dist/browser-git-remote-https.d.ts.map +1 -0
  8. package/dist/browser-git-remote-https.js +619 -0
  9. package/dist/browser-git-remote-https.js.map +1 -0
  10. package/dist/browser-interactive-shell.d.ts +11 -0
  11. package/dist/browser-interactive-shell.d.ts.map +1 -0
  12. package/dist/browser-interactive-shell.js +211 -0
  13. package/dist/browser-interactive-shell.js.map +1 -0
  14. package/dist/browser-rm.d.ts +3 -0
  15. package/dist/browser-rm.d.ts.map +1 -0
  16. package/dist/browser-rm.js +61 -0
  17. package/dist/browser-rm.js.map +1 -0
  18. package/dist/browser-shell-filesystem.d.ts +1 -1
  19. package/dist/browser-shell-filesystem.d.ts.map +1 -1
  20. package/dist/browser-shell-filesystem.js +25 -7
  21. package/dist/browser-shell-filesystem.js.map +1 -1
  22. package/dist/browser-shell.d.ts +52 -3
  23. package/dist/browser-shell.d.ts.map +1 -1
  24. package/dist/browser-shell.js +387 -58
  25. package/dist/browser-shell.js.map +1 -1
  26. package/dist/github-device-auth.d.ts +23 -2
  27. package/dist/github-device-auth.d.ts.map +1 -1
  28. package/dist/github-device-auth.js +132 -17
  29. package/dist/github-device-auth.js.map +1 -1
  30. package/dist/github-web-sign-in.d.ts +24 -0
  31. package/dist/github-web-sign-in.d.ts.map +1 -0
  32. package/dist/github-web-sign-in.js +93 -0
  33. package/dist/github-web-sign-in.js.map +1 -0
  34. package/dist/index.d.ts +4 -1
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +4 -1
  37. package/dist/index.js.map +1 -1
  38. package/dist/install.d.ts +8 -3
  39. package/dist/install.d.ts.map +1 -1
  40. package/dist/install.js +37 -5
  41. package/dist/install.js.map +1 -1
  42. package/dist/shell-buffer-global.d.ts +2 -0
  43. package/dist/shell-buffer-global.d.ts.map +1 -0
  44. package/dist/shell-buffer-global.js +10 -0
  45. package/dist/shell-buffer-global.js.map +1 -0
  46. package/dist/volter-sign-in.d.ts +62 -0
  47. package/dist/volter-sign-in.d.ts.map +1 -0
  48. package/dist/volter-sign-in.js +255 -0
  49. package/dist/volter-sign-in.js.map +1 -0
  50. package/package.json +23 -11
  51. package/dist/browser-git-filesystem.d.ts +0 -18
  52. package/dist/browser-git-filesystem.d.ts.map +0 -1
  53. package/dist/browser-git-filesystem.js +0 -84
  54. package/dist/browser-git-filesystem.js.map +0 -1
  55. package/dist/browser-git.d.ts +0 -38
  56. package/dist/browser-git.d.ts.map +0 -1
  57. package/dist/browser-git.js +0 -514
  58. package/dist/browser-git.js.map +0 -1
@@ -0,0 +1,11 @@
1
+ import type { BrowserProcessResult, BrowserProcessRunOptions } from "@volter/browser-runtime/browser-process.js";
2
+ export type ShellLineRunner = (command: string, options: BrowserProcessRunOptions) => Promise<BrowserProcessResult>;
3
+ /** Reads a script file for `sh <file>`: the text, or undefined when there is no such file. */
4
+ export type ShellScriptReader = (path: string) => Promise<string | undefined>;
5
+ /**
6
+ * `sh -c <command>` runs the command; `sh <file> [args]` runs the file, with
7
+ * the arguments as `$1...`; `sh` with a terminal is the interactive loop;
8
+ * `sh` with stdin and no terminal runs stdin as a script.
9
+ */
10
+ export declare function interactiveShell(run: ShellLineRunner, readScript?: ShellScriptReader): (argv: readonly string[], options: BrowserProcessRunOptions) => Promise<BrowserProcessResult>;
11
+ //# sourceMappingURL=browser-interactive-shell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-interactive-shell.d.ts","sourceRoot":"","sources":["../src/browser-interactive-shell.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,4CAA4C,CAAC;AAEjH,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,wBAAwB,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAiCpH,8FAA8F;AAC9F,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AAE9E;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,eAAe,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,wBAAwB,KAAK,OAAO,CAAC,oBAAoB,CAAC,CA4BpL"}
@@ -0,0 +1,211 @@
1
+ // An interactive `sh` as a program of the container (ADR-0026 §2). Before
2
+ // this, the prompt, the line editing and `cd`'s memory lived in each page's
3
+ // terminal, three times over. Now the page mounts xterm on an exec of `sh`,
4
+ // the way a terminal on a remote container is reached, and this program is
5
+ // what answers: a prompt, a line at a time, each line run the way the page
6
+ // ran it, with the working directory and the environment carried across
7
+ // lines. The PTY has no line discipline of its own (no termios: ADR-0023
8
+ // §4), so echo, backspace and `\n` to `\r\n` are this program's too.
9
+ const encoder = new TextEncoder();
10
+ /** A live stdin the child pulls from, fed by the shell's loop while the child runs. */
11
+ class InputQueue {
12
+ chunks = [];
13
+ waiting;
14
+ closed = false;
15
+ push(bytes) { if (this.closed)
16
+ return; this.chunks.push(bytes); this.waiting?.(); }
17
+ close() { this.closed = true; this.waiting?.(); }
18
+ async *[Symbol.asyncIterator]() {
19
+ for (;;) {
20
+ if (this.chunks.length > 0) {
21
+ yield this.chunks.shift();
22
+ continue;
23
+ }
24
+ if (this.closed)
25
+ return;
26
+ await new Promise((resolve) => { this.waiting = () => { this.waiting = undefined; resolve(); }; });
27
+ }
28
+ }
29
+ }
30
+ async function readAllText(stream, text) {
31
+ if (text !== undefined)
32
+ return text;
33
+ if (!stream)
34
+ return "";
35
+ const decoder = new TextDecoder();
36
+ let out = "";
37
+ for await (const chunk of stream)
38
+ out += decoder.decode(chunk, { stream: true });
39
+ return out + decoder.decode();
40
+ }
41
+ const quoteWord = (value) => /^[A-Za-z0-9_./:+,@%=-]+$/u.test(value) ? value : `'${value.replaceAll("'", `'\\''`)}'`;
42
+ const toTerminal = (text) => text.replace(/\r?\n/gu, "\r\n");
43
+ /**
44
+ * `sh -c <command>` runs the command; `sh <file> [args]` runs the file, with
45
+ * the arguments as `$1...`; `sh` with a terminal is the interactive loop;
46
+ * `sh` with stdin and no terminal runs stdin as a script.
47
+ */
48
+ export function interactiveShell(run, readScript) {
49
+ return async (argv, options) => {
50
+ const args = argv.slice(1);
51
+ const flagIndex = args.indexOf("-c");
52
+ if (flagIndex !== -1) {
53
+ const command = args[flagIndex + 1];
54
+ if (command === undefined)
55
+ return { stdout: "", stderr: `${argv[0]}: -c: option requires an argument\n`, exitCode: 2 };
56
+ // after the line come `$0` and the positional arguments; `$0` is the interpreter's own
57
+ const positionals = args.slice(flagIndex + 3);
58
+ return run(positionals.length > 0 && command.includes("$")
59
+ ? `set -- ${positionals.map(quoteWord).join(" ")}; ${command}` : command, options);
60
+ }
61
+ const fileIndex = args.findIndex((arg) => !arg.startsWith("-"));
62
+ if (fileIndex !== -1) {
63
+ const file = args[fileIndex];
64
+ const path = file.startsWith("/") ? file : `${(options.cwd ?? "/").replace(/\/$/u, "")}/${file}`;
65
+ const text = await readScript?.(path);
66
+ if (text === undefined)
67
+ return { stdout: "", stderr: `${argv[0]}: ${file}: No such file or directory\n`, exitCode: 127 };
68
+ const script = text.startsWith("#!") ? text.slice(text.indexOf("\n") + 1) : text;
69
+ const positionals = args.slice(fileIndex + 1);
70
+ return run(positionals.length > 0 ? `set -- ${positionals.map(quoteWord).join(" ")}\n${script}` : script, options);
71
+ }
72
+ if (!options.terminal) {
73
+ const script = await readAllText(options.stdinStream, options.stdin);
74
+ return script.trim() === "" ? { stdout: "", stderr: "", exitCode: 0 } : run(script, options);
75
+ }
76
+ return interactiveLoop(run, options);
77
+ };
78
+ }
79
+ async function interactiveLoop(run, options) {
80
+ const write = (text) => options.onStdout?.(text);
81
+ let cwd = options.cwd ?? "/";
82
+ let env = options.env ?? {};
83
+ const history = [];
84
+ let historyIndex = 0;
85
+ let line = "";
86
+ let child;
87
+ const prompt = () => write(env.PS1 ?? "$ ");
88
+ const decoder = new TextDecoder();
89
+ const runLine = async (text) => {
90
+ const command = text.trim();
91
+ if (command === "")
92
+ return;
93
+ history.push(command);
94
+ historyIndex = history.length;
95
+ const controller = new AbortController();
96
+ const stdin = new InputQueue();
97
+ child = { stdin, controller };
98
+ try {
99
+ const result = await run(command, {
100
+ cwd,
101
+ env,
102
+ signal: controller.signal,
103
+ stdinStream: stdin,
104
+ // the line holds this terminal; a job it starts keeps writing to it
105
+ ...(options.terminal ? { terminal: { ...options.terminal, write: (data) => write(toTerminal(data)) } } : {}),
106
+ onStdout: (data) => write(toTerminal(data)),
107
+ onStderr: (data) => write(toTerminal(data)),
108
+ });
109
+ if (result.cwd)
110
+ cwd = result.cwd;
111
+ if (result.env)
112
+ env = result.env;
113
+ }
114
+ catch (cause) {
115
+ write(toTerminal(`${cause instanceof Error ? cause.message : String(cause)}\n`));
116
+ }
117
+ finally {
118
+ stdin.close();
119
+ child = undefined;
120
+ }
121
+ };
122
+ prompt();
123
+ const source = options.stdinStream;
124
+ if (!source)
125
+ return { stdout: "", stderr: "", exitCode: 0 };
126
+ // A line runs while the loop keeps reading: keystrokes typed during a run
127
+ // are the child's stdin, and Ctrl-C is its interrupt.
128
+ let running;
129
+ for await (const chunk of source) {
130
+ if (options.signal?.aborted)
131
+ break;
132
+ const text = decoder.decode(chunk, { stream: true });
133
+ for (const key of splitKeys(text)) {
134
+ if (running) {
135
+ if (!child)
136
+ continue;
137
+ if (key === "\x03")
138
+ child.controller.abort(new DOMException("Interrupted", "AbortError"));
139
+ else
140
+ child.stdin.push(encoder.encode(key));
141
+ continue;
142
+ }
143
+ if (key === "\r" || key === "\n") {
144
+ write("\r\n");
145
+ const command = line;
146
+ line = "";
147
+ const exit = /^\s*exit(?:\s+(\d+))?\s*$/u.exec(command);
148
+ if (exit)
149
+ return { stdout: "", stderr: "", exitCode: exit[1] === undefined ? 0 : Number(exit[1]) & 0xff, cwd, env };
150
+ if (command.trim() === "") {
151
+ prompt();
152
+ continue;
153
+ }
154
+ running = runLine(command).finally(() => { running = undefined; prompt(); });
155
+ }
156
+ else if (key === "\x7f" || key === "\b") {
157
+ if (line.length > 0) {
158
+ line = line.slice(0, -1);
159
+ write("\b \b");
160
+ }
161
+ }
162
+ else if (key === "\x03") {
163
+ write("^C\r\n");
164
+ line = "";
165
+ prompt();
166
+ }
167
+ else if (key === "\x04") {
168
+ if (line === "") {
169
+ write("\r\n");
170
+ return { stdout: "", stderr: "", exitCode: 0, cwd, env };
171
+ }
172
+ }
173
+ else if (key === "\x1b[A" || key === "\x1b[B") {
174
+ if (history.length === 0)
175
+ continue;
176
+ historyIndex = key === "\x1b[A" ? Math.max(0, historyIndex - 1) : Math.min(history.length, historyIndex + 1);
177
+ const replacement = history[historyIndex] ?? "";
178
+ write("\b \b".repeat(line.length) + replacement);
179
+ line = replacement;
180
+ }
181
+ else if (key.startsWith("\x1b") || key === "\t") {
182
+ // Cursor keys and completion are not answered: a row, not a surprise.
183
+ }
184
+ else if (key >= " ") {
185
+ line += key;
186
+ write(key);
187
+ }
188
+ }
189
+ }
190
+ if (running)
191
+ await running;
192
+ return { stdout: "", stderr: "", exitCode: 0, cwd, env };
193
+ }
194
+ /** Splits input into keys: a CSI sequence is one key, every other character is one. */
195
+ function splitKeys(text) {
196
+ const keys = [];
197
+ for (let index = 0; index < text.length; index += 1) {
198
+ const char = text[index];
199
+ if (char === "\x1b" && text[index + 1] === "[") {
200
+ let end = index + 2;
201
+ while (end < text.length && !/[A-Za-z~]/u.test(text[end]))
202
+ end += 1;
203
+ keys.push(text.slice(index, end + 1));
204
+ index = end;
205
+ }
206
+ else
207
+ keys.push(char);
208
+ }
209
+ return keys;
210
+ }
211
+ //# sourceMappingURL=browser-interactive-shell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-interactive-shell.js","sourceRoot":"","sources":["../src/browser-interactive-shell.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** Force ignores missing operands; filesystem and permission failures still fail. */
2
+ export declare const browserRmCommand: import("just-bash/browser").Command;
3
+ //# sourceMappingURL=browser-rm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-rm.d.ts","sourceRoot":"","sources":["../src/browser-rm.ts"],"names":[],"mappings":"AAEA,qFAAqF;AACrF,eAAO,MAAM,gBAAgB,qCA8C3B,CAAC"}
@@ -0,0 +1,61 @@
1
+ import { defineCommand } from "just-bash/browser";
2
+ /** Force ignores missing operands; filesystem and permission failures still fail. */
3
+ export const browserRmCommand = defineCommand("rm", async (args, context) => {
4
+ let recursive = false, force = false, verbose = false, options = true;
5
+ const operands = [];
6
+ for (const argument of args) {
7
+ if (options && argument === "--") {
8
+ options = false;
9
+ continue;
10
+ }
11
+ if (options && argument === "--help") {
12
+ return { stdout: "Usage: rm [-f] [-rR] [-v] [--] FILE...\nRemove files; -f ignores missing files, -r removes directories recursively.\n", stderr: "", exitCode: 0 };
13
+ }
14
+ if (options && argument.startsWith("-") && argument !== "-") {
15
+ const flags = argument === "--recursive" ? "r" : argument === "--force" ? "f"
16
+ : argument === "--verbose" ? "v" : argument.startsWith("--") ? "?" : argument.slice(1);
17
+ if (/[^rRfv]/u.test(flags)) {
18
+ return { stdout: "", stderr: `rm: invalid option ${JSON.stringify(argument)}\n`, exitCode: 1 };
19
+ }
20
+ recursive ||= /[rR]/u.test(flags);
21
+ force ||= flags.includes("f");
22
+ verbose ||= flags.includes("v");
23
+ }
24
+ else
25
+ operands.push(argument);
26
+ }
27
+ if (!operands.length)
28
+ return { stdout: "", stderr: force ? "" : "rm: missing operand\n", exitCode: force ? 0 : 1 };
29
+ let stdout = "", stderr = "", exitCode = 0;
30
+ for (const operand of operands) {
31
+ try {
32
+ const path = context.fs.resolvePath(context.cwd, operand);
33
+ const stat = await context.fs.stat(path);
34
+ if (stat.isDirectory && !recursive) {
35
+ stderr += `rm: cannot remove '${printable(operand)}': Is a directory\n`;
36
+ exitCode = 1;
37
+ continue;
38
+ }
39
+ await context.fs.rm(path, { recursive, force });
40
+ if (verbose)
41
+ stdout += `removed '${printable(operand)}'\n`;
42
+ }
43
+ catch (error) {
44
+ const message = error instanceof Error ? error.message : String(error);
45
+ const code = error && typeof error === "object" && "code" in error ? error.code : undefined;
46
+ // Older virtual filesystems encode errno only in the message. Do not
47
+ // mistake an arbitrary pathname containing "ENOENT" for that errno.
48
+ const missing = code === "ENOENT" || (code === undefined && /^ENOENT(?:\b|:)/u.test(message));
49
+ if (force && missing)
50
+ continue;
51
+ const detail = missing ? "No such file or directory" : printable(message);
52
+ stderr += `rm: cannot remove '${printable(operand)}': ${detail}\n`;
53
+ exitCode = 1;
54
+ }
55
+ }
56
+ return { stdout, stderr, exitCode };
57
+ });
58
+ function printable(value) {
59
+ return value.replace(/[\x00-\x1f\x7f]/gu, character => `\\x${character.charCodeAt(0).toString(16).padStart(2, "0")}`);
60
+ }
61
+ //# sourceMappingURL=browser-rm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-rm.js","sourceRoot":"","sources":["../src/browser-rm.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@ interface DirentEntry {
6
6
  isDirectory: boolean;
7
7
  isSymbolicLink: boolean;
8
8
  }
9
- /** Live just-bash adapter over the same AlmostNode VFS used by WALI. */
9
+ /** Live just-bash adapter over the same Tabnode VFS used by WALI. */
10
10
  export declare class BrowserShellFileSystem implements IFileSystem {
11
11
  private readonly filesystem;
12
12
  constructor(filesystem: BrowserFileSystem);
@@ -1 +1 @@
1
- {"version":3,"file":"browser-shell-filesystem.d.ts","sourceRoot":"","sources":["../src/browser-shell-filesystem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAEvF,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,WAAW,EACX,MAAM,EACN,WAAW,EACX,YAAY,EACZ,SAAS,EACV,MAAM,mBAAmB,CAAC;AAE3B,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,wEAAwE;AACxE,qBAAa,sBAAuB,YAAW,WAAW;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,iBAAiB;IAEpD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,IAAI,CAAA;KAAE,GAAG,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAOxG,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAIjD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5D,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAS7D,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAEtC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAanC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1D,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAExC,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAO1D,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAapD,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3E,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAC5D,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAE/C,WAAW,IAAI,MAAM,EAAE;IAcjB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACtD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACnD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACxC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACvC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAKnE,OAAO,CAAC,YAAY;CAGrB"}
1
+ {"version":3,"file":"browser-shell-filesystem.d.ts","sourceRoot":"","sources":["../src/browser-shell-filesystem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAEvF,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,WAAW,EACX,MAAM,EACN,WAAW,EACX,YAAY,EACZ,SAAS,EACV,MAAM,mBAAmB,CAAC;AAE3B,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;CACzB;AAWD,qEAAqE;AACrE,qBAAa,sBAAuB,YAAW,WAAW;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,iBAAiB;IAEpD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,IAAI,CAAA;KAAE,GAAG,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAOxG,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAKjD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5D,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAU7D,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAEtC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBnC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAI1D,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAExC,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAO1D,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAapD,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3E,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAC5D,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAE/C,WAAW,IAAI,MAAM,EAAE;IAcjB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACtD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACnD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACxC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACvC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAKnE,OAAO,CAAC,YAAY;CAGrB"}
@@ -1,4 +1,12 @@
1
- /** Live just-bash adapter over the same AlmostNode VFS used by WALI. */
1
+ /**
2
+ * just-bash seeds `/dev/null` as an ordinary empty file; a device discards
3
+ * what is written to it and reads as empty, so `> /dev/null` does not keep
4
+ * the text for the next `< /dev/null`.
5
+ */
6
+ function isNullDevice(path) {
7
+ return path.replace(/\/+/gu, "/").replace(/\/$/u, "") === "/dev/null";
8
+ }
9
+ /** Live just-bash adapter over the same Tabnode VFS used by WALI. */
2
10
  export class BrowserShellFileSystem {
3
11
  filesystem;
4
12
  constructor(filesystem) {
@@ -6,27 +14,36 @@ export class BrowserShellFileSystem {
6
14
  }
7
15
  async readFile(path, options) {
8
16
  const encoding = typeof options === "string" ? options : options?.encoding;
9
- const bytes = this.filesystem.readFileSync(path);
17
+ const bytes = await this.readFileBuffer(path);
10
18
  if (encoding === "binary" || encoding === "latin1")
11
19
  return binaryString(bytes);
12
20
  return new TextDecoder().decode(bytes);
13
21
  }
14
22
  async readFileBuffer(path) {
15
- return this.filesystem.readFileSync(path);
23
+ if (isNullDevice(path))
24
+ return new Uint8Array();
25
+ return this.filesystem.readFile(path);
16
26
  }
17
27
  async writeFile(path, content) {
28
+ if (isNullDevice(path))
29
+ return;
18
30
  this.filesystem.writeFileSync(path, content);
19
31
  }
20
32
  async appendFile(path, content) {
21
- const previous = this.filesystem.existsSync(path) ? this.filesystem.readFileSync(path) : new Uint8Array();
33
+ if (isNullDevice(path))
34
+ return;
35
+ const previous = this.filesystem.existsSync(path) ? await this.filesystem.readFile(path) : new Uint8Array();
22
36
  const next = typeof content === "string" ? new TextEncoder().encode(content) : content;
23
37
  const combined = new Uint8Array(previous.byteLength + next.byteLength);
24
38
  combined.set(previous);
25
39
  combined.set(next, previous.byteLength);
26
40
  this.filesystem.writeFileSync(path, combined);
27
41
  }
28
- async exists(path) { return this.filesystem.existsSync(path); }
42
+ async exists(path) { return isNullDevice(path) || this.filesystem.existsSync(path); }
29
43
  async stat(path) {
44
+ if (isNullDevice(path) && !this.filesystem.existsSync(path)) {
45
+ return { isFile: true, isDirectory: false, isSymbolicLink: false, mode: 0o666, size: 0, mtime: new Date(0) };
46
+ }
30
47
  const value = this.filesystem.statSync(path);
31
48
  const executablePackageBin = value.isFile() && path.includes("/node_modules/.bin/");
32
49
  return {
@@ -68,7 +85,7 @@ export class BrowserShellFileSystem {
68
85
  async cp(source, destination, options) {
69
86
  const value = this.filesystem.statSync(source);
70
87
  if (!value.isDirectory()) {
71
- this.filesystem.writeFileSync(destination, this.filesystem.readFileSync(source));
88
+ this.filesystem.writeFileSync(destination, await this.filesystem.readFile(source));
72
89
  return;
73
90
  }
74
91
  if (!options?.recursive)
@@ -102,7 +119,8 @@ export class BrowserShellFileSystem {
102
119
  async link(_source, _path) { throw new Error("Hard links are not supported."); }
103
120
  async readlink(_path) { throw new Error("Symbolic links are not supported."); }
104
121
  async lstat(path) { return this.stat(path); }
105
- async realpath(path) { this.assertExists(path); return normalize(path); }
122
+ async realpath(path) { if (!isNullDevice(path))
123
+ this.assertExists(path); return normalize(path); }
106
124
  async utimes(path, atime, mtime) {
107
125
  this.assertExists(path);
108
126
  this.filesystem.utimesSync(path, atime, mtime);
@@ -1 +1 @@
1
- {"version":3,"file":"browser-shell-filesystem.js","sourceRoot":"","sources":["../src/browser-shell-filesystem.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser-shell-filesystem.js","sourceRoot":"","sources":["../src/browser-shell-filesystem.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,17 @@
1
+ import "./shell-buffer-global.js";
1
2
  import type { BrowserFileSystem } from "@volter/browser-runtime/browser-filesystem.js";
3
+ import type { BrowserCommandResolver, BrowserProcessTerminal } from "@volter/browser-runtime/browser-process.js";
4
+ import { type BrowserProcessBackendCapabilities, type BrowserProcessFilesystemPolicy } from "@volter/browser-runtime/browser-process-filesystem-policy.js";
2
5
  export interface BrowserShellRunOptions {
3
6
  cwd?: string;
7
+ filesystemPolicy?: BrowserProcessFilesystemPolicy;
4
8
  env?: Readonly<Record<string, string>>;
5
9
  stdin?: string;
6
10
  signal?: AbortSignal;
7
11
  onStdout?: (data: string) => void;
8
12
  onStderr?: (data: string) => void;
13
+ /** The terminal a line runs on, where it runs on one. */
14
+ terminal?: BrowserProcessTerminal;
9
15
  }
10
16
  export interface BrowserShellResult {
11
17
  stdout: string;
@@ -15,24 +21,67 @@ export interface BrowserShellResult {
15
21
  env?: Readonly<Record<string, string>>;
16
22
  }
17
23
  export type BrowserShellProgramRunner = (argv: readonly string[], options: BrowserShellRunOptions) => Promise<BrowserShellResult>;
24
+ /** A process of the container, as the runtime's process table holds it. */
25
+ export interface BrowserShellProcess {
26
+ readonly pid: number;
27
+ readonly state: string;
28
+ kill(reason?: unknown): void;
29
+ }
18
30
  /** AST Bash, standard toolbelt, and a small persistent browser job table. */
19
31
  export declare class BrowserShell {
20
- private readonly bash;
32
+ private readonly commands;
21
33
  private readonly virtualFilesystem;
22
34
  private readonly filesystem;
23
35
  private readonly jobs;
24
36
  private readonly registeredPrograms;
37
+ private readonly programBindings;
38
+ private readonly confinedShells;
39
+ readonly capabilities: Readonly<{
40
+ filesystemPolicy: true;
41
+ }>;
25
42
  private readonly streamingRuns;
43
+ private readonly resolvers;
26
44
  private nextPid;
27
- constructor(filesystem: BrowserFileSystem);
28
- registerProgram(name: string, runner: BrowserShellProgramRunner): void;
45
+ /** `$!`: the job this shell last started; each command runs in a fresh interpreter, so the shell carries it. */
46
+ private lastBackgroundPid;
47
+ /**
48
+ * The container's processes, as Docker's `top` lists them: `kill` reaches
49
+ * a pid there that is not one of this shell's jobs, as a machine's kill
50
+ * reaches any process of its user. A confined shell has none.
51
+ */
52
+ private processTable?;
53
+ private readonly fixedPolicy;
54
+ constructor(filesystem: BrowserFileSystem, policy?: BrowserProcessFilesystemPolicy);
55
+ private createBash;
56
+ private registerCommand;
57
+ /**
58
+ * A word of a command line that no program claims may still be a command
59
+ * where it is typed, one a lane's ecosystem installed into a directory tree.
60
+ * Each resolver is asked with that directory; the first answer is registered
61
+ * as a program, whose runner resolves again at every call.
62
+ */
63
+ registerCommandResolver(resolver: BrowserCommandResolver): void;
64
+ private resolveUnknownCommands;
65
+ registerProgram(name: string, runner: BrowserShellProgramRunner, capabilities?: BrowserProcessBackendCapabilities): void;
29
66
  run(command: string, options?: BrowserShellRunOptions): Promise<BrowserShellResult>;
30
67
  terminate(): void;
31
68
  private ensureRuntimeDirectories;
32
69
  private changeDirectory;
33
70
  private runForeground;
34
71
  private startBackground;
72
+ /** Gives `kill` the container's processes (the runtime's table). */
73
+ setProcessTable(table: () => readonly BrowserShellProcess[]): void;
35
74
  private registerJobCommands;
36
75
  private registerShellExecutables;
37
76
  }
77
+ /**
78
+ * What a program receives from the shell. just-bash exports its own
79
+ * parameters beside the user's variables: `?`, `$`, `!` and IFS, whose default
80
+ * value is a newline. No process could receive those as environment
81
+ * variables, and the WALI engine refuses an environment it cannot write to
82
+ * its env file, so a script's spawn of any native program failed with
83
+ * "Invalid WALI environment entry: IFS". Keep what an environment can carry:
84
+ * identifier names, values without NUL or a line break.
85
+ */
86
+ export declare function programEnvironment(exported: Readonly<Record<string, string>> | undefined): Record<string, string>;
38
87
  //# sourceMappingURL=browser-shell.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser-shell.d.ts","sourceRoot":"","sources":["../src/browser-shell.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAMvF,MAAM,WAAW,sBAAsB;IACrC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACxC;AAED,MAAM,MAAM,yBAAyB,GAAG,CACtC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,sBAAsB,KAC5B,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAWjC,6EAA6E;AAC7E,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAO;IAC5B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IACtD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyB;IACpD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiC;IACtD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IACxD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsD;IACpF,OAAO,CAAC,OAAO,CAAQ;gBAEX,UAAU,EAAE,iBAAiB;IAmBzC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,yBAAyB,GAAG,IAAI;IA4BhE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA4B7F,SAAS,IAAI,IAAI;IAKjB,OAAO,CAAC,wBAAwB;YAKlB,eAAe;YA2Bf,aAAa;IAoB3B,OAAO,CAAC,eAAe;IA0CvB,OAAO,CAAC,mBAAmB;IAgC3B,OAAO,CAAC,wBAAwB;CA0BjC"}
1
+ {"version":3,"file":"browser-shell.d.ts","sourceRoot":"","sources":["../src/browser-shell.ts"],"names":[],"mappings":"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"}