@volter/browser-wali 0.1.5 → 0.1.6
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/README.md +73 -0
- package/dist/browser-wali-command.d.ts +3 -0
- package/dist/browser-wali-command.d.ts.map +1 -1
- package/dist/browser-wali-command.js +2 -1
- package/dist/browser-wali-command.js.map +1 -1
- package/dist/capabilities.d.ts +73 -1
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +86 -2
- package/dist/capabilities.js.map +1 -1
- package/dist/child-processes.d.ts +24 -0
- package/dist/child-processes.d.ts.map +1 -0
- package/dist/child-processes.js +134 -0
- package/dist/child-processes.js.map +1 -0
- package/dist/codec-protocol.d.ts +66 -0
- package/dist/codec-protocol.d.ts.map +1 -0
- package/dist/codec-protocol.js +59 -0
- package/dist/codec-protocol.js.map +1 -0
- package/dist/codec-remote.d.ts +33 -0
- package/dist/codec-remote.d.ts.map +1 -0
- package/dist/codec-remote.js +190 -0
- package/dist/codec-remote.js.map +1 -0
- package/dist/codec-worker.d.ts +2 -0
- package/dist/codec-worker.d.ts.map +1 -0
- package/dist/codec-worker.js +438 -0
- package/dist/codec-worker.js.map +1 -0
- package/dist/coherent-file-locks.d.ts.map +1 -1
- package/dist/coherent-file-locks.js +17 -5
- package/dist/coherent-file-locks.js.map +1 -1
- package/dist/descriptors.d.ts +49 -0
- package/dist/descriptors.d.ts.map +1 -0
- package/dist/descriptors.js +115 -0
- package/dist/descriptors.js.map +1 -0
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +2 -2
- package/dist/events.js.map +1 -1
- package/dist/filesystem-protocol.d.ts +28 -1
- package/dist/filesystem-protocol.d.ts.map +1 -1
- package/dist/filesystem-protocol.js +18 -0
- package/dist/filesystem-protocol.js.map +1 -1
- package/dist/filesystem-remote.d.ts +26 -2
- package/dist/filesystem-remote.d.ts.map +1 -1
- package/dist/filesystem-remote.js +132 -23
- package/dist/filesystem-remote.js.map +1 -1
- package/dist/filesystem-worker.js +274 -34
- package/dist/filesystem-worker.js.map +1 -1
- package/dist/filesystem.d.ts +30 -1
- package/dist/filesystem.d.ts.map +1 -1
- package/dist/filesystem.js +180 -50
- package/dist/filesystem.js.map +1 -1
- package/dist/fork-worker.d.ts +2 -0
- package/dist/fork-worker.d.ts.map +1 -0
- package/dist/fork-worker.js +52 -0
- package/dist/fork-worker.js.map +1 -0
- package/dist/host.d.ts +36 -0
- package/dist/host.d.ts.map +1 -0
- package/dist/host.js +153 -0
- package/dist/host.js.map +1 -0
- package/dist/loopback-host.d.ts +25 -1
- package/dist/loopback-host.d.ts.map +1 -1
- package/dist/loopback-host.js +447 -13
- package/dist/loopback-host.js.map +1 -1
- package/dist/memory.d.ts +65 -2
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +306 -49
- package/dist/memory.js.map +1 -1
- package/dist/module-layout.d.ts +2 -0
- package/dist/module-layout.d.ts.map +1 -1
- package/dist/module-layout.js +4 -2
- package/dist/module-layout.js.map +1 -1
- package/dist/monotonic-clock.d.ts +12 -0
- package/dist/monotonic-clock.d.ts.map +1 -0
- package/dist/monotonic-clock.js +14 -0
- package/dist/monotonic-clock.js.map +1 -0
- package/dist/network-protocol.d.ts +12 -1
- package/dist/network-protocol.d.ts.map +1 -1
- package/dist/network-protocol.js +6 -0
- package/dist/network-protocol.js.map +1 -1
- package/dist/network-worker.js +149 -20
- package/dist/network-worker.js.map +1 -1
- package/dist/network.d.ts +15 -3
- package/dist/network.d.ts.map +1 -1
- package/dist/network.js +74 -39
- package/dist/network.js.map +1 -1
- package/dist/process-adapter.d.ts +4 -1
- package/dist/process-adapter.d.ts.map +1 -1
- package/dist/process-adapter.js +3 -3
- package/dist/process-adapter.js.map +1 -1
- package/dist/process-bridge.d.ts +43 -0
- package/dist/process-bridge.d.ts.map +1 -1
- package/dist/process-bridge.js +30 -1
- package/dist/process-bridge.js.map +1 -1
- package/dist/program.d.ts +60 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +92 -31
- package/dist/program.js.map +1 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +491 -134
- package/dist/runtime.js.map +1 -1
- package/dist/select.d.ts +16 -0
- package/dist/select.d.ts.map +1 -0
- package/dist/select.js +100 -0
- package/dist/select.js.map +1 -0
- package/dist/shared-pipes.d.ts +17 -6
- package/dist/shared-pipes.d.ts.map +1 -1
- package/dist/shared-pipes.js +94 -70
- package/dist/shared-pipes.js.map +1 -1
- package/dist/signals.d.ts +48 -0
- package/dist/signals.d.ts.map +1 -0
- package/dist/signals.js +232 -0
- package/dist/signals.js.map +1 -0
- package/dist/snapshot-filesystem.d.ts +128 -2
- package/dist/snapshot-filesystem.d.ts.map +1 -1
- package/dist/snapshot-filesystem.js +481 -53
- package/dist/snapshot-filesystem.js.map +1 -1
- package/dist/spawn-policy.d.ts +5 -0
- package/dist/spawn-policy.d.ts.map +1 -0
- package/dist/spawn-policy.js +29 -0
- package/dist/spawn-policy.js.map +1 -0
- package/dist/stdin.d.ts +2 -0
- package/dist/stdin.d.ts.map +1 -1
- package/dist/stdin.js +4 -0
- package/dist/stdin.js.map +1 -1
- package/dist/symlink.d.ts +8 -0
- package/dist/symlink.d.ts.map +1 -1
- package/dist/symlink.js +13 -0
- package/dist/symlink.js.map +1 -1
- package/dist/system.d.ts +152 -1
- package/dist/system.d.ts.map +1 -1
- package/dist/system.js +226 -7
- package/dist/system.js.map +1 -1
- package/dist/thread-coordinator-worker.d.ts +1 -0
- package/dist/thread-coordinator-worker.d.ts.map +1 -1
- package/dist/thread-coordinator-worker.js +1 -0
- package/dist/thread-coordinator-worker.js.map +1 -1
- package/dist/thread-worker.js +241 -122
- package/dist/thread-worker.js.map +1 -1
- package/dist/threads.d.ts +12 -2
- package/dist/threads.d.ts.map +1 -1
- package/dist/threads.js +30 -10
- package/dist/threads.js.map +1 -1
- package/dist/types.d.ts +39 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/websocket-peer.d.ts.map +1 -1
- package/dist/websocket-peer.js +4 -14
- package/dist/websocket-peer.js.map +1 -1
- package/dist/worker-program-protocol.d.ts +70 -3
- package/dist/worker-program-protocol.d.ts.map +1 -1
- package/dist/worker-program-worker.js +115 -23
- package/dist/worker-program-worker.js.map +1 -1
- package/dist/worker-program.d.ts +25 -1
- package/dist/worker-program.d.ts.map +1 -1
- package/dist/worker-program.js +470 -61
- package/dist/worker-program.js.map +1 -1
- package/dist/worker-standby.d.ts +3 -0
- package/dist/worker-standby.d.ts.map +1 -0
- package/dist/worker-standby.js +17 -0
- package/dist/worker-standby.js.map +1 -0
- package/package.json +20 -6
|
@@ -0,0 +1,438 @@
|
|
|
1
|
+
import { encodeBase64, decodeBase64 } from "@volter/browser-runtime/browser-base64.js";
|
|
2
|
+
/**
|
|
3
|
+
* The process's codec worker. It owns every WebCodecs object, because an
|
|
4
|
+
* import handler blocks the worker running the wasm and a codec on that worker
|
|
5
|
+
* could never deliver an output callback. Requests arrive on one channel per
|
|
6
|
+
* guest thread; the guest thread is parked for the whole call, so this worker
|
|
7
|
+
* reads and writes the guest's own pointers in the process memory it was
|
|
8
|
+
* handed, re-reading `memory.buffer` on every request because a shared
|
|
9
|
+
* memory's buffer object changes when the memory grows.
|
|
10
|
+
*/
|
|
11
|
+
import { CODEC_ARGUMENTS, CODEC_MAX_HANDLES, CODEC_MAX_INFLIGHT, CODEC_MAX_OUTPUTS, CODEC_PULL_WAIT, CODEC_WAIT_MS, CodecControl, CodecKind, CodecOperation, } from "./codec-protocol.js";
|
|
12
|
+
const EIO = -5;
|
|
13
|
+
const EBADF = -9;
|
|
14
|
+
const EAGAIN = -11;
|
|
15
|
+
const EINVAL = -22;
|
|
16
|
+
const EMFILE = -24;
|
|
17
|
+
const EOPNOTSUPP = -95;
|
|
18
|
+
const ENOBUFS = -105;
|
|
19
|
+
const ETIMEDOUT = -110;
|
|
20
|
+
const scope = globalThis;
|
|
21
|
+
const encoder = new TextEncoder();
|
|
22
|
+
const decoder = new TextDecoder("utf-8", { fatal: true });
|
|
23
|
+
const handles = new Map();
|
|
24
|
+
let processMemory;
|
|
25
|
+
let nextHandle = 1;
|
|
26
|
+
scope.onmessage = (event) => {
|
|
27
|
+
if (event.data.kind === "initialize") {
|
|
28
|
+
processMemory = event.data.memory;
|
|
29
|
+
scope.postMessage({
|
|
30
|
+
kind: typeof VideoEncoder === "undefined" ? "error" : "ready",
|
|
31
|
+
...(typeof VideoEncoder === "undefined" ? { message: "WebCodecs is unavailable in this worker." } : {}),
|
|
32
|
+
});
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const control = new Int32Array(event.data.control);
|
|
36
|
+
const port = event.data.port;
|
|
37
|
+
port.onmessage = (request) => { void dispatch(control, request.data); };
|
|
38
|
+
port.start();
|
|
39
|
+
};
|
|
40
|
+
async function dispatch(control, requestId) {
|
|
41
|
+
if (Atomics.load(control, CodecControl.State) !== requestId)
|
|
42
|
+
return;
|
|
43
|
+
const operation = Atomics.load(control, CodecControl.Operation);
|
|
44
|
+
const args = Array.from({ length: CODEC_ARGUMENTS }, (_, index) => Atomics.load(control, CodecControl.Argument0 + index));
|
|
45
|
+
let result = EIO;
|
|
46
|
+
// The guest's client retires a request it stopped waiting for; after that
|
|
47
|
+
// the guest may have reused the pointers, so no guest write may follow.
|
|
48
|
+
const live = () => Atomics.load(control, CodecControl.State) === requestId;
|
|
49
|
+
try {
|
|
50
|
+
result = await operate(operation, args, live);
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
result = error instanceof CodecFailure ? error.errno : EIO;
|
|
54
|
+
if (!(error instanceof CodecFailure)) {
|
|
55
|
+
console.error("[WALI codec] request failed", error);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// A timed-out caller may already have retired this generation.
|
|
59
|
+
if (Atomics.compareExchange(control, CodecControl.State, requestId, -requestId) !== requestId)
|
|
60
|
+
return;
|
|
61
|
+
Atomics.store(control, CodecControl.Result, result);
|
|
62
|
+
Atomics.store(control, CodecControl.State, requestId + 1);
|
|
63
|
+
Atomics.notify(control, CodecControl.State);
|
|
64
|
+
}
|
|
65
|
+
class CodecFailure extends Error {
|
|
66
|
+
errno;
|
|
67
|
+
constructor(errno, message = `codec failure ${errno}`) {
|
|
68
|
+
super(message);
|
|
69
|
+
this.errno = errno;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function memoryBytes() {
|
|
73
|
+
if (!processMemory)
|
|
74
|
+
throw new CodecFailure(EIO, "The codec worker has no process memory.");
|
|
75
|
+
return new Uint8Array(processMemory.buffer);
|
|
76
|
+
}
|
|
77
|
+
/** Copy guest bytes out of shared memory; no guest-owned view is retained. */
|
|
78
|
+
function guestBytes(pointer, length) {
|
|
79
|
+
const bytes = memoryBytes();
|
|
80
|
+
if (pointer < 0 || length < 0 || pointer + length > bytes.byteLength)
|
|
81
|
+
throw new CodecFailure(EINVAL);
|
|
82
|
+
const copy = new Uint8Array(new ArrayBuffer(length));
|
|
83
|
+
copy.set(bytes.subarray(pointer, pointer + length));
|
|
84
|
+
return copy;
|
|
85
|
+
}
|
|
86
|
+
function guestJson(pointer, length) {
|
|
87
|
+
let value;
|
|
88
|
+
try {
|
|
89
|
+
value = JSON.parse(decoder.decode(guestBytes(pointer, length)));
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
throw new CodecFailure(EINVAL);
|
|
93
|
+
}
|
|
94
|
+
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
95
|
+
throw new CodecFailure(EINVAL);
|
|
96
|
+
return value;
|
|
97
|
+
}
|
|
98
|
+
function writeGuest(pointer, value) {
|
|
99
|
+
const bytes = memoryBytes();
|
|
100
|
+
if (pointer < 0 || pointer + value.byteLength > bytes.byteLength)
|
|
101
|
+
throw new CodecFailure(EINVAL);
|
|
102
|
+
bytes.set(value, pointer);
|
|
103
|
+
}
|
|
104
|
+
/** Writes a JSON document into the guest's meta buffer; -1 when it does not fit. */
|
|
105
|
+
function writeMeta(pointer, capacity, value) {
|
|
106
|
+
const encoded = encoder.encode(`${JSON.stringify(value)}\0`);
|
|
107
|
+
if (encoded.byteLength > capacity)
|
|
108
|
+
return -1;
|
|
109
|
+
writeGuest(pointer, encoded);
|
|
110
|
+
return encoded.byteLength;
|
|
111
|
+
}
|
|
112
|
+
/** The WebCodecs config verbatim, with the ABI's base64 `description` restored. */
|
|
113
|
+
function hydrateConfig(config) {
|
|
114
|
+
const hydrated = { ...config };
|
|
115
|
+
if (typeof config.description === "string")
|
|
116
|
+
hydrated.description = decodeBase64(config.description);
|
|
117
|
+
return hydrated;
|
|
118
|
+
}
|
|
119
|
+
function dehydrateConfig(config) {
|
|
120
|
+
const plain = {};
|
|
121
|
+
for (const [name, value] of Object.entries(config)) {
|
|
122
|
+
if (value instanceof ArrayBuffer)
|
|
123
|
+
plain[name] = encodeBase64(new Uint8Array(value));
|
|
124
|
+
else if (ArrayBuffer.isView(value)) {
|
|
125
|
+
plain[name] = encodeBase64(new Uint8Array(value.buffer, value.byteOffset, value.byteLength));
|
|
126
|
+
}
|
|
127
|
+
else
|
|
128
|
+
plain[name] = value;
|
|
129
|
+
}
|
|
130
|
+
return plain;
|
|
131
|
+
}
|
|
132
|
+
async function supported(kind, config) {
|
|
133
|
+
const query = kind === CodecKind.VideoDecoder ? VideoDecoder.isConfigSupported(config)
|
|
134
|
+
: kind === CodecKind.VideoEncoder ? VideoEncoder.isConfigSupported(config)
|
|
135
|
+
: kind === CodecKind.AudioDecoder ? AudioDecoder.isConfigSupported(config)
|
|
136
|
+
: AudioEncoder.isConfigSupported(config);
|
|
137
|
+
return (await query).supported === true;
|
|
138
|
+
}
|
|
139
|
+
function wake(state) {
|
|
140
|
+
for (const waiter of [...state.waiters])
|
|
141
|
+
waiter();
|
|
142
|
+
state.waiters.clear();
|
|
143
|
+
}
|
|
144
|
+
function create(kind, state) {
|
|
145
|
+
const onError = (error) => {
|
|
146
|
+
const current = state();
|
|
147
|
+
current.error = error.message || String(error);
|
|
148
|
+
wake(current);
|
|
149
|
+
};
|
|
150
|
+
const deliver = (produce) => {
|
|
151
|
+
const current = state();
|
|
152
|
+
current.copies = current.copies.then(async () => {
|
|
153
|
+
current.outputs.push(await produce());
|
|
154
|
+
wake(current);
|
|
155
|
+
}).catch((error) => {
|
|
156
|
+
current.error = error instanceof Error ? error.message : String(error);
|
|
157
|
+
wake(current);
|
|
158
|
+
});
|
|
159
|
+
};
|
|
160
|
+
if (kind === CodecKind.VideoDecoder) {
|
|
161
|
+
return new VideoDecoder({
|
|
162
|
+
error: onError,
|
|
163
|
+
output: (frame) => deliver(async () => {
|
|
164
|
+
try {
|
|
165
|
+
const rect = frame.codedRect ?? { x: 0, y: 0, width: frame.codedWidth, height: frame.codedHeight };
|
|
166
|
+
const data = new Uint8Array(frame.allocationSize({ rect }));
|
|
167
|
+
await frame.copyTo(data, { rect });
|
|
168
|
+
const visible = frame.visibleRect ?? rect;
|
|
169
|
+
return {
|
|
170
|
+
data,
|
|
171
|
+
meta: {
|
|
172
|
+
format: frame.format,
|
|
173
|
+
codedWidth: frame.codedWidth,
|
|
174
|
+
codedHeight: frame.codedHeight,
|
|
175
|
+
visibleRect: { x: visible.x, y: visible.y, width: visible.width, height: visible.height },
|
|
176
|
+
timestamp: frame.timestamp,
|
|
177
|
+
duration: frame.duration ?? 0,
|
|
178
|
+
},
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
finally {
|
|
182
|
+
frame.close();
|
|
183
|
+
}
|
|
184
|
+
}),
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
if (kind === CodecKind.AudioDecoder) {
|
|
188
|
+
return new AudioDecoder({
|
|
189
|
+
error: onError,
|
|
190
|
+
output: (audio) => deliver(async () => {
|
|
191
|
+
try {
|
|
192
|
+
const planes = audio.numberOfChannels;
|
|
193
|
+
const sizes = Array.from({ length: planes }, (_, planeIndex) => audio.allocationSize({ planeIndex, format: "f32-planar" }));
|
|
194
|
+
const data = new Uint8Array(sizes.reduce((total, size) => total + size, 0));
|
|
195
|
+
let offset = 0;
|
|
196
|
+
for (let planeIndex = 0; planeIndex < planes; planeIndex += 1) {
|
|
197
|
+
const plane = new Uint8Array(sizes[planeIndex]);
|
|
198
|
+
audio.copyTo(plane, { planeIndex, format: "f32-planar" });
|
|
199
|
+
data.set(plane, offset);
|
|
200
|
+
offset += plane.byteLength;
|
|
201
|
+
}
|
|
202
|
+
return {
|
|
203
|
+
data,
|
|
204
|
+
meta: {
|
|
205
|
+
format: "f32-planar",
|
|
206
|
+
sampleRate: audio.sampleRate,
|
|
207
|
+
numberOfChannels: audio.numberOfChannels,
|
|
208
|
+
numberOfFrames: audio.numberOfFrames,
|
|
209
|
+
timestamp: audio.timestamp,
|
|
210
|
+
},
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
finally {
|
|
214
|
+
audio.close();
|
|
215
|
+
}
|
|
216
|
+
}),
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
const chunkOutput = (chunk, metadata) => {
|
|
220
|
+
const data = new Uint8Array(chunk.byteLength);
|
|
221
|
+
chunk.copyTo(data);
|
|
222
|
+
return {
|
|
223
|
+
data,
|
|
224
|
+
meta: {
|
|
225
|
+
type: chunk.type,
|
|
226
|
+
timestamp: chunk.timestamp,
|
|
227
|
+
duration: chunk.duration ?? 0,
|
|
228
|
+
...(metadata?.decoderConfig ? { decoderConfig: dehydrateConfig(metadata.decoderConfig) } : {}),
|
|
229
|
+
},
|
|
230
|
+
};
|
|
231
|
+
};
|
|
232
|
+
if (kind === CodecKind.VideoEncoder) {
|
|
233
|
+
return new VideoEncoder({
|
|
234
|
+
error: onError,
|
|
235
|
+
output: (chunk, metadata) => deliver(() => chunkOutput(chunk, metadata)),
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
return new AudioEncoder({
|
|
239
|
+
error: onError,
|
|
240
|
+
output: (chunk, metadata) => deliver(() => chunkOutput(chunk, metadata)),
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
function handle(id) {
|
|
244
|
+
const state = handles.get(id);
|
|
245
|
+
if (!state)
|
|
246
|
+
throw new CodecFailure(EBADF);
|
|
247
|
+
return state;
|
|
248
|
+
}
|
|
249
|
+
function integer(value, fallback) {
|
|
250
|
+
if (typeof value === "number" && Number.isFinite(value))
|
|
251
|
+
return Math.trunc(value);
|
|
252
|
+
if (fallback === undefined)
|
|
253
|
+
throw new CodecFailure(EINVAL);
|
|
254
|
+
return fallback;
|
|
255
|
+
}
|
|
256
|
+
async function operate(operation, args, live) {
|
|
257
|
+
const [first = 0, second = 0, third = 0, fourth = 0, fifth = 0, sixth = 0] = args;
|
|
258
|
+
if (operation === CodecOperation.Query || operation === CodecOperation.Open) {
|
|
259
|
+
const kind = first;
|
|
260
|
+
const config = hydrateConfig(guestJson(second, third));
|
|
261
|
+
let ok;
|
|
262
|
+
try {
|
|
263
|
+
ok = await supported(kind, config);
|
|
264
|
+
}
|
|
265
|
+
catch (error) {
|
|
266
|
+
// A malformed config throws TypeError; an unsupported one resolves false.
|
|
267
|
+
throw new CodecFailure(error instanceof TypeError ? EINVAL : EOPNOTSUPP);
|
|
268
|
+
}
|
|
269
|
+
if (!ok)
|
|
270
|
+
return EOPNOTSUPP;
|
|
271
|
+
if (operation === CodecOperation.Query)
|
|
272
|
+
return 0;
|
|
273
|
+
if (handles.size >= CODEC_MAX_HANDLES)
|
|
274
|
+
return EMFILE;
|
|
275
|
+
const id = nextHandle;
|
|
276
|
+
nextHandle += 1;
|
|
277
|
+
const state = {
|
|
278
|
+
kind, codec: undefined, outputs: [], error: undefined,
|
|
279
|
+
copies: Promise.resolve(), flushed: false, waiters: new Set(),
|
|
280
|
+
};
|
|
281
|
+
state.codec = create(kind, () => state);
|
|
282
|
+
handles.set(id, state);
|
|
283
|
+
try {
|
|
284
|
+
state.codec.configure(config);
|
|
285
|
+
}
|
|
286
|
+
catch (error) {
|
|
287
|
+
handles.delete(id);
|
|
288
|
+
try {
|
|
289
|
+
state.codec.close();
|
|
290
|
+
}
|
|
291
|
+
catch { /* an unconfigured codec may refuse */ }
|
|
292
|
+
throw new CodecFailure(error instanceof TypeError ? EINVAL : EOPNOTSUPP);
|
|
293
|
+
}
|
|
294
|
+
return id;
|
|
295
|
+
}
|
|
296
|
+
if (operation === CodecOperation.Push) {
|
|
297
|
+
const state = handle(first);
|
|
298
|
+
if (state.error !== undefined)
|
|
299
|
+
return EIO;
|
|
300
|
+
// WebCodecs' own backpressure signal is the queue the codec has not
|
|
301
|
+
// processed yet. Counting pushes against outputs instead would starve any
|
|
302
|
+
// codec that coalesces inputs (an audio encoder emits one packet per
|
|
303
|
+
// several frames), which is the same reason the queue size exists.
|
|
304
|
+
const queued = state.kind === CodecKind.VideoDecoder || state.kind === CodecKind.AudioDecoder
|
|
305
|
+
? state.codec.decodeQueueSize
|
|
306
|
+
: state.codec.encodeQueueSize;
|
|
307
|
+
if (queued >= CODEC_MAX_INFLIGHT || state.outputs.length >= CODEC_MAX_OUTPUTS)
|
|
308
|
+
return EAGAIN;
|
|
309
|
+
const meta = guestJson(fourth, fifth);
|
|
310
|
+
const data = guestBytes(second, third);
|
|
311
|
+
if (state.kind === CodecKind.VideoDecoder || state.kind === CodecKind.AudioDecoder) {
|
|
312
|
+
const init = {
|
|
313
|
+
type: meta.type === "key" ? "key" : "delta",
|
|
314
|
+
timestamp: integer(meta.timestamp),
|
|
315
|
+
...(meta.duration === undefined ? {} : { duration: integer(meta.duration) }),
|
|
316
|
+
data,
|
|
317
|
+
};
|
|
318
|
+
const chunk = state.kind === CodecKind.VideoDecoder
|
|
319
|
+
? new EncodedVideoChunk(init)
|
|
320
|
+
: new EncodedAudioChunk(init);
|
|
321
|
+
state.codec.decode(chunk);
|
|
322
|
+
}
|
|
323
|
+
else if (state.kind === CodecKind.VideoEncoder) {
|
|
324
|
+
const frame = new VideoFrame(data, {
|
|
325
|
+
format: String(meta.format),
|
|
326
|
+
codedWidth: integer(meta.codedWidth),
|
|
327
|
+
codedHeight: integer(meta.codedHeight),
|
|
328
|
+
timestamp: integer(meta.timestamp),
|
|
329
|
+
duration: integer(meta.duration, 0),
|
|
330
|
+
});
|
|
331
|
+
try {
|
|
332
|
+
const quantizer = meta.quantizer === undefined ? undefined : integer(meta.quantizer);
|
|
333
|
+
state.codec.encode(frame, {
|
|
334
|
+
keyFrame: meta.keyFrame === true,
|
|
335
|
+
// The codec-specific buckets an encoder does not know are ignored;
|
|
336
|
+
// which one applies is the wrapper's codec choice, not the engine's.
|
|
337
|
+
...(quantizer === undefined ? {} : { avc: { quantizer }, av1: { quantizer }, vp9: { quantizer } }),
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
finally {
|
|
341
|
+
frame.close();
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
else {
|
|
345
|
+
const audio = new AudioData({
|
|
346
|
+
format: "f32-planar",
|
|
347
|
+
sampleRate: integer(meta.sampleRate),
|
|
348
|
+
numberOfChannels: integer(meta.numberOfChannels),
|
|
349
|
+
numberOfFrames: integer(meta.numberOfFrames),
|
|
350
|
+
timestamp: integer(meta.timestamp),
|
|
351
|
+
data,
|
|
352
|
+
});
|
|
353
|
+
try {
|
|
354
|
+
state.codec.encode(audio);
|
|
355
|
+
}
|
|
356
|
+
finally {
|
|
357
|
+
audio.close();
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
return 0;
|
|
361
|
+
}
|
|
362
|
+
if (operation === CodecOperation.Pull) {
|
|
363
|
+
const state = handle(first);
|
|
364
|
+
const wait = (second & CODEC_PULL_WAIT) !== 0;
|
|
365
|
+
const deadline = Date.now() + CODEC_WAIT_MS;
|
|
366
|
+
for (;;) {
|
|
367
|
+
if (state.outputs.length > 0) {
|
|
368
|
+
const output = state.outputs[0];
|
|
369
|
+
// The meta buffer carries no length back, so it is a C string: the
|
|
370
|
+
// document plus its terminator must fit (§3.3 ambiguity, recorded).
|
|
371
|
+
const meta = encoder.encode(`${JSON.stringify(output.meta)}\0`);
|
|
372
|
+
if (!live())
|
|
373
|
+
throw new CodecFailure(EIO, "The request was retired before its output was written.");
|
|
374
|
+
if (output.data.byteLength > fourth || meta.byteLength > sixth) {
|
|
375
|
+
writeMeta(fifth, sixth, { needData: output.data.byteLength, needMeta: meta.byteLength });
|
|
376
|
+
return ENOBUFS;
|
|
377
|
+
}
|
|
378
|
+
state.outputs.shift();
|
|
379
|
+
writeGuest(fifth, meta);
|
|
380
|
+
if (output.data.byteLength > 0)
|
|
381
|
+
writeGuest(third, output.data);
|
|
382
|
+
return output.data.byteLength;
|
|
383
|
+
}
|
|
384
|
+
if (!live())
|
|
385
|
+
throw new CodecFailure(EIO, "The request was retired while it waited.");
|
|
386
|
+
if (state.error !== undefined) {
|
|
387
|
+
const message = state.error;
|
|
388
|
+
state.error = undefined;
|
|
389
|
+
writeMeta(fifth, sixth, { error: message });
|
|
390
|
+
return EIO;
|
|
391
|
+
}
|
|
392
|
+
if (state.flushed) {
|
|
393
|
+
writeMeta(fifth, sixth, { eos: true });
|
|
394
|
+
return 0;
|
|
395
|
+
}
|
|
396
|
+
if (!wait)
|
|
397
|
+
return EAGAIN;
|
|
398
|
+
const remaining = deadline - Date.now();
|
|
399
|
+
if (remaining <= 0)
|
|
400
|
+
return ETIMEDOUT;
|
|
401
|
+
await new Promise((resolve) => {
|
|
402
|
+
const waiter = () => { clearTimeout(timer); resolve(); };
|
|
403
|
+
const timer = setTimeout(() => { state.waiters.delete(waiter); resolve(); }, remaining);
|
|
404
|
+
state.waiters.add(waiter);
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
if (operation === CodecOperation.Flush) {
|
|
409
|
+
const state = handle(first);
|
|
410
|
+
if (state.error !== undefined)
|
|
411
|
+
return EIO;
|
|
412
|
+
try {
|
|
413
|
+
await state.codec.flush();
|
|
414
|
+
}
|
|
415
|
+
catch (error) {
|
|
416
|
+
state.error = error instanceof Error ? error.message : String(error);
|
|
417
|
+
return EIO;
|
|
418
|
+
}
|
|
419
|
+
await state.copies;
|
|
420
|
+
state.flushed = true;
|
|
421
|
+
wake(state);
|
|
422
|
+
return 0;
|
|
423
|
+
}
|
|
424
|
+
if (operation === CodecOperation.Close) {
|
|
425
|
+
const state = handles.get(first);
|
|
426
|
+
if (!state)
|
|
427
|
+
return 0;
|
|
428
|
+
handles.delete(first);
|
|
429
|
+
try {
|
|
430
|
+
state.codec.close();
|
|
431
|
+
}
|
|
432
|
+
catch { /* an errored codec is already closed */ }
|
|
433
|
+
wake(state);
|
|
434
|
+
return 0;
|
|
435
|
+
}
|
|
436
|
+
return EINVAL;
|
|
437
|
+
}
|
|
438
|
+
//# sourceMappingURL=codec-worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec-worker.js","sourceRoot":"","sources":["../src/codec-worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coherent-file-locks.d.ts","sourceRoot":"","sources":["../src/coherent-file-locks.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,
|
|
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,KAAK,EACV,qBAAqB,EAGrB,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;IAiDjE,OAAO,CAAC,OAAO;IAcf,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,OAAO;IAWf,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,WAAW;CACpB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BrowserFileCoherenceClient, coherentFileFamily, } from "@volter/browser-runtime/browser-file-coherence.js";
|
|
1
|
+
import { BrowserFileCoherenceClient, coherentFileFamily, coherentFileParents, ensureCoherentFileParents, } from "@volter/browser-runtime/browser-file-coherence.js";
|
|
2
2
|
/** Couples advisory-lock ownership to exact file refresh/publish boundaries. */
|
|
3
3
|
export class WaliCoherentFileLockClient {
|
|
4
4
|
locks;
|
|
@@ -62,20 +62,33 @@ export class WaliCoherentFileLockClient {
|
|
|
62
62
|
this.replaceHeld(remaining);
|
|
63
63
|
return response;
|
|
64
64
|
}
|
|
65
|
+
// ONE CARRIER PER PATH. A file this client pulls or publishes has reached
|
|
66
|
+
// the page over the coherence channel, bytes and metadata both; the live
|
|
67
|
+
// patch must not tell the page again. It did, and the page's patch base --
|
|
68
|
+
// which coherence writes never advanced -- refused the echo as a "write
|
|
69
|
+
// conflict" and tore the process down. Measured 2026-09-20, `codex exec`
|
|
70
|
+
// in the vibecode example: its `.lock`, then SQLite's journal and database, four
|
|
71
|
+
// shapes of the one race in a minute. So every family member carried here
|
|
72
|
+
// is dropped from the changed set, and the host side tells its base what
|
|
73
|
+
// coherence wrote (`worker-program.ts`, `onApplied`).
|
|
65
74
|
refresh(path) {
|
|
66
75
|
for (const member of coherentFileFamily(path)) {
|
|
67
76
|
const shared = this.coherence.pull(member);
|
|
68
77
|
if (!shared && this.locallyCreated.delete(member)) {
|
|
69
78
|
this.coherence.push(member, this.readLocal(member));
|
|
79
|
+
this.filesystem.dropChangedPaths?.([member]);
|
|
70
80
|
continue;
|
|
71
81
|
}
|
|
72
82
|
this.locallyCreated.delete(member);
|
|
73
83
|
this.writeLocal(member, shared);
|
|
84
|
+
this.filesystem.dropChangedPaths?.([member]);
|
|
74
85
|
}
|
|
75
86
|
}
|
|
76
87
|
publish(path) {
|
|
77
|
-
for (const member of coherentFileFamily(path))
|
|
88
|
+
for (const member of coherentFileFamily(path)) {
|
|
78
89
|
this.coherence.push(member, this.readLocal(member));
|
|
90
|
+
this.filesystem.dropChangedPaths?.([member]);
|
|
91
|
+
}
|
|
79
92
|
}
|
|
80
93
|
readLocal(path) {
|
|
81
94
|
if (!this.filesystem.existsSync(path))
|
|
@@ -87,6 +100,7 @@ export class WaliCoherentFileLockClient {
|
|
|
87
100
|
bytes: this.filesystem.readFileSync(path),
|
|
88
101
|
...(stat.mode === undefined ? {} : { mode: stat.mode }),
|
|
89
102
|
...(stat.mtimeMs === undefined ? {} : { mtimeMs: stat.mtimeMs }),
|
|
103
|
+
parents: coherentFileParents(this.filesystem, path),
|
|
90
104
|
};
|
|
91
105
|
}
|
|
92
106
|
writeLocal(path, file) {
|
|
@@ -96,9 +110,7 @@ export class WaliCoherentFileLockClient {
|
|
|
96
110
|
}
|
|
97
111
|
return;
|
|
98
112
|
}
|
|
99
|
-
|
|
100
|
-
if (!this.filesystem.existsSync(parent))
|
|
101
|
-
this.filesystem.mkdirSync(parent, { recursive: true });
|
|
113
|
+
ensureCoherentFileParents(this.filesystem, path, file.parents);
|
|
102
114
|
this.filesystem.writeFileSync(path, file.bytes);
|
|
103
115
|
if (file.mode !== undefined)
|
|
104
116
|
this.filesystem.chmodSync?.(path, file.mode);
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"coherent-file-locks.js","sourceRoot":"","sources":["../src/coherent-file-locks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/** An open description outlives any one descriptor naming it. Owned by the coordinator. */
|
|
2
|
+
export interface WaliOpenDescription<T = unknown> {
|
|
3
|
+
readonly id: number;
|
|
4
|
+
readonly kind: string;
|
|
5
|
+
readonly value: T;
|
|
6
|
+
references: number;
|
|
7
|
+
release?: () => void;
|
|
8
|
+
}
|
|
9
|
+
export declare class WaliDescriptionRegistry {
|
|
10
|
+
private nextId;
|
|
11
|
+
readonly pipeMetadata: Int32Array;
|
|
12
|
+
constructor(buffer?: SharedArrayBuffer);
|
|
13
|
+
private readonly descriptions;
|
|
14
|
+
create<T>(kind: string, value: T, release?: () => void): WaliOpenDescription<T>;
|
|
15
|
+
get(id: number): WaliOpenDescription | undefined;
|
|
16
|
+
retain(id: number): void;
|
|
17
|
+
release(id: number): void;
|
|
18
|
+
}
|
|
19
|
+
export interface WaliDescriptorEntry {
|
|
20
|
+
description: number;
|
|
21
|
+
flags: number;
|
|
22
|
+
}
|
|
23
|
+
/** Each process owns one table. Threads use that process's table. */
|
|
24
|
+
export declare class WaliProcessDescriptorTable {
|
|
25
|
+
readonly registry: WaliDescriptionRegistry;
|
|
26
|
+
readonly entries: Array<WaliDescriptorEntry | undefined>;
|
|
27
|
+
sharedEntries: Int32Array;
|
|
28
|
+
constructor(registry: WaliDescriptionRegistry, buffer?: SharedArrayBuffer);
|
|
29
|
+
get(fd: number): WaliOpenDescription | undefined;
|
|
30
|
+
set(fd: number, description: WaliOpenDescription, flags?: number): void;
|
|
31
|
+
close(fd: number): boolean;
|
|
32
|
+
copy(): WaliProcessDescriptorTable;
|
|
33
|
+
exec(): void;
|
|
34
|
+
exit(): void;
|
|
35
|
+
view<T>(kind: string, release?: (value: T) => void): WaliDescriptionView<T>;
|
|
36
|
+
}
|
|
37
|
+
/** A typed projection of the one table; it owns no fd-to-object map. */
|
|
38
|
+
export declare class WaliDescriptionView<T> {
|
|
39
|
+
private readonly table;
|
|
40
|
+
private readonly kind;
|
|
41
|
+
private readonly release?;
|
|
42
|
+
constructor(table: WaliProcessDescriptorTable, kind: string, release?: ((value: T) => void) | undefined);
|
|
43
|
+
get(fd: number): T | undefined;
|
|
44
|
+
has(fd: number): boolean;
|
|
45
|
+
set(fd: number, value: T): void;
|
|
46
|
+
delete(fd: number): boolean;
|
|
47
|
+
values(): IterableIterator<T>;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=descriptors.d.ts.map
|
|
@@ -0,0 +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;CACtB;AAED,qBAAa,uBAAuB;IAClC,OAAO,CAAC,MAAM,CAAK;IACnB,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAC;gBACtB,MAAM,oBAAwC;IAC1D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA0C;IAEvE,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,IAAI,GAAG,mBAAmB,CAAC,CAAC,CAAC;IAc/E,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS;IAEhD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAMxB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;CAW1B;AAED,MAAM,WAAW,mBAAmB;IAAG,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AAE3E,qEAAqE;AACrE,qBAAa,0BAA0B;IAGzB,QAAQ,CAAC,QAAQ,EAAE,uBAAuB;IAFtD,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAAM;IAC9D,aAAa,EAAE,UAAU,CAAC;gBACL,QAAQ,EAAE,uBAAuB,EAAE,MAAM,oBAAoC;IAElG,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS;IAKhD,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,mBAAmB,EAAE,KAAK,SAAI,GAAG,IAAI;IAOlE,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAS1B,IAAI,IAAI,0BAA0B;IAQlC,IAAI,IAAI,IAAI;IAIZ,IAAI,IAAI,IAAI;IAEZ,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,mBAAmB,CAAC,CAAC,CAAC;CAG5E;AAED,wEAAwE;AACxE,qBAAa,mBAAmB,CAAC,CAAC;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAA8B,OAAO,CAAC,QAAQ,CAAC,IAAI;IACnF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;gBADE,KAAK,EAAE,0BAA0B,EAAmB,IAAI,EAAE,MAAM,EAC1E,OAAO,CAAC,GAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,aAAA;IAC/C,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAI9B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IACxB,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAI/B,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAC1B,MAAM,IAAI,gBAAgB,CAAC,CAAC,CAAC;CAK/B"}
|