@volter/browser-wali 0.1.10 → 0.1.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bulk-memory.d.ts +23 -0
- package/dist/bulk-memory.d.ts.map +1 -0
- package/dist/bulk-memory.js +50 -0
- package/dist/bulk-memory.js.map +1 -0
- package/dist/coherent-file-locks.d.ts +4 -1
- package/dist/coherent-file-locks.d.ts.map +1 -1
- package/dist/coherent-file-locks.js +24 -1
- package/dist/coherent-file-locks.js.map +1 -1
- package/dist/descriptors.d.ts +18 -1
- package/dist/descriptors.d.ts.map +1 -1
- package/dist/descriptors.js +51 -6
- package/dist/descriptors.js.map +1 -1
- package/dist/filesystem-host.d.ts +81 -0
- package/dist/filesystem-host.d.ts.map +1 -0
- package/dist/filesystem-host.js +849 -0
- package/dist/filesystem-host.js.map +1 -0
- package/dist/filesystem-protocol.d.ts +49 -1
- package/dist/filesystem-protocol.d.ts.map +1 -1
- package/dist/filesystem-protocol.js +17 -0
- package/dist/filesystem-protocol.js.map +1 -1
- package/dist/filesystem-remote.d.ts +72 -18
- package/dist/filesystem-remote.d.ts.map +1 -1
- package/dist/filesystem-remote.js +271 -40
- package/dist/filesystem-remote.js.map +1 -1
- package/dist/filesystem-worker.js +8 -502
- package/dist/filesystem-worker.js.map +1 -1
- package/dist/filesystem.d.ts +9 -0
- package/dist/filesystem.d.ts.map +1 -1
- package/dist/filesystem.js +209 -61
- package/dist/filesystem.js.map +1 -1
- package/dist/host-idle.d.ts +29 -0
- package/dist/host-idle.d.ts.map +1 -0
- package/dist/host-idle.js +68 -0
- package/dist/host-idle.js.map +1 -0
- package/dist/host.d.ts +1 -0
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +1 -3
- package/dist/host.js.map +1 -1
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +79 -18
- package/dist/memory.js.map +1 -1
- package/dist/module-layout.d.ts +6 -0
- package/dist/module-layout.d.ts.map +1 -1
- package/dist/module-layout.js +26 -3
- package/dist/module-layout.js.map +1 -1
- package/dist/monotonic-clock.d.ts +9 -0
- package/dist/monotonic-clock.d.ts.map +1 -1
- package/dist/monotonic-clock.js +11 -0
- package/dist/monotonic-clock.js.map +1 -1
- package/dist/network-worker.js +7 -2
- package/dist/network-worker.js.map +1 -1
- package/dist/network.d.ts.map +1 -1
- package/dist/network.js +11 -8
- package/dist/network.js.map +1 -1
- package/dist/process-bridge.d.ts.map +1 -1
- package/dist/process-bridge.js +25 -5
- package/dist/process-bridge.js.map +1 -1
- package/dist/program.d.ts +5 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +13 -12
- package/dist/program.js.map +1 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +75 -9
- package/dist/runtime.js.map +1 -1
- package/dist/shared-file-layer.d.ts +69 -0
- package/dist/shared-file-layer.d.ts.map +1 -0
- package/dist/shared-file-layer.js +299 -0
- package/dist/shared-file-layer.js.map +1 -0
- package/dist/shared-pipes.d.ts +7 -0
- package/dist/shared-pipes.d.ts.map +1 -1
- package/dist/shared-pipes.js +56 -17
- package/dist/shared-pipes.js.map +1 -1
- package/dist/signals.d.ts +2 -0
- package/dist/signals.d.ts.map +1 -1
- package/dist/signals.js +5 -1
- package/dist/signals.js.map +1 -1
- package/dist/snapshot-filesystem.d.ts +36 -3
- package/dist/snapshot-filesystem.d.ts.map +1 -1
- package/dist/snapshot-filesystem.js +204 -19
- package/dist/snapshot-filesystem.js.map +1 -1
- package/dist/stdin.d.ts.map +1 -1
- package/dist/stdin.js +3 -2
- package/dist/stdin.js.map +1 -1
- package/dist/symlink.d.ts.map +1 -1
- package/dist/symlink.js +91 -1
- package/dist/symlink.js.map +1 -1
- package/dist/system.d.ts.map +1 -1
- package/dist/system.js +17 -6
- package/dist/system.js.map +1 -1
- package/dist/thread-coordinator-worker.d.ts +1 -25
- package/dist/thread-coordinator-worker.d.ts.map +1 -1
- package/dist/thread-coordinator-worker.js +29 -2
- package/dist/thread-coordinator-worker.js.map +1 -1
- package/dist/thread-worker.js +13 -8
- package/dist/thread-worker.js.map +1 -1
- package/dist/threads.d.ts +4 -0
- package/dist/threads.d.ts.map +1 -1
- package/dist/threads.js +72 -43
- package/dist/threads.js.map +1 -1
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/websocket-peer.d.ts.map +1 -1
- package/dist/websocket-peer.js +2 -1
- package/dist/websocket-peer.js.map +1 -1
- package/dist/worker-program-protocol.d.ts +26 -0
- package/dist/worker-program-protocol.d.ts.map +1 -1
- package/dist/worker-program-worker.js +26 -8
- package/dist/worker-program-worker.js.map +1 -1
- package/dist/worker-program.d.ts +43 -0
- package/dist/worker-program.d.ts.map +1 -1
- package/dist/worker-program.js +198 -24
- package/dist/worker-program.js.map +1 -1
- package/package.json +1 -1
package/dist/signals.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signals.d.ts","sourceRoot":"","sources":["../src/signals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAgBpD,oGAAoG;AACpG,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,KAAG,OAAuC,CAAC;AAE3F,wBAAgB,qBAAqB,IAAI,iBAAiB,CAEzD;AAED,2FAA2F;AAC3F,qBAAa,WAAW;IAEV,QAAQ,CAAC,MAAM,EAAE,iBAAiB;IAD9C,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;gBACN,MAAM,EAAE,iBAAiB;IAC9C,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IAKd,OAAO,IAAI,IAAI;IACf,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,UAAU;IAcrD;;;;;OAKG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAI,EAAE,MAAM,SAAI,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS;IAgB7E,OAAO,IAAI,MAAM;IAQjB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,UAAU,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS;CAepG;AAED,6FAA6F;AAC7F,qBAAa,cAAc;IAKvB,QAAQ,CAAC,OAAO,EAAE,WAAW;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAPlC,IAAI,SAAM;IACV,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAK;gBAET,OAAO,EAAE,WAAW,EACZ,MAAM,EAAE,MAAM,WAAW,CAAC,MAAM,EAChC,KAAK,EAAE,MAAM,WAAW,CAAC,KAAK,GAAG,SAAS,EAC1C,eAAe,EAAE,MAAM,MAAM;IAEhD,OAAO,CAAC,KAAK;IAGb,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAqC5C;;;;OAIG;IACH,OAAO,IAAI,OAAO;CAqCnB"}
|
|
1
|
+
{"version":3,"file":"signals.d.ts","sourceRoot":"","sources":["../src/signals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAgBpD,oGAAoG;AACpG,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,KAAG,OAAuC,CAAC;AAE3F,wBAAgB,qBAAqB,IAAI,iBAAiB,CAEzD;AAED,2FAA2F;AAC3F,qBAAa,WAAW;IAEV,QAAQ,CAAC,MAAM,EAAE,iBAAiB;IAD9C,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;gBACN,MAAM,EAAE,iBAAiB;IAC9C,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IAKd,OAAO,IAAI,IAAI;IACf,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,UAAU,GAAG,UAAU;IAcrD;;;;;OAKG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAI,EAAE,MAAM,SAAI,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS;IAgB7E,sGAAsG;IACtG,UAAU,IAAI,OAAO;IAGrB,OAAO,IAAI,MAAM;IAQjB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,UAAU,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS;CAepG;AAED,6FAA6F;AAC7F,qBAAa,cAAc;IAKvB,QAAQ,CAAC,OAAO,EAAE,WAAW;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAPlC,IAAI,SAAM;IACV,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAK;gBAET,OAAO,EAAE,WAAW,EACZ,MAAM,EAAE,MAAM,WAAW,CAAC,MAAM,EAChC,KAAK,EAAE,MAAM,WAAW,CAAC,KAAK,GAAG,SAAS,EAC1C,eAAe,EAAE,MAAM,MAAM;IAEhD,OAAO,CAAC,KAAK;IAGb,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAqC5C;;;;OAIG;IACH,OAAO,IAAI,OAAO;CAqCnB"}
|
package/dist/signals.js
CHANGED
|
@@ -76,6 +76,10 @@ export class WaliSignals {
|
|
|
76
76
|
return "handled";
|
|
77
77
|
});
|
|
78
78
|
}
|
|
79
|
+
/** Whether any signal is pending at all: a word, without the BigInt set every syscall would build. */
|
|
80
|
+
anyPending() {
|
|
81
|
+
return Atomics.load(this.words, 2) !== 0;
|
|
82
|
+
}
|
|
79
83
|
pending() {
|
|
80
84
|
if (Atomics.load(this.words, 2) === 0)
|
|
81
85
|
return 0n;
|
|
@@ -177,7 +181,7 @@ export class WaliSignalHost {
|
|
|
177
181
|
* again, as the kernel restarts it, instead of failing with EINTR.
|
|
178
182
|
*/
|
|
179
183
|
deliver() {
|
|
180
|
-
if (this.delivering || (this.signals.pending() & ~this.mask) === 0n)
|
|
184
|
+
if (this.delivering || !this.signals.anyPending() || (this.signals.pending() & ~this.mask) === 0n)
|
|
181
185
|
return false;
|
|
182
186
|
this.delivering = true;
|
|
183
187
|
let ran = false;
|
package/dist/signals.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signals.js","sourceRoot":"","sources":["../src/signals.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"signals.js","sourceRoot":"","sources":["../src/signals.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { BrowserFileSnapshotEntry, BrowserFileSystemSnapshot } from "@volter/browser-runtime/browser-filesystem.js";
|
|
2
|
-
import {
|
|
2
|
+
import type { LowerTree } from "./shared-file-layer.js";
|
|
3
3
|
import type { WaliFileStat, WaliFileSystem } from "./types.js";
|
|
4
4
|
/** Small transferable filesystem used inside WALI process workers. */
|
|
5
5
|
export declare class SnapshotWaliFileSystem implements WaliFileSystem {
|
|
@@ -32,7 +32,7 @@ export declare class SnapshotWaliFileSystem implements WaliFileSystem {
|
|
|
32
32
|
* is metadata, and the entries in it that carry content, a program's
|
|
33
33
|
* private files, are written over the store's.
|
|
34
34
|
*/
|
|
35
|
-
static fromStore(store:
|
|
35
|
+
static fromStore(store: LowerTree, snapshot: BrowserFileSystemSnapshot): SnapshotWaliFileSystem;
|
|
36
36
|
/** A path's node: one this tree holds, or the store's entry for it, made a node the first time it is asked for. */
|
|
37
37
|
private node;
|
|
38
38
|
private lowerNode;
|
|
@@ -82,7 +82,7 @@ export declare class SnapshotWaliFileSystem implements WaliFileSystem {
|
|
|
82
82
|
* Always content-carrying, never sized -- the caller named this path
|
|
83
83
|
* because it changed, so a size would be exactly the wrong answer.
|
|
84
84
|
*/
|
|
85
|
-
writtenEntry(path: string): BrowserFileSnapshotEntry | undefined;
|
|
85
|
+
writtenEntry(path: string, raw?: boolean): BrowserFileSnapshotEntry | undefined;
|
|
86
86
|
/**
|
|
87
87
|
* The tree as a snapshot describes it. An entry with content is written;
|
|
88
88
|
* an entry without keeps the bytes this tree already holds for that path,
|
|
@@ -130,8 +130,20 @@ export declare class SnapshotWaliFileSystem implements WaliFileSystem {
|
|
|
130
130
|
lstatSync(path: string): WaliFileStat;
|
|
131
131
|
readFile(path: string): Promise<Uint8Array>;
|
|
132
132
|
readFileSync(path: string): Uint8Array;
|
|
133
|
+
/**
|
|
134
|
+
* A path's link target when it is a file-backed link (`symlink.ts`), found
|
|
135
|
+
* once per node. Every open, stat and access resolves each component of its
|
|
136
|
+
* path through this question, and asking it as exists + stat + a read of
|
|
137
|
+
* the head made a small file's `open` and `stat` several times what they
|
|
138
|
+
* cost in a filesystem with link nodes (measured 2026-09-28: 200 files
|
|
139
|
+
* written and stat-ed, 8-20 ms against WasmFS's 2.5-5). A file whose size
|
|
140
|
+
* lies outside [minimum, maximum] is answered without its bytes.
|
|
141
|
+
*/
|
|
142
|
+
linkTargetSync(path: string, minimum: number, maximum: number, parse: (bytes: Uint8Array) => string | undefined, normal?: boolean): string | undefined;
|
|
133
143
|
/** The file's bytes, read from the store the first time. */
|
|
134
144
|
private bytesOf;
|
|
145
|
+
/** The range as a view of the file's own bytes: valid until the file is next written. */
|
|
146
|
+
viewRangeSync(path: string, offset: number, length: number): Uint8Array;
|
|
135
147
|
readRangeSync(path: string, offset: number, length: number): Uint8Array;
|
|
136
148
|
/**
|
|
137
149
|
* Write in place, growing the backing buffer geometrically. `content` is a
|
|
@@ -141,6 +153,27 @@ export declare class SnapshotWaliFileSystem implements WaliFileSystem {
|
|
|
141
153
|
* created; a gap past the old end is zero.
|
|
142
154
|
*/
|
|
143
155
|
writeRangeSync(path: string, offset: number, data: Uint8Array): void;
|
|
156
|
+
/**
|
|
157
|
+
* A file cut or extended to `length`, in place where its bytes are this
|
|
158
|
+
* tree's own: a rewrite (`O_TRUNC`, then writes) keeps the buffer the file
|
|
159
|
+
* already grew, as a libc heap keeps what was freed, instead of faulting in
|
|
160
|
+
* a new one from nothing (measured 2026-09-28: most of an 8 MB rewrite was
|
|
161
|
+
* that allocation, and WasmFS's rewrite is a memcpy into warm pages). What
|
|
162
|
+
* lies past the new end stays unobservable -- every reader goes through the
|
|
163
|
+
* view -- and every extension zeroes what it exposes.
|
|
164
|
+
*/
|
|
165
|
+
truncateSync(path: string, length: number): void;
|
|
166
|
+
/**
|
|
167
|
+
* Buffers of files this tree owned and dropped (replaced by a rename,
|
|
168
|
+
* unlinked, outgrown), which the next file to grow takes before it asks for
|
|
169
|
+
* new memory. A save that writes `name@` and renames it over `name` -- every
|
|
170
|
+
* Blender save -- otherwise grows a fresh buffer from 4 KB each time while
|
|
171
|
+
* the last save's lies unreferenced. Small and bounded: this is warm memory
|
|
172
|
+
* held back from the collector, so only a few recent large buffers.
|
|
173
|
+
*/
|
|
174
|
+
private spares;
|
|
175
|
+
private release;
|
|
176
|
+
private takeSpare;
|
|
144
177
|
writeFileSync(path: string, data: string | Uint8Array): void;
|
|
145
178
|
mkdirSync(path: string, options?: {
|
|
146
179
|
recursive?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot-filesystem.d.ts","sourceRoot":"","sources":["../src/snapshot-filesystem.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"snapshot-filesystem.d.ts","sourceRoot":"","sources":["../src/snapshot-filesystem.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { realtimeMilliseconds } from "./monotonic-clock.js";
|
|
1
2
|
import { PROJECT_ROOTS } from "@volter/browser-runtime/browser-pack-store.js";
|
|
2
3
|
import { encodeBase64, decodeBase64 } from "@volter/browser-runtime/browser-base64.js";
|
|
3
4
|
/**
|
|
@@ -158,7 +159,8 @@ export class SnapshotWaliFileSystem {
|
|
|
158
159
|
const store = this.lower;
|
|
159
160
|
return entry.type === "directory"
|
|
160
161
|
? { type: "directory", fromStore: true, mode: entry.mode & 0o7777, atimeMs: entry.mtimeMs, mtimeMs: entry.mtimeMs, ino: this.nextInode++ }
|
|
161
|
-
|
|
162
|
+
// A view where the lower tree gives one: the bytes stay the layer's until this tree writes them (`writeRangeSync`).
|
|
163
|
+
: { type: "file", fromStore: true, load: () => store.view ? store.view(path) : store.read(path), size: entry.length, mode: entry.mode & 0o7777, atimeMs: entry.mtimeMs, mtimeMs: entry.mtimeMs, ino: this.nextInode++ };
|
|
162
164
|
}
|
|
163
165
|
/**
|
|
164
166
|
* The tree for a peer that reads the same store: only what differs from it.
|
|
@@ -260,7 +262,7 @@ export class SnapshotWaliFileSystem {
|
|
|
260
262
|
* Always content-carrying, never sized -- the caller named this path
|
|
261
263
|
* because it changed, so a size would be exactly the wrong answer.
|
|
262
264
|
*/
|
|
263
|
-
writtenEntry(path) {
|
|
265
|
+
writtenEntry(path, raw = false) {
|
|
264
266
|
const normalized = normalize(path);
|
|
265
267
|
const node = this.node(normalized);
|
|
266
268
|
if (!node)
|
|
@@ -268,6 +270,9 @@ export class SnapshotWaliFileSystem {
|
|
|
268
270
|
const details = { mode: node.mode, mtimeMs: node.mtimeMs };
|
|
269
271
|
if (node.type === "directory")
|
|
270
272
|
return { path: normalized, type: "directory", ...details };
|
|
273
|
+
// Raw for the live channel to the page (ADR-0046): a copy, whose buffer the post transfers.
|
|
274
|
+
if (raw)
|
|
275
|
+
return { path: normalized, type: "file", bytes: this.bytesOf(node).slice(), ...details };
|
|
271
276
|
return {
|
|
272
277
|
path: normalized,
|
|
273
278
|
type: "file",
|
|
@@ -433,6 +438,26 @@ export class SnapshotWaliFileSystem {
|
|
|
433
438
|
throw new Error(`EISDIR: illegal operation on a directory, read '${normalized}'`);
|
|
434
439
|
return this.bytesOf(node).slice();
|
|
435
440
|
}
|
|
441
|
+
/**
|
|
442
|
+
* A path's link target when it is a file-backed link (`symlink.ts`), found
|
|
443
|
+
* once per node. Every open, stat and access resolves each component of its
|
|
444
|
+
* path through this question, and asking it as exists + stat + a read of
|
|
445
|
+
* the head made a small file's `open` and `stat` several times what they
|
|
446
|
+
* cost in a filesystem with link nodes (measured 2026-09-28: 200 files
|
|
447
|
+
* written and stat-ed, 8-20 ms against WasmFS's 2.5-5). A file whose size
|
|
448
|
+
* lies outside [minimum, maximum] is answered without its bytes.
|
|
449
|
+
*/
|
|
450
|
+
linkTargetSync(path, minimum, maximum, parse, normal = false) {
|
|
451
|
+
// `normal`: the caller walked a normal path and asks of its prefixes, so each is normal already.
|
|
452
|
+
const node = this.node(normal ? path : normalize(path));
|
|
453
|
+
if (node?.type !== "file")
|
|
454
|
+
return undefined;
|
|
455
|
+
if (node.link === undefined) {
|
|
456
|
+
const size = node.content?.byteLength ?? node.size ?? 0;
|
|
457
|
+
node.link = size < minimum || size > maximum ? null : (parse(this.bytesOf(node)) ?? null);
|
|
458
|
+
}
|
|
459
|
+
return node.link ?? undefined;
|
|
460
|
+
}
|
|
436
461
|
/** The file's bytes, read from the store the first time. */
|
|
437
462
|
bytesOf(node) {
|
|
438
463
|
if (node.content === undefined && node.load) {
|
|
@@ -441,6 +466,15 @@ export class SnapshotWaliFileSystem {
|
|
|
441
466
|
}
|
|
442
467
|
return node.content ?? new Uint8Array();
|
|
443
468
|
}
|
|
469
|
+
/** The range as a view of the file's own bytes: valid until the file is next written. */
|
|
470
|
+
viewRangeSync(path, offset, length) {
|
|
471
|
+
const node = this.node(normalize(path));
|
|
472
|
+
if (!node)
|
|
473
|
+
throw new Error(`ENOENT: no such file, open '${normalize(path)}'`);
|
|
474
|
+
if (node.type !== "file")
|
|
475
|
+
throw new Error(`EISDIR: illegal operation on a directory, read '${normalize(path)}'`);
|
|
476
|
+
return this.bytesOf(node).subarray(offset, offset + length);
|
|
477
|
+
}
|
|
444
478
|
readRangeSync(path, offset, length) {
|
|
445
479
|
const normalized = normalize(path);
|
|
446
480
|
const node = this.node(normalized);
|
|
@@ -461,15 +495,19 @@ export class SnapshotWaliFileSystem {
|
|
|
461
495
|
this.mutate(() => {
|
|
462
496
|
const normalized = normalize(path);
|
|
463
497
|
this.mkdirSync(parent(normalized), { recursive: true });
|
|
498
|
+
// A path the program removed is new when written again: the store's file
|
|
499
|
+
// it once named stays gone, and its bytes do not come back.
|
|
500
|
+
const removed = this.isHidden(normalized);
|
|
464
501
|
this.unhide(normalized);
|
|
465
|
-
const existing = this.node(normalized);
|
|
502
|
+
const existing = removed ? this.nodes.get(normalized) : this.node(normalized);
|
|
466
503
|
if (existing?.type === "directory")
|
|
467
504
|
throw new Error(`EISDIR: illegal operation on a directory, write '${normalized}'`);
|
|
468
505
|
const current = existing ? this.bytesOf(existing) : new Uint8Array();
|
|
469
506
|
const end = offset + data.byteLength;
|
|
470
507
|
let content;
|
|
471
508
|
if (end <= current.byteLength) {
|
|
472
|
-
|
|
509
|
+
// In place only in bytes this tree owns: a loaded file's may be a view of a shared layer.
|
|
510
|
+
content = existing?.dirty ? current : current.slice();
|
|
473
511
|
}
|
|
474
512
|
else if (end <= current.buffer.byteLength - current.byteOffset && existing?.dirty) {
|
|
475
513
|
// Room in a buffer this store already grew for the file (a dirty
|
|
@@ -478,8 +516,14 @@ export class SnapshotWaliFileSystem {
|
|
|
478
516
|
content.fill(0, current.byteLength, offset);
|
|
479
517
|
}
|
|
480
518
|
else {
|
|
481
|
-
|
|
519
|
+
const spare = this.takeSpare(end);
|
|
520
|
+
content = new Uint8Array(spare ?? new ArrayBuffer(Math.max(end, current.byteLength * 2, 4096)), 0, end);
|
|
482
521
|
content.set(current);
|
|
522
|
+
// A spare buffer holds what its last file did; a new one is zero.
|
|
523
|
+
if (spare)
|
|
524
|
+
content.fill(0, current.byteLength, offset);
|
|
525
|
+
if (existing?.dirty)
|
|
526
|
+
this.release(current);
|
|
483
527
|
}
|
|
484
528
|
content.set(data, offset);
|
|
485
529
|
this.nodes.set(normalized, {
|
|
@@ -487,26 +531,109 @@ export class SnapshotWaliFileSystem {
|
|
|
487
531
|
content,
|
|
488
532
|
dirty: true,
|
|
489
533
|
mode: existing?.type === "file" ? existing.mode : 0o644,
|
|
490
|
-
atimeMs:
|
|
491
|
-
mtimeMs:
|
|
534
|
+
atimeMs: realtimeMilliseconds(),
|
|
535
|
+
mtimeMs: realtimeMilliseconds(),
|
|
492
536
|
ino: existing?.type === "file" ? existing.ino : this.nextInode++,
|
|
493
537
|
});
|
|
494
538
|
this.markMutation(normalized);
|
|
495
539
|
});
|
|
496
540
|
}
|
|
541
|
+
/**
|
|
542
|
+
* A file cut or extended to `length`, in place where its bytes are this
|
|
543
|
+
* tree's own: a rewrite (`O_TRUNC`, then writes) keeps the buffer the file
|
|
544
|
+
* already grew, as a libc heap keeps what was freed, instead of faulting in
|
|
545
|
+
* a new one from nothing (measured 2026-09-28: most of an 8 MB rewrite was
|
|
546
|
+
* that allocation, and WasmFS's rewrite is a memcpy into warm pages). What
|
|
547
|
+
* lies past the new end stays unobservable -- every reader goes through the
|
|
548
|
+
* view -- and every extension zeroes what it exposes.
|
|
549
|
+
*/
|
|
550
|
+
truncateSync(path, length) {
|
|
551
|
+
this.mutate(() => {
|
|
552
|
+
const normalized = normalize(path);
|
|
553
|
+
const existing = this.node(normalized);
|
|
554
|
+
if (!existing)
|
|
555
|
+
throw new Error(`ENOENT: no such file, truncate '${normalized}'`);
|
|
556
|
+
if (existing.type !== "file")
|
|
557
|
+
throw new Error(`EISDIR: illegal operation on a directory, truncate '${normalized}'`);
|
|
558
|
+
let content;
|
|
559
|
+
if (length === 0 && existing.content === undefined) {
|
|
560
|
+
// Emptied before it was ever read: the store's bytes are not needed at all.
|
|
561
|
+
content = new Uint8Array();
|
|
562
|
+
}
|
|
563
|
+
else {
|
|
564
|
+
const current = this.bytesOf(existing);
|
|
565
|
+
const capacity = current.buffer.byteLength - current.byteOffset;
|
|
566
|
+
if (existing.dirty && length <= capacity && (capacity <= SPARE_MINIMUM || length * 4 >= capacity)) {
|
|
567
|
+
content = new Uint8Array(current.buffer, current.byteOffset, length);
|
|
568
|
+
content.fill(0, current.byteLength);
|
|
569
|
+
}
|
|
570
|
+
else {
|
|
571
|
+
// Cut far below what the buffer holds: the file stops holding it, and
|
|
572
|
+
// it goes where the next file to grow may take it back (a rewrite's
|
|
573
|
+
// own writes, usually), within the spares' bound.
|
|
574
|
+
content = new Uint8Array(length);
|
|
575
|
+
content.set(current.subarray(0, length));
|
|
576
|
+
if (existing.dirty)
|
|
577
|
+
this.release(current);
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
this.nodes.set(normalized, {
|
|
581
|
+
type: "file",
|
|
582
|
+
content,
|
|
583
|
+
dirty: true,
|
|
584
|
+
mode: existing.mode,
|
|
585
|
+
atimeMs: realtimeMilliseconds(),
|
|
586
|
+
mtimeMs: realtimeMilliseconds(),
|
|
587
|
+
ino: existing.ino,
|
|
588
|
+
});
|
|
589
|
+
this.markMutation(normalized);
|
|
590
|
+
});
|
|
591
|
+
}
|
|
592
|
+
/**
|
|
593
|
+
* Buffers of files this tree owned and dropped (replaced by a rename,
|
|
594
|
+
* unlinked, outgrown), which the next file to grow takes before it asks for
|
|
595
|
+
* new memory. A save that writes `name@` and renames it over `name` -- every
|
|
596
|
+
* Blender save -- otherwise grows a fresh buffer from 4 KB each time while
|
|
597
|
+
* the last save's lies unreferenced. Small and bounded: this is warm memory
|
|
598
|
+
* held back from the collector, so only a few recent large buffers.
|
|
599
|
+
*/
|
|
600
|
+
spares = [];
|
|
601
|
+
release(bytes) {
|
|
602
|
+
const buffer = bytes.buffer;
|
|
603
|
+
if (!(buffer instanceof ArrayBuffer) || buffer.byteLength < SPARE_MINIMUM || buffer.byteLength > SPARE_TOTAL)
|
|
604
|
+
return;
|
|
605
|
+
this.spares.push(buffer);
|
|
606
|
+
let total = this.spares.reduce((sum, spare) => sum + spare.byteLength, 0);
|
|
607
|
+
while (this.spares.length > SPARE_COUNT || total > SPARE_TOTAL)
|
|
608
|
+
total -= this.spares.shift().byteLength;
|
|
609
|
+
}
|
|
610
|
+
takeSpare(length) {
|
|
611
|
+
// Only a spare that fits: a small file handed a large buffer would hold it for its life.
|
|
612
|
+
const largest = Math.max(length * 4, SPARE_MINIMUM * 4);
|
|
613
|
+
let best = -1;
|
|
614
|
+
this.spares.forEach((spare, index) => {
|
|
615
|
+
if (spare.byteLength >= length && spare.byteLength <= largest
|
|
616
|
+
&& (best < 0 || spare.byteLength < this.spares[best].byteLength))
|
|
617
|
+
best = index;
|
|
618
|
+
});
|
|
619
|
+
return best < 0 ? undefined : this.spares.splice(best, 1)[0];
|
|
620
|
+
}
|
|
497
621
|
writeFileSync(path, data) {
|
|
498
622
|
this.mutate(() => {
|
|
499
623
|
const normalized = normalize(path);
|
|
500
624
|
this.mkdirSync(parent(normalized), { recursive: true });
|
|
625
|
+
const removed = this.isHidden(normalized);
|
|
501
626
|
this.unhide(normalized);
|
|
502
|
-
const existing = this.node(normalized);
|
|
627
|
+
const existing = removed ? this.nodes.get(normalized) : this.node(normalized);
|
|
628
|
+
if (existing?.type === "file" && existing.dirty && existing.content)
|
|
629
|
+
this.release(existing.content);
|
|
503
630
|
this.nodes.set(normalized, {
|
|
504
631
|
type: "file",
|
|
505
632
|
content: typeof data === "string" ? new TextEncoder().encode(data) : data.slice(),
|
|
506
633
|
dirty: true,
|
|
507
634
|
mode: existing?.type === "file" ? existing.mode : 0o644,
|
|
508
|
-
atimeMs:
|
|
509
|
-
mtimeMs:
|
|
635
|
+
atimeMs: realtimeMilliseconds(),
|
|
636
|
+
mtimeMs: realtimeMilliseconds(),
|
|
510
637
|
ino: existing?.type === "file" ? existing.ino : this.nextInode++,
|
|
511
638
|
});
|
|
512
639
|
this.markMutation(normalized);
|
|
@@ -517,6 +644,18 @@ export class SnapshotWaliFileSystem {
|
|
|
517
644
|
const normalized = normalize(path);
|
|
518
645
|
if (normalized === "/")
|
|
519
646
|
return;
|
|
647
|
+
// One directory under one that is there, as every directory of an import
|
|
648
|
+
// sorted by depth is: made alone, with no walk of its ancestors.
|
|
649
|
+
if (!this.node(normalized)) {
|
|
650
|
+
const above = this.node(parent(normalized));
|
|
651
|
+
if (above?.type === "directory") {
|
|
652
|
+
this.unhide(normalized);
|
|
653
|
+
const now = realtimeMilliseconds();
|
|
654
|
+
this.nodes.set(normalized, { type: "directory", mode: 0o755, atimeMs: now, mtimeMs: now, ino: this.nextInode++ });
|
|
655
|
+
this.markMutation(normalized);
|
|
656
|
+
return;
|
|
657
|
+
}
|
|
658
|
+
}
|
|
520
659
|
const segments = normalized.slice(1).split("/");
|
|
521
660
|
let current = "";
|
|
522
661
|
for (let index = 0; index < segments.length; index += 1) {
|
|
@@ -529,7 +668,7 @@ export class SnapshotWaliFileSystem {
|
|
|
529
668
|
if (!options?.recursive && index !== segments.length - 1)
|
|
530
669
|
throw new Error(`ENOENT: no such directory, mkdir '${current}'`);
|
|
531
670
|
this.unhide(current);
|
|
532
|
-
const now =
|
|
671
|
+
const now = realtimeMilliseconds();
|
|
533
672
|
this.nodes.set(current, { type: "directory", mode: 0o755, atimeMs: now, mtimeMs: now, ino: this.nextInode++ });
|
|
534
673
|
this.markMutation(current);
|
|
535
674
|
}
|
|
@@ -544,9 +683,11 @@ export class SnapshotWaliFileSystem {
|
|
|
544
683
|
throw new Error(`ENOTDIR: not a directory, scandir '${normalized}'`);
|
|
545
684
|
const names = new Set(this.nodes.namesIn(normalized));
|
|
546
685
|
if (this.lower && !this.isHidden(normalized)) {
|
|
547
|
-
//
|
|
686
|
+
// A store's roots are its top: no entry of it names them as children of
|
|
687
|
+
// `/`. A shared layer (ADR-0044 §6) holds the whole tree and lists them.
|
|
688
|
+
// Both, for a store under shared layers.
|
|
548
689
|
const lowerNames = normalized === "/"
|
|
549
|
-
? PROJECT_ROOTS.filter((root) => this.lower.entries.has(root)).map((root) => root.slice(1))
|
|
690
|
+
? [...new Set([...this.lower.childrenOf("/"), ...PROJECT_ROOTS.filter((root) => this.lower.entries.has(root)).map((root) => root.slice(1))])]
|
|
550
691
|
: this.lower.childrenOf(normalized);
|
|
551
692
|
for (const name of lowerNames) {
|
|
552
693
|
if (!this.isHidden(normalized === "/" ? `/${name}` : `${normalized}/${name}`))
|
|
@@ -563,6 +704,8 @@ export class SnapshotWaliFileSystem {
|
|
|
563
704
|
throw new Error(`ENOENT: no such file, unlink '${normalized}'`);
|
|
564
705
|
if (node.type !== "file")
|
|
565
706
|
throw new Error(`EISDIR: illegal operation on a directory, unlink '${normalized}'`);
|
|
707
|
+
if (node.dirty && node.content)
|
|
708
|
+
this.release(node.content);
|
|
566
709
|
this.nodes.delete(normalized);
|
|
567
710
|
this.hide(normalized);
|
|
568
711
|
this.markMutation(normalized);
|
|
@@ -604,14 +747,22 @@ export class SnapshotWaliFileSystem {
|
|
|
604
747
|
this.hide(source);
|
|
605
748
|
this.unhide(destination);
|
|
606
749
|
for (const [path, value] of moved) {
|
|
607
|
-
// A file moved is a file the page must write at its new path: its bytes
|
|
750
|
+
// A file moved is a file the page must write at its new path: its bytes
|
|
751
|
+
// come along, copied where they are not yet its own -- a store's file
|
|
752
|
+
// loads as a view of a shared layer, and a dirty buffer is written in place.
|
|
608
753
|
if (value.type === "file") {
|
|
609
|
-
this.bytesOf(value);
|
|
754
|
+
const bytes = this.bytesOf(value);
|
|
755
|
+
if (!value.dirty)
|
|
756
|
+
value.content = bytes.slice();
|
|
610
757
|
value.dirty = true;
|
|
611
758
|
}
|
|
612
|
-
|
|
759
|
+
const target = `${destination}${path.slice(source.length)}`;
|
|
760
|
+
const replaced = this.nodes.get(target);
|
|
761
|
+
if (replaced?.type === "file" && replaced.dirty && replaced.content && replaced !== value)
|
|
762
|
+
this.release(replaced.content);
|
|
763
|
+
this.nodes.set(target, value);
|
|
613
764
|
this.markMutation(path);
|
|
614
|
-
this.markMutation(
|
|
765
|
+
this.markMutation(target);
|
|
615
766
|
}
|
|
616
767
|
});
|
|
617
768
|
}
|
|
@@ -654,11 +805,19 @@ export class SnapshotWaliFileSystem {
|
|
|
654
805
|
this.changedPaths?.add(normalize(path));
|
|
655
806
|
}
|
|
656
807
|
}
|
|
808
|
+
/** The spare buffers a tree keeps (`release`): large enough to matter, few enough to cost little. */
|
|
809
|
+
const SPARE_MINIMUM = 64 * 1024;
|
|
810
|
+
const SPARE_COUNT = 2;
|
|
811
|
+
const SPARE_TOTAL = 32 * 1024 * 1024;
|
|
657
812
|
function rootNode() {
|
|
658
|
-
const now =
|
|
813
|
+
const now = realtimeMilliseconds();
|
|
659
814
|
return { type: "directory", mode: 0o755, atimeMs: now, mtimeMs: now, ino: 1 };
|
|
660
815
|
}
|
|
661
816
|
function normalize(path) {
|
|
817
|
+
// A path already normal is itself: every path of an image is, and a run's
|
|
818
|
+
// import normalized 41,000 of them by splitting each.
|
|
819
|
+
if (isNormal(path))
|
|
820
|
+
return path;
|
|
662
821
|
const parts = [];
|
|
663
822
|
for (const part of `/${path}`.split("/")) {
|
|
664
823
|
if (!part || part === ".")
|
|
@@ -670,6 +829,32 @@ function normalize(path) {
|
|
|
670
829
|
}
|
|
671
830
|
return `/${parts.join("/")}`;
|
|
672
831
|
}
|
|
832
|
+
/** Absolute, with no empty, `.` or `..` segment and no trailing slash; `/` itself. */
|
|
833
|
+
function isNormal(path) {
|
|
834
|
+
if (path.charCodeAt(0) !== 47)
|
|
835
|
+
return false;
|
|
836
|
+
if (path.length === 1)
|
|
837
|
+
return true;
|
|
838
|
+
let start = 1;
|
|
839
|
+
for (let index = 1; index <= path.length; index += 1) {
|
|
840
|
+
if (index < path.length && path.charCodeAt(index) !== 47)
|
|
841
|
+
continue;
|
|
842
|
+
const length = index - start;
|
|
843
|
+
if (length === 0)
|
|
844
|
+
return false;
|
|
845
|
+
if (path.charCodeAt(start) === 46 && (length === 1 || (length === 2 && path.charCodeAt(start + 1) === 46)))
|
|
846
|
+
return false;
|
|
847
|
+
start = index + 1;
|
|
848
|
+
}
|
|
849
|
+
return true;
|
|
850
|
+
}
|
|
673
851
|
function parent(path) { return path.slice(0, path.lastIndexOf("/")) || "/"; }
|
|
674
|
-
function depth(path) {
|
|
852
|
+
function depth(path) {
|
|
853
|
+
// Its segments, counted without splitting it: a sort of a whole tree asks this of every pair it compares.
|
|
854
|
+
let segments = 1;
|
|
855
|
+
for (let index = 0; index < path.length; index += 1)
|
|
856
|
+
if (path.charCodeAt(index) === 47)
|
|
857
|
+
segments += 1;
|
|
858
|
+
return segments;
|
|
859
|
+
}
|
|
675
860
|
//# sourceMappingURL=snapshot-filesystem.js.map
|