@volter/browser-wali 0.1.9 → 0.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bulk-memory.d.ts +23 -0
- package/dist/bulk-memory.d.ts.map +1 -0
- package/dist/bulk-memory.js +50 -0
- package/dist/bulk-memory.js.map +1 -0
- package/dist/coherent-file-locks.d.ts +4 -1
- package/dist/coherent-file-locks.d.ts.map +1 -1
- package/dist/coherent-file-locks.js +24 -1
- package/dist/coherent-file-locks.js.map +1 -1
- package/dist/descriptors.d.ts +18 -1
- package/dist/descriptors.d.ts.map +1 -1
- package/dist/descriptors.js +51 -6
- package/dist/descriptors.js.map +1 -1
- package/dist/filesystem-host.d.ts +81 -0
- package/dist/filesystem-host.d.ts.map +1 -0
- package/dist/filesystem-host.js +849 -0
- package/dist/filesystem-host.js.map +1 -0
- package/dist/filesystem-protocol.d.ts +49 -1
- package/dist/filesystem-protocol.d.ts.map +1 -1
- package/dist/filesystem-protocol.js +17 -0
- package/dist/filesystem-protocol.js.map +1 -1
- package/dist/filesystem-remote.d.ts +72 -18
- package/dist/filesystem-remote.d.ts.map +1 -1
- package/dist/filesystem-remote.js +271 -40
- package/dist/filesystem-remote.js.map +1 -1
- package/dist/filesystem-worker.js +8 -502
- package/dist/filesystem-worker.js.map +1 -1
- package/dist/filesystem.d.ts +9 -0
- package/dist/filesystem.d.ts.map +1 -1
- package/dist/filesystem.js +209 -61
- package/dist/filesystem.js.map +1 -1
- package/dist/host-idle.d.ts +29 -0
- package/dist/host-idle.d.ts.map +1 -0
- package/dist/host-idle.js +68 -0
- package/dist/host-idle.js.map +1 -0
- package/dist/host.d.ts +1 -0
- package/dist/host.d.ts.map +1 -1
- package/dist/host.js +1 -3
- package/dist/host.js.map +1 -1
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +79 -18
- package/dist/memory.js.map +1 -1
- package/dist/module-layout.d.ts +6 -0
- package/dist/module-layout.d.ts.map +1 -1
- package/dist/module-layout.js +26 -3
- package/dist/module-layout.js.map +1 -1
- package/dist/monotonic-clock.d.ts +9 -0
- package/dist/monotonic-clock.d.ts.map +1 -1
- package/dist/monotonic-clock.js +11 -0
- package/dist/monotonic-clock.js.map +1 -1
- package/dist/network-worker.js +7 -2
- package/dist/network-worker.js.map +1 -1
- package/dist/network.d.ts.map +1 -1
- package/dist/network.js +11 -8
- package/dist/network.js.map +1 -1
- package/dist/process-bridge.d.ts.map +1 -1
- package/dist/process-bridge.js +25 -5
- package/dist/process-bridge.js.map +1 -1
- package/dist/program.d.ts +5 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +13 -12
- package/dist/program.js.map +1 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +75 -9
- package/dist/runtime.js.map +1 -1
- package/dist/shared-file-layer.d.ts +69 -0
- package/dist/shared-file-layer.d.ts.map +1 -0
- package/dist/shared-file-layer.js +299 -0
- package/dist/shared-file-layer.js.map +1 -0
- package/dist/shared-pipes.d.ts +7 -0
- package/dist/shared-pipes.d.ts.map +1 -1
- package/dist/shared-pipes.js +56 -17
- package/dist/shared-pipes.js.map +1 -1
- package/dist/signals.d.ts +2 -0
- package/dist/signals.d.ts.map +1 -1
- package/dist/signals.js +5 -1
- package/dist/signals.js.map +1 -1
- package/dist/snapshot-filesystem.d.ts +36 -3
- package/dist/snapshot-filesystem.d.ts.map +1 -1
- package/dist/snapshot-filesystem.js +204 -19
- package/dist/snapshot-filesystem.js.map +1 -1
- package/dist/stdin.d.ts.map +1 -1
- package/dist/stdin.js +3 -2
- package/dist/stdin.js.map +1 -1
- package/dist/symlink.d.ts.map +1 -1
- package/dist/symlink.js +91 -1
- package/dist/symlink.js.map +1 -1
- package/dist/system.d.ts.map +1 -1
- package/dist/system.js +17 -6
- package/dist/system.js.map +1 -1
- package/dist/thread-coordinator-worker.d.ts +1 -25
- package/dist/thread-coordinator-worker.d.ts.map +1 -1
- package/dist/thread-coordinator-worker.js +29 -2
- package/dist/thread-coordinator-worker.js.map +1 -1
- package/dist/thread-worker.js +13 -8
- package/dist/thread-worker.js.map +1 -1
- package/dist/threads.d.ts +4 -0
- package/dist/threads.d.ts.map +1 -1
- package/dist/threads.js +72 -43
- package/dist/threads.js.map +1 -1
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/websocket-peer.d.ts.map +1 -1
- package/dist/websocket-peer.js +2 -1
- package/dist/websocket-peer.js.map +1 -1
- package/dist/worker-program-protocol.d.ts +26 -0
- package/dist/worker-program-protocol.d.ts.map +1 -1
- package/dist/worker-program-worker.js +26 -8
- package/dist/worker-program-worker.js.map +1 -1
- package/dist/worker-program.d.ts +43 -0
- package/dist/worker-program.d.ts.map +1 -1
- package/dist/worker-program.js +198 -24
- package/dist/worker-program.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The program's own bulk-memory instructions, run against its memory from the
|
|
3
|
+
* host: `memory.fill` and `memory.copy` in a two-function module that imports
|
|
4
|
+
* the memory it is handed.
|
|
5
|
+
*
|
|
6
|
+
* MEASURED 2026-09-28 (node 22, an 8 MB range of a shared wasm memory): V8's
|
|
7
|
+
* `Float64Array.fill` took 0.356 ms (24 GB/s), `memory.fill` 0.062 (136 GB/s);
|
|
8
|
+
* `Uint8Array.set` within the memory 0.269 ms, `memory.copy` 0.132. A typed
|
|
9
|
+
* array over a SharedArrayBuffer is filled and copied with relaxed-atomic
|
|
10
|
+
* word stores; the instructions are the engine's memset and memmove. This is
|
|
11
|
+
* how the Emscripten build zeroes and copies (its libc is compiled with bulk
|
|
12
|
+
* memory), and every range the host zeroes for a program -- each reused
|
|
13
|
+
* mmap -- paid the difference.
|
|
14
|
+
*/
|
|
15
|
+
export interface BulkMemory {
|
|
16
|
+
/** Every byte of [start, start + length) set to `value`; the caller has checked the range. */
|
|
17
|
+
fill(start: number, value: number, length: number): void;
|
|
18
|
+
/** `length` bytes from `source` to `target`, overlapping or not; the caller has checked both ranges. */
|
|
19
|
+
copy(target: number, source: number, length: number): void;
|
|
20
|
+
}
|
|
21
|
+
/** The helper for `memory`, made once; null where the engine will not compile it (then the caller's typed arrays are the path). */
|
|
22
|
+
export declare function bulkMemory(memory: WebAssembly.Memory): BulkMemory | null;
|
|
23
|
+
//# sourceMappingURL=bulk-memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulk-memory.d.ts","sourceRoot":"","sources":["../src/bulk-memory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,UAAU;IACzB,8FAA8F;IAC9F,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACzD,wGAAwG;IACxG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5D;AAID,mIAAmI;AACnI,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,GAAG,UAAU,GAAG,IAAI,CAaxE"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
const helpers = new WeakMap();
|
|
2
|
+
/** The helper for `memory`, made once; null where the engine will not compile it (then the caller's typed arrays are the path). */
|
|
3
|
+
export function bulkMemory(memory) {
|
|
4
|
+
let helper = helpers.get(memory);
|
|
5
|
+
if (helper !== undefined)
|
|
6
|
+
return helper;
|
|
7
|
+
try {
|
|
8
|
+
const shared = typeof SharedArrayBuffer !== "undefined" && memory.buffer instanceof SharedArrayBuffer;
|
|
9
|
+
const instance = new WebAssembly.Instance(new WebAssembly.Module(helperModule(shared)), { e: { m: memory } });
|
|
10
|
+
const exports = instance.exports;
|
|
11
|
+
helper = { fill: exports.fill, copy: exports.copy };
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
helper = null;
|
|
15
|
+
}
|
|
16
|
+
helpers.set(memory, helper);
|
|
17
|
+
return helper;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* (module
|
|
21
|
+
* (import "e" "m" (memory 0 65536 [shared]))
|
|
22
|
+
* (func (export "fill") (param i32 i32 i32) local.get 0 local.get 1 local.get 2 memory.fill)
|
|
23
|
+
* (func (export "copy") (param i32 i32 i32) local.get 0 local.get 1 local.get 2 memory.copy))
|
|
24
|
+
* The limits admit any wasm32 memory: an import's minimum 0 is below every
|
|
25
|
+
* memory's, and a shared one's maximum of 65536 pages (4 GiB) is at or above
|
|
26
|
+
* every declared one.
|
|
27
|
+
*/
|
|
28
|
+
function helperModule(shared) {
|
|
29
|
+
const i32 = 0x7f;
|
|
30
|
+
return new Uint8Array([
|
|
31
|
+
0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00,
|
|
32
|
+
// type: (i32 i32 i32) -> ()
|
|
33
|
+
0x01, 0x07, 0x01, 0x60, 0x03, i32, i32, i32, 0x00,
|
|
34
|
+
// import "e" "m": memory. Shared (flags 3): min 0, max 65536, since a shared
|
|
35
|
+
// memory always declares one. Plain (flags 0): min 0 and no maximum, which
|
|
36
|
+
// any plain memory satisfies, with a maximum or without.
|
|
37
|
+
...(shared
|
|
38
|
+
? [0x02, 0x0b, 0x01, 0x01, 0x65, 0x01, 0x6d, 0x02, 0x03, 0x00, 0x80, 0x80, 0x04]
|
|
39
|
+
: [0x02, 0x08, 0x01, 0x01, 0x65, 0x01, 0x6d, 0x02, 0x00, 0x00]),
|
|
40
|
+
// two functions of type 0
|
|
41
|
+
0x03, 0x03, 0x02, 0x00, 0x00,
|
|
42
|
+
// exports "fill" -> 0, "copy" -> 1
|
|
43
|
+
0x07, 0x0f, 0x02, 0x04, 0x66, 0x69, 0x6c, 0x6c, 0x00, 0x00, 0x04, 0x63, 0x6f, 0x70, 0x79, 0x00, 0x01,
|
|
44
|
+
// code
|
|
45
|
+
0x0a, 0x1a, 0x02,
|
|
46
|
+
0x0b, 0x00, 0x20, 0x00, 0x20, 0x01, 0x20, 0x02, 0xfc, 0x0b, 0x00, 0x0b,
|
|
47
|
+
0x0c, 0x00, 0x20, 0x00, 0x20, 0x01, 0x20, 0x02, 0xfc, 0x0a, 0x00, 0x00, 0x0b,
|
|
48
|
+
]);
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=bulk-memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulk-memory.js","sourceRoot":"","sources":["../src/bulk-memory.ts"],"names":[],"mappings":"AAqBA,MAAM,OAAO,GAAG,IAAI,OAAO,EAAyC,CAAC;AAErE,mIAAmI;AACnI,MAAM,UAAU,UAAU,CAAC,MAA0B;IACnD,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,OAAO,iBAAiB,KAAK,WAAW,IAAI,MAAM,CAAC,MAAM,YAAY,iBAAiB,CAAC;QACtG,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QAC9G,MAAM,OAAO,GAAG,QAAQ,CAAC,OAA8I,CAAC;QACxK,MAAM,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,YAAY,CAAC,MAAe;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC;IACjB,OAAO,IAAI,UAAU,CAAC;QACpB,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC9C,4BAA4B;QAC5B,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;QACjD,6EAA6E;QAC7E,2EAA2E;QAC3E,yDAAyD;QACzD,GAAG,CAAC,MAAM;YACR,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;YAChF,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACjE,0BAA0B;QAC1B,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QAC5B,mCAAmC;QACnC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QACpG,OAAO;QACP,IAAI,EAAE,IAAI,EAAE,IAAI;QAChB,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;QACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;KAC7E,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { BrowserFileCoherenceClient } from "@volter/browser-runtime/browser-file-coherence.js";
|
|
2
|
-
import
|
|
2
|
+
import { BrowserFileLockClient } from "@volter/browser-runtime/browser-file-locks.js";
|
|
3
|
+
import type { BrowserFileLockRequest, BrowserFileLockResponse } from "@volter/browser-runtime/browser-file-locks.js";
|
|
3
4
|
import type { WaliFileSystem } from "./types.js";
|
|
4
5
|
/** Couples advisory-lock ownership to exact file refresh/publish boundaries. */
|
|
5
6
|
export declare class WaliCoherentFileLockClient {
|
|
@@ -14,6 +15,8 @@ export declare class WaliCoherentFileLockClient {
|
|
|
14
15
|
request(request: BrowserFileLockRequest): BrowserFileLockResponse;
|
|
15
16
|
private refresh;
|
|
16
17
|
private publish;
|
|
18
|
+
private refreshNow;
|
|
19
|
+
private publishNow;
|
|
17
20
|
private readLocal;
|
|
18
21
|
private writeLocal;
|
|
19
22
|
private install;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coherent-file-locks.d.ts","sourceRoot":"","sources":["../src/coherent-file-locks.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAK3B,MAAM,mDAAmD,CAAC;AAC3D,OAAO,
|
|
1
|
+
{"version":3,"file":"coherent-file-locks.d.ts","sourceRoot":"","sources":["../src/coherent-file-locks.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAK3B,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AACtF,OAAO,KAAK,EAGV,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,+CAA+C,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAQjD,gFAAgF;AAChF,qBAAa,0BAA0B;IAKnC,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAN7B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmB;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;gBAGjC,KAAK,EAAE,qBAAqB,EAC5B,SAAS,EAAE,0BAA0B,EACrC,UAAU,EAAE,cAAc;IAG7C,8EAA8E;IAC9E,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B,OAAO,CAAC,OAAO,EAAE,sBAAsB,GAAG,uBAAuB;IAqDjE,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,OAAO;IAWf,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,WAAW;CACpB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { BrowserFileCoherenceClient, coherentFileFamily, coherentFileParents, ensureCoherentFileParents, } from "@volter/browser-runtime/browser-file-coherence.js";
|
|
2
|
+
import { BrowserFileLockClient } from "@volter/browser-runtime/browser-file-locks.js";
|
|
2
3
|
/** Couples advisory-lock ownership to exact file refresh/publish boundaries. */
|
|
3
4
|
export class WaliCoherentFileLockClient {
|
|
4
5
|
locks;
|
|
@@ -71,7 +72,29 @@ export class WaliCoherentFileLockClient {
|
|
|
71
72
|
// shapes of the one race in a minute. So every family member carried here
|
|
72
73
|
// is dropped from the changed set, and the host side tells its base what
|
|
73
74
|
// coherence wrote (`worker-program.ts`, `onApplied`).
|
|
75
|
+
// A lock's coherence -- the pull when it is taken, the push when it is let
|
|
76
|
+
// go -- is part of what a close or fcntl waits for, and is counted with the
|
|
77
|
+
// lock requests (`BrowserFileLockClient.waited`, the profile's `locks`;
|
|
78
|
+
// review of 5b9a6d3).
|
|
74
79
|
refresh(path) {
|
|
80
|
+
const began = performance.now();
|
|
81
|
+
try {
|
|
82
|
+
this.refreshNow(path);
|
|
83
|
+
}
|
|
84
|
+
finally {
|
|
85
|
+
BrowserFileLockClient.waited.ms += performance.now() - began;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
publish(path) {
|
|
89
|
+
const began = performance.now();
|
|
90
|
+
try {
|
|
91
|
+
this.publishNow(path);
|
|
92
|
+
}
|
|
93
|
+
finally {
|
|
94
|
+
BrowserFileLockClient.waited.ms += performance.now() - began;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
refreshNow(path) {
|
|
75
98
|
for (const member of coherentFileFamily(path)) {
|
|
76
99
|
const shared = this.coherence.pull(member);
|
|
77
100
|
if (!shared && this.locallyCreated.delete(member)) {
|
|
@@ -84,7 +107,7 @@ export class WaliCoherentFileLockClient {
|
|
|
84
107
|
this.filesystem.dropChangedPaths?.([member]);
|
|
85
108
|
}
|
|
86
109
|
}
|
|
87
|
-
|
|
110
|
+
publishNow(path) {
|
|
88
111
|
for (const member of coherentFileFamily(path)) {
|
|
89
112
|
this.coherence.push(member, this.readLocal(member));
|
|
90
113
|
this.filesystem.dropChangedPaths?.([member]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coherent-file-locks.js","sourceRoot":"","sources":["../src/coherent-file-locks.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,GAE1B,MAAM,mDAAmD,CAAC;
|
|
1
|
+
{"version":3,"file":"coherent-file-locks.js","sourceRoot":"","sources":["../src/coherent-file-locks.ts"],"names":[],"mappings":"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"}
|
package/dist/descriptors.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ export interface WaliOpenDescription<T = unknown> {
|
|
|
4
4
|
readonly kind: string;
|
|
5
5
|
readonly value: T;
|
|
6
6
|
references: number;
|
|
7
|
-
release?: () => void;
|
|
7
|
+
release?: (() => void) | undefined;
|
|
8
8
|
}
|
|
9
9
|
export declare class WaliDescriptionRegistry {
|
|
10
10
|
private nextId;
|
|
@@ -24,11 +24,15 @@ export interface WaliDescriptorEntry {
|
|
|
24
24
|
export declare class WaliProcessDescriptorTable {
|
|
25
25
|
readonly registry: WaliDescriptionRegistry;
|
|
26
26
|
readonly entries: Array<WaliDescriptorEntry | undefined>;
|
|
27
|
+
/** How many of this table's descriptors name each open description. */
|
|
28
|
+
private readonly named;
|
|
27
29
|
sharedEntries: Int32Array;
|
|
28
30
|
constructor(registry: WaliDescriptionRegistry, buffer?: SharedArrayBuffer);
|
|
29
31
|
get(fd: number): WaliOpenDescription | undefined;
|
|
30
32
|
set(fd: number, description: WaliOpenDescription, flags?: number): void;
|
|
31
33
|
close(fd: number): boolean;
|
|
34
|
+
/** Whether any of this table's descriptors still names the description: a process's own count, whatever other processes hold. */
|
|
35
|
+
names(description: number): boolean;
|
|
32
36
|
copy(): WaliProcessDescriptorTable;
|
|
33
37
|
exec(): void;
|
|
34
38
|
exit(): void;
|
|
@@ -40,6 +44,19 @@ export declare class WaliDescriptionView<T> {
|
|
|
40
44
|
private readonly kind;
|
|
41
45
|
private readonly release?;
|
|
42
46
|
constructor(table: WaliProcessDescriptorTable, kind: string, release?: ((value: T) => void) | undefined);
|
|
47
|
+
/**
|
|
48
|
+
* What each descriptor resolved to, and the table entry it was resolved
|
|
49
|
+
* from. An entry object is made by every `set` and dropped by every
|
|
50
|
+
* `close`, whoever calls them (a pipe's dup2 goes to the table, not this
|
|
51
|
+
* view), and the description it names cannot change under it: so while the
|
|
52
|
+
* table holds the same entry, the answer stands. A file call resolved its
|
|
53
|
+
* descriptor through the entry, the registry's map and the kind on every
|
|
54
|
+
* call, twice (2026-09-28); a kernel indexes an array.
|
|
55
|
+
*/
|
|
56
|
+
private readonly resolvedEntries;
|
|
57
|
+
private readonly resolvedValues;
|
|
58
|
+
private readonly resolvedOwn;
|
|
59
|
+
private resolve;
|
|
43
60
|
get(fd: number): T | undefined;
|
|
44
61
|
has(fd: number): boolean;
|
|
45
62
|
set(fd: number, value: T): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"descriptors.d.ts","sourceRoot":"","sources":["../src/descriptors.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAC3F,MAAM,WAAW,mBAAmB,CAAC,CAAC,GAAG,OAAO;IAC9C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"descriptors.d.ts","sourceRoot":"","sources":["../src/descriptors.ts"],"names":[],"mappings":"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"}
|
package/dist/descriptors.js
CHANGED
|
@@ -13,7 +13,8 @@ export class WaliDescriptionRegistry {
|
|
|
13
13
|
if (this.nextId >= 65_536)
|
|
14
14
|
throw new Error("EMFILE");
|
|
15
15
|
}
|
|
16
|
-
|
|
16
|
+
// One shape for every description: an object spread gave each its own, slow to make and to read.
|
|
17
|
+
const description = { id: this.nextId++, kind, value, references: 0, release };
|
|
17
18
|
this.descriptions.set(description.id, description);
|
|
18
19
|
if (kind === "special" && typeof value === "object" && value !== null && "stdio" in value)
|
|
19
20
|
Atomics.store(this.pipeMetadata, description.id * 3 + 2, Number(value.stdio) + 1);
|
|
@@ -43,6 +44,8 @@ export class WaliDescriptionRegistry {
|
|
|
43
44
|
export class WaliProcessDescriptorTable {
|
|
44
45
|
registry;
|
|
45
46
|
entries = [];
|
|
47
|
+
/** How many of this table's descriptors name each open description. */
|
|
48
|
+
named = new Map();
|
|
46
49
|
sharedEntries;
|
|
47
50
|
constructor(registry, buffer = new SharedArrayBuffer(65_536 * 4)) {
|
|
48
51
|
this.registry = registry;
|
|
@@ -56,6 +59,7 @@ export class WaliProcessDescriptorTable {
|
|
|
56
59
|
this.registry.retain(description.id);
|
|
57
60
|
this.close(fd);
|
|
58
61
|
this.entries[fd] = { description: description.id, flags };
|
|
62
|
+
this.named.set(description.id, (this.named.get(description.id) ?? 0) + 1);
|
|
59
63
|
Atomics.store(this.sharedEntries, fd, description.id);
|
|
60
64
|
}
|
|
61
65
|
close(fd) {
|
|
@@ -63,10 +67,17 @@ export class WaliProcessDescriptorTable {
|
|
|
63
67
|
if (!entry)
|
|
64
68
|
return false;
|
|
65
69
|
delete this.entries[fd];
|
|
70
|
+
const left = (this.named.get(entry.description) ?? 1) - 1;
|
|
71
|
+
if (left > 0)
|
|
72
|
+
this.named.set(entry.description, left);
|
|
73
|
+
else
|
|
74
|
+
this.named.delete(entry.description);
|
|
66
75
|
Atomics.store(this.sharedEntries, fd, 0);
|
|
67
76
|
this.registry.release(entry.description);
|
|
68
77
|
return true;
|
|
69
78
|
}
|
|
79
|
+
/** Whether any of this table's descriptors still names the description: a process's own count, whatever other processes hold. */
|
|
80
|
+
names(description) { return this.named.has(description); }
|
|
70
81
|
copy() {
|
|
71
82
|
const child = new WaliProcessDescriptorTable(this.registry);
|
|
72
83
|
this.entries.forEach((entry, fd) => {
|
|
@@ -95,16 +106,50 @@ export class WaliDescriptionView {
|
|
|
95
106
|
this.kind = kind;
|
|
96
107
|
this.release = release;
|
|
97
108
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
109
|
+
/**
|
|
110
|
+
* What each descriptor resolved to, and the table entry it was resolved
|
|
111
|
+
* from. An entry object is made by every `set` and dropped by every
|
|
112
|
+
* `close`, whoever calls them (a pipe's dup2 goes to the table, not this
|
|
113
|
+
* view), and the description it names cannot change under it: so while the
|
|
114
|
+
* table holds the same entry, the answer stands. A file call resolved its
|
|
115
|
+
* descriptor through the entry, the registry's map and the kind on every
|
|
116
|
+
* call, twice (2026-09-28); a kernel indexes an array.
|
|
117
|
+
*/
|
|
118
|
+
resolvedEntries = [];
|
|
119
|
+
resolvedValues = [];
|
|
120
|
+
resolvedOwn = [];
|
|
121
|
+
resolve(fd) {
|
|
122
|
+
const entry = this.table.entries[fd];
|
|
123
|
+
if (entry === undefined) {
|
|
124
|
+
if (this.resolvedEntries[fd] !== undefined) {
|
|
125
|
+
this.resolvedEntries[fd] = undefined;
|
|
126
|
+
this.resolvedValues[fd] = undefined;
|
|
127
|
+
}
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
if (this.resolvedEntries[fd] !== entry) {
|
|
131
|
+
const description = this.table.registry.get(entry.description);
|
|
132
|
+
const own = description?.kind === this.kind;
|
|
133
|
+
this.resolvedEntries[fd] = entry;
|
|
134
|
+
this.resolvedValues[fd] = own ? description.value : undefined;
|
|
135
|
+
this.resolvedOwn[fd] = own;
|
|
136
|
+
}
|
|
137
|
+
return this.resolvedOwn[fd];
|
|
101
138
|
}
|
|
102
|
-
|
|
139
|
+
get(fd) { return this.resolve(fd) ? this.resolvedValues[fd] : undefined; }
|
|
140
|
+
has(fd) { return this.resolve(fd); }
|
|
103
141
|
set(fd, value) {
|
|
104
142
|
const description = this.table.registry.create(this.kind, value, () => this.release?.(value));
|
|
105
143
|
this.table.set(fd, description);
|
|
106
144
|
}
|
|
107
|
-
delete(fd) {
|
|
145
|
+
delete(fd) {
|
|
146
|
+
if (!this.has(fd))
|
|
147
|
+
return false;
|
|
148
|
+
// Not held past its close: the value may be a pipe handle or a special's closures (review of a328f98).
|
|
149
|
+
this.resolvedEntries[fd] = undefined;
|
|
150
|
+
this.resolvedValues[fd] = undefined;
|
|
151
|
+
return this.table.close(fd);
|
|
152
|
+
}
|
|
108
153
|
*values() {
|
|
109
154
|
for (let fd = 0; fd < this.table.entries.length; fd++) {
|
|
110
155
|
if (this.has(fd))
|
package/dist/descriptors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"descriptors.js","sourceRoot":"","sources":["../src/descriptors.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,uBAAuB;IAC1B,MAAM,GAAG,CAAC,CAAC;IACV,YAAY,CAAa;IAClC,YAAY,MAAM,GAAG,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1F,YAAY,GAAG,IAAI,GAAG,EAA+B,CAAC;IAEvE,MAAM,CAAI,IAAY,EAAE,KAAQ,EAAE,OAAoB;QACpD,OAAO,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QACjF,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;YAC1B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;YAChB,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;gBAAE,IAAI,CAAC,MAAM,EAAE,CAAC;YACzD,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;QACvD,CAAC;QACD,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"descriptors.js","sourceRoot":"","sources":["../src/descriptors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { WaliFileDescriptorTable } from "./filesystem.js";
|
|
2
|
+
import { type FilesystemWorkerMessage, type WaliFilesystemChannel } from "./filesystem-protocol.js";
|
|
3
|
+
interface ChannelEntry {
|
|
4
|
+
control: Int32Array;
|
|
5
|
+
payload: Uint8Array;
|
|
6
|
+
state: ChannelState;
|
|
7
|
+
}
|
|
8
|
+
/** The program is about to run: the port is read no longer, and the page is told which import it took last. */
|
|
9
|
+
export declare function closeHostPort(): void;
|
|
10
|
+
/** The host's run is over: nothing of it is held for the next (review of c96148c). */
|
|
11
|
+
export declare function resetHost(): void;
|
|
12
|
+
/** The host runs on the calling realm's main thread from here on (ADR-0046); call before `initializeHost`. */
|
|
13
|
+
export declare function hostInThread(bell: SharedArrayBuffer): void;
|
|
14
|
+
interface ChannelState {
|
|
15
|
+
process: number;
|
|
16
|
+
snapshot?: Uint8Array;
|
|
17
|
+
replacement?: {
|
|
18
|
+
bytes: Uint8Array;
|
|
19
|
+
offset: number;
|
|
20
|
+
peerPatch: boolean;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* The syscall handlers for this channel's process, and what they were made
|
|
24
|
+
* for. Every syscall made them again, with the shared-pipe host around them:
|
|
25
|
+
* two objects of a hundred closures for each call (2026-09-27).
|
|
26
|
+
*/
|
|
27
|
+
handlers?: {
|
|
28
|
+
table: WaliFileDescriptorTable;
|
|
29
|
+
entries: ArrayBufferLike;
|
|
30
|
+
imports: Record<string, (...args: Array<number | bigint>) => number | bigint | void>;
|
|
31
|
+
};
|
|
32
|
+
/** `handlersNow`'s answer for the main thread's router, and the table it was made for. */
|
|
33
|
+
direct?: {
|
|
34
|
+
table: WaliFileDescriptorTable;
|
|
35
|
+
handlers: {
|
|
36
|
+
imports: Record<string, (...args: Array<number | bigint>) => number | bigint | void>;
|
|
37
|
+
errno(error: unknown): number;
|
|
38
|
+
owns(fd: number): boolean;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
view?: DataView;
|
|
42
|
+
}
|
|
43
|
+
/** The host's tree and descriptors for a run, in whichever realm runs it. */
|
|
44
|
+
export declare function initializeHost(data: Extract<FilesystemWorkerMessage, {
|
|
45
|
+
kind: "initialize";
|
|
46
|
+
}>): Promise<void>;
|
|
47
|
+
export declare function attachChannel(channel: WaliFilesystemChannel & {
|
|
48
|
+
process?: number;
|
|
49
|
+
}): ChannelEntry;
|
|
50
|
+
/**
|
|
51
|
+
* One channel's waiting request, answered now on this thread (ADR-0046). A
|
|
52
|
+
* request whose blocking lock is held is left waiting and asked again later.
|
|
53
|
+
* Answers exactly as `dispatch` does.
|
|
54
|
+
*/
|
|
55
|
+
export declare function serveNow(entry: ChannelEntry): boolean;
|
|
56
|
+
/** Whether a pump has anything to do: a ring or a deferred lock. */
|
|
57
|
+
export declare function hostWaiting(): boolean;
|
|
58
|
+
/**
|
|
59
|
+
* What the main thread owes while it is in the host (ADR-0046): the page's
|
|
60
|
+
* import, every other channel's waiting request, and, when it is about to
|
|
61
|
+
* block or has not published for a while, its changes to the page.
|
|
62
|
+
*/
|
|
63
|
+
export declare function pumpHost(blocking?: boolean): void;
|
|
64
|
+
/** Whether `path` is `root` or lies below it. */
|
|
65
|
+
export declare function underRoot(path: string, root: string): boolean;
|
|
66
|
+
/**
|
|
67
|
+
* A syscall on the main thread's own channel, called (ADR-0046): the same
|
|
68
|
+
* handlers `SyscallBinary` reaches, with no payload encoded and decoded
|
|
69
|
+
* between the caller and them. Undefined while a held lock defers it.
|
|
70
|
+
*/
|
|
71
|
+
export declare function syscallNow(entry: ChannelEntry, name: string, args: Array<number | bigint>): bigint | {
|
|
72
|
+
failed: number;
|
|
73
|
+
} | undefined;
|
|
74
|
+
/** The main thread's own channel's handlers, and the errno a throw from one answers (ADR-0046). */
|
|
75
|
+
export declare function handlersNow(entry: ChannelEntry): {
|
|
76
|
+
imports: Record<string, (...args: Array<number | bigint>) => number | bigint | void>;
|
|
77
|
+
errno(error: unknown): number;
|
|
78
|
+
owns(fd: number): boolean;
|
|
79
|
+
};
|
|
80
|
+
export {};
|
|
81
|
+
//# sourceMappingURL=filesystem-host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem-host.d.ts","sourceRoot":"","sources":["../src/filesystem-host.ts"],"names":[],"mappings":"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"}
|