@volter/browser-wali 0.1.0
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/LICENSE +21 -0
- package/README.md +20 -0
- package/dist/browser-wali-command.d.ts +22 -0
- package/dist/browser-wali-command.d.ts.map +1 -0
- package/dist/browser-wali-command.js +44 -0
- package/dist/browser-wali-command.js.map +1 -0
- package/dist/capabilities.d.ts +3 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +23 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/coherent-file-locks.d.ts +23 -0
- package/dist/coherent-file-locks.d.ts.map +1 -0
- package/dist/coherent-file-locks.js +134 -0
- package/dist/coherent-file-locks.js.map +1 -0
- package/dist/events.d.ts +30 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +289 -0
- package/dist/events.js.map +1 -0
- package/dist/filesystem-protocol.d.ts +48 -0
- package/dist/filesystem-protocol.d.ts.map +1 -0
- package/dist/filesystem-protocol.js +27 -0
- package/dist/filesystem-protocol.js.map +1 -0
- package/dist/filesystem-remote.d.ts +65 -0
- package/dist/filesystem-remote.d.ts.map +1 -0
- package/dist/filesystem-remote.js +271 -0
- package/dist/filesystem-remote.js.map +1 -0
- package/dist/filesystem-worker.d.ts +2 -0
- package/dist/filesystem-worker.d.ts.map +1 -0
- package/dist/filesystem-worker.js +269 -0
- package/dist/filesystem-worker.js.map +1 -0
- package/dist/filesystem.d.ts +115 -0
- package/dist/filesystem.d.ts.map +1 -0
- package/dist/filesystem.js +1179 -0
- package/dist/filesystem.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/inspect.d.ts +7 -0
- package/dist/inspect.d.ts.map +1 -0
- package/dist/inspect.js +32 -0
- package/dist/inspect.js.map +1 -0
- package/dist/local-sockets.d.ts +13 -0
- package/dist/local-sockets.d.ts.map +1 -0
- package/dist/local-sockets.js +139 -0
- package/dist/local-sockets.js.map +1 -0
- package/dist/loopback-host.d.ts +14 -0
- package/dist/loopback-host.d.ts.map +1 -0
- package/dist/loopback-host.js +476 -0
- package/dist/loopback-host.js.map +1 -0
- package/dist/loopback-protocol.d.ts +41 -0
- package/dist/loopback-protocol.d.ts.map +1 -0
- package/dist/loopback-protocol.js +2 -0
- package/dist/loopback-protocol.js.map +1 -0
- package/dist/memory.d.ts +39 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +520 -0
- package/dist/memory.js.map +1 -0
- package/dist/module-layout.d.ts +9 -0
- package/dist/module-layout.d.ts.map +1 -0
- package/dist/module-layout.js +105 -0
- package/dist/module-layout.js.map +1 -0
- package/dist/network-protocol.d.ts +43 -0
- package/dist/network-protocol.d.ts.map +1 -0
- package/dist/network-protocol.js +26 -0
- package/dist/network-protocol.js.map +1 -0
- package/dist/network-worker.d.ts +2 -0
- package/dist/network-worker.d.ts.map +1 -0
- package/dist/network-worker.js +943 -0
- package/dist/network-worker.js.map +1 -0
- package/dist/network.d.ts +52 -0
- package/dist/network.d.ts.map +1 -0
- package/dist/network.js +427 -0
- package/dist/network.js.map +1 -0
- package/dist/process-adapter.d.ts +14 -0
- package/dist/process-adapter.d.ts.map +1 -0
- package/dist/process-adapter.js +45 -0
- package/dist/process-adapter.js.map +1 -0
- package/dist/process-bridge.d.ts +54 -0
- package/dist/process-bridge.d.ts.map +1 -0
- package/dist/process-bridge.js +150 -0
- package/dist/process-bridge.js.map +1 -0
- package/dist/program.d.ts +49 -0
- package/dist/program.d.ts.map +1 -0
- package/dist/program.js +204 -0
- package/dist/program.js.map +1 -0
- package/dist/runtime.d.ts +9 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +528 -0
- package/dist/runtime.js.map +1 -0
- package/dist/shared-pipes.d.ts +44 -0
- package/dist/shared-pipes.d.ts.map +1 -0
- package/dist/shared-pipes.js +306 -0
- package/dist/shared-pipes.js.map +1 -0
- package/dist/snapshot-filesystem.d.ts +31 -0
- package/dist/snapshot-filesystem.d.ts.map +1 -0
- package/dist/snapshot-filesystem.js +247 -0
- package/dist/snapshot-filesystem.js.map +1 -0
- package/dist/stdin.d.ts +36 -0
- package/dist/stdin.d.ts.map +1 -0
- package/dist/stdin.js +143 -0
- package/dist/stdin.js.map +1 -0
- package/dist/symlink.d.ts +8 -0
- package/dist/symlink.d.ts.map +1 -0
- package/dist/symlink.js +66 -0
- package/dist/symlink.js.map +1 -0
- package/dist/system.d.ts +41 -0
- package/dist/system.d.ts.map +1 -0
- package/dist/system.js +305 -0
- package/dist/system.js.map +1 -0
- package/dist/thread-coordinator-worker.d.ts +25 -0
- package/dist/thread-coordinator-worker.d.ts.map +1 -0
- package/dist/thread-coordinator-worker.js +49 -0
- package/dist/thread-coordinator-worker.js.map +1 -0
- package/dist/thread-worker.d.ts +2 -0
- package/dist/thread-worker.d.ts.map +1 -0
- package/dist/thread-worker.js +725 -0
- package/dist/thread-worker.js.map +1 -0
- package/dist/threads.d.ts +44 -0
- package/dist/threads.d.ts.map +1 -0
- package/dist/threads.js +154 -0
- package/dist/threads.js.map +1 -0
- package/dist/types.d.ts +112 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/websocket-peer.d.ts +38 -0
- package/dist/websocket-peer.d.ts.map +1 -0
- package/dist/websocket-peer.js +407 -0
- package/dist/websocket-peer.js.map +1 -0
- package/dist/worker-program-protocol.d.ts +71 -0
- package/dist/worker-program-protocol.d.ts.map +1 -0
- package/dist/worker-program-protocol.js +2 -0
- package/dist/worker-program-protocol.js.map +1 -0
- package/dist/worker-program-worker.d.ts +2 -0
- package/dist/worker-program-worker.d.ts.map +1 -0
- package/dist/worker-program-worker.js +109 -0
- package/dist/worker-program-worker.js.map +1 -0
- package/dist/worker-program.d.ts +58 -0
- package/dist/worker-program.d.ts.map +1 -0
- package/dist/worker-program.js +425 -0
- package/dist/worker-program.js.map +1 -0
- package/package.json +23 -0
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
import { FILESYSTEM_ROOT_PAYLOAD_BYTES, FILESYSTEM_SNAPSHOT_CHUNK_BYTES, FilesystemOperation, } from "./filesystem-protocol.js";
|
|
2
|
+
export class WaliFilesystemClient {
|
|
3
|
+
channel;
|
|
4
|
+
control;
|
|
5
|
+
payload;
|
|
6
|
+
encoder = new TextEncoder();
|
|
7
|
+
decoder = new TextDecoder();
|
|
8
|
+
nextRequestId = 1;
|
|
9
|
+
constructor(channel) {
|
|
10
|
+
this.channel = channel;
|
|
11
|
+
this.control = new Int32Array(channel.control);
|
|
12
|
+
this.payload = new Uint8Array(channel.payload);
|
|
13
|
+
}
|
|
14
|
+
existsSync(path) { return this.call(FilesystemOperation.Exists, { path }); }
|
|
15
|
+
statSync(path) { return hydrateStat(this.call(FilesystemOperation.Stat, { path })); }
|
|
16
|
+
lstatSync(path) { return hydrateStat(this.call(FilesystemOperation.Lstat, { path })); }
|
|
17
|
+
readFileSync(path) {
|
|
18
|
+
return decodeBase64(this.call(FilesystemOperation.ReadFile, { path }).content);
|
|
19
|
+
}
|
|
20
|
+
writeFileSync(path, data) {
|
|
21
|
+
const bytes = typeof data === "string" ? this.encoder.encode(data) : data;
|
|
22
|
+
this.call(FilesystemOperation.WriteFile, { path, content: encodeBase64(bytes) });
|
|
23
|
+
}
|
|
24
|
+
mkdirSync(path, options) {
|
|
25
|
+
this.call(FilesystemOperation.Mkdir, { path, recursive: options?.recursive === true });
|
|
26
|
+
}
|
|
27
|
+
readdirSync(path) { return this.call(FilesystemOperation.Readdir, { path }); }
|
|
28
|
+
unlinkSync(path) { this.call(FilesystemOperation.Unlink, { path }); }
|
|
29
|
+
rmdirSync(path) { this.call(FilesystemOperation.Rmdir, { path }); }
|
|
30
|
+
renameSync(from, to) { this.call(FilesystemOperation.Rename, { from, to }); }
|
|
31
|
+
toSnapshot() {
|
|
32
|
+
return JSON.parse(this.decoder.decode(this.readChunked(FilesystemOperation.SnapshotSize)));
|
|
33
|
+
}
|
|
34
|
+
readChunked(sizeOperation) {
|
|
35
|
+
const { length } = this.call(sizeOperation);
|
|
36
|
+
if (!Number.isSafeInteger(length) || length < 0)
|
|
37
|
+
throw remoteError(-5);
|
|
38
|
+
const encoded = new Uint8Array(length);
|
|
39
|
+
for (let offset = 0; offset < length; offset += FILESYSTEM_SNAPSHOT_CHUNK_BYTES) {
|
|
40
|
+
const expected = Math.min(FILESYSTEM_SNAPSHOT_CHUNK_BYTES, length - offset);
|
|
41
|
+
const { content } = this.call(FilesystemOperation.SnapshotChunk, {
|
|
42
|
+
offset,
|
|
43
|
+
length: expected,
|
|
44
|
+
});
|
|
45
|
+
const chunk = decodeBase64(content);
|
|
46
|
+
if (chunk.byteLength !== expected)
|
|
47
|
+
throw remoteError(-5);
|
|
48
|
+
encoded.set(chunk, offset);
|
|
49
|
+
}
|
|
50
|
+
return encoded;
|
|
51
|
+
}
|
|
52
|
+
replaceSnapshot(snapshot) {
|
|
53
|
+
const encoded = this.encoder.encode(JSON.stringify(snapshot));
|
|
54
|
+
this.call(FilesystemOperation.ReplaceSnapshotStart, { length: encoded.byteLength });
|
|
55
|
+
for (let offset = 0; offset < encoded.byteLength; offset += FILESYSTEM_SNAPSHOT_CHUNK_BYTES) {
|
|
56
|
+
const chunk = encoded.subarray(offset, offset + FILESYSTEM_SNAPSHOT_CHUNK_BYTES);
|
|
57
|
+
this.call(FilesystemOperation.ReplaceSnapshotChunk, {
|
|
58
|
+
offset,
|
|
59
|
+
content: encodeBase64(chunk),
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
syscall(name, args) {
|
|
64
|
+
const result = this.call(FilesystemOperation.Syscall, {
|
|
65
|
+
name,
|
|
66
|
+
args: args.map((value) => String(value)),
|
|
67
|
+
}, isBlockingFileLock(name, args) ? null : 30_000);
|
|
68
|
+
return BigInt(result.result);
|
|
69
|
+
}
|
|
70
|
+
readForMapping(fd, offset, length) {
|
|
71
|
+
const result = this.call(FilesystemOperation.ReadForMapping, { fd, offset, length });
|
|
72
|
+
return result.content === undefined ? undefined : decodeBase64(result.content);
|
|
73
|
+
}
|
|
74
|
+
mappingPath(fd) {
|
|
75
|
+
return this.call(FilesystemOperation.MappingPath, { fd }).path;
|
|
76
|
+
}
|
|
77
|
+
writeForMapping(path, offset, value) {
|
|
78
|
+
return this.call(FilesystemOperation.WriteForMapping, {
|
|
79
|
+
path, offset, content: encodeBase64(value),
|
|
80
|
+
}).written;
|
|
81
|
+
}
|
|
82
|
+
call(operation, input = {}, timeoutMs = 30_000) {
|
|
83
|
+
const encoded = this.encoder.encode(JSON.stringify(input));
|
|
84
|
+
if (encoded.byteLength > this.payload.byteLength)
|
|
85
|
+
throw remoteError(-90);
|
|
86
|
+
if (Atomics.load(this.control, 0) !== 0)
|
|
87
|
+
throw new Error("Concurrent WALI filesystem RPC on one channel.");
|
|
88
|
+
const requestId = this.nextRequestId;
|
|
89
|
+
this.nextRequestId = requestId >= 0x3fff_fffd ? 1 : requestId + 2;
|
|
90
|
+
this.control.fill(0);
|
|
91
|
+
this.payload.set(encoded);
|
|
92
|
+
Atomics.store(this.control, 1, operation);
|
|
93
|
+
Atomics.store(this.control, 3, encoded.byteLength);
|
|
94
|
+
Atomics.store(this.control, 0, requestId);
|
|
95
|
+
this.channel.port.postMessage(requestId);
|
|
96
|
+
const deadline = timeoutMs === null ? undefined : Date.now() + timeoutMs;
|
|
97
|
+
for (;;) {
|
|
98
|
+
const state = Atomics.load(this.control, 0);
|
|
99
|
+
if (state === requestId + 1)
|
|
100
|
+
break;
|
|
101
|
+
if (state !== requestId && state !== -requestId) {
|
|
102
|
+
throw new Error(`Invalid WALI filesystem RPC state ${state} for request ${requestId}.`);
|
|
103
|
+
}
|
|
104
|
+
const remaining = deadline === undefined ? undefined : Math.max(0, deadline - Date.now());
|
|
105
|
+
if (remaining === 0 && state === requestId
|
|
106
|
+
&& Atomics.compareExchange(this.control, 0, requestId, 0) === requestId) {
|
|
107
|
+
throw remoteError(-110);
|
|
108
|
+
}
|
|
109
|
+
Atomics.wait(this.control, 0, state, state === -requestId ? undefined : remaining);
|
|
110
|
+
}
|
|
111
|
+
const result = Atomics.load(this.control, 2);
|
|
112
|
+
const outputLength = Atomics.load(this.control, 4);
|
|
113
|
+
const output = outputLength > 0
|
|
114
|
+
? JSON.parse(this.decoder.decode(this.payload.slice(0, outputLength)))
|
|
115
|
+
: undefined;
|
|
116
|
+
Atomics.store(this.control, 0, 0);
|
|
117
|
+
if (result < 0)
|
|
118
|
+
throw remoteError(result);
|
|
119
|
+
return output;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
function isBlockingFileLock(name, args) {
|
|
123
|
+
if (name === "SYS_flock") {
|
|
124
|
+
const operation = Number(args[1] ?? 0);
|
|
125
|
+
return (operation & 4) === 0 && (operation & 8) === 0;
|
|
126
|
+
}
|
|
127
|
+
if (name !== "SYS_fcntl")
|
|
128
|
+
return false;
|
|
129
|
+
const command = Number(args[1] ?? 0);
|
|
130
|
+
return command === 7 || command === 38;
|
|
131
|
+
}
|
|
132
|
+
export class WaliFilesystemCoordinator {
|
|
133
|
+
worker;
|
|
134
|
+
root;
|
|
135
|
+
constructor(worker, root) {
|
|
136
|
+
this.worker = worker;
|
|
137
|
+
this.root = root;
|
|
138
|
+
}
|
|
139
|
+
static async create(snapshot, options) {
|
|
140
|
+
const worker = new Worker(new URL("./filesystem-worker.js", import.meta.url), {
|
|
141
|
+
type: "module", name: "wali-filesystem",
|
|
142
|
+
});
|
|
143
|
+
await new Promise((resolve, reject) => {
|
|
144
|
+
const onMessage = (event) => {
|
|
145
|
+
if (event.data.kind === "ready") {
|
|
146
|
+
worker.removeEventListener("message", onMessage);
|
|
147
|
+
resolve();
|
|
148
|
+
}
|
|
149
|
+
if (event.data.kind === "error") {
|
|
150
|
+
worker.removeEventListener("message", onMessage);
|
|
151
|
+
reject(new Error(event.data.message));
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
worker.addEventListener("message", onMessage);
|
|
155
|
+
worker.addEventListener("error", (event) => reject(event.error ?? new Error(event.message)), { once: true });
|
|
156
|
+
const transfers = [
|
|
157
|
+
...(options.updatePort ? [options.updatePort] : []),
|
|
158
|
+
...(options.fileLocks ? [options.fileLocks.channel.port] : []),
|
|
159
|
+
...(options.fileCoherence ? [options.fileCoherence.port] : []),
|
|
160
|
+
];
|
|
161
|
+
worker.postMessage({ kind: "initialize", snapshot, ...options }, transfers);
|
|
162
|
+
});
|
|
163
|
+
const rootChannel = createChannel(FILESYSTEM_ROOT_PAYLOAD_BYTES);
|
|
164
|
+
worker.postMessage({ kind: "attach", ...rootChannel.server }, [rootChannel.server.port]);
|
|
165
|
+
return new WaliFilesystemCoordinator(worker, new WaliFilesystemClient(rootChannel.client));
|
|
166
|
+
}
|
|
167
|
+
createChannel(payloadBytes) {
|
|
168
|
+
const channel = createChannel(payloadBytes);
|
|
169
|
+
this.worker.postMessage({ kind: "attach", ...channel.server }, [channel.server.port]);
|
|
170
|
+
return channel.client;
|
|
171
|
+
}
|
|
172
|
+
filesystem() { return this.root; }
|
|
173
|
+
snapshot() { return this.root.toSnapshot(); }
|
|
174
|
+
replaceSnapshot(snapshot) { this.root.replaceSnapshot(snapshot); }
|
|
175
|
+
terminate() { this.worker.terminate(); }
|
|
176
|
+
}
|
|
177
|
+
const SHARED_FILE_FD_LIMIT = 10_000;
|
|
178
|
+
const PATH_SYSCALLS = new Set([
|
|
179
|
+
"SYS_open", "SYS_openat", "SYS_stat", "SYS_lstat", "SYS_newfstatat", "SYS_access",
|
|
180
|
+
"SYS_faccessat", "SYS_faccessat2", "SYS_chmod", "SYS_fchmodat", "SYS_chdir", "SYS_getcwd",
|
|
181
|
+
"SYS_mkdir", "SYS_mkdirat", "SYS_statfs", "SYS_rmdir", "SYS_unlink", "SYS_unlinkat",
|
|
182
|
+
"SYS_rename", "SYS_utimensat", "SYS_symlink", "SYS_symlinkat", "SYS_readlink", "SYS_readlinkat",
|
|
183
|
+
"SYS_inotify_init", "SYS_inotify_init1",
|
|
184
|
+
]);
|
|
185
|
+
const FD_SYSCALLS = new Set([
|
|
186
|
+
"SYS_close", "SYS_read", "SYS_pread64", "SYS_write", "SYS_pwrite64", "SYS_readv", "SYS_writev",
|
|
187
|
+
"SYS_lseek", "SYS_fstat", "SYS_fchmod", "SYS_fchdir", "SYS_fstatfs", "SYS_inotify_add_watch",
|
|
188
|
+
"SYS_inotify_rm_watch", "SYS_dup", "SYS_dup2", "SYS_dup3", "SYS_fcntl", "SYS_getdents64",
|
|
189
|
+
"SYS_fsync", "SYS_fdatasync", "SYS_flock", "SYS_ftruncate",
|
|
190
|
+
]);
|
|
191
|
+
/** Process-wide ordinary file descriptors shared by every Wasm pthread. */
|
|
192
|
+
export class WaliSharedFileDescriptorHost {
|
|
193
|
+
client;
|
|
194
|
+
stdioAliasRegistry;
|
|
195
|
+
constructor(client, stdioAliasRegistry) {
|
|
196
|
+
this.client = client;
|
|
197
|
+
this.stdioAliasRegistry = stdioAliasRegistry;
|
|
198
|
+
}
|
|
199
|
+
imports(fallback) {
|
|
200
|
+
const imports = {};
|
|
201
|
+
for (const name of PATH_SYSCALLS) {
|
|
202
|
+
imports[name] = (...args) => this.client.syscall(name, args);
|
|
203
|
+
}
|
|
204
|
+
for (const name of FD_SYSCALLS) {
|
|
205
|
+
imports[name] = (...args) => {
|
|
206
|
+
const fd = Number(args[0]);
|
|
207
|
+
const alias = this.stdioAliasRegistry && fd >= 0 && fd < this.stdioAliasRegistry.length
|
|
208
|
+
? Atomics.load(this.stdioAliasRegistry, fd)
|
|
209
|
+
: -1;
|
|
210
|
+
if (fd < 3 || fd >= SHARED_FILE_FD_LIMIT || alias === 0 || alias === 1 || alias === 2) {
|
|
211
|
+
return fallback[name]?.(...args) ?? -9n;
|
|
212
|
+
}
|
|
213
|
+
return this.client.syscall(name, args);
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
return { ...fallback, ...imports };
|
|
217
|
+
}
|
|
218
|
+
readForMapping(fd, offset, length) {
|
|
219
|
+
if (fd < 3 || fd >= SHARED_FILE_FD_LIMIT)
|
|
220
|
+
return;
|
|
221
|
+
return this.client.readForMapping(fd, offset, length);
|
|
222
|
+
}
|
|
223
|
+
mappingPath(fd) {
|
|
224
|
+
if (fd < 3 || fd >= SHARED_FILE_FD_LIMIT)
|
|
225
|
+
return;
|
|
226
|
+
return this.client.mappingPath(fd);
|
|
227
|
+
}
|
|
228
|
+
writeForMapping(path, offset, value) {
|
|
229
|
+
return this.client.writeForMapping(path, offset, value);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
function createChannel(payloadBytes) {
|
|
233
|
+
const ports = new MessageChannel();
|
|
234
|
+
const control = new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT * 8);
|
|
235
|
+
const payload = new SharedArrayBuffer(payloadBytes);
|
|
236
|
+
ports.port1.start();
|
|
237
|
+
return {
|
|
238
|
+
client: { port: ports.port1, control, payload },
|
|
239
|
+
server: { port: ports.port2, control, payload },
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
function hydrateStat(stat) {
|
|
243
|
+
return {
|
|
244
|
+
isFile: () => stat.file,
|
|
245
|
+
isDirectory: () => stat.directory,
|
|
246
|
+
isSymbolicLink: () => stat.symbolicLink === true,
|
|
247
|
+
size: stat.size,
|
|
248
|
+
...optional(stat, "mode", "mtimeMs", "atimeMs", "ctimeMs", "nlink", "uid", "gid", "dev", "ino", "rdev", "blksize", "blocks"),
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
function optional(value, ...keys) {
|
|
252
|
+
return Object.fromEntries(keys.flatMap((key) => value[key] === undefined ? [] : [[key, value[key]]]));
|
|
253
|
+
}
|
|
254
|
+
function remoteError(result) {
|
|
255
|
+
const code = { 2: "ENOENT", 9: "EBADF", 13: "EACCES", 17: "EEXIST", 20: "ENOTDIR",
|
|
256
|
+
21: "EISDIR", 22: "EINVAL", 24: "EMFILE", 28: "ENOSPC", 29: "ESPIPE", 34: "ERANGE",
|
|
257
|
+
38: "ENOSYS", 39: "ENOTEMPTY", 90: "EMSGSIZE", 110: "ETIMEDOUT" }[-result] ?? "EIO";
|
|
258
|
+
return Object.assign(new Error(code), { code });
|
|
259
|
+
}
|
|
260
|
+
function encodeBase64(value) {
|
|
261
|
+
let binary = "";
|
|
262
|
+
for (let offset = 0; offset < value.byteLength; offset += 32_768) {
|
|
263
|
+
binary += String.fromCharCode(...value.subarray(offset, offset + 32_768));
|
|
264
|
+
}
|
|
265
|
+
return btoa(binary);
|
|
266
|
+
}
|
|
267
|
+
function decodeBase64(value) {
|
|
268
|
+
const binary = atob(value);
|
|
269
|
+
return Uint8Array.from(binary, (character) => character.charCodeAt(0));
|
|
270
|
+
}
|
|
271
|
+
//# sourceMappingURL=filesystem-remote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem-remote.js","sourceRoot":"","sources":["../src/filesystem-remote.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem-worker.d.ts","sourceRoot":"","sources":["../src/filesystem-worker.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
import { SnapshotWaliFileSystem } from "./snapshot-filesystem.js";
|
|
2
|
+
import { WaliFileDescriptorTable } from "./filesystem.js";
|
|
3
|
+
import { createProcessFilesystemPatch } from "./process-bridge.js";
|
|
4
|
+
import { BrowserFileLockClient } from "@volter/browser-runtime/browser-file-locks.js";
|
|
5
|
+
import { BrowserFileCoherenceClient } from "@volter/browser-runtime/browser-file-coherence.js";
|
|
6
|
+
import { WaliCoherentFileLockClient } from "./coherent-file-locks.js";
|
|
7
|
+
import { FILESYSTEM_SNAPSHOT_CHUNK_BYTES, FilesystemOperation, } from "./filesystem-protocol.js";
|
|
8
|
+
const scope = globalThis;
|
|
9
|
+
let filesystem = new SnapshotWaliFileSystem();
|
|
10
|
+
let descriptors;
|
|
11
|
+
const encoder = new TextEncoder();
|
|
12
|
+
const decoder = new TextDecoder();
|
|
13
|
+
scope.onmessage = (event) => {
|
|
14
|
+
if (event.data.kind === "initialize") {
|
|
15
|
+
filesystem = SnapshotWaliFileSystem.fromSnapshot(event.data.snapshot);
|
|
16
|
+
const lockClient = event.data.fileLocks
|
|
17
|
+
? new BrowserFileLockClient(event.data.fileLocks.channel) : undefined;
|
|
18
|
+
descriptors = new WaliFileDescriptorTable({
|
|
19
|
+
filesystem,
|
|
20
|
+
cwd: event.data.cwd,
|
|
21
|
+
stdin: new Uint8Array(),
|
|
22
|
+
executablePath: event.data.executablePath,
|
|
23
|
+
memory: () => event.data.memory,
|
|
24
|
+
emit: () => -9n,
|
|
25
|
+
descriptorMaximum: 9_999,
|
|
26
|
+
pid: event.data.pid,
|
|
27
|
+
...(lockClient && event.data.fileLocks ? {
|
|
28
|
+
fileLocks: event.data.fileCoherence
|
|
29
|
+
? new WaliCoherentFileLockClient(lockClient, new BrowserFileCoherenceClient(event.data.fileCoherence), filesystem)
|
|
30
|
+
: lockClient,
|
|
31
|
+
lockOwner: event.data.fileLocks.owner,
|
|
32
|
+
} : {}),
|
|
33
|
+
});
|
|
34
|
+
if (event.data.updatePort) {
|
|
35
|
+
let synchronizedSnapshot = filesystem.toSnapshot();
|
|
36
|
+
let updateTimer;
|
|
37
|
+
const updatePort = event.data.updatePort;
|
|
38
|
+
updatePort.start();
|
|
39
|
+
const flushUpdates = () => {
|
|
40
|
+
updateTimer = undefined;
|
|
41
|
+
const nextSnapshot = filesystem.toSnapshot();
|
|
42
|
+
const patch = createProcessFilesystemPatch(synchronizedSnapshot, nextSnapshot);
|
|
43
|
+
synchronizedSnapshot = nextSnapshot;
|
|
44
|
+
if (patch.files.length > 0 || patch.removed.length > 0) {
|
|
45
|
+
updatePort.postMessage({ type: "filesystem", patch });
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
filesystem.setMutationHandler(() => {
|
|
49
|
+
updateTimer ??= setTimeout(flushUpdates, 100);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
scope.postMessage({ kind: "ready" });
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
attach(event.data);
|
|
56
|
+
};
|
|
57
|
+
function attach(channel) {
|
|
58
|
+
const control = new Int32Array(channel.control);
|
|
59
|
+
const payload = new Uint8Array(channel.payload);
|
|
60
|
+
const state = {};
|
|
61
|
+
channel.port.onmessage = (event) => { void dispatch(control, payload, state, event.data); };
|
|
62
|
+
channel.port.start();
|
|
63
|
+
}
|
|
64
|
+
async function dispatch(control, payload, state, requestId) {
|
|
65
|
+
if (Atomics.load(control, 0) !== requestId)
|
|
66
|
+
return;
|
|
67
|
+
let result = -38;
|
|
68
|
+
let output = new Uint8Array();
|
|
69
|
+
try {
|
|
70
|
+
const operation = Atomics.load(control, 1);
|
|
71
|
+
const inputLength = Atomics.load(control, 3);
|
|
72
|
+
const input = inputLength > 0
|
|
73
|
+
? JSON.parse(decoder.decode(payload.slice(0, inputLength)))
|
|
74
|
+
: {};
|
|
75
|
+
const response = await operate(operation, input, state);
|
|
76
|
+
output = response === undefined ? new Uint8Array() : encoder.encode(JSON.stringify(response));
|
|
77
|
+
result = 0;
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
result = negativeErrno(error);
|
|
81
|
+
}
|
|
82
|
+
if (output.byteLength > payload.byteLength) {
|
|
83
|
+
result = -90;
|
|
84
|
+
output = new Uint8Array();
|
|
85
|
+
}
|
|
86
|
+
// A timed-out caller may already have retired this generation and begun a
|
|
87
|
+
// later request. Never let a stale completion overwrite its response.
|
|
88
|
+
if (Atomics.compareExchange(control, 0, requestId, -requestId) !== requestId)
|
|
89
|
+
return;
|
|
90
|
+
if (output.byteLength > 0)
|
|
91
|
+
payload.set(output);
|
|
92
|
+
Atomics.store(control, 2, result);
|
|
93
|
+
Atomics.store(control, 4, output.byteLength);
|
|
94
|
+
Atomics.store(control, 0, requestId + 1);
|
|
95
|
+
Atomics.notify(control, 0);
|
|
96
|
+
}
|
|
97
|
+
async function operate(operation, input, state) {
|
|
98
|
+
const path = () => requiredString(input.path);
|
|
99
|
+
if (operation === FilesystemOperation.Exists)
|
|
100
|
+
return filesystem.existsSync(path());
|
|
101
|
+
if (operation === FilesystemOperation.Stat || operation === FilesystemOperation.Lstat) {
|
|
102
|
+
const stat = operation === FilesystemOperation.Lstat ? filesystem.lstatSync(path()) : filesystem.statSync(path());
|
|
103
|
+
return {
|
|
104
|
+
file: stat.isFile(), directory: stat.isDirectory(), symbolicLink: stat.isSymbolicLink?.(),
|
|
105
|
+
size: stat.size, mode: stat.mode,
|
|
106
|
+
mtimeMs: stat.mtimeMs, atimeMs: stat.atimeMs, ctimeMs: stat.ctimeMs, nlink: stat.nlink,
|
|
107
|
+
uid: stat.uid, gid: stat.gid, dev: stat.dev, ino: stat.ino, rdev: stat.rdev,
|
|
108
|
+
blksize: stat.blksize, blocks: stat.blocks,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
if (operation === FilesystemOperation.ReadFile)
|
|
112
|
+
return { content: encodeBase64(filesystem.readFileSync(path())) };
|
|
113
|
+
if (operation === FilesystemOperation.WriteFile) {
|
|
114
|
+
filesystem.writeFileSync(path(), decodeBase64(requiredString(input.content)));
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
if (operation === FilesystemOperation.Mkdir) {
|
|
118
|
+
filesystem.mkdirSync(path(), { recursive: input.recursive === true });
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
if (operation === FilesystemOperation.Readdir)
|
|
122
|
+
return filesystem.readdirSync(path());
|
|
123
|
+
if (operation === FilesystemOperation.Unlink) {
|
|
124
|
+
filesystem.unlinkSync(path());
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
if (operation === FilesystemOperation.Rmdir) {
|
|
128
|
+
filesystem.rmdirSync(path());
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
if (operation === FilesystemOperation.Rename) {
|
|
132
|
+
filesystem.renameSync(requiredString(input.from), requiredString(input.to));
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
if (operation === FilesystemOperation.Snapshot)
|
|
136
|
+
return filesystem.toSnapshot();
|
|
137
|
+
if (operation === FilesystemOperation.SnapshotSize) {
|
|
138
|
+
state.snapshot = encoder.encode(JSON.stringify(filesystem.toSnapshot()));
|
|
139
|
+
return { length: state.snapshot.byteLength };
|
|
140
|
+
}
|
|
141
|
+
if (operation === FilesystemOperation.SnapshotChunk) {
|
|
142
|
+
const offset = requiredNumber(input.offset);
|
|
143
|
+
const length = requiredNumber(input.length);
|
|
144
|
+
if (!state.snapshot || offset < 0 || length < 0 || length > FILESYSTEM_SNAPSHOT_CHUNK_BYTES
|
|
145
|
+
|| offset + length > state.snapshot.byteLength) {
|
|
146
|
+
throw Object.assign(new Error("EINVAL"), { code: "EINVAL" });
|
|
147
|
+
}
|
|
148
|
+
const content = encodeBase64(state.snapshot.subarray(offset, offset + length));
|
|
149
|
+
if (offset + length === state.snapshot.byteLength)
|
|
150
|
+
delete state.snapshot;
|
|
151
|
+
return { content };
|
|
152
|
+
}
|
|
153
|
+
if (operation === FilesystemOperation.ReplaceSnapshot) {
|
|
154
|
+
filesystem.replaceSnapshot(input.snapshot);
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
if (operation === FilesystemOperation.ReplaceSnapshotStart) {
|
|
158
|
+
const length = requiredNumber(input.length);
|
|
159
|
+
if (length <= 0 || length > 256 * 1024 * 1024) {
|
|
160
|
+
throw Object.assign(new Error("EINVAL"), { code: "EINVAL" });
|
|
161
|
+
}
|
|
162
|
+
state.replacement = { bytes: new Uint8Array(length), offset: 0 };
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
if (operation === FilesystemOperation.ReplaceSnapshotChunk) {
|
|
166
|
+
const offset = requiredNumber(input.offset);
|
|
167
|
+
const chunk = decodeBase64(requiredString(input.content));
|
|
168
|
+
const replacement = state.replacement;
|
|
169
|
+
if (!replacement || offset !== replacement.offset || chunk.byteLength > FILESYSTEM_SNAPSHOT_CHUNK_BYTES
|
|
170
|
+
|| offset + chunk.byteLength > replacement.bytes.byteLength) {
|
|
171
|
+
throw Object.assign(new Error("EINVAL"), { code: "EINVAL" });
|
|
172
|
+
}
|
|
173
|
+
replacement.bytes.set(chunk, offset);
|
|
174
|
+
replacement.offset += chunk.byteLength;
|
|
175
|
+
if (replacement.offset === replacement.bytes.byteLength) {
|
|
176
|
+
const snapshot = JSON.parse(decoder.decode(replacement.bytes));
|
|
177
|
+
filesystem.replaceSnapshot(snapshot);
|
|
178
|
+
delete state.replacement;
|
|
179
|
+
}
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
if (operation === FilesystemOperation.Syscall) {
|
|
183
|
+
if (!descriptors)
|
|
184
|
+
throw Object.assign(new Error("EIO"), { code: "EIO" });
|
|
185
|
+
const name = requiredString(input.name);
|
|
186
|
+
const handler = descriptors.imports()[name];
|
|
187
|
+
if (!handler)
|
|
188
|
+
throw Object.assign(new Error("ENOSYS"), { code: "ENOSYS" });
|
|
189
|
+
const args = Array.isArray(input.args) ? input.args.map((value) => BigInt(requiredString(value))) : [];
|
|
190
|
+
return { result: String(await invokeSyscall(name, handler, args)) };
|
|
191
|
+
}
|
|
192
|
+
if (operation === FilesystemOperation.ReadForMapping) {
|
|
193
|
+
if (!descriptors)
|
|
194
|
+
throw Object.assign(new Error("EIO"), { code: "EIO" });
|
|
195
|
+
const value = descriptors.readForMapping(requiredNumber(input.fd), requiredNumber(input.offset), requiredNumber(input.length));
|
|
196
|
+
return value ? { content: encodeBase64(value) } : {};
|
|
197
|
+
}
|
|
198
|
+
if (operation === FilesystemOperation.MappingPath) {
|
|
199
|
+
if (!descriptors)
|
|
200
|
+
throw Object.assign(new Error("EIO"), { code: "EIO" });
|
|
201
|
+
const value = descriptors.mappingPath(requiredNumber(input.fd));
|
|
202
|
+
return value ? { path: value } : {};
|
|
203
|
+
}
|
|
204
|
+
if (operation === FilesystemOperation.WriteForMapping) {
|
|
205
|
+
if (!descriptors)
|
|
206
|
+
throw Object.assign(new Error("EIO"), { code: "EIO" });
|
|
207
|
+
return { written: descriptors.writeForMapping(requiredString(input.path), requiredNumber(input.offset), decodeBase64(requiredString(input.content))) };
|
|
208
|
+
}
|
|
209
|
+
throw Object.assign(new Error("ENOSYS"), { code: "ENOSYS" });
|
|
210
|
+
}
|
|
211
|
+
async function invokeSyscall(name, handler, args) {
|
|
212
|
+
let nonblockingArgs;
|
|
213
|
+
if (name === "SYS_flock") {
|
|
214
|
+
const operation = Number(args[1] ?? 0);
|
|
215
|
+
if ((operation & 4) === 0 && (operation & 8) === 0) {
|
|
216
|
+
nonblockingArgs = [...args];
|
|
217
|
+
nonblockingArgs[1] = BigInt(operation | 4);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
else if (name === "SYS_fcntl") {
|
|
221
|
+
const command = Number(args[1] ?? 0);
|
|
222
|
+
if (command === 7 || command === 38) {
|
|
223
|
+
nonblockingArgs = [...args];
|
|
224
|
+
nonblockingArgs[1] = BigInt(command === 7 ? 6 : 37);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
if (!nonblockingArgs)
|
|
228
|
+
return handler(...args) ?? 0;
|
|
229
|
+
for (;;) {
|
|
230
|
+
const result = handler(...nonblockingArgs) ?? 0;
|
|
231
|
+
if (BigInt(result) !== -11n)
|
|
232
|
+
return result;
|
|
233
|
+
// A blocking advisory lock must not block this worker: it owns the shared
|
|
234
|
+
// descriptor table for every pthread, including the holder that must
|
|
235
|
+
// write and unlock the file. Yield between nonblocking attempts so those
|
|
236
|
+
// syscalls can make progress on their own per-thread RPC channels.
|
|
237
|
+
await new Promise((resolve) => setTimeout(resolve, 5));
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
function requiredString(value) {
|
|
241
|
+
if (typeof value !== "string")
|
|
242
|
+
throw Object.assign(new Error("EINVAL"), { code: "EINVAL" });
|
|
243
|
+
return value;
|
|
244
|
+
}
|
|
245
|
+
function requiredNumber(value) {
|
|
246
|
+
if (typeof value !== "number" || !Number.isSafeInteger(value))
|
|
247
|
+
throw Object.assign(new Error("EINVAL"), { code: "EINVAL" });
|
|
248
|
+
return value;
|
|
249
|
+
}
|
|
250
|
+
function negativeErrno(error) {
|
|
251
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
252
|
+
const name = typeof error === "object" && error !== null && "code" in error ? String(error.code)
|
|
253
|
+
: /\b(E[A-Z]+)\b/u.exec(message)?.[1] ?? "EIO";
|
|
254
|
+
return -({ ENOENT: 2, EBADF: 9, EACCES: 13, EEXIST: 17, ENOTDIR: 20, EISDIR: 21,
|
|
255
|
+
EINVAL: 22, EMFILE: 24, ENOSPC: 28, ESPIPE: 29, ERANGE: 34, ENOSYS: 38,
|
|
256
|
+
ENOTEMPTY: 39, EMSGSIZE: 90 }[name] ?? 5);
|
|
257
|
+
}
|
|
258
|
+
function encodeBase64(value) {
|
|
259
|
+
let binary = "";
|
|
260
|
+
for (let offset = 0; offset < value.byteLength; offset += 32_768) {
|
|
261
|
+
binary += String.fromCharCode(...value.subarray(offset, offset + 32_768));
|
|
262
|
+
}
|
|
263
|
+
return btoa(binary);
|
|
264
|
+
}
|
|
265
|
+
function decodeBase64(value) {
|
|
266
|
+
const binary = atob(value);
|
|
267
|
+
return Uint8Array.from(binary, (character) => character.charCodeAt(0));
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=filesystem-worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem-worker.js","sourceRoot":"","sources":["../src/filesystem-worker.ts"],"names":[],"mappings":"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"}
|