@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,306 @@
|
|
|
1
|
+
import { closeSharedPipe, pollSharedPipe, readSharedPipe, retainSharedPipe, writeSharedPipeSync, } from "./process-bridge.js";
|
|
2
|
+
const PIPE_FD_MIN = 10_000;
|
|
3
|
+
const PIPE_FD_MAX = 19_999;
|
|
4
|
+
const PIPE_SLOT_COUNT = 64;
|
|
5
|
+
const PIPE_PAYLOAD_BYTES = 64 * 1024;
|
|
6
|
+
const PIPE_CONTROL_WORDS = 8;
|
|
7
|
+
const PIPE_READER_REFS = 3;
|
|
8
|
+
const PIPE_WRITER_REFS = 4;
|
|
9
|
+
const O_NONBLOCK = 0x800;
|
|
10
|
+
const O_CLOEXEC = 0x8_0000;
|
|
11
|
+
const F_DUPFD = 0;
|
|
12
|
+
const F_GETFD = 1;
|
|
13
|
+
const F_SETFD = 2;
|
|
14
|
+
const F_GETFL = 3;
|
|
15
|
+
const F_SETFL = 4;
|
|
16
|
+
const F_DUPFD_CLOEXEC = 1030;
|
|
17
|
+
const FD_CLOEXEC = 1;
|
|
18
|
+
const S_IFIFO = 0o010000;
|
|
19
|
+
export function createWaliSharedPipeState() {
|
|
20
|
+
return {
|
|
21
|
+
descriptors: new SharedArrayBuffer(65_536 * Int32Array.BYTES_PER_ELEMENT),
|
|
22
|
+
descriptorFlags: new SharedArrayBuffer(65_536 * Int32Array.BYTES_PER_ELEMENT),
|
|
23
|
+
slots: new SharedArrayBuffer(PIPE_SLOT_COUNT * Int32Array.BYTES_PER_ELEMENT),
|
|
24
|
+
controls: new SharedArrayBuffer(PIPE_SLOT_COUNT * PIPE_CONTROL_WORDS * Int32Array.BYTES_PER_ELEMENT),
|
|
25
|
+
payloads: new SharedArrayBuffer(PIPE_SLOT_COUNT * PIPE_PAYLOAD_BYTES),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export function pollWaliSharedPipeState(state, fd, events) {
|
|
29
|
+
if (!Number.isSafeInteger(fd) || fd < 0 || fd >= 65_536)
|
|
30
|
+
return;
|
|
31
|
+
const entry = Atomics.load(new Int32Array(state.descriptors), fd);
|
|
32
|
+
if (entry === 0)
|
|
33
|
+
return;
|
|
34
|
+
const slot = Math.abs(entry) - 1;
|
|
35
|
+
return pollSharedPipe({
|
|
36
|
+
control: state.controls,
|
|
37
|
+
payload: state.payloads,
|
|
38
|
+
role: entry > 0 ? "reader" : "writer",
|
|
39
|
+
controlOffset: slot * PIPE_CONTROL_WORDS * Int32Array.BYTES_PER_ELEMENT,
|
|
40
|
+
payloadOffset: slot * PIPE_PAYLOAD_BYTES,
|
|
41
|
+
payloadLength: PIPE_PAYLOAD_BYTES,
|
|
42
|
+
}, events);
|
|
43
|
+
}
|
|
44
|
+
/** Process-wide anonymous pipes shared by the root Wasm instance and every pthread. */
|
|
45
|
+
export class WaliSharedPipeHost {
|
|
46
|
+
memory;
|
|
47
|
+
state;
|
|
48
|
+
descriptors;
|
|
49
|
+
descriptorFlags;
|
|
50
|
+
slots;
|
|
51
|
+
constructor(memory, state) {
|
|
52
|
+
this.memory = memory;
|
|
53
|
+
this.state = state;
|
|
54
|
+
this.descriptors = new Int32Array(state.descriptors);
|
|
55
|
+
this.descriptorFlags = new Int32Array(state.descriptorFlags);
|
|
56
|
+
this.slots = new Int32Array(state.slots);
|
|
57
|
+
}
|
|
58
|
+
isPipeFd(fd) {
|
|
59
|
+
return Number.isSafeInteger(fd) && fd >= 0 && fd < this.descriptors.length
|
|
60
|
+
&& Atomics.load(this.descriptors, fd) !== 0;
|
|
61
|
+
}
|
|
62
|
+
exportBrowserProcessPipe(fd) {
|
|
63
|
+
const entry = this.entry(fd);
|
|
64
|
+
return entry === 0 ? undefined : this.handle(entry);
|
|
65
|
+
}
|
|
66
|
+
pollDescriptor(fd, events) {
|
|
67
|
+
const entry = this.entry(fd);
|
|
68
|
+
return entry === 0 ? undefined : pollSharedPipe(this.handle(entry), events);
|
|
69
|
+
}
|
|
70
|
+
ioctl(fd, request) {
|
|
71
|
+
if (!this.isPipeFd(fd))
|
|
72
|
+
return;
|
|
73
|
+
if (request === 0x5421 || request === 0x5451 || request === 0x5450)
|
|
74
|
+
return 0n;
|
|
75
|
+
return -25n;
|
|
76
|
+
}
|
|
77
|
+
imports(fallback = {}) {
|
|
78
|
+
const delegate = (name, args) => fallback[name]?.(...args) ?? -38n;
|
|
79
|
+
const pipeOr = (fd, pipe, other) => this.isPipeFd(fd) ? pipe() : other();
|
|
80
|
+
return {
|
|
81
|
+
...fallback,
|
|
82
|
+
SYS_pipe: (pointer) => this.pipe(Number(pointer), 0),
|
|
83
|
+
SYS_pipe2: (pointer, flags) => this.pipe(Number(pointer), Number(flags)),
|
|
84
|
+
SYS_close: (fd) => pipeOr(Number(fd), () => this.close(Number(fd)), () => delegate("SYS_close", [fd])),
|
|
85
|
+
SYS_read: (fd, pointer, length) => pipeOr(Number(fd), () => this.read(Number(fd), Number(pointer), Number(length)), () => delegate("SYS_read", [fd, pointer, length])),
|
|
86
|
+
SYS_pread64: (fd, pointer, length, offset) => pipeOr(Number(fd), () => -29n, () => delegate("SYS_pread64", [fd, pointer, length, offset])),
|
|
87
|
+
SYS_write: (fd, pointer, length) => pipeOr(Number(fd), () => this.write(Number(fd), Number(pointer), Number(length)), () => delegate("SYS_write", [fd, pointer, length])),
|
|
88
|
+
SYS_pwrite64: (fd, pointer, length, offset) => pipeOr(Number(fd), () => -29n, () => delegate("SYS_pwrite64", [fd, pointer, length, offset])),
|
|
89
|
+
SYS_readv: (fd, pointer, count) => pipeOr(Number(fd), () => this.readv(Number(fd), Number(pointer), Number(count)), () => delegate("SYS_readv", [fd, pointer, count])),
|
|
90
|
+
SYS_writev: (fd, pointer, count) => pipeOr(Number(fd), () => this.writev(Number(fd), Number(pointer), Number(count)), () => delegate("SYS_writev", [fd, pointer, count])),
|
|
91
|
+
SYS_lseek: (fd, offset, whence) => pipeOr(Number(fd), () => -29n, () => delegate("SYS_lseek", [fd, offset, whence])),
|
|
92
|
+
SYS_fstat: (fd, pointer) => pipeOr(Number(fd), () => this.fstat(Number(pointer)), () => delegate("SYS_fstat", [fd, pointer])),
|
|
93
|
+
SYS_dup: (fd) => pipeOr(Number(fd), () => this.duplicate(Number(fd)), () => delegate("SYS_dup", [fd])),
|
|
94
|
+
SYS_dup2: (fd, target) => pipeOr(Number(fd), () => this.duplicate(Number(fd), Number(target), 3, false, fallback), () => delegate("SYS_dup2", [fd, target])),
|
|
95
|
+
SYS_dup3: (fd, target, flags) => pipeOr(Number(fd), () => Number(fd) === Number(target) || (Number(flags) & ~O_CLOEXEC) !== 0
|
|
96
|
+
? -22n : this.duplicate(Number(fd), Number(target), 3, Boolean(Number(flags) & O_CLOEXEC), fallback), () => delegate("SYS_dup3", [fd, target, flags])),
|
|
97
|
+
SYS_fcntl: (fd, command, argument) => pipeOr(Number(fd), () => this.fcntl(Number(fd), Number(command), Number(BigInt.asIntN(32, BigInt(argument))), fallback), () => delegate("SYS_fcntl", [fd, command, argument])),
|
|
98
|
+
SYS_poll: (pointer, count, timeout) => this.poll(Number(pointer), Number(count), Number(timeout), () => delegate("SYS_poll", [pointer, count, timeout])),
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
pipe(pointer, flags) {
|
|
102
|
+
if ((flags & ~(O_NONBLOCK | O_CLOEXEC)) !== 0)
|
|
103
|
+
return -22n;
|
|
104
|
+
if (!this.validRange(pointer, 8))
|
|
105
|
+
return -14n;
|
|
106
|
+
const slot = this.allocateSlot();
|
|
107
|
+
if (slot < 0)
|
|
108
|
+
return -24n;
|
|
109
|
+
const control = this.control(slot);
|
|
110
|
+
control.fill(0);
|
|
111
|
+
Atomics.store(control, PIPE_READER_REFS, 1);
|
|
112
|
+
Atomics.store(control, PIPE_WRITER_REFS, 1);
|
|
113
|
+
const reader = this.allocateDescriptor(slot + 1);
|
|
114
|
+
const writer = reader >= 0 ? this.allocateDescriptor(-(slot + 1)) : -1;
|
|
115
|
+
if (reader < 0 || writer < 0) {
|
|
116
|
+
if (reader >= 0)
|
|
117
|
+
Atomics.store(this.descriptors, reader, 0);
|
|
118
|
+
Atomics.store(this.slots, slot, 0);
|
|
119
|
+
return -24n;
|
|
120
|
+
}
|
|
121
|
+
Atomics.store(this.descriptorFlags, reader, flags);
|
|
122
|
+
Atomics.store(this.descriptorFlags, writer, flags);
|
|
123
|
+
const view = this.view();
|
|
124
|
+
view.setInt32(pointer, reader, true);
|
|
125
|
+
view.setInt32(pointer + 4, writer, true);
|
|
126
|
+
return 0n;
|
|
127
|
+
}
|
|
128
|
+
read(fd, pointer, length) {
|
|
129
|
+
if (!Number.isSafeInteger(length) || length < 0 || !this.validRange(pointer, length))
|
|
130
|
+
return -22n;
|
|
131
|
+
const value = readSharedPipe(this.handle(this.entry(fd)), length);
|
|
132
|
+
if (typeof value === "bigint")
|
|
133
|
+
return value;
|
|
134
|
+
this.bytes().set(value, pointer);
|
|
135
|
+
return BigInt(value.byteLength);
|
|
136
|
+
}
|
|
137
|
+
write(fd, pointer, length) {
|
|
138
|
+
if (!Number.isSafeInteger(length) || length < 0 || !this.validRange(pointer, length))
|
|
139
|
+
return -22n;
|
|
140
|
+
return writeSharedPipeSync(this.handle(this.entry(fd)), this.bytes().slice(pointer, pointer + length));
|
|
141
|
+
}
|
|
142
|
+
readv(fd, pointer, count) {
|
|
143
|
+
if (!Number.isSafeInteger(count) || count < 0 || count > 1024 || !this.validRange(pointer, count * 8))
|
|
144
|
+
return -22n;
|
|
145
|
+
let total = 0n;
|
|
146
|
+
for (let index = 0; index < count; index += 1) {
|
|
147
|
+
const offset = pointer + index * 8;
|
|
148
|
+
const result = this.read(fd, this.view().getUint32(offset, true), this.view().getUint32(offset + 4, true));
|
|
149
|
+
if (result < 0n)
|
|
150
|
+
return total > 0n ? total : result;
|
|
151
|
+
total += result;
|
|
152
|
+
if (result < BigInt(this.view().getUint32(offset + 4, true)))
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
return total;
|
|
156
|
+
}
|
|
157
|
+
writev(fd, pointer, count) {
|
|
158
|
+
if (!Number.isSafeInteger(count) || count < 0 || count > 1024 || !this.validRange(pointer, count * 8))
|
|
159
|
+
return -22n;
|
|
160
|
+
let total = 0n;
|
|
161
|
+
for (let index = 0; index < count; index += 1) {
|
|
162
|
+
const offset = pointer + index * 8;
|
|
163
|
+
const result = this.write(fd, this.view().getUint32(offset, true), this.view().getUint32(offset + 4, true));
|
|
164
|
+
if (result < 0n)
|
|
165
|
+
return total > 0n ? total : result;
|
|
166
|
+
total += result;
|
|
167
|
+
}
|
|
168
|
+
return total;
|
|
169
|
+
}
|
|
170
|
+
fstat(pointer) {
|
|
171
|
+
if (!this.validRange(pointer, 144))
|
|
172
|
+
return -14n;
|
|
173
|
+
const view = this.view();
|
|
174
|
+
for (let offset = 0; offset < 144; offset += 4)
|
|
175
|
+
view.setUint32(pointer + offset, 0, true);
|
|
176
|
+
view.setBigUint64(pointer + 16, 1n, true);
|
|
177
|
+
view.setUint32(pointer + 24, S_IFIFO | 0o666, true);
|
|
178
|
+
view.setUint32(pointer + 28, 1000, true);
|
|
179
|
+
view.setUint32(pointer + 32, 1000, true);
|
|
180
|
+
view.setBigInt64(pointer + 56, 4096n, true);
|
|
181
|
+
return 0n;
|
|
182
|
+
}
|
|
183
|
+
fcntl(fd, command, argument, fallback) {
|
|
184
|
+
if (command === F_DUPFD || command === F_DUPFD_CLOEXEC) {
|
|
185
|
+
return this.duplicate(fd, undefined, Math.max(3, argument), command === F_DUPFD_CLOEXEC, fallback);
|
|
186
|
+
}
|
|
187
|
+
if (command === F_GETFD)
|
|
188
|
+
return BigInt(Atomics.load(this.descriptorFlags, fd) & O_CLOEXEC ? FD_CLOEXEC : 0);
|
|
189
|
+
if (command === F_SETFD) {
|
|
190
|
+
const current = Atomics.load(this.descriptorFlags, fd);
|
|
191
|
+
Atomics.store(this.descriptorFlags, fd, argument & FD_CLOEXEC ? current | O_CLOEXEC : current & ~O_CLOEXEC);
|
|
192
|
+
return 0n;
|
|
193
|
+
}
|
|
194
|
+
if (command === F_GETFL)
|
|
195
|
+
return BigInt(Atomics.load(this.descriptorFlags, fd) & O_NONBLOCK);
|
|
196
|
+
if (command === F_SETFL) {
|
|
197
|
+
const current = Atomics.load(this.descriptorFlags, fd);
|
|
198
|
+
Atomics.store(this.descriptorFlags, fd, (current & ~O_NONBLOCK) | (argument & O_NONBLOCK));
|
|
199
|
+
return 0n;
|
|
200
|
+
}
|
|
201
|
+
return -22n;
|
|
202
|
+
}
|
|
203
|
+
duplicate(fd, target, minimum = PIPE_FD_MIN, closeOnExec = false, fallback = {}) {
|
|
204
|
+
const entry = this.entry(fd);
|
|
205
|
+
if (entry === 0)
|
|
206
|
+
return -9n;
|
|
207
|
+
if (target === fd)
|
|
208
|
+
return BigInt(fd);
|
|
209
|
+
let next;
|
|
210
|
+
if (target === undefined) {
|
|
211
|
+
next = this.allocateDescriptor(entry, minimum);
|
|
212
|
+
if (next < 0)
|
|
213
|
+
return -24n;
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
if (!Number.isSafeInteger(target) || target < 0 || target >= this.descriptors.length)
|
|
217
|
+
return -9n;
|
|
218
|
+
if (this.isPipeFd(target))
|
|
219
|
+
this.close(target);
|
|
220
|
+
else
|
|
221
|
+
fallback.SYS_close?.(target);
|
|
222
|
+
Atomics.store(this.descriptors, target, entry);
|
|
223
|
+
next = target;
|
|
224
|
+
}
|
|
225
|
+
Atomics.store(this.descriptorFlags, next, closeOnExec ? O_CLOEXEC : 0);
|
|
226
|
+
retainSharedPipe(this.handle(entry));
|
|
227
|
+
return BigInt(next);
|
|
228
|
+
}
|
|
229
|
+
close(fd) {
|
|
230
|
+
if (fd < 0 || fd >= this.descriptors.length)
|
|
231
|
+
return -9n;
|
|
232
|
+
const entry = Atomics.exchange(this.descriptors, fd, 0);
|
|
233
|
+
if (entry === 0)
|
|
234
|
+
return -9n;
|
|
235
|
+
Atomics.store(this.descriptorFlags, fd, 0);
|
|
236
|
+
const handle = this.handle(entry);
|
|
237
|
+
closeSharedPipe(handle);
|
|
238
|
+
const control = this.control(Math.abs(entry) - 1);
|
|
239
|
+
if (Atomics.load(control, PIPE_READER_REFS) === 0 && Atomics.load(control, PIPE_WRITER_REFS) === 0) {
|
|
240
|
+
Atomics.store(this.slots, Math.abs(entry) - 1, 0);
|
|
241
|
+
}
|
|
242
|
+
return 0n;
|
|
243
|
+
}
|
|
244
|
+
poll(pointer, count, _timeout, fallback) {
|
|
245
|
+
if (!Number.isSafeInteger(count) || count < 0 || count > 65_536 || !this.validRange(pointer, count * 8))
|
|
246
|
+
return -22n;
|
|
247
|
+
const delegated = fallback();
|
|
248
|
+
let ready = typeof delegated === "bigint" ? Number(delegated) : typeof delegated === "number" ? delegated : 0;
|
|
249
|
+
if (ready < 0)
|
|
250
|
+
ready = 0;
|
|
251
|
+
for (let index = 0; index < count; index += 1) {
|
|
252
|
+
const offset = pointer + index * 8;
|
|
253
|
+
const fd = this.view().getInt32(offset, true);
|
|
254
|
+
const value = this.pollDescriptor(fd, this.view().getInt16(offset + 4, true));
|
|
255
|
+
if (value === undefined)
|
|
256
|
+
continue;
|
|
257
|
+
if (this.view().getInt16(offset + 6, true) !== 0)
|
|
258
|
+
ready -= 1;
|
|
259
|
+
this.view().setInt16(offset + 6, value, true);
|
|
260
|
+
if (value !== 0)
|
|
261
|
+
ready += 1;
|
|
262
|
+
}
|
|
263
|
+
return BigInt(ready);
|
|
264
|
+
}
|
|
265
|
+
allocateSlot() {
|
|
266
|
+
for (let slot = 0; slot < this.slots.length; slot += 1) {
|
|
267
|
+
if (Atomics.compareExchange(this.slots, slot, 0, 1) === 0)
|
|
268
|
+
return slot;
|
|
269
|
+
}
|
|
270
|
+
return -1;
|
|
271
|
+
}
|
|
272
|
+
allocateDescriptor(entry, minimum = PIPE_FD_MIN) {
|
|
273
|
+
const start = Math.max(PIPE_FD_MIN, minimum);
|
|
274
|
+
for (let fd = start; fd <= PIPE_FD_MAX; fd += 1) {
|
|
275
|
+
if (Atomics.compareExchange(this.descriptors, fd, 0, entry) === 0)
|
|
276
|
+
return fd;
|
|
277
|
+
}
|
|
278
|
+
return -1;
|
|
279
|
+
}
|
|
280
|
+
entry(fd) {
|
|
281
|
+
if (!Number.isSafeInteger(fd) || fd < 0 || fd >= this.descriptors.length)
|
|
282
|
+
return 0;
|
|
283
|
+
return Atomics.load(this.descriptors, fd);
|
|
284
|
+
}
|
|
285
|
+
handle(entry) {
|
|
286
|
+
const slot = Math.abs(entry) - 1;
|
|
287
|
+
return {
|
|
288
|
+
control: this.state.controls,
|
|
289
|
+
payload: this.state.payloads,
|
|
290
|
+
role: entry > 0 ? "reader" : "writer",
|
|
291
|
+
controlOffset: slot * PIPE_CONTROL_WORDS * Int32Array.BYTES_PER_ELEMENT,
|
|
292
|
+
payloadOffset: slot * PIPE_PAYLOAD_BYTES,
|
|
293
|
+
payloadLength: PIPE_PAYLOAD_BYTES,
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
control(slot) {
|
|
297
|
+
return new Int32Array(this.state.controls, slot * PIPE_CONTROL_WORDS * Int32Array.BYTES_PER_ELEMENT, PIPE_CONTROL_WORDS);
|
|
298
|
+
}
|
|
299
|
+
bytes() { return new Uint8Array(this.memory().buffer); }
|
|
300
|
+
view() { return new DataView(this.memory().buffer); }
|
|
301
|
+
validRange(pointer, length) {
|
|
302
|
+
return Number.isSafeInteger(pointer) && Number.isSafeInteger(length) && pointer >= 0 && length >= 0
|
|
303
|
+
&& pointer + length <= this.memory().buffer.byteLength;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
//# sourceMappingURL=shared-pipes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-pipes.js","sourceRoot":"","sources":["../src/shared-pipes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { BrowserFileSystemSnapshot } from "@volter/browser-runtime/browser-filesystem.js";
|
|
2
|
+
import type { WaliFileStat, WaliFileSystem } from "./types.js";
|
|
3
|
+
/** Small transferable filesystem used inside WALI process workers. */
|
|
4
|
+
export declare class SnapshotWaliFileSystem implements WaliFileSystem {
|
|
5
|
+
private readonly nodes;
|
|
6
|
+
private nextInode;
|
|
7
|
+
private mutationDepth;
|
|
8
|
+
private mutated;
|
|
9
|
+
private mutationHandler;
|
|
10
|
+
static fromSnapshot(snapshot: BrowserFileSystemSnapshot): SnapshotWaliFileSystem;
|
|
11
|
+
setMutationHandler(handler: (() => void) | undefined): void;
|
|
12
|
+
replaceSnapshot(snapshot: BrowserFileSystemSnapshot): void;
|
|
13
|
+
toSnapshot(): BrowserFileSystemSnapshot;
|
|
14
|
+
existsSync(path: string): boolean;
|
|
15
|
+
statSync(path: string): WaliFileStat;
|
|
16
|
+
lstatSync(path: string): WaliFileStat;
|
|
17
|
+
readFileSync(path: string): Uint8Array;
|
|
18
|
+
writeFileSync(path: string, data: string | Uint8Array): void;
|
|
19
|
+
mkdirSync(path: string, options?: {
|
|
20
|
+
recursive?: boolean;
|
|
21
|
+
}): void;
|
|
22
|
+
readdirSync(path: string): string[];
|
|
23
|
+
unlinkSync(path: string): void;
|
|
24
|
+
rmdirSync(path: string): void;
|
|
25
|
+
renameSync(oldPath: string, newPath: string): void;
|
|
26
|
+
chmodSync(path: string, mode: number): void;
|
|
27
|
+
utimesSync(path: string, atimeMs: number, mtimeMs: number): void;
|
|
28
|
+
private mutate;
|
|
29
|
+
private markMutation;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=snapshot-filesystem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot-filesystem.d.ts","sourceRoot":"","sources":["../src/snapshot-filesystem.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+CAA+C,CAAC;AAC/F,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAY/D,sEAAsE;AACtE,qBAAa,sBAAuB,YAAW,cAAc;IAC3D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAsD;IAC5E,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,eAAe,CAA2B;IAElD,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,yBAAyB,GAAG,sBAAsB;IAMhF,kBAAkB,CAAC,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI;IAI3D,eAAe,CAAC,QAAQ,EAAE,yBAAyB,GAAG,IAAI;IAsB1D,UAAU,IAAI,yBAAyB;IAMvC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAEjC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY;IAwBpC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY;IAErC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU;IAQtC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAiB5D,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAmBhE,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAgBnC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAW9B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAa7B,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAclD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAU3C,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAWhE,OAAO,CAAC,MAAM;IAYd,OAAO,CAAC,YAAY;CAGrB"}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
/** Small transferable filesystem used inside WALI process workers. */
|
|
2
|
+
export class SnapshotWaliFileSystem {
|
|
3
|
+
nodes = new Map([["/", rootNode()]]);
|
|
4
|
+
nextInode = 2;
|
|
5
|
+
mutationDepth = 0;
|
|
6
|
+
mutated = false;
|
|
7
|
+
mutationHandler;
|
|
8
|
+
static fromSnapshot(snapshot) {
|
|
9
|
+
const filesystem = new SnapshotWaliFileSystem();
|
|
10
|
+
filesystem.replaceSnapshot(snapshot);
|
|
11
|
+
return filesystem;
|
|
12
|
+
}
|
|
13
|
+
setMutationHandler(handler) {
|
|
14
|
+
this.mutationHandler = handler;
|
|
15
|
+
}
|
|
16
|
+
replaceSnapshot(snapshot) {
|
|
17
|
+
this.mutate(() => {
|
|
18
|
+
this.nodes.clear();
|
|
19
|
+
this.nodes.set("/", rootNode());
|
|
20
|
+
this.nextInode = 2;
|
|
21
|
+
this.markMutation();
|
|
22
|
+
const entries = snapshot.files.slice().sort((left, right) => depth(left.path) - depth(right.path));
|
|
23
|
+
for (const source of entries) {
|
|
24
|
+
const entry = source;
|
|
25
|
+
if (entry.path !== "/") {
|
|
26
|
+
if (entry.type === "directory")
|
|
27
|
+
this.mkdirSync(entry.path, { recursive: true });
|
|
28
|
+
else
|
|
29
|
+
this.writeFileSync(entry.path, decodeBase64(entry.content ?? ""));
|
|
30
|
+
}
|
|
31
|
+
const node = this.nodes.get(normalize(entry.path));
|
|
32
|
+
if (node) {
|
|
33
|
+
if (entry.mode !== undefined)
|
|
34
|
+
node.mode = entry.mode;
|
|
35
|
+
if (entry.mtimeMs !== undefined)
|
|
36
|
+
node.atimeMs = node.mtimeMs = entry.mtimeMs;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
toSnapshot() {
|
|
42
|
+
return { files: [...this.nodes.entries()].map(([path, node]) => node.type === "directory"
|
|
43
|
+
? { path, type: "directory", mode: node.mode, mtimeMs: node.mtimeMs }
|
|
44
|
+
: { path, type: "file", content: encodeBase64(node.content ?? new Uint8Array()), mode: node.mode, mtimeMs: node.mtimeMs }) };
|
|
45
|
+
}
|
|
46
|
+
existsSync(path) { return this.nodes.has(normalize(path)); }
|
|
47
|
+
statSync(path) {
|
|
48
|
+
const normalized = normalize(path);
|
|
49
|
+
const node = this.nodes.get(normalized);
|
|
50
|
+
if (!node)
|
|
51
|
+
throw new Error(`ENOENT: no such file or directory, stat '${normalized}'`);
|
|
52
|
+
const size = node.content?.byteLength ?? 0;
|
|
53
|
+
return {
|
|
54
|
+
isFile: () => node.type === "file",
|
|
55
|
+
isDirectory: () => node.type === "directory",
|
|
56
|
+
size,
|
|
57
|
+
mode: node.mode,
|
|
58
|
+
mtimeMs: node.mtimeMs,
|
|
59
|
+
atimeMs: node.atimeMs,
|
|
60
|
+
ctimeMs: node.mtimeMs,
|
|
61
|
+
nlink: 1,
|
|
62
|
+
uid: 1000,
|
|
63
|
+
gid: 1000,
|
|
64
|
+
dev: 1,
|
|
65
|
+
ino: node.ino,
|
|
66
|
+
rdev: 0,
|
|
67
|
+
blksize: 4096,
|
|
68
|
+
blocks: Math.ceil(size / 512),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
lstatSync(path) { return this.statSync(path); }
|
|
72
|
+
readFileSync(path) {
|
|
73
|
+
const normalized = normalize(path);
|
|
74
|
+
const node = this.nodes.get(normalized);
|
|
75
|
+
if (!node)
|
|
76
|
+
throw new Error(`ENOENT: no such file, open '${normalized}'`);
|
|
77
|
+
if (node.type !== "file")
|
|
78
|
+
throw new Error(`EISDIR: illegal operation on a directory, read '${normalized}'`);
|
|
79
|
+
return (node.content ?? new Uint8Array()).slice();
|
|
80
|
+
}
|
|
81
|
+
writeFileSync(path, data) {
|
|
82
|
+
this.mutate(() => {
|
|
83
|
+
const normalized = normalize(path);
|
|
84
|
+
this.mkdirSync(parent(normalized), { recursive: true });
|
|
85
|
+
const existing = this.nodes.get(normalized);
|
|
86
|
+
this.nodes.set(normalized, {
|
|
87
|
+
type: "file",
|
|
88
|
+
content: typeof data === "string" ? new TextEncoder().encode(data) : data.slice(),
|
|
89
|
+
mode: existing?.type === "file" ? existing.mode : 0o644,
|
|
90
|
+
atimeMs: Date.now(),
|
|
91
|
+
mtimeMs: Date.now(),
|
|
92
|
+
ino: existing?.type === "file" ? existing.ino : this.nextInode++,
|
|
93
|
+
});
|
|
94
|
+
this.markMutation();
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
mkdirSync(path, options) {
|
|
98
|
+
this.mutate(() => {
|
|
99
|
+
const normalized = normalize(path);
|
|
100
|
+
if (normalized === "/")
|
|
101
|
+
return;
|
|
102
|
+
const segments = normalized.slice(1).split("/");
|
|
103
|
+
let current = "";
|
|
104
|
+
for (let index = 0; index < segments.length; index += 1) {
|
|
105
|
+
current += `/${segments[index]}`;
|
|
106
|
+
const existing = this.nodes.get(current);
|
|
107
|
+
if (existing?.type === "file")
|
|
108
|
+
throw new Error(`ENOTDIR: not a directory, mkdir '${current}'`);
|
|
109
|
+
if (existing)
|
|
110
|
+
continue;
|
|
111
|
+
if (!options?.recursive && index !== segments.length - 1)
|
|
112
|
+
throw new Error(`ENOENT: no such directory, mkdir '${current}'`);
|
|
113
|
+
const now = Date.now();
|
|
114
|
+
this.nodes.set(current, { type: "directory", mode: 0o755, atimeMs: now, mtimeMs: now, ino: this.nextInode++ });
|
|
115
|
+
this.markMutation();
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
readdirSync(path) {
|
|
120
|
+
const normalized = normalize(path);
|
|
121
|
+
const node = this.nodes.get(normalized);
|
|
122
|
+
if (!node)
|
|
123
|
+
throw new Error(`ENOENT: no such directory, scandir '${normalized}'`);
|
|
124
|
+
if (node.type !== "directory")
|
|
125
|
+
throw new Error(`ENOTDIR: not a directory, scandir '${normalized}'`);
|
|
126
|
+
const prefix = normalized === "/" ? "/" : `${normalized}/`;
|
|
127
|
+
const children = new Set();
|
|
128
|
+
for (const candidate of this.nodes.keys()) {
|
|
129
|
+
if (candidate.startsWith(prefix) && candidate !== normalized) {
|
|
130
|
+
const child = candidate.slice(prefix.length).split("/", 1)[0];
|
|
131
|
+
if (child)
|
|
132
|
+
children.add(child);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return [...children];
|
|
136
|
+
}
|
|
137
|
+
unlinkSync(path) {
|
|
138
|
+
this.mutate(() => {
|
|
139
|
+
const normalized = normalize(path);
|
|
140
|
+
const node = this.nodes.get(normalized);
|
|
141
|
+
if (!node)
|
|
142
|
+
throw new Error(`ENOENT: no such file, unlink '${normalized}'`);
|
|
143
|
+
if (node.type !== "file")
|
|
144
|
+
throw new Error(`EISDIR: illegal operation on a directory, unlink '${normalized}'`);
|
|
145
|
+
this.nodes.delete(normalized);
|
|
146
|
+
this.markMutation();
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
rmdirSync(path) {
|
|
150
|
+
this.mutate(() => {
|
|
151
|
+
const normalized = normalize(path);
|
|
152
|
+
if (normalized === "/")
|
|
153
|
+
throw new Error("EPERM: cannot remove root directory");
|
|
154
|
+
const node = this.nodes.get(normalized);
|
|
155
|
+
if (!node)
|
|
156
|
+
throw new Error(`ENOENT: no such directory, rmdir '${normalized}'`);
|
|
157
|
+
if (node.type !== "directory")
|
|
158
|
+
throw new Error(`ENOTDIR: not a directory, rmdir '${normalized}'`);
|
|
159
|
+
if (this.readdirSync(normalized).length > 0)
|
|
160
|
+
throw new Error(`ENOTEMPTY: directory not empty, rmdir '${normalized}'`);
|
|
161
|
+
this.nodes.delete(normalized);
|
|
162
|
+
this.markMutation();
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
renameSync(oldPath, newPath) {
|
|
166
|
+
this.mutate(() => {
|
|
167
|
+
const source = normalize(oldPath);
|
|
168
|
+
const destination = normalize(newPath);
|
|
169
|
+
const node = this.nodes.get(source);
|
|
170
|
+
if (!node)
|
|
171
|
+
throw new Error(`ENOENT: no such file or directory, rename '${source}'`);
|
|
172
|
+
this.mkdirSync(parent(destination), { recursive: true });
|
|
173
|
+
const moved = [...this.nodes.entries()].filter(([path]) => path === source || path.startsWith(`${source}/`));
|
|
174
|
+
for (const [path] of moved)
|
|
175
|
+
this.nodes.delete(path);
|
|
176
|
+
for (const [path, value] of moved)
|
|
177
|
+
this.nodes.set(`${destination}${path.slice(source.length)}`, value);
|
|
178
|
+
this.markMutation();
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
chmodSync(path, mode) {
|
|
182
|
+
this.mutate(() => {
|
|
183
|
+
const normalized = normalize(path);
|
|
184
|
+
const node = this.nodes.get(normalized);
|
|
185
|
+
if (!node)
|
|
186
|
+
throw new Error(`ENOENT: no such file or directory, chmod '${normalized}'`);
|
|
187
|
+
node.mode = mode & 0o7777;
|
|
188
|
+
this.markMutation();
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
utimesSync(path, atimeMs, mtimeMs) {
|
|
192
|
+
this.mutate(() => {
|
|
193
|
+
const normalized = normalize(path);
|
|
194
|
+
const node = this.nodes.get(normalized);
|
|
195
|
+
if (!node)
|
|
196
|
+
throw new Error(`ENOENT: no such file or directory, utimes '${normalized}'`);
|
|
197
|
+
node.atimeMs = atimeMs;
|
|
198
|
+
node.mtimeMs = mtimeMs;
|
|
199
|
+
this.markMutation();
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
mutate(operation) {
|
|
203
|
+
this.mutationDepth += 1;
|
|
204
|
+
try {
|
|
205
|
+
return operation();
|
|
206
|
+
}
|
|
207
|
+
finally {
|
|
208
|
+
this.mutationDepth -= 1;
|
|
209
|
+
if (this.mutationDepth === 0 && this.mutated) {
|
|
210
|
+
this.mutated = false;
|
|
211
|
+
this.mutationHandler?.();
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
markMutation() {
|
|
216
|
+
this.mutated = true;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
function rootNode() {
|
|
220
|
+
const now = Date.now();
|
|
221
|
+
return { type: "directory", mode: 0o755, atimeMs: now, mtimeMs: now, ino: 1 };
|
|
222
|
+
}
|
|
223
|
+
function normalize(path) {
|
|
224
|
+
const parts = [];
|
|
225
|
+
for (const part of `/${path}`.split("/")) {
|
|
226
|
+
if (!part || part === ".")
|
|
227
|
+
continue;
|
|
228
|
+
if (part === "..")
|
|
229
|
+
parts.pop();
|
|
230
|
+
else
|
|
231
|
+
parts.push(part);
|
|
232
|
+
}
|
|
233
|
+
return `/${parts.join("/")}`;
|
|
234
|
+
}
|
|
235
|
+
function parent(path) { return path.slice(0, path.lastIndexOf("/")) || "/"; }
|
|
236
|
+
function depth(path) { return path.split("/").length; }
|
|
237
|
+
function decodeBase64(value) {
|
|
238
|
+
const binary = atob(value);
|
|
239
|
+
return Uint8Array.from(binary, (character) => character.charCodeAt(0));
|
|
240
|
+
}
|
|
241
|
+
function encodeBase64(value) {
|
|
242
|
+
let binary = "";
|
|
243
|
+
for (const byte of value)
|
|
244
|
+
binary += String.fromCharCode(byte);
|
|
245
|
+
return btoa(binary);
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=snapshot-filesystem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot-filesystem.js","sourceRoot":"","sources":["../src/snapshot-filesystem.ts"],"names":[],"mappings":"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"}
|