@ai-ecoverse/slicc-kernel 1.54.2 → 1.54.3
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 +1 -1
- package/dist/kernel-worker.js +759 -358
- package/dist/kernel-worker.js.map +4 -4
- package/dist/node-process-worker.js +176 -46
- package/dist/node-process-worker.js.map +3 -3
- package/dist/node.js +861 -460
- package/dist/node.js.map +4 -4
- package/dist/process-worker.js +176 -46
- package/dist/process-worker.js.map +3 -3
- package/package.json +3 -3
package/dist/process-worker.js
CHANGED
|
@@ -4813,7 +4813,7 @@ function openAccess(existing, oflags, rights) {
|
|
|
4813
4813
|
return { readable: (rights & RIGHTS.FD_READ) !== 0n || !writable2, writable: writable2 };
|
|
4814
4814
|
}
|
|
4815
4815
|
function promoteRequest(fd, f, handed) {
|
|
4816
|
-
const orphan = f.buffer.isOrphan();
|
|
4816
|
+
const orphan = f.buffer.isOrphan() || (f.buffer.handle ?? 0) < 0;
|
|
4817
4817
|
if (!orphan && f.buffer.isRanged) f.buffer.flush();
|
|
4818
4818
|
const joins = !orphan && (handed.has(f.buffer) || f.buffer.isRanged);
|
|
4819
4819
|
return {
|
|
@@ -6800,60 +6800,201 @@ var init_wasi_module = __esm({
|
|
|
6800
6800
|
function inProc(path) {
|
|
6801
6801
|
return path === "/proc" || path.startsWith("/proc/");
|
|
6802
6802
|
}
|
|
6803
|
+
function* procWalk(path, follow2) {
|
|
6804
|
+
let done = [];
|
|
6805
|
+
let todo = path.split("/").filter((part) => part !== "");
|
|
6806
|
+
let hops = 0;
|
|
6807
|
+
while (todo.length > 0) {
|
|
6808
|
+
const part = todo.shift();
|
|
6809
|
+
if (part === ".") continue;
|
|
6810
|
+
if (part === "..") {
|
|
6811
|
+
done.pop();
|
|
6812
|
+
continue;
|
|
6813
|
+
}
|
|
6814
|
+
const at = `/${[...done, part].join("/")}`;
|
|
6815
|
+
const whole = normalize(`/${[...done, part, ...todo].join("/")}`);
|
|
6816
|
+
if (inProc(at) && inProc(whole)) return whole;
|
|
6817
|
+
if (!follow2 && todo.length === 0) return void 0;
|
|
6818
|
+
const target = yield at;
|
|
6819
|
+
if (target === null) return void 0;
|
|
6820
|
+
if (target === void 0) done.push(part);
|
|
6821
|
+
else {
|
|
6822
|
+
if (++hops > MAX_HOPS2) return void 0;
|
|
6823
|
+
if (target.startsWith("/")) done = [];
|
|
6824
|
+
todo = [...target.split("/").filter((part2) => part2 !== ""), ...todo];
|
|
6825
|
+
}
|
|
6826
|
+
}
|
|
6827
|
+
return void 0;
|
|
6828
|
+
}
|
|
6829
|
+
function procPath(fs, path, follow2) {
|
|
6830
|
+
const walk = procWalk(path, follow2);
|
|
6831
|
+
let step = walk.next();
|
|
6832
|
+
while (!step.done) {
|
|
6833
|
+
let target;
|
|
6834
|
+
try {
|
|
6835
|
+
target = fs.lstat(step.value).isSymbolicLink ? fs.readlink(step.value) : void 0;
|
|
6836
|
+
} catch {
|
|
6837
|
+
target = null;
|
|
6838
|
+
}
|
|
6839
|
+
step = walk.next(target);
|
|
6840
|
+
}
|
|
6841
|
+
return step.value;
|
|
6842
|
+
}
|
|
6843
|
+
function frozen(bytes) {
|
|
6844
|
+
const refuse = () => {
|
|
6845
|
+
throw syncError("EROFS", "/proc");
|
|
6846
|
+
};
|
|
6847
|
+
return {
|
|
6848
|
+
readFile: () => bytes,
|
|
6849
|
+
pread: (_p, at, n) => bytes.subarray(at, at + n),
|
|
6850
|
+
writeFile: refuse,
|
|
6851
|
+
pwrite: refuse,
|
|
6852
|
+
truncate: refuse
|
|
6853
|
+
};
|
|
6854
|
+
}
|
|
6803
6855
|
function procfsBridge(fs, tree) {
|
|
6856
|
+
const toProc = (path, follow2) => procPath(fs, path, follow2);
|
|
6857
|
+
const shadowing = () => {
|
|
6858
|
+
try {
|
|
6859
|
+
return fs.exists("/proc");
|
|
6860
|
+
} catch {
|
|
6861
|
+
return false;
|
|
6862
|
+
}
|
|
6863
|
+
};
|
|
6864
|
+
const via = (p, proc, own, follow2 = true) => {
|
|
6865
|
+
if (inProc(p)) return proc(p);
|
|
6866
|
+
if (shadowing()) {
|
|
6867
|
+
const real = toProc(p, follow2);
|
|
6868
|
+
if (real !== void 0) return proc(real);
|
|
6869
|
+
}
|
|
6870
|
+
try {
|
|
6871
|
+
return own();
|
|
6872
|
+
} catch (err) {
|
|
6873
|
+
const real = toProc(p, follow2);
|
|
6874
|
+
if (real === void 0) throw err;
|
|
6875
|
+
return proc(real);
|
|
6876
|
+
}
|
|
6877
|
+
};
|
|
6878
|
+
const readOnly = (paths, run) => {
|
|
6879
|
+
const physical = shadowing();
|
|
6880
|
+
for (const [p, follow2] of paths) {
|
|
6881
|
+
if (inProc(p) || physical && toProc(p, follow2) !== void 0) throw syncError("EROFS", p);
|
|
6882
|
+
}
|
|
6883
|
+
return run();
|
|
6884
|
+
};
|
|
6885
|
+
const snapshots = /* @__PURE__ */ new Map();
|
|
6886
|
+
let lastSnapshot = 0;
|
|
6887
|
+
const snapshot = (q) => {
|
|
6888
|
+
lastSnapshot--;
|
|
6889
|
+
snapshots.set(lastSnapshot, tree.read(q));
|
|
6890
|
+
return lastSnapshot;
|
|
6891
|
+
};
|
|
6892
|
+
const late = (p) => {
|
|
6893
|
+
const q = toProc(p, true);
|
|
6894
|
+
return q === void 0 ? void 0 : snapshot(q);
|
|
6895
|
+
};
|
|
6804
6896
|
const over = {
|
|
6805
|
-
readFile: (p) =>
|
|
6806
|
-
|
|
6807
|
-
|
|
6808
|
-
|
|
6809
|
-
|
|
6810
|
-
|
|
6811
|
-
|
|
6812
|
-
|
|
6813
|
-
|
|
6814
|
-
|
|
6815
|
-
|
|
6816
|
-
|
|
6817
|
-
|
|
6818
|
-
|
|
6819
|
-
|
|
6897
|
+
readFile: (p) => via(
|
|
6898
|
+
p,
|
|
6899
|
+
(q) => tree.read(q),
|
|
6900
|
+
() => fs.readFile(p)
|
|
6901
|
+
),
|
|
6902
|
+
stat: (p) => via(
|
|
6903
|
+
p,
|
|
6904
|
+
(q) => tree.stat(q),
|
|
6905
|
+
() => fs.stat(p)
|
|
6906
|
+
),
|
|
6907
|
+
lstat: (p) => via(
|
|
6908
|
+
p,
|
|
6909
|
+
(q) => tree.stat(q, false),
|
|
6910
|
+
() => fs.lstat(p),
|
|
6911
|
+
false
|
|
6912
|
+
),
|
|
6913
|
+
readdir: (p) => via(
|
|
6914
|
+
p,
|
|
6915
|
+
(q) => tree.readdir(q),
|
|
6916
|
+
() => {
|
|
6917
|
+
const names = fs.readdir(p);
|
|
6918
|
+
return p === "/" && !names.includes("proc") ? [...names, "proc"] : names;
|
|
6820
6919
|
}
|
|
6821
|
-
|
|
6920
|
+
),
|
|
6921
|
+
exists: (p) => {
|
|
6922
|
+
if (inProc(p)) return tree.exists(p);
|
|
6923
|
+
const real = shadowing() ? toProc(p, true) : void 0;
|
|
6924
|
+
if (real !== void 0) return tree.exists(real);
|
|
6925
|
+
if (fs.exists(p)) return true;
|
|
6926
|
+
const late2 = toProc(p, true);
|
|
6927
|
+
return late2 !== void 0 && tree.exists(late2);
|
|
6928
|
+
},
|
|
6929
|
+
readlink: (p) => via(
|
|
6930
|
+
p,
|
|
6931
|
+
(q) => tree.readlink(q),
|
|
6932
|
+
() => fs.readlink(p),
|
|
6933
|
+
false
|
|
6934
|
+
),
|
|
6935
|
+
readdirStat: (p) => via(
|
|
6936
|
+
p,
|
|
6937
|
+
(q) => tree.readdir(q).map((name2) => {
|
|
6822
6938
|
try {
|
|
6823
|
-
return [name2, tree.stat(`${
|
|
6939
|
+
return [name2, tree.stat(`${q}/${name2}`, false)];
|
|
6824
6940
|
} catch {
|
|
6825
6941
|
return [name2, null];
|
|
6826
6942
|
}
|
|
6827
|
-
})
|
|
6943
|
+
}),
|
|
6944
|
+
() => {
|
|
6945
|
+
const listed = fs.readdirStat(p);
|
|
6946
|
+
if (p !== "/" || listed.some(([name2]) => name2 === "proc")) return listed;
|
|
6947
|
+
return [...listed, ["proc", tree.stat("/proc")]];
|
|
6948
|
+
}
|
|
6949
|
+
),
|
|
6950
|
+
rename: (from, to) => readOnly(
|
|
6951
|
+
[
|
|
6952
|
+
[from, false],
|
|
6953
|
+
[to, false]
|
|
6954
|
+
],
|
|
6955
|
+
() => fs.rename(from, to)
|
|
6956
|
+
),
|
|
6957
|
+
symlink: (target, link) => readOnly([[link, false]], () => fs.symlink(target, link)),
|
|
6958
|
+
hold: (p, held, open, handle) => {
|
|
6959
|
+
if (handle !== void 0 && snapshots.delete(handle)) return void 0;
|
|
6960
|
+
if (!held) return fs.hold?.(p, held, open, handle);
|
|
6961
|
+
return via(p, snapshot, () => fs.hold?.(p, held, open) ?? late(p));
|
|
6828
6962
|
},
|
|
6829
|
-
|
|
6830
|
-
|
|
6831
|
-
|
|
6963
|
+
kept: (handle) => snapshots.has(handle) || fs.kept?.(handle) === true,
|
|
6964
|
+
pinned: (handle) => {
|
|
6965
|
+
const bytes = snapshots.get(handle);
|
|
6966
|
+
return bytes ? frozen(bytes) : fs.pinned?.(handle) ?? fs;
|
|
6832
6967
|
},
|
|
6833
|
-
hold: (p, ...rest2) => inProc(p) ? void 0 : fs.hold?.(p, ...rest2),
|
|
6834
6968
|
...fs.pread ? {
|
|
6835
|
-
pread: (p, at, n, version) =>
|
|
6969
|
+
pread: (p, at, n, version) => via(
|
|
6970
|
+
p,
|
|
6971
|
+
(q) => tree.read(q).subarray(at, at + n),
|
|
6972
|
+
() => fs.pread(p, at, n, version)
|
|
6973
|
+
)
|
|
6836
6974
|
} : {}
|
|
6837
6975
|
};
|
|
6838
|
-
for (const
|
|
6839
|
-
|
|
6840
|
-
|
|
6841
|
-
|
|
6842
|
-
|
|
6843
|
-
|
|
6844
|
-
|
|
6976
|
+
for (const [names, follow2] of [
|
|
6977
|
+
[FOLLOWING, true],
|
|
6978
|
+
[NOT_FOLLOWING, false]
|
|
6979
|
+
]) {
|
|
6980
|
+
for (const name2 of names) {
|
|
6981
|
+
const fn = fs[name2];
|
|
6982
|
+
if (!fn) continue;
|
|
6983
|
+
over[name2] = (p, ...rest2) => readOnly([[p, follow2]], () => fn.call(fs, p, ...rest2));
|
|
6984
|
+
}
|
|
6845
6985
|
}
|
|
6846
6986
|
return new Proxy(fs, {
|
|
6847
6987
|
get: (target, key, receiver) => key in over ? over[key] : Reflect.get(target, key, receiver)
|
|
6848
6988
|
});
|
|
6849
6989
|
}
|
|
6850
|
-
var DIR_MODE3, FILE_MODE2, LINK_MODE3, PID_NAMES, SYSTEM_NAMES, ProcTree,
|
|
6990
|
+
var DIR_MODE3, FILE_MODE2, LINK_MODE3, PID_NAMES, SYSTEM_NAMES, ProcTree, FOLLOWING, NOT_FOLLOWING, MAX_HOPS2;
|
|
6851
6991
|
var init_wasi_procfs = __esm({
|
|
6852
6992
|
"src/process/wasi/wasi-procfs.ts"() {
|
|
6853
6993
|
"use strict";
|
|
6854
6994
|
init_sync_fs_wire();
|
|
6855
6995
|
init_process_fds();
|
|
6856
6996
|
init_procfs();
|
|
6997
|
+
init_wasi_files();
|
|
6857
6998
|
DIR_MODE3 = 16749;
|
|
6858
6999
|
FILE_MODE2 = 33060;
|
|
6859
7000
|
LINK_MODE3 = 41471;
|
|
@@ -6964,20 +7105,9 @@ var init_wasi_procfs = __esm({
|
|
|
6964
7105
|
}
|
|
6965
7106
|
}
|
|
6966
7107
|
};
|
|
6967
|
-
|
|
6968
|
-
|
|
6969
|
-
|
|
6970
|
-
"rm",
|
|
6971
|
-
"unlink",
|
|
6972
|
-
"rmdir",
|
|
6973
|
-
"symlink",
|
|
6974
|
-
"chmod",
|
|
6975
|
-
"utimes",
|
|
6976
|
-
"lutimes",
|
|
6977
|
-
"create",
|
|
6978
|
-
"pwrite",
|
|
6979
|
-
"truncate"
|
|
6980
|
-
];
|
|
7108
|
+
FOLLOWING = ["writeFile", "chmod", "utimes", "pwrite", "truncate"];
|
|
7109
|
+
NOT_FOLLOWING = ["mkdir", "rm", "unlink", "rmdir", "lutimes", "create"];
|
|
7110
|
+
MAX_HOPS2 = 40;
|
|
6981
7111
|
}
|
|
6982
7112
|
});
|
|
6983
7113
|
|