@ai-ecoverse/slicc-kernel 1.142.2 → 1.143.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/dist/node.js CHANGED
@@ -7979,7 +7979,7 @@ function satisfies(version, range2) {
7979
7979
  }
7980
7980
 
7981
7981
  // src/version.ts
7982
- var KERNEL_VERSION = true ? "1.142.2" : "0.0.0-dev";
7982
+ var KERNEL_VERSION = true ? "1.143.0" : "0.0.0-dev";
7983
7983
  var OS_RELEASE = "6.0.0-slicc";
7984
7984
  function procVersion() {
7985
7985
  return `Linux version ${OS_RELEASE} (slicc-kernel ${KERNEL_VERSION}) #1 SMP PREEMPT_DYNAMIC
@@ -32110,7 +32110,66 @@ function nodeTransport(options = {}) {
32110
32110
  }
32111
32111
  var TERMINATED = "the kernel is terminated";
32112
32112
  var EXIT_GRACE_MS = 50;
32113
- function nodeWorker(file, live, closed, workerData) {
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) {
32114
32173
  const errors = /* @__PURE__ */ new Set();
32115
32174
  const messages = /* @__PURE__ */ new Map();
32116
32175
  const fail3 = (message3) => {
@@ -32119,7 +32178,7 @@ function nodeWorker(file, live, closed, workerData) {
32119
32178
  } });
32120
32179
  }
32121
32180
  };
32122
- const worker = closed ? void 0 : new Worker(file, { env: workerEnv(), ...workerData ? { workerData } : {} });
32181
+ const worker = closed ? void 0 : take?.() ?? processWorker(file, workerData);
32123
32182
  let ending = false;
32124
32183
  if (worker) {
32125
32184
  const kill = () => {
@@ -32192,11 +32251,13 @@ async function createNodeKernel(options = {}) {
32192
32251
  let terminated = false;
32193
32252
  const file = options.worker ?? new URL("./node-process-worker.js", import.meta.url);
32194
32253
  const compileCache = cacheDirOf(options.compileCache);
32254
+ const workerData = compileCache ? { compileCache } : void 0;
32255
+ const warm = warmPoolOf(options, file, workerData, live);
32195
32256
  const transport = options.network?.transport;
32196
32257
  const launcher = new Launcher({
32197
32258
  fs,
32198
32259
  unlinkOwner: pidOwner(process),
32199
- createWorker: () => nodeWorker(file, live, terminated, compileCache ? { compileCache } : void 0),
32260
+ createWorker: () => nodeWorker(file, live, terminated, workerData, warm ? () => warm.take() : void 0),
32200
32261
  createDriverWorker: () => nodeWorker(
32201
32262
  options.driverWorker ?? new URL("./node-driver-worker.js", import.meta.url),
32202
32263
  live,
@@ -32329,6 +32390,7 @@ async function createNodeKernel(options = {}) {
32329
32390
  },
32330
32391
  terminate() {
32331
32392
  terminated = true;
32393
+ warm?.close();
32332
32394
  for (const client of [...clients]) client.detach();
32333
32395
  for (const reject of [...pending]) reject(new Error(TERMINATED));
32334
32396
  for (const kill of [...live]) kill();
@@ -32340,11 +32402,13 @@ async function createNodeKernel(options = {}) {
32340
32402
  export {
32341
32403
  KernelCallError,
32342
32404
  KernelGoneError,
32405
+ WARM_IDLE_MS,
32343
32406
  attachKernel,
32344
32407
  createNodeKernel,
32345
32408
  fetchTransport,
32346
32409
  memoryRoot,
32347
32410
  nodeTransport,
32348
- serveHostfsPort
32411
+ serveHostfsPort,
32412
+ warmPool
32349
32413
  };
32350
32414
  //# sourceMappingURL=node.js.map