@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.
Files changed (143) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +20 -0
  3. package/dist/browser-wali-command.d.ts +22 -0
  4. package/dist/browser-wali-command.d.ts.map +1 -0
  5. package/dist/browser-wali-command.js +44 -0
  6. package/dist/browser-wali-command.js.map +1 -0
  7. package/dist/capabilities.d.ts +3 -0
  8. package/dist/capabilities.d.ts.map +1 -0
  9. package/dist/capabilities.js +23 -0
  10. package/dist/capabilities.js.map +1 -0
  11. package/dist/coherent-file-locks.d.ts +23 -0
  12. package/dist/coherent-file-locks.d.ts.map +1 -0
  13. package/dist/coherent-file-locks.js +134 -0
  14. package/dist/coherent-file-locks.js.map +1 -0
  15. package/dist/events.d.ts +30 -0
  16. package/dist/events.d.ts.map +1 -0
  17. package/dist/events.js +289 -0
  18. package/dist/events.js.map +1 -0
  19. package/dist/filesystem-protocol.d.ts +48 -0
  20. package/dist/filesystem-protocol.d.ts.map +1 -0
  21. package/dist/filesystem-protocol.js +27 -0
  22. package/dist/filesystem-protocol.js.map +1 -0
  23. package/dist/filesystem-remote.d.ts +65 -0
  24. package/dist/filesystem-remote.d.ts.map +1 -0
  25. package/dist/filesystem-remote.js +271 -0
  26. package/dist/filesystem-remote.js.map +1 -0
  27. package/dist/filesystem-worker.d.ts +2 -0
  28. package/dist/filesystem-worker.d.ts.map +1 -0
  29. package/dist/filesystem-worker.js +269 -0
  30. package/dist/filesystem-worker.js.map +1 -0
  31. package/dist/filesystem.d.ts +115 -0
  32. package/dist/filesystem.d.ts.map +1 -0
  33. package/dist/filesystem.js +1179 -0
  34. package/dist/filesystem.js.map +1 -0
  35. package/dist/index.d.ts +20 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +18 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/inspect.d.ts +7 -0
  40. package/dist/inspect.d.ts.map +1 -0
  41. package/dist/inspect.js +32 -0
  42. package/dist/inspect.js.map +1 -0
  43. package/dist/local-sockets.d.ts +13 -0
  44. package/dist/local-sockets.d.ts.map +1 -0
  45. package/dist/local-sockets.js +139 -0
  46. package/dist/local-sockets.js.map +1 -0
  47. package/dist/loopback-host.d.ts +14 -0
  48. package/dist/loopback-host.d.ts.map +1 -0
  49. package/dist/loopback-host.js +476 -0
  50. package/dist/loopback-host.js.map +1 -0
  51. package/dist/loopback-protocol.d.ts +41 -0
  52. package/dist/loopback-protocol.d.ts.map +1 -0
  53. package/dist/loopback-protocol.js +2 -0
  54. package/dist/loopback-protocol.js.map +1 -0
  55. package/dist/memory.d.ts +39 -0
  56. package/dist/memory.d.ts.map +1 -0
  57. package/dist/memory.js +520 -0
  58. package/dist/memory.js.map +1 -0
  59. package/dist/module-layout.d.ts +9 -0
  60. package/dist/module-layout.d.ts.map +1 -0
  61. package/dist/module-layout.js +105 -0
  62. package/dist/module-layout.js.map +1 -0
  63. package/dist/network-protocol.d.ts +43 -0
  64. package/dist/network-protocol.d.ts.map +1 -0
  65. package/dist/network-protocol.js +26 -0
  66. package/dist/network-protocol.js.map +1 -0
  67. package/dist/network-worker.d.ts +2 -0
  68. package/dist/network-worker.d.ts.map +1 -0
  69. package/dist/network-worker.js +943 -0
  70. package/dist/network-worker.js.map +1 -0
  71. package/dist/network.d.ts +52 -0
  72. package/dist/network.d.ts.map +1 -0
  73. package/dist/network.js +427 -0
  74. package/dist/network.js.map +1 -0
  75. package/dist/process-adapter.d.ts +14 -0
  76. package/dist/process-adapter.d.ts.map +1 -0
  77. package/dist/process-adapter.js +45 -0
  78. package/dist/process-adapter.js.map +1 -0
  79. package/dist/process-bridge.d.ts +54 -0
  80. package/dist/process-bridge.d.ts.map +1 -0
  81. package/dist/process-bridge.js +150 -0
  82. package/dist/process-bridge.js.map +1 -0
  83. package/dist/program.d.ts +49 -0
  84. package/dist/program.d.ts.map +1 -0
  85. package/dist/program.js +204 -0
  86. package/dist/program.js.map +1 -0
  87. package/dist/runtime.d.ts +9 -0
  88. package/dist/runtime.d.ts.map +1 -0
  89. package/dist/runtime.js +528 -0
  90. package/dist/runtime.js.map +1 -0
  91. package/dist/shared-pipes.d.ts +44 -0
  92. package/dist/shared-pipes.d.ts.map +1 -0
  93. package/dist/shared-pipes.js +306 -0
  94. package/dist/shared-pipes.js.map +1 -0
  95. package/dist/snapshot-filesystem.d.ts +31 -0
  96. package/dist/snapshot-filesystem.d.ts.map +1 -0
  97. package/dist/snapshot-filesystem.js +247 -0
  98. package/dist/snapshot-filesystem.js.map +1 -0
  99. package/dist/stdin.d.ts +36 -0
  100. package/dist/stdin.d.ts.map +1 -0
  101. package/dist/stdin.js +143 -0
  102. package/dist/stdin.js.map +1 -0
  103. package/dist/symlink.d.ts +8 -0
  104. package/dist/symlink.d.ts.map +1 -0
  105. package/dist/symlink.js +66 -0
  106. package/dist/symlink.js.map +1 -0
  107. package/dist/system.d.ts +41 -0
  108. package/dist/system.d.ts.map +1 -0
  109. package/dist/system.js +305 -0
  110. package/dist/system.js.map +1 -0
  111. package/dist/thread-coordinator-worker.d.ts +25 -0
  112. package/dist/thread-coordinator-worker.d.ts.map +1 -0
  113. package/dist/thread-coordinator-worker.js +49 -0
  114. package/dist/thread-coordinator-worker.js.map +1 -0
  115. package/dist/thread-worker.d.ts +2 -0
  116. package/dist/thread-worker.d.ts.map +1 -0
  117. package/dist/thread-worker.js +725 -0
  118. package/dist/thread-worker.js.map +1 -0
  119. package/dist/threads.d.ts +44 -0
  120. package/dist/threads.d.ts.map +1 -0
  121. package/dist/threads.js +154 -0
  122. package/dist/threads.js.map +1 -0
  123. package/dist/types.d.ts +112 -0
  124. package/dist/types.d.ts.map +1 -0
  125. package/dist/types.js +2 -0
  126. package/dist/types.js.map +1 -0
  127. package/dist/websocket-peer.d.ts +38 -0
  128. package/dist/websocket-peer.d.ts.map +1 -0
  129. package/dist/websocket-peer.js +407 -0
  130. package/dist/websocket-peer.js.map +1 -0
  131. package/dist/worker-program-protocol.d.ts +71 -0
  132. package/dist/worker-program-protocol.d.ts.map +1 -0
  133. package/dist/worker-program-protocol.js +2 -0
  134. package/dist/worker-program-protocol.js.map +1 -0
  135. package/dist/worker-program-worker.d.ts +2 -0
  136. package/dist/worker-program-worker.d.ts.map +1 -0
  137. package/dist/worker-program-worker.js +109 -0
  138. package/dist/worker-program-worker.js.map +1 -0
  139. package/dist/worker-program.d.ts +58 -0
  140. package/dist/worker-program.d.ts.map +1 -0
  141. package/dist/worker-program.js +425 -0
  142. package/dist/worker-program.js.map +1 -0
  143. 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":"AAAA,OAAO,EACL,eAAe,EACf,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,mBAAmB,GAEpB,MAAM,qBAAqB,CAAC;AAG7B,MAAM,WAAW,GAAG,MAAM,CAAC;AAC3B,MAAM,WAAW,GAAG,MAAM,CAAC;AAC3B,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,MAAM,kBAAkB,GAAG,EAAE,GAAG,IAAI,CAAC;AACrC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAC3B,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAC3B,MAAM,UAAU,GAAG,KAAK,CAAC;AACzB,MAAM,SAAS,GAAG,QAAQ,CAAC;AAC3B,MAAM,OAAO,GAAG,CAAC,CAAC;AAClB,MAAM,OAAO,GAAG,CAAC,CAAC;AAClB,MAAM,OAAO,GAAG,CAAC,CAAC;AAClB,MAAM,OAAO,GAAG,CAAC,CAAC;AAClB,MAAM,OAAO,GAAG,CAAC,CAAC;AAClB,MAAM,eAAe,GAAG,IAAI,CAAC;AAC7B,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,MAAM,OAAO,GAAG,QAAQ,CAAC;AAUzB,MAAM,UAAU,yBAAyB;IACvC,OAAO;QACL,WAAW,EAAE,IAAI,iBAAiB,CAAC,MAAM,GAAG,UAAU,CAAC,iBAAiB,CAAC;QACzE,eAAe,EAAE,IAAI,iBAAiB,CAAC,MAAM,GAAG,UAAU,CAAC,iBAAiB,CAAC;QAC7E,KAAK,EAAE,IAAI,iBAAiB,CAAC,eAAe,GAAG,UAAU,CAAC,iBAAiB,CAAC;QAC5E,QAAQ,EAAE,IAAI,iBAAiB,CAAC,eAAe,GAAG,kBAAkB,GAAG,UAAU,CAAC,iBAAiB,CAAC;QACpG,QAAQ,EAAE,IAAI,iBAAiB,CAAC,eAAe,GAAG,kBAAkB,CAAC;KACtE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,KAA0B,EAC1B,EAAU,EACV,MAAc;IAEd,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,MAAM;QAAE,OAAO;IAChE,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;IAClE,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO;IACxB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,OAAO,cAAc,CAAC;QACpB,OAAO,EAAE,KAAK,CAAC,QAAQ;QACvB,OAAO,EAAE,KAAK,CAAC,QAAQ;QACvB,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;QACrC,aAAa,EAAE,IAAI,GAAG,kBAAkB,GAAG,UAAU,CAAC,iBAAiB;QACvE,aAAa,EAAE,IAAI,GAAG,kBAAkB;QACxC,aAAa,EAAE,kBAAkB;KAClC,EAAE,MAAM,CAAC,CAAC;AACb,CAAC;AAED,uFAAuF;AACvF,MAAM,OAAO,kBAAkB;IAMV;IACA;IANF,WAAW,CAAa;IACxB,eAAe,CAAa;IAC5B,KAAK,CAAa;IAEnC,YACmB,MAAgC,EAChC,KAA0B;QAD1B,WAAM,GAAN,MAAM,CAA0B;QAChC,UAAK,GAAL,KAAK,CAAqB;QAE3C,IAAI,CAAC,WAAW,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACrD,IAAI,CAAC,eAAe,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC7D,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,QAAQ,CAAC,EAAU;QACjB,OAAO,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM;eACrE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAED,wBAAwB,CAAC,EAAU;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7B,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC;IAED,cAAc,CAAC,EAAU,EAAE,MAAc;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7B,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;IAC9E,CAAC;IAED,KAAK,CAAC,EAAU,EAAE,OAAe;QAC/B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAE,OAAO;QAC/B,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,MAAM;YAAE,OAAO,EAAE,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC;IACd,CAAC;IAED,OAAO,CAAC,WAAwD,EAAE;QAChE,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,IAA4B,EAA0B,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAC3H,MAAM,MAAM,GAAG,CAAC,EAAU,EAAE,IAAkB,EAAE,KAAmC,EAA0B,EAAE,CAC7G,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;QACvC,OAAO;YACL,GAAG,QAAQ;YACX,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACpD,SAAS,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YACxE,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACtG,QAAQ,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAChH,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;YACpD,WAAW,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EACzE,GAAG,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;YAC/D,SAAS,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAClH,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;YACrD,YAAY,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAC1E,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;YAChE,SAAS,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAChH,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YACpD,UAAU,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAClH,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;YACrD,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAC9D,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;YACpD,SAAS,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAC9E,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;YAC7C,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACtG,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,EAC/G,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;YAC3C,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC;gBAC3H,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,EAAE,QAAQ,CAAC,EACtG,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;YAChD,SAAS,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CACvE,MAAM,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CACnF,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;YACxD,QAAQ,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAC9C,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CACvG;SACF,CAAC;IACJ,CAAC;IAEO,IAAI,CAAC,OAAe,EAAE,KAAa;QACzC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC,KAAK,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC;QAC3D,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACjC,IAAI,IAAI,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC;QAC5C,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,IAAI,MAAM,IAAI,CAAC;gBAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YAC5D,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC;QACd,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACnD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QACzC,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,IAAI,CAAC,EAAU,EAAE,OAAe,EAAE,MAAc;QACtD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC;QAClG,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAClE,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC5C,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACjC,OAAO,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IAEO,KAAK,CAAC,EAAU,EAAE,OAAe,EAAE,MAAc;QACvD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC;QAClG,OAAO,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC;IACzG,CAAC;IAEO,KAAK,CAAC,EAAU,EAAE,OAAe,EAAE,KAAa;QACtD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC;QACnH,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC9C,MAAM,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAC3G,IAAI,MAAM,GAAG,EAAE;gBAAE,OAAO,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;YACpD,KAAK,IAAI,MAAM,CAAC;YAChB,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;gBAAE,MAAM;QACtE,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,MAAM,CAAC,EAAU,EAAE,OAAe,EAAE,KAAa;QACvD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC;QACnH,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC9C,MAAM,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAC5G,IAAI,MAAM,GAAG,EAAE;gBAAE,OAAO,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;YACpD,KAAK,IAAI,MAAM,CAAC;QAClB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,OAAe;QAC3B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzB,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,EAAE,MAAM,IAAI,CAAC;YAAE,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC1F,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,EAAE,EAAE,OAAO,GAAG,KAAK,EAAE,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC5C,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,KAAK,CAAC,EAAU,EAAE,OAAe,EAAE,QAAgB,EAAE,QAAqD;QAChH,IAAI,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,eAAe,EAAE,CAAC;YACvD,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,OAAO,KAAK,eAAe,EAAE,QAAQ,CAAC,CAAC;QACrG,CAAC;QACD,IAAI,OAAO,KAAK,OAAO;YAAE,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5G,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;YACvD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,EAAE,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC;YAC5G,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,OAAO,KAAK,OAAO;YAAE,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC;QAC5F,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;YACvD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,EAAE,CAAC,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC;YAC3F,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,CAAC,GAAG,CAAC;IACd,CAAC;IAEO,SAAS,CACf,EAAU,EACV,MAAe,EACf,OAAO,GAAG,WAAW,EACrB,WAAW,GAAG,KAAK,EACnB,WAAwD,EAAE;QAE1D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,CAAC,EAAE,CAAC;QAC5B,IAAI,MAAM,KAAK,EAAE;YAAE,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,IAAY,CAAC;QACjB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAC/C,IAAI,IAAI,GAAG,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM;gBAAE,OAAO,CAAC,EAAE,CAAC;YACjG,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;;gBACzC,QAAQ,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC;YAClC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YAC/C,IAAI,GAAG,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACrC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAEO,KAAK,CAAC,EAAU;QACtB,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM;YAAE,OAAO,CAAC,EAAE,CAAC;QACxD,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACxD,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClC,eAAe,CAAC,MAAM,CAAC,CAAC;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAClD,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;YACnG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,IAAI,CAAC,OAAe,EAAE,KAAa,EAAE,QAAgB,EAAE,QAAsC;QACnG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC;QACrH,MAAM,SAAS,GAAG,QAAQ,EAAE,CAAC;QAC7B,IAAI,KAAK,GAAG,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9G,IAAI,KAAK,GAAG,CAAC;YAAE,KAAK,GAAG,CAAC,CAAC;QACzB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC9C,MAAM,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC;YACnC,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAC9E,IAAI,KAAK,KAAK,SAAS;gBAAE,SAAS;YAClC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC;gBAAE,KAAK,IAAI,CAAC,CAAC;YAC7D,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YAC9C,IAAI,KAAK,KAAK,CAAC;gBAAE,KAAK,IAAI,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAEO,YAAY;QAClB,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;YACvD,IAAI,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;QACzE,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IAEO,kBAAkB,CAAC,KAAa,EAAE,OAAO,GAAG,WAAW;QAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC7C,KAAK,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,IAAI,WAAW,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;YAChD,IAAI,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;QAC/E,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IAEO,KAAK,CAAC,EAAU;QACtB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM;YAAE,OAAO,CAAC,CAAC;QACnF,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC5C,CAAC;IAEO,MAAM,CAAC,KAAa;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjC,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;YAC5B,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;YAC5B,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;YACrC,aAAa,EAAE,IAAI,GAAG,kBAAkB,GAAG,UAAU,CAAC,iBAAiB;YACvE,aAAa,EAAE,IAAI,GAAG,kBAAkB;YACxC,aAAa,EAAE,kBAAkB;SAClC,CAAC;IACJ,CAAC;IAEO,OAAO,CAAC,IAAY;QAC1B,OAAO,IAAI,UAAU,CACnB,IAAI,CAAC,KAAK,CAAC,QAAQ,EACnB,IAAI,GAAG,kBAAkB,GAAG,UAAU,CAAC,iBAAiB,EACxD,kBAAkB,CACnB,CAAC;IACJ,CAAC;IAEO,KAAK,KAAiB,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACpE,IAAI,KAAe,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/D,UAAU,CAAC,OAAe,EAAE,MAAc;QAChD,OAAO,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,OAAO,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC;eAC9F,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC;IAC3D,CAAC;CACF"}
@@ -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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"}