@ai-ecoverse/slicc-kernel 1.142.1 → 1.142.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 +4 -2
- package/dist/kernel-worker.js +15 -4
- package/dist/kernel-worker.js.map +3 -3
- package/dist/node-process-worker.js +1 -1
- package/dist/node.js +83 -8
- package/dist/node.js.map +3 -3
- package/dist/process-worker.js +1 -1
- package/dist/types/fs/opfs.d.ts +3 -0
- package/dist/types/node.d.ts +8 -1
- package/package.json +7 -7
|
@@ -6725,7 +6725,7 @@ var KERNEL_VERSION, OS_RELEASE;
|
|
|
6725
6725
|
var init_version = __esm({
|
|
6726
6726
|
"src/version.ts"() {
|
|
6727
6727
|
"use strict";
|
|
6728
|
-
KERNEL_VERSION = true ? "1.142.
|
|
6728
|
+
KERNEL_VERSION = true ? "1.142.3" : "0.0.0-dev";
|
|
6729
6729
|
OS_RELEASE = "6.0.0-slicc";
|
|
6730
6730
|
}
|
|
6731
6731
|
});
|
package/dist/node.js
CHANGED
|
@@ -4549,6 +4549,8 @@ var EXECUTABLE = /\/node_modules\/(?:@[^/]+\/)?[^/]+\/bin\//;
|
|
|
4549
4549
|
var RENAMES = "/.slicc-renames";
|
|
4550
4550
|
var RENAME_LOCK = "slicc-rename:";
|
|
4551
4551
|
var RENAME_ADMIT = "slicc-rename-admit:";
|
|
4552
|
+
var escapeRoot = (name2) => name2.replace(/[%:]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`);
|
|
4553
|
+
var LEGACY_RENAME_LOCK = /^slicc-rename:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;
|
|
4552
4554
|
var PAIRED = /* @__PURE__ */ new Set(["rename", "link", "copyFile"]);
|
|
4553
4555
|
var LISTINGS = /* @__PURE__ */ new Set(["readdir", "readdirStat"]);
|
|
4554
4556
|
var RETRY = /* @__PURE__ */ Symbol("retry");
|
|
@@ -4709,6 +4711,7 @@ var OpfsFs = class {
|
|
|
4709
4711
|
locks;
|
|
4710
4712
|
lockPrefix;
|
|
4711
4713
|
rootName;
|
|
4714
|
+
renamePrefix;
|
|
4712
4715
|
constructor(root, meta = new MemoryMeta(), channel, options = {}) {
|
|
4713
4716
|
this.root = root;
|
|
4714
4717
|
this.meta = sidecar(meta);
|
|
@@ -4716,6 +4719,7 @@ var OpfsFs = class {
|
|
|
4716
4719
|
this.locks = options.locks === void 0 ? lockManager() : options.locks ?? void 0;
|
|
4717
4720
|
this.lockPrefix = `slicc-excl:${channel ?? ""}:`;
|
|
4718
4721
|
this.rootName = channel;
|
|
4722
|
+
this.renamePrefix = `${RENAME_LOCK}${escapeRoot(channel ?? "")}:`;
|
|
4719
4723
|
this.channel = channel === void 0 ? void 0 : new BroadcastChannel(channel);
|
|
4720
4724
|
this.remote = channel === void 0 ? void 0 : new RemoteWatch(`${channel}:watch`, { locks: this.locks ?? null });
|
|
4721
4725
|
if (this.remote) {
|
|
@@ -5880,7 +5884,7 @@ var OpfsFs = class {
|
|
|
5880
5884
|
try {
|
|
5881
5885
|
const locks = this.locks;
|
|
5882
5886
|
if (locks) {
|
|
5883
|
-
lock = `${
|
|
5887
|
+
lock = `${this.renameLocks()}${crypto.randomUUID()}`;
|
|
5884
5888
|
this.ownLocks.add(lock);
|
|
5885
5889
|
call?.release();
|
|
5886
5890
|
await this.admitted(locks, lock, source.path, destination, place, hooks);
|
|
@@ -5972,6 +5976,13 @@ var OpfsFs = class {
|
|
|
5972
5976
|
if (!known.trees.some(([a, b]) => a === tree2[0] && b === tree2[1])) known.trees.push(tree2);
|
|
5973
5977
|
return known;
|
|
5974
5978
|
}
|
|
5979
|
+
renameLocks() {
|
|
5980
|
+
return this.renamePrefix;
|
|
5981
|
+
}
|
|
5982
|
+
renameHere(name2) {
|
|
5983
|
+
if (name2 === void 0) return false;
|
|
5984
|
+
return name2.startsWith(this.renameLocks()) || LEGACY_RENAME_LOCK.test(name2);
|
|
5985
|
+
}
|
|
5975
5986
|
async learnRenames() {
|
|
5976
5987
|
for (const { rename } of await this.meta.under(RENAMES)) {
|
|
5977
5988
|
if (rename?.lock === void 0 || this.ownLocks.has(rename.lock)) continue;
|
|
@@ -5980,7 +5991,7 @@ var OpfsFs = class {
|
|
|
5980
5991
|
}
|
|
5981
5992
|
async renamingElsewhere() {
|
|
5982
5993
|
const { held = [] } = await this.locks.query();
|
|
5983
|
-
return held.some(({ name: name2 }) => name2
|
|
5994
|
+
return held.some(({ name: name2 }) => this.renameHere(name2) && !this.ownLocks.has(name2));
|
|
5984
5995
|
}
|
|
5985
5996
|
lookForRenames() {
|
|
5986
5997
|
const locks = this.locks;
|
|
@@ -5992,7 +6003,7 @@ var OpfsFs = class {
|
|
|
5992
6003
|
this.queries++;
|
|
5993
6004
|
const { held = [] } = await locks.query();
|
|
5994
6005
|
const unknown = () => held.some(
|
|
5995
|
-
({ name: name2 }) => name2
|
|
6006
|
+
({ name: name2 }) => this.renameHere(name2) && !this.ownLocks.has(name2) && !this.peerMoves.has(name2)
|
|
5996
6007
|
);
|
|
5997
6008
|
if (unknown()) await this.learnRenames();
|
|
5998
6009
|
if (!unknown()) {
|
|
@@ -7968,7 +7979,7 @@ function satisfies(version, range2) {
|
|
|
7968
7979
|
}
|
|
7969
7980
|
|
|
7970
7981
|
// src/version.ts
|
|
7971
|
-
var KERNEL_VERSION = true ? "1.142.
|
|
7982
|
+
var KERNEL_VERSION = true ? "1.142.3" : "0.0.0-dev";
|
|
7972
7983
|
var OS_RELEASE = "6.0.0-slicc";
|
|
7973
7984
|
function procVersion() {
|
|
7974
7985
|
return `Linux version ${OS_RELEASE} (slicc-kernel ${KERNEL_VERSION}) #1 SMP PREEMPT_DYNAMIC
|
|
@@ -32099,7 +32110,66 @@ function nodeTransport(options = {}) {
|
|
|
32099
32110
|
}
|
|
32100
32111
|
var TERMINATED = "the kernel is terminated";
|
|
32101
32112
|
var EXIT_GRACE_MS = 50;
|
|
32102
|
-
|
|
32113
|
+
var WARM_IDLE_MS = 3e4;
|
|
32114
|
+
function warmPool(make, live, idleMs = WARM_IDLE_MS) {
|
|
32115
|
+
let spare;
|
|
32116
|
+
let idle2;
|
|
32117
|
+
let closed = false;
|
|
32118
|
+
const drop = (worker) => {
|
|
32119
|
+
if (spare !== worker) return;
|
|
32120
|
+
spare = void 0;
|
|
32121
|
+
clearTimeout(idle2);
|
|
32122
|
+
live.delete(kill);
|
|
32123
|
+
};
|
|
32124
|
+
const kill = () => {
|
|
32125
|
+
const worker = spare;
|
|
32126
|
+
if (!worker) return;
|
|
32127
|
+
drop(worker);
|
|
32128
|
+
void worker.terminate();
|
|
32129
|
+
};
|
|
32130
|
+
const fill2 = () => {
|
|
32131
|
+
if (closed || spare) return;
|
|
32132
|
+
let worker;
|
|
32133
|
+
try {
|
|
32134
|
+
worker = make();
|
|
32135
|
+
} catch {
|
|
32136
|
+
closed = true;
|
|
32137
|
+
return;
|
|
32138
|
+
}
|
|
32139
|
+
worker.unref();
|
|
32140
|
+
worker.once("error", () => drop(worker));
|
|
32141
|
+
worker.once("exit", () => drop(worker));
|
|
32142
|
+
spare = worker;
|
|
32143
|
+
live.add(kill);
|
|
32144
|
+
idle2 = setTimeout(kill, idleMs);
|
|
32145
|
+
idle2.unref?.();
|
|
32146
|
+
};
|
|
32147
|
+
return {
|
|
32148
|
+
take() {
|
|
32149
|
+
const worker = spare;
|
|
32150
|
+
if (worker) {
|
|
32151
|
+
drop(worker);
|
|
32152
|
+
worker.removeAllListeners("error");
|
|
32153
|
+
worker.removeAllListeners("exit");
|
|
32154
|
+
worker.ref();
|
|
32155
|
+
}
|
|
32156
|
+
setImmediate(fill2);
|
|
32157
|
+
return worker ?? make();
|
|
32158
|
+
},
|
|
32159
|
+
close() {
|
|
32160
|
+
closed = true;
|
|
32161
|
+
kill();
|
|
32162
|
+
}
|
|
32163
|
+
};
|
|
32164
|
+
}
|
|
32165
|
+
function processWorker(file, workerData) {
|
|
32166
|
+
return new Worker(file, { env: workerEnv(), ...workerData ? { workerData } : {} });
|
|
32167
|
+
}
|
|
32168
|
+
function warmPoolOf(options, file, workerData, live) {
|
|
32169
|
+
if (options.warmWorker === false) return void 0;
|
|
32170
|
+
return warmPool(() => processWorker(file, workerData), live);
|
|
32171
|
+
}
|
|
32172
|
+
function nodeWorker(file, live, closed, workerData, take) {
|
|
32103
32173
|
const errors = /* @__PURE__ */ new Set();
|
|
32104
32174
|
const messages = /* @__PURE__ */ new Map();
|
|
32105
32175
|
const fail3 = (message3) => {
|
|
@@ -32108,7 +32178,7 @@ function nodeWorker(file, live, closed, workerData) {
|
|
|
32108
32178
|
} });
|
|
32109
32179
|
}
|
|
32110
32180
|
};
|
|
32111
|
-
const worker = closed ? void 0 :
|
|
32181
|
+
const worker = closed ? void 0 : take?.() ?? processWorker(file, workerData);
|
|
32112
32182
|
let ending = false;
|
|
32113
32183
|
if (worker) {
|
|
32114
32184
|
const kill = () => {
|
|
@@ -32181,11 +32251,13 @@ async function createNodeKernel(options = {}) {
|
|
|
32181
32251
|
let terminated = false;
|
|
32182
32252
|
const file = options.worker ?? new URL("./node-process-worker.js", import.meta.url);
|
|
32183
32253
|
const compileCache = cacheDirOf(options.compileCache);
|
|
32254
|
+
const workerData = compileCache ? { compileCache } : void 0;
|
|
32255
|
+
const warm = warmPoolOf(options, file, workerData, live);
|
|
32184
32256
|
const transport = options.network?.transport;
|
|
32185
32257
|
const launcher = new Launcher({
|
|
32186
32258
|
fs,
|
|
32187
32259
|
unlinkOwner: pidOwner(process),
|
|
32188
|
-
createWorker: () => nodeWorker(file, live, terminated,
|
|
32260
|
+
createWorker: () => nodeWorker(file, live, terminated, workerData, warm ? () => warm.take() : void 0),
|
|
32189
32261
|
createDriverWorker: () => nodeWorker(
|
|
32190
32262
|
options.driverWorker ?? new URL("./node-driver-worker.js", import.meta.url),
|
|
32191
32263
|
live,
|
|
@@ -32318,6 +32390,7 @@ async function createNodeKernel(options = {}) {
|
|
|
32318
32390
|
},
|
|
32319
32391
|
terminate() {
|
|
32320
32392
|
terminated = true;
|
|
32393
|
+
warm?.close();
|
|
32321
32394
|
for (const client of [...clients]) client.detach();
|
|
32322
32395
|
for (const reject of [...pending]) reject(new Error(TERMINATED));
|
|
32323
32396
|
for (const kill of [...live]) kill();
|
|
@@ -32329,11 +32402,13 @@ async function createNodeKernel(options = {}) {
|
|
|
32329
32402
|
export {
|
|
32330
32403
|
KernelCallError,
|
|
32331
32404
|
KernelGoneError,
|
|
32405
|
+
WARM_IDLE_MS,
|
|
32332
32406
|
attachKernel,
|
|
32333
32407
|
createNodeKernel,
|
|
32334
32408
|
fetchTransport,
|
|
32335
32409
|
memoryRoot,
|
|
32336
32410
|
nodeTransport,
|
|
32337
|
-
serveHostfsPort
|
|
32411
|
+
serveHostfsPort,
|
|
32412
|
+
warmPool
|
|
32338
32413
|
};
|
|
32339
32414
|
//# sourceMappingURL=node.js.map
|