@volter/browser-wali 0.1.9 → 0.1.11
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/bulk-memory.d.ts +23 -0
- package/dist/bulk-memory.d.ts.map +1 -0
- package/dist/bulk-memory.js +50 -0
- package/dist/bulk-memory.js.map +1 -0
- package/dist/coherent-file-locks.d.ts +4 -1
- package/dist/coherent-file-locks.d.ts.map +1 -1
- package/dist/coherent-file-locks.js +24 -1
- package/dist/coherent-file-locks.js.map +1 -1
- package/dist/descriptors.d.ts +18 -1
- package/dist/descriptors.d.ts.map +1 -1
- package/dist/descriptors.js +51 -6
- package/dist/descriptors.js.map +1 -1
- package/dist/filesystem-host.d.ts +81 -0
- package/dist/filesystem-host.d.ts.map +1 -0
- package/dist/filesystem-host.js +849 -0
- package/dist/filesystem-host.js.map +1 -0
- package/dist/filesystem-protocol.d.ts +49 -1
- package/dist/filesystem-protocol.d.ts.map +1 -1
- package/dist/filesystem-protocol.js +17 -0
- package/dist/filesystem-protocol.js.map +1 -1
- package/dist/filesystem-remote.d.ts +72 -18
- package/dist/filesystem-remote.d.ts.map +1 -1
- package/dist/filesystem-remote.js +271 -40
- package/dist/filesystem-remote.js.map +1 -1
- package/dist/filesystem-worker.js +8 -502
- package/dist/filesystem-worker.js.map +1 -1
- package/dist/filesystem.d.ts +9 -0
- package/dist/filesystem.d.ts.map +1 -1
- package/dist/filesystem.js +209 -61
- package/dist/filesystem.js.map +1 -1
- package/dist/host-idle.d.ts +29 -0
- package/dist/host-idle.d.ts.map +1 -0
- package/dist/host-idle.js +68 -0
- package/dist/host-idle.js.map +1 -0
- package/dist/host.d.ts +1 -0
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +1 -3
- package/dist/host.js.map +1 -1
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +79 -18
- package/dist/memory.js.map +1 -1
- package/dist/module-layout.d.ts +6 -0
- package/dist/module-layout.d.ts.map +1 -1
- package/dist/module-layout.js +26 -3
- package/dist/module-layout.js.map +1 -1
- package/dist/monotonic-clock.d.ts +9 -0
- package/dist/monotonic-clock.d.ts.map +1 -1
- package/dist/monotonic-clock.js +11 -0
- package/dist/monotonic-clock.js.map +1 -1
- package/dist/network-worker.js +7 -2
- package/dist/network-worker.js.map +1 -1
- package/dist/network.d.ts.map +1 -1
- package/dist/network.js +11 -8
- package/dist/network.js.map +1 -1
- package/dist/process-bridge.d.ts.map +1 -1
- package/dist/process-bridge.js +25 -5
- package/dist/process-bridge.js.map +1 -1
- package/dist/program.d.ts +5 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +13 -12
- package/dist/program.js.map +1 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +75 -9
- package/dist/runtime.js.map +1 -1
- package/dist/shared-file-layer.d.ts +69 -0
- package/dist/shared-file-layer.d.ts.map +1 -0
- package/dist/shared-file-layer.js +299 -0
- package/dist/shared-file-layer.js.map +1 -0
- package/dist/shared-pipes.d.ts +7 -0
- package/dist/shared-pipes.d.ts.map +1 -1
- package/dist/shared-pipes.js +56 -17
- package/dist/shared-pipes.js.map +1 -1
- package/dist/signals.d.ts +2 -0
- package/dist/signals.d.ts.map +1 -1
- package/dist/signals.js +5 -1
- package/dist/signals.js.map +1 -1
- package/dist/snapshot-filesystem.d.ts +36 -3
- package/dist/snapshot-filesystem.d.ts.map +1 -1
- package/dist/snapshot-filesystem.js +204 -19
- package/dist/snapshot-filesystem.js.map +1 -1
- package/dist/stdin.d.ts.map +1 -1
- package/dist/stdin.js +3 -2
- package/dist/stdin.js.map +1 -1
- package/dist/symlink.d.ts.map +1 -1
- package/dist/symlink.js +91 -1
- package/dist/symlink.js.map +1 -1
- package/dist/system.d.ts.map +1 -1
- package/dist/system.js +17 -6
- package/dist/system.js.map +1 -1
- package/dist/thread-coordinator-worker.d.ts +1 -25
- package/dist/thread-coordinator-worker.d.ts.map +1 -1
- package/dist/thread-coordinator-worker.js +29 -2
- package/dist/thread-coordinator-worker.js.map +1 -1
- package/dist/thread-worker.js +13 -8
- package/dist/thread-worker.js.map +1 -1
- package/dist/threads.d.ts +4 -0
- package/dist/threads.d.ts.map +1 -1
- package/dist/threads.js +72 -43
- package/dist/threads.js.map +1 -1
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/websocket-peer.d.ts.map +1 -1
- package/dist/websocket-peer.js +2 -1
- package/dist/websocket-peer.js.map +1 -1
- package/dist/worker-program-protocol.d.ts +26 -0
- package/dist/worker-program-protocol.d.ts.map +1 -1
- package/dist/worker-program-worker.js +26 -8
- package/dist/worker-program-worker.js.map +1 -1
- package/dist/worker-program.d.ts +43 -0
- package/dist/worker-program.d.ts.map +1 -1
- package/dist/worker-program.js +198 -24
- package/dist/worker-program.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,509 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import {
|
|
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
|
-
|
|
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
|
-
|
|
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"}
|
package/dist/filesystem.d.ts
CHANGED
|
@@ -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;
|
package/dist/filesystem.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../src/filesystem.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../src/filesystem.ts"],"names":[],"mappings":"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"}
|