@ai-ecoverse/slicc-kernel 1.39.3 → 1.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -4
- package/dist/index.js.map +2 -2
- package/dist/kernel-worker.js +44 -16
- package/dist/kernel-worker.js.map +3 -3
- package/dist/node-process-worker.js +207 -29
- package/dist/node-process-worker.js.map +4 -4
- package/dist/node.js +44 -16
- package/dist/node.js.map +3 -3
- package/dist/process-worker.js +207 -29
- package/dist/process-worker.js.map +4 -4
- package/package.json +1 -1
package/dist/process-worker.js
CHANGED
|
@@ -2730,13 +2730,13 @@ function describeInherited(Fs, sys, streams, livePath, actions = []) {
|
|
|
2730
2730
|
if (from) table.set(target, { stream: from.stream, cloexec: false });
|
|
2731
2731
|
else table.delete(target);
|
|
2732
2732
|
}
|
|
2733
|
-
const
|
|
2733
|
+
const slots2 = /* @__PURE__ */ new Map();
|
|
2734
2734
|
for (const [fd, { stream, cloexec }] of table) {
|
|
2735
|
-
if (fd > 2 && !cloexec)
|
|
2735
|
+
if (fd > 2 && !cloexec) slots2.set(fd, stream);
|
|
2736
2736
|
}
|
|
2737
2737
|
const promote = vfsPromoter(Fs, sys, streams, livePath);
|
|
2738
2738
|
const out = [];
|
|
2739
|
-
for (const [fd, stream] of
|
|
2739
|
+
for (const [fd, stream] of slots2) {
|
|
2740
2740
|
promote(stream);
|
|
2741
2741
|
const slot = inheritedSlot(fd, stream);
|
|
2742
2742
|
if (slot) out.push(slot);
|
|
@@ -4517,10 +4517,10 @@ var init_wasi_files = __esm({
|
|
|
4517
4517
|
readable;
|
|
4518
4518
|
writable;
|
|
4519
4519
|
append;
|
|
4520
|
-
constructor(buffer,
|
|
4520
|
+
constructor(buffer, readable2, writable2, append) {
|
|
4521
4521
|
this.buffer = buffer;
|
|
4522
|
-
this.readable =
|
|
4523
|
-
this.writable =
|
|
4522
|
+
this.readable = readable2;
|
|
4523
|
+
this.writable = writable2;
|
|
4524
4524
|
this.append = append;
|
|
4525
4525
|
}
|
|
4526
4526
|
get path() {
|
|
@@ -4602,9 +4602,9 @@ function entryOf(info) {
|
|
|
4602
4602
|
function openAccess(existing, oflags, rights) {
|
|
4603
4603
|
const readonly = existing?.readonly === true;
|
|
4604
4604
|
const mutating = readonly ? OFLAGS.TRUNC : OFLAGS.CREAT | OFLAGS.TRUNC;
|
|
4605
|
-
const
|
|
4606
|
-
if (
|
|
4607
|
-
return { readable: (rights & RIGHTS.FD_READ) !== 0n || !
|
|
4605
|
+
const writable2 = (rights & RIGHTS.FD_WRITE) !== 0n || (oflags & mutating) !== 0;
|
|
4606
|
+
if (writable2 && readonly) throw new WasiError("EROFS");
|
|
4607
|
+
return { readable: (rights & RIGHTS.FD_READ) !== 0n || !writable2, writable: writable2 };
|
|
4608
4608
|
}
|
|
4609
4609
|
function promoteRequest(fd, f, handed) {
|
|
4610
4610
|
const orphan = f.buffer.isOrphan();
|
|
@@ -5035,13 +5035,17 @@ var init_wasi_fds = __esm({
|
|
|
5035
5035
|
if (oflags & OFLAGS.DIRECTORY && !s?.isDirectory) {
|
|
5036
5036
|
throw new WasiError(s ? "ENOTDIR" : "ENOENT");
|
|
5037
5037
|
}
|
|
5038
|
-
if (s?.isDirectory)
|
|
5038
|
+
if (s?.isDirectory) {
|
|
5039
|
+
const asked = (oflags & OFLAGS.DIRECTORY) === 0 && (rights & RIGHTS.FD_WRITE) !== 0n;
|
|
5040
|
+
if (asked || (oflags & (OFLAGS.CREAT | OFLAGS.TRUNC)) !== 0) throw new WasiError("EISDIR");
|
|
5041
|
+
return this.install({ type: "dir", path });
|
|
5042
|
+
}
|
|
5039
5043
|
if (!s && !(oflags & OFLAGS.CREAT)) throw new WasiError("ENOENT");
|
|
5040
5044
|
if (this.shared) return this.kernelFile(path, s, oflags, rights, fdflags);
|
|
5041
5045
|
return this.install({ type: "file", file: this.file(path, s, oflags, rights, fdflags) });
|
|
5042
5046
|
}
|
|
5043
5047
|
file(path, existing, oflags, rights, fdflags) {
|
|
5044
|
-
const { readable, writable } = openAccess(existing, oflags, rights);
|
|
5048
|
+
const { readable: readable2, writable: writable2 } = openAccess(existing, oflags, rights);
|
|
5045
5049
|
let buffer = this.buffers.get(path);
|
|
5046
5050
|
if (buffer) {
|
|
5047
5051
|
if (oflags & OFLAGS.TRUNC) buffer.truncate(0);
|
|
@@ -5056,12 +5060,12 @@ var init_wasi_fds = __esm({
|
|
|
5056
5060
|
this.fs.hold?.(path, true, true);
|
|
5057
5061
|
}
|
|
5058
5062
|
buffer.opens++;
|
|
5059
|
-
return new LocalFile(buffer,
|
|
5063
|
+
return new LocalFile(buffer, readable2, writable2, (fdflags & FDFLAGS.APPEND) !== 0);
|
|
5060
5064
|
}
|
|
5061
5065
|
kernelFile(path, existing, oflags, rights, fdflags) {
|
|
5062
|
-
const { readable, writable } = openAccess(existing, oflags, rights);
|
|
5066
|
+
const { readable: readable2, writable: writable2 } = openAccess(existing, oflags, rights);
|
|
5063
5067
|
const append = (fdflags & FDFLAGS.APPEND) !== 0;
|
|
5064
|
-
const flags = (
|
|
5068
|
+
const flags = (writable2 ? readable2 ? O_RDWR4 : O_WRONLY4 : 0) | (append ? O_APPEND : 0);
|
|
5065
5069
|
const made = !existing && this.createNew(path, oflags);
|
|
5066
5070
|
const truncate = made || (oflags & OFLAGS.TRUNC) !== 0;
|
|
5067
5071
|
const fd = this.kernel.sys.openVfs(path, flags, 0, truncate ? { truncate } : {});
|
|
@@ -6843,8 +6847,8 @@ var init_wasix_process = __esm({
|
|
|
6843
6847
|
];
|
|
6844
6848
|
return { stdio, inherit, cwd, opened };
|
|
6845
6849
|
}
|
|
6846
|
-
applyFdOp(op,
|
|
6847
|
-
const { map, nulls, opened } =
|
|
6850
|
+
applyFdOp(op, slots2, cwd) {
|
|
6851
|
+
const { map, nulls, opened } = slots2;
|
|
6848
6852
|
const { fds } = this.host;
|
|
6849
6853
|
const point = (fd, kfd) => {
|
|
6850
6854
|
if (kfd === void 0) {
|
|
@@ -7096,6 +7100,18 @@ function wasixSocketImports(host, preview1) {
|
|
|
7096
7100
|
fds.adopt(fd, "socket", false);
|
|
7097
7101
|
mem.view().setUint32(out, fd, true);
|
|
7098
7102
|
},
|
|
7103
|
+
sock_pair: (af, type, _proto, out1, out2) => {
|
|
7104
|
+
if (af !== UNIX)
|
|
7105
|
+
throw new WasiError(af === INET4 || af === INET6 ? "EOPNOTSUPP" : "EAFNOSUPPORT");
|
|
7106
|
+
if (type !== STREAM) throw new WasiError("EPROTONOSUPPORT");
|
|
7107
|
+
mem.view().setUint32(out1, 0, true);
|
|
7108
|
+
mem.view().setUint32(out2, 0, true);
|
|
7109
|
+
const [a, b] = call2({ op: "sock-pair", domain: "unix" });
|
|
7110
|
+
fds.adopt(a, "socket", false);
|
|
7111
|
+
fds.adopt(b, "socket", false);
|
|
7112
|
+
mem.view().setUint32(out1, a, true);
|
|
7113
|
+
mem.view().setUint32(out2, b, true);
|
|
7114
|
+
},
|
|
7099
7115
|
sock_bind: (fd, addr) => {
|
|
7100
7116
|
socket(fd);
|
|
7101
7117
|
call2({ op: "sock-bind", fd, addr: readAddr(mem.view(), addr) });
|
|
@@ -8207,6 +8223,17 @@ var init_async_sab = __esm({
|
|
|
8207
8223
|
});
|
|
8208
8224
|
|
|
8209
8225
|
// src/process/js/js-kernel.ts
|
|
8226
|
+
function untilAborted(work, signal) {
|
|
8227
|
+
if (!signal) return work;
|
|
8228
|
+
return new Promise((resolve) => {
|
|
8229
|
+
const done = () => {
|
|
8230
|
+
signal.removeEventListener("abort", done);
|
|
8231
|
+
resolve();
|
|
8232
|
+
};
|
|
8233
|
+
signal.addEventListener("abort", done, { once: true });
|
|
8234
|
+
work.then(done, done);
|
|
8235
|
+
});
|
|
8236
|
+
}
|
|
8210
8237
|
var JsCallError, JsKernel;
|
|
8211
8238
|
var init_js_kernel = __esm({
|
|
8212
8239
|
"src/process/js/js-kernel.ts"() {
|
|
@@ -8258,20 +8285,24 @@ var init_js_kernel = __esm({
|
|
|
8258
8285
|
const result = await this.call(req);
|
|
8259
8286
|
return result.ok && result.kind === "bytes" ? result.bytes : new Uint8Array(0);
|
|
8260
8287
|
}
|
|
8261
|
-
async blocking(req) {
|
|
8288
|
+
async blocking(req, signal) {
|
|
8262
8289
|
for (; ; ) {
|
|
8263
8290
|
const id = await this.json({ op: "async-submit", req });
|
|
8264
|
-
const result = await this.settled(id);
|
|
8291
|
+
const result = await this.settled(id, signal);
|
|
8265
8292
|
if (result.ok) return result;
|
|
8266
8293
|
if (result.errno !== "EINTR") throw new JsCallError(result.errno, req.op);
|
|
8267
8294
|
}
|
|
8268
8295
|
}
|
|
8269
|
-
async settled(id) {
|
|
8296
|
+
async settled(id, signal) {
|
|
8270
8297
|
for (; ; ) {
|
|
8271
8298
|
const seen = Atomics.load(this.header, SAB_I_ASYNC);
|
|
8272
8299
|
const taken = await this.raw({ op: "async-take", id });
|
|
8273
8300
|
if (taken.ok || taken.errno !== "EAGAIN") return taken;
|
|
8274
|
-
|
|
8301
|
+
if (signal?.aborted) {
|
|
8302
|
+
await this.raw({ op: "async-cancel", id });
|
|
8303
|
+
throw signal.reason;
|
|
8304
|
+
}
|
|
8305
|
+
await untilAborted(changed(this.header, SAB_I_ASYNC, seen, this.waitAsync), signal);
|
|
8275
8306
|
}
|
|
8276
8307
|
}
|
|
8277
8308
|
deliver() {
|
|
@@ -8344,6 +8375,125 @@ var init_js_kernel = __esm({
|
|
|
8344
8375
|
}
|
|
8345
8376
|
});
|
|
8346
8377
|
|
|
8378
|
+
// src/process/js/js-children.ts
|
|
8379
|
+
function exitedOf(status2) {
|
|
8380
|
+
const signal = status2 & 127;
|
|
8381
|
+
return signal ? { status: 128 + signal, signal } : { status: status2 >> 8 & 255 };
|
|
8382
|
+
}
|
|
8383
|
+
function readable(io, fd) {
|
|
8384
|
+
const cancelled = new AbortController();
|
|
8385
|
+
return new ReadableStream(
|
|
8386
|
+
{
|
|
8387
|
+
async pull(controller) {
|
|
8388
|
+
const chunk = await io.read(fd, void 0, cancelled.signal).catch((err) => {
|
|
8389
|
+
if (cancelled.signal.aborted) return void 0;
|
|
8390
|
+
throw err;
|
|
8391
|
+
});
|
|
8392
|
+
if (chunk === void 0) return;
|
|
8393
|
+
if (chunk.length > 0) {
|
|
8394
|
+
controller.enqueue(chunk);
|
|
8395
|
+
return;
|
|
8396
|
+
}
|
|
8397
|
+
controller.close();
|
|
8398
|
+
await io.close(fd);
|
|
8399
|
+
},
|
|
8400
|
+
cancel: () => {
|
|
8401
|
+
cancelled.abort();
|
|
8402
|
+
return io.close(fd);
|
|
8403
|
+
}
|
|
8404
|
+
},
|
|
8405
|
+
{ highWaterMark: 0 }
|
|
8406
|
+
);
|
|
8407
|
+
}
|
|
8408
|
+
function writable(io, fd) {
|
|
8409
|
+
return new WritableStream({
|
|
8410
|
+
write: (chunk, controller) => io.send(fd, chunk, controller.signal),
|
|
8411
|
+
close: () => io.close(fd),
|
|
8412
|
+
abort: () => io.close(fd)
|
|
8413
|
+
});
|
|
8414
|
+
}
|
|
8415
|
+
function childOps(kernel, io, defaults) {
|
|
8416
|
+
const wait = async (pid) => {
|
|
8417
|
+
const r = await kernel.blocking({ op: "proc-wait", pid, nohang: false });
|
|
8418
|
+
const [, status2] = r.ok && r.kind === "json" ? r.json : [0, 0];
|
|
8419
|
+
return exitedOf(status2);
|
|
8420
|
+
};
|
|
8421
|
+
const kill = async (pid, signal = SIGTERM) => {
|
|
8422
|
+
await kernel.call({ op: "proc-kill", pid, sig: signal === 0 ? 0 : defaults.signal(signal) });
|
|
8423
|
+
};
|
|
8424
|
+
const childOf = (pid, mine) => {
|
|
8425
|
+
const [stdin, stdout, stderr] = mine;
|
|
8426
|
+
return {
|
|
8427
|
+
pid,
|
|
8428
|
+
...stdin !== void 0 ? { stdin: writable(io, stdin) } : {},
|
|
8429
|
+
...stdout !== void 0 ? { stdout: readable(io, stdout) } : {},
|
|
8430
|
+
...stderr !== void 0 ? { stderr: readable(io, stderr) } : {},
|
|
8431
|
+
wait: () => wait(pid),
|
|
8432
|
+
kill: (signal) => kill(pid, signal)
|
|
8433
|
+
};
|
|
8434
|
+
};
|
|
8435
|
+
const spawn = async (o) => {
|
|
8436
|
+
const [file] = o.argv;
|
|
8437
|
+
if (file === void 0) throw new JsCallError("EINVAL", "spawn");
|
|
8438
|
+
const mine = [];
|
|
8439
|
+
const theirs = [];
|
|
8440
|
+
try {
|
|
8441
|
+
const stdio = await slots(kernel, o, mine, theirs);
|
|
8442
|
+
const pid = await kernel.json({
|
|
8443
|
+
op: "proc-spawn",
|
|
8444
|
+
file,
|
|
8445
|
+
argv: [...o.argv],
|
|
8446
|
+
env: { ...o.env ?? defaults.env },
|
|
8447
|
+
cwd: o.cwd ?? defaults.cwd,
|
|
8448
|
+
stdio
|
|
8449
|
+
});
|
|
8450
|
+
return childOf(pid, mine);
|
|
8451
|
+
} catch (err) {
|
|
8452
|
+
await closeAll(io, mine);
|
|
8453
|
+
throw err;
|
|
8454
|
+
} finally {
|
|
8455
|
+
await closeAll(io, theirs);
|
|
8456
|
+
}
|
|
8457
|
+
};
|
|
8458
|
+
return { spawn, wait, kill };
|
|
8459
|
+
}
|
|
8460
|
+
async function closeAll(io, fds) {
|
|
8461
|
+
for (const fd of fds) if (fd !== void 0) await io.close(fd).catch(() => void 0);
|
|
8462
|
+
}
|
|
8463
|
+
async function preflight(kernel, hows) {
|
|
8464
|
+
for (const [n, how] of hows.entries()) {
|
|
8465
|
+
if (how === "pipe" || how === "null") continue;
|
|
8466
|
+
if (how !== "inherit" && typeof how !== "number") throw new JsCallError("EINVAL", "spawn");
|
|
8467
|
+
await kernel.json({ op: "fd-info", fd: how === "inherit" ? n : how });
|
|
8468
|
+
}
|
|
8469
|
+
}
|
|
8470
|
+
async function slots(kernel, o, mine, theirs) {
|
|
8471
|
+
const hows = STDIO2.map((name) => o[name] ?? "inherit");
|
|
8472
|
+
await preflight(kernel, hows);
|
|
8473
|
+
const stdio = [];
|
|
8474
|
+
for (const [n, how] of hows.entries()) {
|
|
8475
|
+
if (how === "inherit") stdio.push({ fd: n });
|
|
8476
|
+
else if (how === "null") stdio.push({ none: true });
|
|
8477
|
+
else if (typeof how === "number") stdio.push({ fd: how });
|
|
8478
|
+
else {
|
|
8479
|
+
const [read, write] = await kernel.json({ op: "fd-pipe" });
|
|
8480
|
+
mine[n] = n === 0 ? write : read;
|
|
8481
|
+
theirs.push(n === 0 ? read : write);
|
|
8482
|
+
stdio.push({ fd: n === 0 ? read : write });
|
|
8483
|
+
}
|
|
8484
|
+
}
|
|
8485
|
+
return stdio;
|
|
8486
|
+
}
|
|
8487
|
+
var STDIO2, SIGTERM;
|
|
8488
|
+
var init_js_children = __esm({
|
|
8489
|
+
"src/process/js/js-children.ts"() {
|
|
8490
|
+
"use strict";
|
|
8491
|
+
init_js_kernel();
|
|
8492
|
+
STDIO2 = ["stdin", "stdout", "stderr"];
|
|
8493
|
+
SIGTERM = 15;
|
|
8494
|
+
}
|
|
8495
|
+
});
|
|
8496
|
+
|
|
8347
8497
|
// src/process/js/js-io.ts
|
|
8348
8498
|
function typeOf(info) {
|
|
8349
8499
|
if (info.meta && "dir" in info.meta) return "directory";
|
|
@@ -8708,22 +8858,20 @@ function createContext(o) {
|
|
|
8708
8858
|
infos.set(fd, got);
|
|
8709
8859
|
return got;
|
|
8710
8860
|
};
|
|
8711
|
-
const read = async (fd, max = CHUNK) => {
|
|
8861
|
+
const read = async (fd, max = CHUNK, signal) => {
|
|
8712
8862
|
index(max, "read");
|
|
8713
8863
|
const emulated = readDevice(await info(fd), max, random);
|
|
8714
8864
|
if (emulated) return emulated;
|
|
8715
|
-
|
|
8716
|
-
return r.ok && r.kind === "bytes" ? r.bytes : new Uint8Array(0);
|
|
8865
|
+
return readPipe(kernel, fd, Math.min(max, MAX_IO), signal);
|
|
8717
8866
|
};
|
|
8718
|
-
const writeAll = async (fd, data) => {
|
|
8867
|
+
const writeAll = async (fd, data, signal) => {
|
|
8719
8868
|
const i = await info(fd);
|
|
8720
8869
|
if (writeDevice(i)) return;
|
|
8721
8870
|
let at = 0;
|
|
8722
8871
|
while (at < data.length) {
|
|
8723
8872
|
const body = data.subarray(at, at + MAX_IO);
|
|
8724
8873
|
try {
|
|
8725
|
-
|
|
8726
|
-
at += written(r, body.length);
|
|
8874
|
+
at += signal ? await sendSome(kernel, fd, body, signal) : written(await kernel.blocking({ op: "fd-write", fd, body }), body.length);
|
|
8727
8875
|
} catch (err) {
|
|
8728
8876
|
if (brokenPipe(err, i)) await kernel.call({ op: "proc-kill", pid: o.pid, sig: SIG.PIPE });
|
|
8729
8877
|
throw err;
|
|
@@ -8744,7 +8892,7 @@ function createContext(o) {
|
|
|
8744
8892
|
}
|
|
8745
8893
|
})();
|
|
8746
8894
|
};
|
|
8747
|
-
const
|
|
8895
|
+
const writable2 = (fd) => new WritableStream({ write: (chunk) => write(fd, chunk) });
|
|
8748
8896
|
const statOf = async (op, path) => {
|
|
8749
8897
|
const abs = resolve(path);
|
|
8750
8898
|
await kernel.call({ op: "fd-path-flush", path: abs });
|
|
@@ -8779,6 +8927,11 @@ function createContext(o) {
|
|
|
8779
8927
|
infos,
|
|
8780
8928
|
handles
|
|
8781
8929
|
});
|
|
8930
|
+
const children = childOps(
|
|
8931
|
+
kernel,
|
|
8932
|
+
{ read, send: writeAll, close: (fd) => ctx.close(fd) },
|
|
8933
|
+
{ env: o.env, cwd: o.cwd, signal: signalNumber }
|
|
8934
|
+
);
|
|
8782
8935
|
const ctx = {
|
|
8783
8936
|
argv: o.argv,
|
|
8784
8937
|
env: o.env,
|
|
@@ -8797,8 +8950,8 @@ function createContext(o) {
|
|
|
8797
8950
|
},
|
|
8798
8951
|
{ highWaterMark: 0 }
|
|
8799
8952
|
),
|
|
8800
|
-
stdout:
|
|
8801
|
-
stderr:
|
|
8953
|
+
stdout: writable2(1),
|
|
8954
|
+
stderr: writable2(2),
|
|
8802
8955
|
read,
|
|
8803
8956
|
write,
|
|
8804
8957
|
async close(fd) {
|
|
@@ -8821,6 +8974,7 @@ function createContext(o) {
|
|
|
8821
8974
|
reset: async (signal) => kernel.setHandler(signalNumber(signal), "default")
|
|
8822
8975
|
},
|
|
8823
8976
|
sync,
|
|
8977
|
+
...children,
|
|
8824
8978
|
exit
|
|
8825
8979
|
};
|
|
8826
8980
|
const drain2 = async () => {
|
|
@@ -8897,6 +9051,29 @@ function fileHandle(kernel, fd, path, append, forget) {
|
|
|
8897
9051
|
}
|
|
8898
9052
|
};
|
|
8899
9053
|
}
|
|
9054
|
+
async function readPipe(kernel, fd, max, signal) {
|
|
9055
|
+
if (signal) return receiveSome(kernel, fd, max, signal);
|
|
9056
|
+
const r = await kernel.blocking({ op: "fd-read", fd, max });
|
|
9057
|
+
return r.ok && r.kind === "bytes" ? r.bytes : new Uint8Array(0);
|
|
9058
|
+
}
|
|
9059
|
+
async function receiveSome(kernel, fd, max, signal) {
|
|
9060
|
+
for (; ; ) {
|
|
9061
|
+
signal.throwIfAborted();
|
|
9062
|
+
const r = await kernel.raw({ op: "fd-read", fd, max, nonblock: true });
|
|
9063
|
+
if (r.ok) return r.kind === "bytes" ? r.bytes : new Uint8Array(0);
|
|
9064
|
+
if (r.errno !== "EAGAIN") throw new JsCallError(r.errno, "fd-read");
|
|
9065
|
+
await kernel.blocking({ op: "fd-select", read: [fd], write: [], timeoutMs: -1 }, signal);
|
|
9066
|
+
}
|
|
9067
|
+
}
|
|
9068
|
+
async function sendSome(kernel, fd, body, signal) {
|
|
9069
|
+
for (; ; ) {
|
|
9070
|
+
signal.throwIfAborted();
|
|
9071
|
+
const r = await kernel.raw({ op: "fd-write", fd, body, nonblock: true });
|
|
9072
|
+
if (r.ok) return written(r, body.length);
|
|
9073
|
+
if (r.errno !== "EAGAIN") throw new JsCallError(r.errno, "fd-write");
|
|
9074
|
+
await kernel.blocking({ op: "fd-select", read: [], write: [fd], timeoutMs: -1 }, signal);
|
|
9075
|
+
}
|
|
9076
|
+
}
|
|
8900
9077
|
function pathOps(kernel, resolve, statOf, open) {
|
|
8901
9078
|
return {
|
|
8902
9079
|
stat: (path) => statOf("stat", path),
|
|
@@ -8930,6 +9107,7 @@ var init_js_context = __esm({
|
|
|
8930
9107
|
"use strict";
|
|
8931
9108
|
init_signals();
|
|
8932
9109
|
init_sync_fs_wire();
|
|
9110
|
+
init_js_children();
|
|
8933
9111
|
init_js_io();
|
|
8934
9112
|
init_js_kernel();
|
|
8935
9113
|
init_js_sync();
|