@volter/browser-wali 0.1.10 → 0.1.12

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 (113) hide show
  1. package/dist/bulk-memory.d.ts +23 -0
  2. package/dist/bulk-memory.d.ts.map +1 -0
  3. package/dist/bulk-memory.js +50 -0
  4. package/dist/bulk-memory.js.map +1 -0
  5. package/dist/coherent-file-locks.d.ts +4 -1
  6. package/dist/coherent-file-locks.d.ts.map +1 -1
  7. package/dist/coherent-file-locks.js +24 -1
  8. package/dist/coherent-file-locks.js.map +1 -1
  9. package/dist/descriptors.d.ts +18 -1
  10. package/dist/descriptors.d.ts.map +1 -1
  11. package/dist/descriptors.js +51 -6
  12. package/dist/descriptors.js.map +1 -1
  13. package/dist/filesystem-host.d.ts +81 -0
  14. package/dist/filesystem-host.d.ts.map +1 -0
  15. package/dist/filesystem-host.js +849 -0
  16. package/dist/filesystem-host.js.map +1 -0
  17. package/dist/filesystem-protocol.d.ts +49 -1
  18. package/dist/filesystem-protocol.d.ts.map +1 -1
  19. package/dist/filesystem-protocol.js +17 -0
  20. package/dist/filesystem-protocol.js.map +1 -1
  21. package/dist/filesystem-remote.d.ts +72 -18
  22. package/dist/filesystem-remote.d.ts.map +1 -1
  23. package/dist/filesystem-remote.js +271 -40
  24. package/dist/filesystem-remote.js.map +1 -1
  25. package/dist/filesystem-worker.js +8 -502
  26. package/dist/filesystem-worker.js.map +1 -1
  27. package/dist/filesystem.d.ts +9 -0
  28. package/dist/filesystem.d.ts.map +1 -1
  29. package/dist/filesystem.js +209 -61
  30. package/dist/filesystem.js.map +1 -1
  31. package/dist/host-idle.d.ts +29 -0
  32. package/dist/host-idle.d.ts.map +1 -0
  33. package/dist/host-idle.js +68 -0
  34. package/dist/host-idle.js.map +1 -0
  35. package/dist/host.d.ts +1 -0
  36. package/dist/host.d.ts.map +1 -1
  37. package/dist/host.js +1 -3
  38. package/dist/host.js.map +1 -1
  39. package/dist/memory.d.ts.map +1 -1
  40. package/dist/memory.js +79 -18
  41. package/dist/memory.js.map +1 -1
  42. package/dist/module-layout.d.ts +6 -0
  43. package/dist/module-layout.d.ts.map +1 -1
  44. package/dist/module-layout.js +26 -3
  45. package/dist/module-layout.js.map +1 -1
  46. package/dist/monotonic-clock.d.ts +9 -0
  47. package/dist/monotonic-clock.d.ts.map +1 -1
  48. package/dist/monotonic-clock.js +11 -0
  49. package/dist/monotonic-clock.js.map +1 -1
  50. package/dist/network-worker.js +7 -2
  51. package/dist/network-worker.js.map +1 -1
  52. package/dist/network.d.ts.map +1 -1
  53. package/dist/network.js +11 -8
  54. package/dist/network.js.map +1 -1
  55. package/dist/process-bridge.d.ts.map +1 -1
  56. package/dist/process-bridge.js +25 -5
  57. package/dist/process-bridge.js.map +1 -1
  58. package/dist/program.d.ts +5 -1
  59. package/dist/program.d.ts.map +1 -1
  60. package/dist/program.js +13 -12
  61. package/dist/program.js.map +1 -1
  62. package/dist/runtime.d.ts.map +1 -1
  63. package/dist/runtime.js +75 -9
  64. package/dist/runtime.js.map +1 -1
  65. package/dist/shared-file-layer.d.ts +69 -0
  66. package/dist/shared-file-layer.d.ts.map +1 -0
  67. package/dist/shared-file-layer.js +299 -0
  68. package/dist/shared-file-layer.js.map +1 -0
  69. package/dist/shared-pipes.d.ts +7 -0
  70. package/dist/shared-pipes.d.ts.map +1 -1
  71. package/dist/shared-pipes.js +56 -17
  72. package/dist/shared-pipes.js.map +1 -1
  73. package/dist/signals.d.ts +2 -0
  74. package/dist/signals.d.ts.map +1 -1
  75. package/dist/signals.js +5 -1
  76. package/dist/signals.js.map +1 -1
  77. package/dist/snapshot-filesystem.d.ts +36 -3
  78. package/dist/snapshot-filesystem.d.ts.map +1 -1
  79. package/dist/snapshot-filesystem.js +204 -19
  80. package/dist/snapshot-filesystem.js.map +1 -1
  81. package/dist/stdin.d.ts.map +1 -1
  82. package/dist/stdin.js +3 -2
  83. package/dist/stdin.js.map +1 -1
  84. package/dist/symlink.d.ts.map +1 -1
  85. package/dist/symlink.js +91 -1
  86. package/dist/symlink.js.map +1 -1
  87. package/dist/system.d.ts.map +1 -1
  88. package/dist/system.js +17 -6
  89. package/dist/system.js.map +1 -1
  90. package/dist/thread-coordinator-worker.d.ts +1 -25
  91. package/dist/thread-coordinator-worker.d.ts.map +1 -1
  92. package/dist/thread-coordinator-worker.js +29 -2
  93. package/dist/thread-coordinator-worker.js.map +1 -1
  94. package/dist/thread-worker.js +13 -8
  95. package/dist/thread-worker.js.map +1 -1
  96. package/dist/threads.d.ts +4 -0
  97. package/dist/threads.d.ts.map +1 -1
  98. package/dist/threads.js +72 -43
  99. package/dist/threads.js.map +1 -1
  100. package/dist/types.d.ts +10 -0
  101. package/dist/types.d.ts.map +1 -1
  102. package/dist/websocket-peer.d.ts.map +1 -1
  103. package/dist/websocket-peer.js +2 -1
  104. package/dist/websocket-peer.js.map +1 -1
  105. package/dist/worker-program-protocol.d.ts +26 -0
  106. package/dist/worker-program-protocol.d.ts.map +1 -1
  107. package/dist/worker-program-worker.js +26 -8
  108. package/dist/worker-program-worker.js.map +1 -1
  109. package/dist/worker-program.d.ts +43 -0
  110. package/dist/worker-program.d.ts.map +1 -1
  111. package/dist/worker-program.js +198 -24
  112. package/dist/worker-program.js.map +1 -1
  113. package/package.json +1 -1
@@ -1,509 +1,15 @@
1
- import { openPackReader } from "@volter/browser-runtime/browser-pack-store.js";
2
- import { SnapshotWaliFileSystem } from "./snapshot-filesystem.js";
3
- import { WaliSharedPipeHost } from "./shared-pipes.js";
4
- import { WaliDescriptionRegistry, WaliProcessDescriptorTable } from "./descriptors.js";
5
- import { WaliFileDescriptorTable } from "./filesystem.js";
6
- import { applyProcessFilesystemPatch, createProcessFilesystemPatch } from "./process-bridge.js";
7
- import { BrowserFileLockClient } from "@volter/browser-runtime/browser-file-locks.js";
8
- import { BrowserFileCoherenceClient } from "@volter/browser-runtime/browser-file-coherence.js";
9
- import { WaliCoherentFileLockClient } from "./coherent-file-locks.js";
10
- import { encodeBase64, decodeBase64 } from "@volter/browser-runtime/browser-base64.js";
11
- import { currentEntry } from "@volter/browser-runtime/browser-process-filesystem.js";
12
- import { FILESYSTEM_SNAPSHOT_CHUNK_BYTES, FilesystemOperation, } from "./filesystem-protocol.js";
1
+ /**
2
+ * The filesystem worker: a threaded program's filesystem host in a realm of
3
+ * its own (`filesystem-host.ts`), for a program whose main thread cannot hold
4
+ * it (ADR-0046, point 4).
5
+ */
6
+ import { attachChannel, initializeHost } from "./filesystem-host.js";
13
7
  const scope = globalThis;
14
- let filesystem = new SnapshotWaliFileSystem();
15
- let store;
16
- let descriptors;
17
- let sharedPipes;
18
- let rootMemory;
19
- const processes = new Map();
20
- let nextProcess = 1;
21
- let finalizeUpdates;
22
- let prepareSpawn;
23
- let importPeerPatch;
24
- const encoder = new TextEncoder();
25
- const decoder = new TextDecoder();
26
8
  scope.onmessage = (event) => {
27
9
  if (event.data.kind === "initialize") {
28
- void initialize(event.data);
10
+ initializeHost(event.data).then(() => scope.postMessage({ kind: "ready" }), (error) => scope.postMessage({ kind: "error", message: error instanceof Error ? error.message : String(error) }));
29
11
  return;
30
12
  }
31
- attach(event.data);
13
+ attachChannel(event.data);
32
14
  };
33
- async function initialize(data) {
34
- const event = { data };
35
- try {
36
- finalizeUpdates = undefined;
37
- prepareSpawn = undefined;
38
- if (data.store) {
39
- // The tree is read from the project's store, one file as the program opens it.
40
- store = await openPackReader({ navigator: scope.navigator }, data.store.projectId);
41
- if (!store)
42
- throw new Error("The project's store is not there to read.");
43
- filesystem = SnapshotWaliFileSystem.fromStore(store, data.snapshot);
44
- }
45
- else {
46
- filesystem = SnapshotWaliFileSystem.fromSnapshot(data.snapshot);
47
- }
48
- importPeerPatch = (patch, base) => applyProcessFilesystemPatch(filesystem, patch, base);
49
- const lockClient = event.data.fileLocks
50
- ? new BrowserFileLockClient(event.data.fileLocks.channel) : undefined;
51
- sharedPipes = data.sharedPipes;
52
- rootMemory = data.memory;
53
- descriptors = new WaliFileDescriptorTable({
54
- ...(sharedPipes ? { descriptors: new WaliProcessDescriptorTable(new WaliDescriptionRegistry(sharedPipes.descriptions), sharedPipes.table) } : {}),
55
- filesystem,
56
- ...(data.filesystemPolicy ? { filesystemPolicy: data.filesystemPolicy } : {}),
57
- cwd: event.data.cwd,
58
- stdin: new Uint8Array(),
59
- executablePath: event.data.executablePath,
60
- memory: () => event.data.memory,
61
- emit: () => -9n,
62
- descriptorMaximum: 19_999,
63
- pid: event.data.pid,
64
- ...(lockClient && event.data.fileLocks ? {
65
- fileLocks: event.data.fileCoherence
66
- ? new WaliCoherentFileLockClient(lockClient, new BrowserFileCoherenceClient(event.data.fileCoherence), filesystem)
67
- : lockClient,
68
- lockOwner: event.data.fileLocks.owner,
69
- } : {}),
70
- });
71
- if (event.data.updatePort) {
72
- let updateTimer;
73
- const updatePort = event.data.updatePort;
74
- updatePort.start();
75
- const locallyChangedPaths = new Set();
76
- /**
77
- * THE PATHS THAT CHANGED, never a diff of two whole trees.
78
- *
79
- * This flush used to snapshot the entire filesystem twice and diff it,
80
- * to publish the two small files a directory-channel round trip writes.
81
- * The cost was proportional to everything the guest had EVER written,
82
- * so it grew with the session: measured 2026-09-19 against Blender's
83
- * real staged tree, 1.3 ms on a fresh session and ~1,500 ms forty-one
84
- * calls in, three times per host round trip. That WAS the WALI channel
85
- * floor. `takeChangedPaths()` states the same fact in the size of the
86
- * change instead of the size of the history.
87
- */
88
- const flushUpdates = () => {
89
- if (updateTimer)
90
- clearTimeout(updateTimer);
91
- updateTimer = undefined;
92
- const paths = filesystem.takeChangedPaths();
93
- if (paths.size === 0)
94
- return;
95
- for (const path of paths)
96
- locallyChangedPaths.add(path);
97
- const files = [];
98
- const removed = [];
99
- for (const path of paths) {
100
- const entry = filesystem.writtenEntry(path);
101
- if (entry)
102
- files.push(entry);
103
- else
104
- removed.push(path);
105
- }
106
- if (files.length > 0 || removed.length > 0) {
107
- updatePort.postMessage({ type: "filesystem", patch: { files, removed } });
108
- unacknowledged = true;
109
- }
110
- };
111
- // Patches posted since the page last acknowledged a checkpoint. With
112
- // none, the page has committed every write and a checkpoint proves
113
- // nothing, so the call returns at once: a process's output asks this
114
- // before each write (`WaliSharedFileDescriptorHost`), not only a spawn.
115
- let unacknowledged = false;
116
- prepareSpawn = () => {
117
- flushUpdates();
118
- if (!unacknowledged)
119
- return;
120
- // Spawn and output use other MessagePorts. Acknowledgement on the
121
- // ordered update channel proves the page committed these writes first.
122
- const control = new Int32Array(new SharedArrayBuffer(4));
123
- updatePort.postMessage({ type: "checkpoint", control: control.buffer });
124
- Atomics.wait(control, 0, 0, 30_000);
125
- if (Atomics.load(control, 0) !== 1)
126
- throw new Error("WALI filesystem spawn checkpoint failed.");
127
- unacknowledged = false;
128
- };
129
- let importing = false;
130
- let finalized = false;
131
- finalizeUpdates = () => {
132
- if (finalized)
133
- return;
134
- flushUpdates();
135
- finalized = true;
136
- // All guest mutations precede this marker on the same channel.
137
- // Imports arriving after the cutoff remain the host's own state.
138
- updatePort.postMessage({ type: "finalized" });
139
- };
140
- importPeerPatch = (patch, base) => {
141
- if (finalized)
142
- throw new Error("The WALI filesystem is finalized.");
143
- // Child waits and page imports use the same atomic peer path. Replaying
144
- // them as per-file writes changes timestamps and echoes peer changes.
145
- flushUpdates();
146
- importing = true;
147
- try {
148
- // Opening the shared store can observe a newer file than the page's
149
- // snapshot. That cached state is not a competing guest write. For
150
- // untouched paths the host update is authoritative; paths changed
151
- // by the guest retain the supplied base and its conflict checks.
152
- let expected = base;
153
- if (base) {
154
- const entries = new Map(base.files.map(entry => [entry.path, entry]));
155
- for (const path of [...patch.files.map(entry => entry.path), ...patch.removed]) {
156
- if (locallyChangedPaths.has(path))
157
- continue;
158
- const entry = currentEntry(filesystem, path);
159
- if (entry)
160
- entries.set(path, entry);
161
- else
162
- entries.delete(path);
163
- }
164
- expected = { files: [...entries.values()] };
165
- }
166
- applyProcessFilesystemPatch(filesystem, patch, expected);
167
- // THE PEER'S OWN CHANGES ARE NOT NEWS TO THE PEER. Applying the
168
- // patch marked every path in it; draining without publishing is
169
- // what stops this channel echoing the page's writes back at it.
170
- filesystem.takeChangedPaths();
171
- updatePort.postMessage({ type: "imported", patch });
172
- }
173
- finally {
174
- importing = false;
175
- }
176
- };
177
- updatePort.onmessage = (event) => {
178
- if (event.data.type !== "import" || finalized)
179
- return;
180
- try {
181
- importPeerPatch(event.data.patch, event.data.base);
182
- }
183
- catch (error) {
184
- updatePort.postMessage({ type: "import-error", message: error instanceof Error ? error.message : String(error) });
185
- }
186
- };
187
- // ONE TASK, NOT A WINDOW. `takeChangedPaths` made a flush cost the size
188
- // of the change rather than the size of the session's history, so this
189
- // wait stopped being a batching window and became pure answer latency:
190
- // it was 100 ms, and `print(1)` through the editor's door measured
191
- // 230 ms against the standalone skew's 51.
192
- //
193
- // IT WAS NOT SAFE TO DROP UNTIL THE CHANNEL HAD ONE WRITER, and that is
194
- // why this is a comment and not a bare zero. At one-task cadence the
195
- // directory channel used to die on `assertPatchBase` -- "write conflict
196
- // at /work/.vgai-session/out/<n>.done" -- because the page's poll loop
197
- // unlinked four files in the GUEST's own directory after every answer
198
- // and `pending.filesystemBase` does not carry those deletions until the
199
- // guest acknowledges an import that may be queued behind another. The
200
- // 100 ms only made that window almost always empty (call 1 of 10
201
- // survived at 0 ms). The fix was the protocol's, not this line's: the
202
- // session owns `out/` and `ask/`, the page owns `in/` and `reply/`, and
203
- // no path is named by patches from both sides, so the window has
204
- // nothing left to lose. `setTimeout(_, 0)` still coalesces everything a
205
- // single guest syscall batch mutates.
206
- filesystem.setMutationHandler(() => {
207
- if (!importing && !finalized)
208
- updateTimer ??= setTimeout(flushUpdates, 0);
209
- });
210
- }
211
- scope.postMessage({ kind: "ready" });
212
- }
213
- catch (error) {
214
- scope.postMessage({ kind: "error", message: error instanceof Error ? error.message : String(error) });
215
- }
216
- }
217
- function attach(channel) {
218
- const control = new Int32Array(channel.control);
219
- const payload = new Uint8Array(channel.payload);
220
- const state = { process: channel.process ?? 0 };
221
- if (channel.releasePort) {
222
- const port = channel.releasePort;
223
- port.onmessage = () => {
224
- processes.get(state.process)?.descriptors.descriptors.exit();
225
- processes.delete(state.process);
226
- port.postMessage(true);
227
- port.close();
228
- };
229
- port.start();
230
- }
231
- if (state.process !== 0 && channel.sharedPipes) {
232
- const table = processes.get(state.process).descriptors.descriptors;
233
- table.sharedEntries = new Int32Array(channel.sharedPipes.table);
234
- table.entries.forEach((entry, fd) => { if (entry)
235
- Atomics.store(table.sharedEntries, fd, entry.description); });
236
- }
237
- channel.port.onmessage = (event) => {
238
- if (typeof event.data !== "number" && "kind" in event.data) {
239
- attach({ ...event.data, process: event.data.process ?? state.process });
240
- return;
241
- }
242
- if (typeof event.data !== "number") {
243
- const process = processes.get(state.process);
244
- if (!process)
245
- throw new Error("Unknown inherited descriptor table");
246
- process.memory = event.data.memory;
247
- return;
248
- }
249
- void dispatch(control, payload, state, event.data);
250
- };
251
- channel.port.start();
252
- }
253
- async function dispatch(control, payload, state, requestId) {
254
- if (Atomics.load(control, 0) !== requestId)
255
- return;
256
- let result = -38;
257
- let output = new Uint8Array();
258
- try {
259
- const operation = Atomics.load(control, 1);
260
- const inputLength = Atomics.load(control, 3);
261
- const input = inputLength > 0
262
- ? JSON.parse(decoder.decode(payload.slice(0, inputLength)))
263
- : {};
264
- const response = await operate(operation, input, state);
265
- output = response === undefined ? new Uint8Array() : encoder.encode(JSON.stringify(response));
266
- result = 0;
267
- }
268
- catch (error) {
269
- result = negativeErrno(error);
270
- }
271
- if (output.byteLength > payload.byteLength) {
272
- result = -90;
273
- output = new Uint8Array();
274
- }
275
- // A timed-out caller may already have retired this generation and begun a
276
- // later request. Never let a stale completion overwrite its response.
277
- if (Atomics.compareExchange(control, 0, requestId, -requestId) !== requestId)
278
- return;
279
- if (output.byteLength > 0)
280
- payload.set(output);
281
- Atomics.store(control, 2, result);
282
- Atomics.store(control, 4, output.byteLength);
283
- Atomics.store(control, 0, requestId + 1);
284
- Atomics.notify(control, 0);
285
- }
286
- function rootDescriptors() { return descriptors; }
287
- async function operate(operation, input, state) {
288
- const descriptors = state.process === 0 ? rootDescriptors() : processes.get(state.process)?.descriptors;
289
- if (operation === FilesystemOperation.GetCwd)
290
- return descriptors?.currentWorkingDirectory();
291
- if (operation === FilesystemOperation.CopyForExec || operation === FilesystemOperation.CopyForFork) {
292
- if (!descriptors)
293
- throw new Error("Missing parent descriptor table");
294
- const process = {
295
- descriptors: descriptors[operation === FilesystemOperation.CopyForFork ? "copyForFork" : "copyForExec"](() => {
296
- if (!process.memory)
297
- throw new Error("Child memory is not attached");
298
- return process.memory;
299
- }, Array.isArray(input.stdio) ? input.stdio.map(requiredNumber) : undefined),
300
- };
301
- const id = nextProcess++;
302
- processes.set(id, process);
303
- return { process: id };
304
- }
305
- if (operation === FilesystemOperation.CloseProcess) {
306
- descriptors?.descriptors.exit();
307
- if (state.process !== 0)
308
- processes.delete(state.process);
309
- return;
310
- }
311
- const path = () => requiredString(input.path);
312
- if (operation === FilesystemOperation.PrepareSpawn) {
313
- prepareSpawn?.();
314
- return;
315
- }
316
- if (operation === FilesystemOperation.ImportPeerPatch) {
317
- importPeerPatch(input.patch);
318
- return;
319
- }
320
- if (operation === FilesystemOperation.Exists)
321
- return filesystem.existsSync(path());
322
- if (operation === FilesystemOperation.Stat || operation === FilesystemOperation.Lstat) {
323
- const stat = operation === FilesystemOperation.Lstat ? filesystem.lstatSync(path()) : filesystem.statSync(path());
324
- return {
325
- file: stat.isFile(), directory: stat.isDirectory(), symbolicLink: stat.isSymbolicLink?.(),
326
- size: stat.size, mode: stat.mode,
327
- mtimeMs: stat.mtimeMs, atimeMs: stat.atimeMs, ctimeMs: stat.ctimeMs, nlink: stat.nlink,
328
- uid: stat.uid, gid: stat.gid, dev: stat.dev, ino: stat.ino, rdev: stat.rdev,
329
- blksize: stat.blksize, blocks: stat.blocks,
330
- };
331
- }
332
- if (operation === FilesystemOperation.ReadFile)
333
- return { content: encodeBase64(filesystem.readFileSync(path())) };
334
- if (operation === FilesystemOperation.WriteFile) {
335
- filesystem.writeFileSync(path(), decodeBase64(requiredString(input.content)));
336
- return;
337
- }
338
- if (operation === FilesystemOperation.ReadRange) {
339
- const offset = requiredNumber(input.offset);
340
- const length = requiredNumber(input.length);
341
- const bytes = filesystem.readRangeSync
342
- ? filesystem.readRangeSync(path(), offset, length)
343
- : filesystem.readFileSync(path()).subarray(offset, offset + length);
344
- return { content: encodeBase64(bytes) };
345
- }
346
- if (operation === FilesystemOperation.WriteRange) {
347
- const offset = requiredNumber(input.offset);
348
- const bytes = decodeBase64(requiredString(input.content));
349
- if (filesystem.writeRangeSync)
350
- filesystem.writeRangeSync(path(), offset, bytes);
351
- else {
352
- const current = filesystem.existsSync(path()) ? filesystem.readFileSync(path()) : new Uint8Array();
353
- const next = new Uint8Array(Math.max(current.byteLength, offset + bytes.byteLength));
354
- next.set(current);
355
- next.set(bytes, offset);
356
- filesystem.writeFileSync(path(), next);
357
- }
358
- return;
359
- }
360
- if (operation === FilesystemOperation.Mkdir) {
361
- filesystem.mkdirSync(path(), { recursive: input.recursive === true });
362
- return;
363
- }
364
- if (operation === FilesystemOperation.Readdir)
365
- return filesystem.readdirSync(path());
366
- if (operation === FilesystemOperation.Unlink) {
367
- filesystem.unlinkSync(path());
368
- return;
369
- }
370
- if (operation === FilesystemOperation.Rmdir) {
371
- filesystem.rmdirSync(path());
372
- return;
373
- }
374
- if (operation === FilesystemOperation.Rename) {
375
- filesystem.renameSync(requiredString(input.from), requiredString(input.to));
376
- return;
377
- }
378
- if (operation === FilesystemOperation.Snapshot)
379
- return filesystem.toSnapshot();
380
- if (operation === FilesystemOperation.SnapshotSize || operation === FilesystemOperation.FinalSnapshotSize) {
381
- if (operation === FilesystemOperation.FinalSnapshotSize)
382
- finalizeUpdates?.();
383
- state.snapshot = encoder.encode(JSON.stringify(filesystem.toSnapshot()));
384
- return { length: state.snapshot.byteLength };
385
- }
386
- if (operation === FilesystemOperation.SnapshotChunk) {
387
- const offset = requiredNumber(input.offset);
388
- const length = requiredNumber(input.length);
389
- if (!state.snapshot || offset < 0 || length < 0 || length > FILESYSTEM_SNAPSHOT_CHUNK_BYTES
390
- || offset + length > state.snapshot.byteLength) {
391
- throw Object.assign(new Error("EINVAL"), { code: "EINVAL" });
392
- }
393
- const content = encodeBase64(state.snapshot.subarray(offset, offset + length));
394
- if (offset + length === state.snapshot.byteLength)
395
- delete state.snapshot;
396
- return { content };
397
- }
398
- if (operation === FilesystemOperation.ReplaceSnapshot) {
399
- filesystem.replaceSnapshot(input.snapshot);
400
- return;
401
- }
402
- if (operation === FilesystemOperation.ReplaceSnapshotStart || operation === FilesystemOperation.ImportPeerPatchStart) {
403
- const length = requiredNumber(input.length);
404
- if (length <= 0 || length > 256 * 1024 * 1024) {
405
- throw Object.assign(new Error("EINVAL"), { code: "EINVAL" });
406
- }
407
- state.replacement = { bytes: new Uint8Array(length), offset: 0, peerPatch: operation === FilesystemOperation.ImportPeerPatchStart };
408
- return;
409
- }
410
- if (operation === FilesystemOperation.ReplaceSnapshotChunk || operation === FilesystemOperation.ImportPeerPatchChunk) {
411
- const offset = requiredNumber(input.offset);
412
- const chunk = decodeBase64(requiredString(input.content));
413
- const replacement = state.replacement;
414
- if (!replacement || replacement.peerPatch !== (operation === FilesystemOperation.ImportPeerPatchChunk)
415
- || offset !== replacement.offset || chunk.byteLength > FILESYSTEM_SNAPSHOT_CHUNK_BYTES
416
- || offset + chunk.byteLength > replacement.bytes.byteLength) {
417
- throw Object.assign(new Error("EINVAL"), { code: "EINVAL" });
418
- }
419
- replacement.bytes.set(chunk, offset);
420
- replacement.offset += chunk.byteLength;
421
- if (replacement.offset === replacement.bytes.byteLength) {
422
- delete state.replacement;
423
- const value = JSON.parse(decoder.decode(replacement.bytes));
424
- if (replacement.peerPatch)
425
- importPeerPatch(value);
426
- else
427
- filesystem.replaceSnapshot(value);
428
- }
429
- return;
430
- }
431
- if (operation === FilesystemOperation.Syscall) {
432
- if (!descriptors)
433
- throw Object.assign(new Error("EIO"), { code: "EIO" });
434
- const name = requiredString(input.name);
435
- const table = descriptors.descriptors;
436
- const pipeHost = sharedPipes && new WaliSharedPipeHost(() => state.process === 0 ? rootMemory : processes.get(state.process).memory, { ...sharedPipes, table: table.sharedEntries.buffer }, table);
437
- const handler = (pipeHost ? pipeHost.imports(descriptors.imports()) : descriptors.imports())[name];
438
- if (!handler)
439
- throw Object.assign(new Error("ENOSYS"), { code: "ENOSYS" });
440
- const args = Array.isArray(input.args) ? input.args.map((value) => BigInt(requiredString(value))) : [];
441
- return { result: String(await invokeSyscall(name, handler, args)) };
442
- }
443
- if (operation === FilesystemOperation.ReadForMapping) {
444
- if (!descriptors)
445
- throw Object.assign(new Error("EIO"), { code: "EIO" });
446
- const value = descriptors.readForMapping(requiredNumber(input.fd), requiredNumber(input.offset), requiredNumber(input.length));
447
- return value ? { content: encodeBase64(value) } : {};
448
- }
449
- if (operation === FilesystemOperation.MappingPath) {
450
- if (!descriptors)
451
- throw Object.assign(new Error("EIO"), { code: "EIO" });
452
- const value = descriptors.mappingPath(requiredNumber(input.fd));
453
- return value ? { path: value } : {};
454
- }
455
- if (operation === FilesystemOperation.WriteForMapping) {
456
- if (!descriptors)
457
- throw Object.assign(new Error("EIO"), { code: "EIO" });
458
- return { written: descriptors.writeForMapping(requiredString(input.path), requiredNumber(input.offset), decodeBase64(requiredString(input.content))) };
459
- }
460
- throw Object.assign(new Error("ENOSYS"), { code: "ENOSYS" });
461
- }
462
- async function invokeSyscall(name, handler, args) {
463
- let nonblockingArgs;
464
- if (name === "SYS_flock") {
465
- const operation = Number(args[1] ?? 0);
466
- if ((operation & 4) === 0 && (operation & 8) === 0) {
467
- nonblockingArgs = [...args];
468
- nonblockingArgs[1] = BigInt(operation | 4);
469
- }
470
- }
471
- else if (name === "SYS_fcntl") {
472
- const command = Number(args[1] ?? 0);
473
- if (command === 7 || command === 38) {
474
- nonblockingArgs = [...args];
475
- nonblockingArgs[1] = BigInt(command === 7 ? 6 : 37);
476
- }
477
- }
478
- if (!nonblockingArgs)
479
- return handler(...args) ?? 0;
480
- for (;;) {
481
- const result = handler(...nonblockingArgs) ?? 0;
482
- if (BigInt(result) !== -11n)
483
- return result;
484
- // A blocking advisory lock must not block this worker: it owns the shared
485
- // descriptor table for every pthread, including the holder that must
486
- // write and unlock the file. Yield between nonblocking attempts so those
487
- // syscalls can make progress on their own per-thread RPC channels.
488
- await new Promise((resolve) => setTimeout(resolve, 5));
489
- }
490
- }
491
- function requiredString(value) {
492
- if (typeof value !== "string")
493
- throw Object.assign(new Error("EINVAL"), { code: "EINVAL" });
494
- return value;
495
- }
496
- function requiredNumber(value) {
497
- if (typeof value !== "number" || !Number.isSafeInteger(value))
498
- throw Object.assign(new Error("EINVAL"), { code: "EINVAL" });
499
- return value;
500
- }
501
- function negativeErrno(error) {
502
- const message = error instanceof Error ? error.message : String(error);
503
- const name = typeof error === "object" && error !== null && "code" in error ? String(error.code)
504
- : /\b(E[A-Z]+)\b/u.exec(message)?.[1] ?? "EIO";
505
- return -({ ENOENT: 2, EBADF: 9, EACCES: 13, EEXIST: 17, ENOTDIR: 20, EISDIR: 21,
506
- EINVAL: 22, EMFILE: 24, ENOSPC: 28, ESPIPE: 29, ERANGE: 34, ENOSYS: 38,
507
- ENOTEMPTY: 39, EMSGSIZE: 90 }[name] ?? 5);
508
- }
509
15
  //# sourceMappingURL=filesystem-worker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"filesystem-worker.js","sourceRoot":"","sources":["../src/filesystem-worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"filesystem-worker.js","sourceRoot":"","sources":["../src/filesystem-worker.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAQrE,MAAM,KAAK,GAAG,UAAyB,CAAC;AAExC,KAAK,CAAC,SAAS,GAAG,CAAC,KAAK,EAAQ,EAAE;IAChC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QACrC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAC7B,GAAG,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAC1C,CAAC,KAAc,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAC1H,CAAC;QACF,OAAO;IACT,CAAC;IACD,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC,CAAC"}
@@ -47,12 +47,17 @@ export declare class WaliFileDescriptorTable {
47
47
  private readonly guestFilesystem;
48
48
  private readonly assertWritable;
49
49
  constructor(options: WaliFileDescriptorOptions);
50
+ /** Whether this table holds `fd` as an open file or directory of its own: no pipe, socket, special or stdio stream. */
51
+ ownsFile(fd: number): boolean;
50
52
  imports(): Record<string, WaliImportHandler>;
51
53
  writeEnvironmentFile(env: Readonly<Record<string, string>>, pid: number): string | undefined;
52
54
  copyCString(pointer: number, value: string, limit: number): number;
53
55
  readForMapping(fd: number, offset: number, length: number): Uint8Array | undefined;
54
56
  mappingPath(fd: number): string | undefined;
55
57
  writeForMapping(path: string, offset: number, value: Uint8Array): boolean;
58
+ /** `fd` marked close-on-exec when `flags` carry O_CLOEXEC (open's and dup3's flags); `fd` returned. */
59
+ private markCloseOnExecNumber;
60
+ private markCloseOnExec;
56
61
  allocateSpecial(descriptor: WaliSpecialDescriptor, minimum?: number): number;
57
62
  exportBrowserProcessPipe(fd: number): BrowserProcessPipeHandle | undefined;
58
63
  copyForFork(memory: () => WebAssembly.Memory): WaliFileDescriptorTable;
@@ -61,8 +66,12 @@ export declare class WaliFileDescriptorTable {
61
66
  ioctl(fd: number, request: number): bigint | undefined;
62
67
  pollDescriptor(fd: number, events: number): number;
63
68
  private fs;
69
+ private viewedBuffer;
70
+ private viewedBytes;
71
+ private viewedData;
64
72
  private memoryBytes;
65
73
  private memoryView;
74
+ private viewMemory;
66
75
  private copyOut;
67
76
  private copyIn;
68
77
  private readCString;
@@ -1 +1 @@
1
- {"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../src/filesystem.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../src/filesystem.ts"],"names":[],"mappings":"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"}