@enfyra/kernel 1.1.19 → 1.1.20

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.
@@ -1,4 +1,4 @@
1
- "use strict";var L=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var q=L((Ie,K)=>{"use strict";var{fork:ce}=require("child_process"),le=require("path");function ue({workerDir:e,activeTaskContexts:t}){let o=new Map,r=new Map,a=new Map,s=null,c=0;function g(f){return Math.max(1,Math.trunc(Number(f)||3e4))}function u(f){for(let n of r.values())clearTimeout(n.timer),n.reject(f);r.clear()}function h(f){let n=typeof f=="string"?JSON.parse(f):f;if(n?.error)throw new Error(n.error);return n?.value}async function v(f){let n=t.get(f.taskId);if(!n)throw new Error(`Package callback context not found: ${f.taskId}`);let i=JSON.stringify(f.callbackId),p=JSON.stringify(f.argsJson||"[]"),_=await n.evalClosure(`return __invokeRuntimeCallback(${i}, ${p});`,[],{arguments:{copy:!0},result:{promise:!0,copy:!0}});return h(_)}function y(){if(s&&s.connected)return s;let f=le.join(e,"package-runtime.child.js"),n=ce(f,[],{stdio:["ignore","ignore","ignore","ipc"]});return s=n,n.on("message",i=>{if(!i||!i.id)return;if(i.type==="pkgStreamChunk"){let _=a.get(i.id);if(!_)return;_.onChunk(Buffer.from(i.chunk||"","base64")).then(()=>{try{n.send({type:"pkgStreamAck",ackId:i.ackId})}catch{}}).catch(w=>{try{n.send({type:"pkgStreamError",ackId:i.ackId,error:{message:w.message,stack:w.stack}})}catch{}});return}if(i.type==="pkgCallbackCall"){v(i).then(_=>{try{n.send({type:"pkgCallbackResult",id:i.id,value:_})}catch{}}).catch(_=>{try{n.send({type:"pkgCallbackError",id:i.id,error:{message:_.message,stack:_.stack}})}catch{}});return}let p=r.get(i.id);if(p)if(clearTimeout(p.timer),r.delete(i.id),a.delete(i.id),i.ok)p.resolve(i.value);else{let _=new Error(i.error?.message||"Package runtime call failed");_.stack=i.error?.stack||_.stack,p.reject(_)}}),n.on("exit",(i,p)=>{s===n&&(s=null),u(new Error(`Package runtime exited${p?` with signal ${p}`:` with code ${i}`}`))}),n.on("error",i=>{s===n&&(s=null),u(i)}),n}function l(f){return new Promise((n,i)=>{let p=y(),_=`pkg_${++c}`,w=g(f.timeoutMs),S=setTimeout(()=>{r.delete(_),a.delete(_);try{p.kill()}catch{}i(new Error(`Package runtime call timed out after ${w}ms`))},w);r.set(_,{resolve:n,reject:i,timer:S});try{p.send({...f,id:_},C=>{C&&(clearTimeout(S),r.delete(_),i(C))})}catch(C){clearTimeout(S),r.delete(_),i(C)}})}function m(f,n,i,p=[],_=3e4){return new Promise((w,S)=>{let C=y(),x=`pkg_${++c}`,H=g(_),U=setTimeout(()=>{r.delete(x),a.delete(x);try{C.kill()}catch{}S(new Error(`Package runtime stream timed out after ${H}ms`))},H);r.set(x,{resolve:w,reject:S,timer:U}),a.set(x,{onChunk:i});try{C.send({op:"streamHandle",taskId:f,handleId:n,path:p,id:x},F=>{F&&(clearTimeout(U),r.delete(x),a.delete(x),S(F))})}catch(F){clearTimeout(U),r.delete(x),a.delete(x),S(F)}})}function P(f){try{if(!s||!s.connected)return;s.send({...f,id:`pkg_${++c}`,fire:!0})}catch{}}async function k(f,n){let i=o.get(f);if(!i)throw new Error("Package context is not available");if(n.handleId)return l({op:n.kind==="get"?"handleGet":"handleCall",taskId:f,handleId:n.handleId,path:n.path||[],argsJson:n.argsJson||"[]",timeoutMs:n.timeoutMs});let p=i.get(n.packageName);if(!p)throw new Error(`Package "${n.packageName}" is not available`);return l({op:n.kind==="construct"?"construct":"call",taskId:f,packageName:n.packageName,package:{name:p.name,fileUrl:p.fileUrl},path:n.path||[],argsJson:n.argsJson||"[]",timeoutMs:n.timeoutMs})}function A(f,n){o.set(f,n)}function I(f){o.delete(f),P({op:"releaseTask",taskId:f})}function d(){if(s){try{s.kill()}catch{}s=null}}return{cleanupTaskPackages:I,executePackageRuntimeCall:k,setTaskPackages:A,streamPackageHandle:m,shutdownPackageRuntime:d}}K.exports={createPackageRuntimeBridge:ue}});var V=L((He,B)=>{"use strict";var fe=`
1
+ "use strict";var L=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var q=L((Ie,K)=>{"use strict";var{fork:ce}=require("child_process"),le=require("path");function ue({workerDir:e,activeTaskContexts:t}){let o=new Map,r=new Map,a=new Map,s=null,c=0;function g(f){return Math.max(1,Math.trunc(Number(f)||3e4))}function u(f){for(let n of r.values())clearTimeout(n.timer),n.reject(f);r.clear()}function h(f){let n=typeof f=="string"?JSON.parse(f):f;if(n?.error)throw new Error(n.error);return n?.value}async function v(f){let n=t.get(f.taskId);if(!n)throw new Error(`Package callback context not found: ${f.taskId}`);let i=JSON.stringify(f.callbackId),_=JSON.stringify(f.argsJson||"[]"),p=await n.evalClosure(`return __invokeRuntimeCallback(${i}, ${_});`,[],{arguments:{copy:!0},result:{promise:!0,copy:!0}});return h(p)}function y(){if(s&&s.connected)return s;let f=le.join(e,"package-runtime.child.js"),n=ce(f,[],{stdio:["ignore","ignore","ignore","ipc"]});return s=n,n.on("message",i=>{if(!i||!i.id)return;if(i.type==="pkgStreamChunk"){let p=a.get(i.id);if(!p)return;p.onChunk(Buffer.from(i.chunk||"","base64")).then(()=>{try{n.send({type:"pkgStreamAck",ackId:i.ackId})}catch{}}).catch(w=>{try{n.send({type:"pkgStreamError",ackId:i.ackId,error:{message:w.message,stack:w.stack}})}catch{}});return}if(i.type==="pkgCallbackCall"){v(i).then(p=>{try{n.send({type:"pkgCallbackResult",id:i.id,value:p})}catch{}}).catch(p=>{try{n.send({type:"pkgCallbackError",id:i.id,error:{message:p.message,stack:p.stack}})}catch{}});return}let _=r.get(i.id);if(_)if(clearTimeout(_.timer),r.delete(i.id),a.delete(i.id),i.ok)_.resolve(i.value);else{let p=new Error(i.error?.message||"Package runtime call failed");p.stack=i.error?.stack||p.stack,_.reject(p)}}),n.on("exit",(i,_)=>{s===n&&(s=null),u(new Error(`Package runtime exited${_?` with signal ${_}`:` with code ${i}`}`))}),n.on("error",i=>{s===n&&(s=null),u(i)}),n}function l(f){return new Promise((n,i)=>{let _=y(),p=`pkg_${++c}`,w=g(f.timeoutMs),S=setTimeout(()=>{r.delete(p),a.delete(p);try{_.kill()}catch{}i(new Error(`Package runtime call timed out after ${w}ms`))},w);r.set(p,{resolve:n,reject:i,timer:S});try{_.send({...f,id:p},C=>{C&&(clearTimeout(S),r.delete(p),i(C))})}catch(C){clearTimeout(S),r.delete(p),i(C)}})}function m(f,n,i,_=[],p=3e4){return new Promise((w,S)=>{let C=y(),x=`pkg_${++c}`,H=g(p),U=setTimeout(()=>{r.delete(x),a.delete(x);try{C.kill()}catch{}S(new Error(`Package runtime stream timed out after ${H}ms`))},H);r.set(x,{resolve:w,reject:S,timer:U}),a.set(x,{onChunk:i});try{C.send({op:"streamHandle",taskId:f,handleId:n,path:_,id:x},F=>{F&&(clearTimeout(U),r.delete(x),a.delete(x),S(F))})}catch(F){clearTimeout(U),r.delete(x),a.delete(x),S(F)}})}function P(f){try{if(!s||!s.connected)return;s.send({...f,id:`pkg_${++c}`,fire:!0})}catch{}}async function k(f,n){let i=o.get(f);if(!i)throw new Error("Package context is not available");if(n.handleId)return l({op:n.kind==="get"?"handleGet":"handleCall",taskId:f,handleId:n.handleId,path:n.path||[],argsJson:n.argsJson||"[]",timeoutMs:n.timeoutMs});let _=i.get(n.packageName);if(!_)throw new Error(`Package "${n.packageName}" is not available`);return l({op:n.kind==="construct"?"construct":"call",taskId:f,packageName:n.packageName,package:{name:_.name,fileUrl:_.fileUrl},path:n.path||[],argsJson:n.argsJson||"[]",timeoutMs:n.timeoutMs})}function A(f,n){o.set(f,n)}function I(f){o.delete(f),P({op:"releaseTask",taskId:f})}function d(){if(s){try{s.kill()}catch{}s=null}}return{cleanupTaskPackages:I,executePackageRuntimeCall:k,setTaskPackages:A,streamPackageHandle:m,shutdownPackageRuntime:d}}K.exports={createPackageRuntimeBridge:ue}});var V=L((He,B)=>{"use strict";var fe=`
2
2
  "use strict";
3
3
  let $ctx = {};
4
4
  let $pkgs = {};
@@ -277,6 +277,7 @@ const __ctxChangeProtectedKeys = new Set([
277
277
  '$req',
278
278
  '$res',
279
279
  '$socket',
280
+ '$storage',
280
281
  '$logs',
281
282
  '$throw',
282
283
  '$trigger',
@@ -669,6 +670,10 @@ function __resetTask(snapshot, taskId, timeoutMs) {
669
670
  get: (_, method) => async (...args) =>
670
671
  __call('cacheCall', JSON.stringify({ method: String(method), argsJson: JSON.stringify(args) }))
671
672
  });
673
+ $ctx.$storage = new Proxy({}, {
674
+ get: (_, method) => async (...args) =>
675
+ __call('storageCall', JSON.stringify({ method: String(method), argsJson: await __stringifyRuntimeArgs(args) }))
676
+ });
672
677
  $ctx.$res = new Proxy({}, {
673
678
  get: (_, method) => async (...args) =>
674
679
  __call('resCall', JSON.stringify({ method: String(method), argsJson: await __stringifyRuntimeArgs(args) }))
@@ -717,7 +722,7 @@ function __cleanupTask() {
717
722
  __runtimeCallbacks = new Map();
718
723
  return true;
719
724
  }
720
- `;function pe(e){return fe.replace("%%PKG_SETUP%%",e)}B.exports={buildSetupCode:pe}});var{parentPort:j}=require("worker_threads"),W=require("fs"),{fileURLToPath:_e}=require("url"),{createPackageRuntimeBridge:de}=q(),{buildSetupCode:ge}=V(),O;try{O=require("isolated-vm")}catch(e){j.postMessage({type:"error",message:"isolated-vm not available: "+e.message}),process.exit(1)}var J=new Map,Q=0,E=new Map,T=de({workerDir:__dirname,activeTaskContexts:E}),he=500,ye=5e3,me=32,z=new WeakMap,Y=new WeakMap,ee=new WeakMap,N={created:0,reused:0,released:0,evicted:0,scrubFailed:0},b=null,ke=0,G=0,X=0;async function ve(){let e=Date.now();if(e-G<ye)return X;if(G=e,!b)return 0;let t=0;for(let o of b){let r=o?.isolate;if(!(!r||r.isDisposed))try{let a=await r.getHeapStatistics(),s=a.heap_size_limit||1,c=a.used_heap_size/s;c>t&&(t=c)}catch{}}return X=t,t}async function M(e){e.heapRatio=await ve(),e.contextStats=we(),j.postMessage(e)}function we(){let e=0;if(b)for(let t of b)e+=t?.idleContexts?.length||0;return{...N,idle:e}}function te(e,t){if(!b){let a=Math.max(1,Math.trunc(Number(t)||8));b=new Array(a).fill(null)}let o=ke++%b.length,r=b[o];return(!r||!r.isolate||r.isolate.isDisposed)&&(r={isolate:new O.Isolate({memoryLimit:e}),idleContexts:[]},b[o]=r),r}async function $(e,t,o){let r=z.get(e);r||(r=new Map,z.set(e,r));let a=r.get(t);if(a)return a;let s=await e.compileScript(t,{filename:o});if(r.set(t,s),r.size>he){let c=r.keys().next().value;r.delete(c)}return s}j.on("message",async e=>{if(e.type==="execute")Je(e).catch(async t=>{await M({type:"result",id:e.id,success:!1,error:{message:t.message,stack:t.stack}})});else if(e.type==="executeBatch")Oe(e).catch(async t=>{await M({type:"result",id:e.id,success:!1,error:{message:t.message,stack:t.stack}})});else if(e.type==="callResult"){let t=J.get(e.callId);t&&(J.delete(e.callId),t.resolve(e.result))}else if(e.type==="callError"){let t=J.get(e.callId);t&&(J.delete(e.callId),t.reject(new Error(e.error)))}});function R(e,t,o){return new Promise((r,a)=>{let s=`cb_${++Q}`;J.set(s,{resolve:r,reject:a}),j.postMessage({type:t,id:e,callId:s,...o})})}function Pe(e,t,o){j.postMessage({type:t,id:e,callId:`f_${++Q}`,...o})}async function xe(e,t){if(t?.method!=="stream")return R(e,"resCall",t);let o=JSON.parse(t.argsJson||"[]"),r=o[0],a=o[1]||{},s=r?.__pkgHandleArg;if(!s)return R(e,"resCall",t);await R(e,"resCall",{method:"streamStart",argsJson:JSON.stringify([null,a])});try{await T.streamPackageHandle(e,s,c=>R(e,"resCall",{method:"streamChunk",chunk:Buffer.from(c).toString("base64")})),await R(e,"resCall",{method:"streamEnd"})}catch(c){try{await R(e,"resCall",{method:"streamError",error:{message:c.message,stack:c.stack}})}catch{}throw c}return JSON.stringify({__e:"u"})}function Se(e){if(typeof e.sourceCode=="string"&&e.sourceCode.length>0)return e.sourceCode;let t=e.filePath;return!t&&typeof e.fileUrl=="string"&&e.fileUrl.startsWith("file://")&&(t=_e(e.fileUrl)),!t||!W.existsSync(t)?null:W.readFileSync(t,"utf8")}async function Ce(e,t,o){try{let r=Se(o);if(!r)return null;let a=await e.compileModule(r,{filename:`pkg:${o.safeName}`});await a.instantiate(t,c=>{throw new Error(`Unresolved import in package ${o.safeName}: ${c}`)}),await a.evaluate({timeout:1e4});let s=await a.namespace.get("default");return s!==void 0&&s.typeof!=="undefined"?s.derefInto({release:!1}):a.namespace.derefInto({release:!1})}catch{return null}}function re(e,t){let o=a=>{let s=2166136261;for(let c=0;c<a.length;c++)s^=a.charCodeAt(c),s=Math.imul(s,16777619);return(s>>>0).toString(36)},r=new Set(t||[]);return e.map(a=>{let s=a.cacheKey||`${a.filePath||""}:${a.fileUrl||""}:${a.mtimeMs||""}:${a.size||""}:${o(a.sourceCode||"")}`,c=r.has(a.name)?"isolate":"proxy";return`${a.name}:${a.version||""}:${s}:${c}`}).join("|")}function ae(e,t){let o=new Set(t.map(u=>u.name)),r=new Set,a=String(e||""),s=/\b(?:\$ctx\.)?\$pkgs\s*\[\s*(['"`])([^'"`]+)\1\s*\]/g,c=/\brequire\s*\(\s*(['"`])([^'"`]+)\1\s*\)/g,g=/\b(?:\$ctx\.)?\$pkgs\.([A-Za-z_$][\w$]*)/g;for(let u of[s,c])for(let h of a.matchAll(u)){let v=h[2];o.has(v)&&r.add(v)}for(let u of a.matchAll(g)){let h=u[1];o.has(h)&&r.add(h)}return r}async function be(e,t,o,r){let a=await e.createContext(),s=a.global;await s.set("global",s.derefInto());let c=[],g=[],u=new Map;for(let l of o){u.set(l.name,l);let m=r.has(l.name)?await Ce(e,a,l):null;m!==null?(await s.set(`__pkg_${l.safeName}`,m),c.push(l)):g.push(l)}T.setTaskPackages(t,u),await s.set("__callRef",new O.Reference(async(l,m,P)=>{let k=JSON.parse(P);return m==="pkgCall"?JSON.stringify(await T.executePackageRuntimeCall(l,k)):m==="resCall"?xe(l,k):R(l,m,k)})),await s.set("__fireRef",new O.Reference((l,m,P)=>{let k=JSON.parse(P);Pe(l,m,k)}));let h=c.map(l=>`$pkgs[${JSON.stringify(l.name)}] = __pkg_${l.safeName};`).concat(g.map(l=>`$pkgs[${JSON.stringify(l.name)}] = __createPkgProxy(${JSON.stringify(l.name)}, []);`)).join(`
725
+ `;function _e(e){return fe.replace("%%PKG_SETUP%%",e)}B.exports={buildSetupCode:_e}});var{parentPort:j}=require("worker_threads"),W=require("fs"),{fileURLToPath:pe}=require("url"),{createPackageRuntimeBridge:de}=q(),{buildSetupCode:ge}=V(),O;try{O=require("isolated-vm")}catch(e){j.postMessage({type:"error",message:"isolated-vm not available: "+e.message}),process.exit(1)}var J=new Map,Q=0,E=new Map,T=de({workerDir:__dirname,activeTaskContexts:E}),he=500,ye=5e3,me=32,z=new WeakMap,Y=new WeakMap,ee=new WeakMap,N={created:0,reused:0,released:0,evicted:0,scrubFailed:0},b=null,ke=0,G=0,X=0;async function ve(){let e=Date.now();if(e-G<ye)return X;if(G=e,!b)return 0;let t=0;for(let o of b){let r=o?.isolate;if(!(!r||r.isDisposed))try{let a=await r.getHeapStatistics(),s=a.heap_size_limit||1,c=a.used_heap_size/s;c>t&&(t=c)}catch{}}return X=t,t}async function M(e){e.heapRatio=await ve(),e.contextStats=we(),j.postMessage(e)}function we(){let e=0;if(b)for(let t of b)e+=t?.idleContexts?.length||0;return{...N,idle:e}}function te(e,t){if(!b){let a=Math.max(1,Math.trunc(Number(t)||8));b=new Array(a).fill(null)}let o=ke++%b.length,r=b[o];return(!r||!r.isolate||r.isolate.isDisposed)&&(r={isolate:new O.Isolate({memoryLimit:e}),idleContexts:[]},b[o]=r),r}async function $(e,t,o){let r=z.get(e);r||(r=new Map,z.set(e,r));let a=r.get(t);if(a)return a;let s=await e.compileScript(t,{filename:o});if(r.set(t,s),r.size>he){let c=r.keys().next().value;r.delete(c)}return s}j.on("message",async e=>{if(e.type==="execute")Je(e).catch(async t=>{await M({type:"result",id:e.id,success:!1,error:{message:t.message,stack:t.stack}})});else if(e.type==="executeBatch")Oe(e).catch(async t=>{await M({type:"result",id:e.id,success:!1,error:{message:t.message,stack:t.stack}})});else if(e.type==="callResult"){let t=J.get(e.callId);t&&(J.delete(e.callId),t.resolve(e.result))}else if(e.type==="callError"){let t=J.get(e.callId);t&&(J.delete(e.callId),t.reject(new Error(e.error)))}});function R(e,t,o){return new Promise((r,a)=>{let s=`cb_${++Q}`;J.set(s,{resolve:r,reject:a}),j.postMessage({type:t,id:e,callId:s,...o})})}function Pe(e,t,o){j.postMessage({type:t,id:e,callId:`f_${++Q}`,...o})}async function xe(e,t){if(t?.method!=="stream")return R(e,"resCall",t);let o=JSON.parse(t.argsJson||"[]"),r=o[0],a=o[1]||{},s=r?.__pkgHandleArg;if(!s)return R(e,"resCall",t);await R(e,"resCall",{method:"streamStart",argsJson:JSON.stringify([null,a])});try{await T.streamPackageHandle(e,s,c=>R(e,"resCall",{method:"streamChunk",chunk:Buffer.from(c).toString("base64")})),await R(e,"resCall",{method:"streamEnd"})}catch(c){try{await R(e,"resCall",{method:"streamError",error:{message:c.message,stack:c.stack}})}catch{}throw c}return JSON.stringify({__e:"u"})}function Se(e){if(typeof e.sourceCode=="string"&&e.sourceCode.length>0)return e.sourceCode;let t=e.filePath;return!t&&typeof e.fileUrl=="string"&&e.fileUrl.startsWith("file://")&&(t=pe(e.fileUrl)),!t||!W.existsSync(t)?null:W.readFileSync(t,"utf8")}async function Ce(e,t,o){try{let r=Se(o);if(!r)return null;let a=await e.compileModule(r,{filename:`pkg:${o.safeName}`});await a.instantiate(t,c=>{throw new Error(`Unresolved import in package ${o.safeName}: ${c}`)}),await a.evaluate({timeout:1e4});let s=await a.namespace.get("default");return s!==void 0&&s.typeof!=="undefined"?s.derefInto({release:!1}):a.namespace.derefInto({release:!1})}catch{return null}}function re(e,t){let o=a=>{let s=2166136261;for(let c=0;c<a.length;c++)s^=a.charCodeAt(c),s=Math.imul(s,16777619);return(s>>>0).toString(36)},r=new Set(t||[]);return e.map(a=>{let s=a.cacheKey||`${a.filePath||""}:${a.fileUrl||""}:${a.mtimeMs||""}:${a.size||""}:${o(a.sourceCode||"")}`,c=r.has(a.name)?"isolate":"proxy";return`${a.name}:${a.version||""}:${s}:${c}`}).join("|")}function ae(e,t){let o=new Set(t.map(u=>u.name)),r=new Set,a=String(e||""),s=/\b(?:\$ctx\.)?\$pkgs\s*\[\s*(['"`])([^'"`]+)\1\s*\]/g,c=/\brequire\s*\(\s*(['"`])([^'"`]+)\1\s*\)/g,g=/\b(?:\$ctx\.)?\$pkgs\.([A-Za-z_$][\w$]*)/g;for(let u of[s,c])for(let h of a.matchAll(u)){let v=h[2];o.has(v)&&r.add(v)}for(let u of a.matchAll(g)){let h=u[1];o.has(h)&&r.add(h)}return r}async function be(e,t,o,r){let a=await e.createContext(),s=a.global;await s.set("global",s.derefInto());let c=[],g=[],u=new Map;for(let l of o){u.set(l.name,l);let m=r.has(l.name)?await Ce(e,a,l):null;m!==null?(await s.set(`__pkg_${l.safeName}`,m),c.push(l)):g.push(l)}T.setTaskPackages(t,u),await s.set("__callRef",new O.Reference(async(l,m,P)=>{let k=JSON.parse(P);return m==="pkgCall"?JSON.stringify(await T.executePackageRuntimeCall(l,k)):m==="resCall"?xe(l,k):R(l,m,k)})),await s.set("__fireRef",new O.Reference((l,m,P)=>{let k=JSON.parse(P);Pe(l,m,k)}));let h=c.map(l=>`$pkgs[${JSON.stringify(l.name)}] = __pkg_${l.safeName};`).concat(g.map(l=>`$pkgs[${JSON.stringify(l.name)}] = __createPkgProxy(${JSON.stringify(l.name)}, []);`)).join(`
721
726
  `),v=ge(h);return await(await $(e,v,"setup.js")).run(a,{timeout:5e3}),Y.set(a,re(o,r)),ee.set(a,u),a}async function ne(e,t,o,r,a,s){let c=e.isolate,g=re(o,a),u=null;for(let y=e.idleContexts.length-1;y>=0;y--){let l=e.idleContexts[y];if(e.idleContexts.splice(y,1),Y.get(l)===g){u=l,N.reused++;break}try{l.release()}catch{}}u||(u=await be(c,t,o,a),N.created++),T.setTaskPackages(t,ee.get(u)||new Map);let h=u.global;return await h.set("__snapshot",new O.ExternalCopy(r).copyInto()),await h.set("__nextTaskId",t),await h.set("__nextTaskTimeoutMs",s),await(await $(c,"__resetTask(__snapshot, __nextTaskId, __nextTaskTimeoutMs);","reset-task.js")).run(u,{timeout:5e3}),u}async function se(e,t){if(!(!t||e.isolate.isDisposed)){try{await(await $(e.isolate,"__cleanupTask();","cleanup-task.js")).run(t,{timeout:5e3})}catch{N.scrubFailed++;try{t.release()}catch{}return}if(e.idleContexts.length>=me){try{t.release()}catch{}N.evicted++;return}e.idleContexts.push(t),N.released++}}function $e(e){try{let t=JSON.parse(e.message);if(t&&t.__userThrow)return{...t,message:t.message??e.message}}catch{}return null}var Re=3,Me=["setup.js","extract.js","extract-error-ctx.js","set-status.js","populate-error.js"];function Ae(e){if(!e)return null;let t=e.split(`
722
727
  `);for(let o of t){let r=o.match(/at\s+(.+\.js):(\d+):(\d+)/);if(!r)continue;let a=r[1].trim();if(Me.includes(a))continue;let c=parseInt(r[2])-Re;if(!(c<=0))return{line:c,column:parseInt(r[3]),phase:a.replace(".js","")}}return null}function Ne(e,t,o){if(!e||!t)return;let r=String(e).split(/\r?\n/),a=Math.max(1,t-1),s=Math.min(r.length,t+1),c=String(s).length,g=[];for(let u=a;u<=s;u++){let h=u===t?">":" ";g.push(`${h} ${String(u).padStart(c," ")}. ${r[u-1]??""}`),u===t&&o&&o>0&&g.push(` ${" ".repeat(c)} ${" ".repeat(Math.max(0,o-1))}^`)}return g.join(`
723
728
  `)}function Te(e,t){if(!(!e||!t)){if(t[e.phase])return t[e.phase];if(e.phase?.startsWith("preHook"))return t.preHook;if(e.phase?.startsWith("postHook"))return t.postHook}}function D(e,t){let o=$e(e);if(o)return{message:o.message,statusCode:o.statusCode,details:o.details};let r=Ae(e.stack),a=e.message||"Unknown error",s=r?`${a} (${r.phase}, line ${r.line})`:a,c=Te(r,t),g=r?Ne(c,r.line,r.column):void 0;return{message:s,statusCode:e.statusCode||null,details:r?{...r,codeFrame:g}:void 0}}async function oe(e,t){let o=D(t);await M({type:"result",id:e,success:!1,error:{...o,stack:t.stack,code:t.code}})}async function Je(e){let{id:t,code:o,pkgSources:r,snapshot:a,memoryLimitMb:s,isolatePoolSize:c}=e,g=r||[],u=Math.max(1,Math.trunc(Number(e.timeoutMs)||3e4)),h=ae(o,g),v=te(s,c),y=v.isolate,l=await ne(v,t,g,a,h,u);E.set(t,l);try{let m=`
@@ -726,7 +731,7 @@ function __cleanupTask() {
726
731
  ${o}
727
732
  })().then((__result) => __extractResult(__result, __result === undefined));
728
733
  `,k=await(await $(y,m,"handler.js")).run(l,{timeout:u,promise:!0}),A=JSON.parse(k);await M({type:"result",id:t,success:!0,...A})}catch(m){await oe(t,m)}finally{E.delete(t),await se(v,l),ie(t)}}async function Oe(e){let{id:t,codeBlocks:o,pkgSources:r,snapshot:a,memoryLimitMb:s,isolatePoolSize:c}=e,g=r||[],u=Math.max(1,Math.trunc(Number(e.timeoutMs)||3e4)),h=ae((o||[]).map(d=>d.code||"").join(`
729
- `),g),v=te(s,c),y=v.isolate,l=await ne(v,t,g,a,h,u);E.set(t,l);let m=[],P=[],k={},A=0,I=0;for(let d of o){let f=d.type||"handler";f==="postHook"?(I++,k[`postHook #${I}`]=d.code||"",k.postHook=d.code||"",P.push(d)):(f==="handler"?k.handler=d.code||"":(A++,k[`${f} #${A}`]=d.code||"",k.preHook=d.code||""),m.push(d))}try{let d=null;for(let n=0;n<m.length;n++){let i=m[n],p=i.type||"handler",_=p==="handler"?"handler":`${p} #${n+1}`,w;p==="preHook"?w=`
734
+ `),g),v=te(s,c),y=v.isolate,l=await ne(v,t,g,a,h,u);E.set(t,l);let m=[],P=[],k={},A=0,I=0;for(let d of o){let f=d.type||"handler";f==="postHook"?(I++,k[`postHook #${I}`]=d.code||"",k.postHook=d.code||"",P.push(d)):(f==="handler"?k.handler=d.code||"":(A++,k[`${f} #${A}`]=d.code||"",k.preHook=d.code||""),m.push(d))}try{let d=null;for(let n=0;n<m.length;n++){let i=m[n],_=i.type||"handler",p=_==="handler"?"handler":`${_} #${n+1}`,w;_==="preHook"?w=`
730
735
  (async () => {
731
736
  "use strict";
732
737
  ${i.code}
@@ -740,7 +745,7 @@ function __cleanupTask() {
740
745
  })().then((__r) => {
741
746
  $ctx.$data = __r;
742
747
  return "__handler_done__";
743
- });`;try{let C=await(await $(y,w,`${_}.js`)).run(l,{timeout:u,promise:!0});if(p==="preHook"&&typeof C=="string"){let x=JSON.parse(C);if(x.__shortCircuit){let H=await Z(y,l,x.value);await M({type:"result",id:t,success:!0,...H,shortCircuit:!0});return}}}catch(S){d=S;break}}if(!d&&P.length>0&&await(await $(y,'$ctx.$statusCode = 200; "__status_set__";',"set-status.js")).run(l,{timeout:5e3}),d&&P.length>0){let n=D(d,k),i={message:n.message||"Unknown error",name:d.constructor?.name||"Error",stack:d.stack||"",statusCode:n.statusCode||500,details:n.details||{},timestamp:new Date().toISOString()},p=`
748
+ });`;try{let C=await(await $(y,w,`${p}.js`)).run(l,{timeout:u,promise:!0});if(_==="preHook"&&typeof C=="string"){let x=JSON.parse(C);if(x.__shortCircuit){let H=await Z(y,l,x.value);await M({type:"result",id:t,success:!0,...H,shortCircuit:!0});return}}}catch(S){d=S;break}}if(!d&&P.length>0&&await(await $(y,'$ctx.$statusCode = 200; "__status_set__";',"set-status.js")).run(l,{timeout:5e3}),d&&P.length>0){let n=D(d,k),i={message:n.message||"Unknown error",name:d.constructor?.name||"Error",stack:d.stack||"",statusCode:n.statusCode||500,details:n.details||{},timestamp:new Date().toISOString()},_=`
744
749
  $ctx.$error = ${JSON.stringify(i)};
745
750
  $ctx.$data = null;
746
751
  $ctx.$statusCode = ${i.statusCode};
@@ -754,11 +759,11 @@ if ($ctx.$api) {
754
759
  timestamp: ${JSON.stringify(i.timestamp)},
755
760
  };
756
761
  }
757
- "__error_populated__";`;await(await y.compileScript(p,{filename:"populate-error.js"})).run(l,{timeout:5e3})}for(let n=0;n<P.length;n++){let i=P[n],p=`postHook #${n+1}`,_=`
762
+ "__error_populated__";`;await(await y.compileScript(_,{filename:"populate-error.js"})).run(l,{timeout:5e3})}for(let n=0;n<P.length;n++){let i=P[n],_=`postHook #${n+1}`,p=`
758
763
  (async () => {
759
764
  "use strict";
760
765
  ${i.code}
761
766
  })().then((__r) => {
762
767
  if (__r !== undefined) $ctx.$data = __r;
763
768
  return "__posthook_done__";
764
- });`;try{await(await $(y,_,`${p}.js`)).run(l,{timeout:u,promise:!0})}catch{}}if(d){let n=D(d,k),i;try{let w=await(await $(y,"(async () => JSON.stringify(await __extractCtxChanges()))()","extract-error-ctx.js")).run(l,{timeout:5e3,promise:!0});i=JSON.parse(w)}catch{}await M({type:"result",id:t,success:!1,error:{message:n.message,statusCode:n.statusCode,stack:d.stack,code:d.code,details:n.details},ctxChanges:i});return}let f=await Z(y,l);await M({type:"result",id:t,success:!0,...f})}catch(d){await oe(t,d)}finally{E.delete(t),await se(v,l),ie(t)}}function ie(e){T.cleanupTaskPackages(e)}function Ee(){T.shutdownPackageRuntime()}process.on("exit",Ee);async function Z(e,t,o){if(o!==void 0){let c=`__extractResult(${JSON.stringify(o)}, false)`,u=await(await e.compileScript(c,{filename:"extract.js"})).run(t,{timeout:5e3,promise:!0});return JSON.parse(u)}let s=await(await $(e,"__extractResult($ctx.$data, $ctx.$data === undefined)","extract.js")).run(t,{timeout:5e3,promise:!0});return JSON.parse(s)}
769
+ });`;try{await(await $(y,p,`${_}.js`)).run(l,{timeout:u,promise:!0})}catch{}}if(d){let n=D(d,k),i;try{let w=await(await $(y,"(async () => JSON.stringify(await __extractCtxChanges()))()","extract-error-ctx.js")).run(l,{timeout:5e3,promise:!0});i=JSON.parse(w)}catch{}await M({type:"result",id:t,success:!1,error:{message:n.message,statusCode:n.statusCode,stack:d.stack,code:d.code,details:n.details},ctxChanges:i});return}let f=await Z(y,l);await M({type:"result",id:t,success:!0,...f})}catch(d){await oe(t,d)}finally{E.delete(t),await se(v,l),ie(t)}}function ie(e){T.cleanupTaskPackages(e)}function Ee(){T.shutdownPackageRuntime()}process.on("exit",Ee);async function Z(e,t,o){if(o!==void 0){let c=`__extractResult(${JSON.stringify(o)}, false)`,u=await(await e.compileScript(c,{filename:"extract.js"})).run(t,{timeout:5e3,promise:!0});return JSON.parse(u)}let s=await(await $(e,"__extractResult($ctx.$data, $ctx.$data === undefined)","extract.js")).run(t,{timeout:5e3,promise:!0});return JSON.parse(s)}
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@
3
3
  `));return t.outputText.trimEnd()}assertExecutableJavaScript(e){e&&new Function(`return (async () => {
4
4
  "use strict";
5
5
  ${e}
6
- });`)}},ee=new zt;function Vt(r,e){return ee.compileSource(r,e)}function bi(r){return ee.isExecutableJavaScript(r)}function _i(r,e){return ee.normalizeRecord(r,e)}function wi(r,e,t){return ee.normalizePatch(r,e,t)}function $i(r){return ee.getExecutableScript(r)}function Si(r){return ee.resolveExecutableScript(r)}function Ti(r){return ee.normalizeFlowStepScriptConfig(r)}var Ai=ur.join(__dirname,"execution/worker.js"),Oi=["Invalid or unexpected token","Unexpected identifier","Unexpected token","Missing initializer in const declaration","await is only valid"],pr=new cr.AsyncLocalStorage;function gr(){return pr.getStore()}var Ft=class{constructor(e,t,n,i,o,s,a,u=6e4){this.scriptPath=o;this.onCrash=s;this.onRotate=a;this.entries=[];this.waiting=[];this.cachedMemoryOk=!0;this.lastMemoryCheckMs=0;this.memorySampleIntervalMs=200;this.destroying=!1;this.entryCounter=0;this.max=e,this.effectiveMemory=t,this.rssCeiling=n,this.tasksCap=i,this.drainTimeoutMs=u;for(let l=0;l<e;l++)this.spawnEntry()}getEntries(){return this.entries}spawnEntry(){let e=new dr.Worker(this.scriptPath),t={id:++this.entryCounter,worker:e,tasks:new Map,draining:!1,spawnedAt:Date.now()};return e.on("message",n=>{let i=t.tasks.get(n.id);i&&(n.type==="result"?(typeof n.heapRatio=="number"&&(t.lastHeapRatio=n.heapRatio),n.contextStats&&(t.contextStats=n.contextStats),i.onResult(n),!t.draining&&typeof n.heapRatio=="number"&&n.heapRatio>=.8&&this.rotateEntry(t,`heap=${Math.round(n.heapRatio*100)}%`)):i.onIoCall(n))}),e.on("exit",()=>{let n=t.draining,i=this.destroying;t.drainTimeout&&(clearTimeout(t.drainTimeout),t.drainTimeout=void 0);for(let[,s]of t.tasks)s.abortController.abort(),s.onResult({type:"result",success:!1,error:{message:i?"Worker terminated":"Worker crashed"}});t.tasks.clear();let o=this.entries.indexOf(t);o!==-1&&this.entries.splice(o,1),!n&&!i&&(this.onCrash&&this.onCrash(),this.entries.length<this.max&&this.spawnEntry()),this.drainWaiting()}),this.entries.push(t),t}rotateEntry(e,t){if(e.draining)return;e.draining=!0;let n=Date.now()-e.spawnedAt;if(this.onRotate&&this.onRotate({reason:t,ageMs:n}),this.spawnEntry(),e.tasks.size===0){e.worker.terminate();return}e.drainTimeout=setTimeout(()=>{e.drainTimeout=void 0,e.worker.terminate()},this.drainTimeoutMs)}isMemoryAvailable(){let e=Date.now();return e-this.lastMemoryCheckMs>=this.memorySampleIntervalMs&&(this.cachedMemoryOk=process.memoryUsage().rss/this.effectiveMemory<this.rssCeiling,this.lastMemoryCheckMs=e),this.cachedMemoryOk}findLeastBusy(){let e=null;for(let t of this.entries)t.draining||t.tasks.size<this.tasksCap&&(!e||t.tasks.size<e.tasks.size)&&(e=t);return e}dispatch(){let e=this.findLeastBusy();return e&&(e.tasks.size===0||this.isMemoryAvailable())?Promise.resolve(e):new Promise(t=>this.waiting.push(t))}registerTask(e,t,n){e.tasks.set(t,n)}unregisterTask(e,t){e.tasks.delete(t),e.draining&&e.tasks.size===0&&(e.drainTimeout&&(clearTimeout(e.drainTimeout),e.drainTimeout=void 0),e.worker.terminate()),this.drainWaiting()}drainWaiting(){for(;this.waiting.length>0;){let e=this.findLeastBusy();if(e&&(e.tasks.size===0||this.isMemoryAvailable()))this.waiting.shift()(e);else break}}terminateEntry(e){e.worker.terminate()}resize(e){for(this.max=Math.max(1,e);this.entries.length<this.max;)this.spawnEntry()}getMax(){return this.max}getWaitingCount(){return this.waiting.length}getTotalActiveTasks(){let e=0;for(let t of this.entries)e+=t.tasks.size;return e}getMetrics(){return{max:this.max,activeTasks:this.getTotalActiveTasks(),waitingTasks:this.waiting.length,workers:this.entries.map(e=>({id:e.id,activeTasks:e.tasks.size,draining:e.draining,ageMs:Date.now()-e.spawnedAt,lastHeapRatio:e.lastHeapRatio??0,contextStats:e.contextStats??{}}))}}destroyAll(){this.destroying=!0;for(let e of this.entries)e.worker.terminate();this.entries.length=0,this.waiting.length=0}},lr=new Set(["$helpers","$cache","$repos","$req","$res","$socket","$logs","$throw","$trigger","$pkgs","$debug"]);function Fn(r){if(r===void 0)return JSON.stringify({__e:"u"});try{return JSON.stringify({__e:"v",d:r},(e,t)=>typeof t=="bigint"?t.toString():t)}catch{return JSON.stringify({__e:"v",d:{__serializationError:!0,message:"Result is not JSON-serializable"}})}}var ze=class r{constructor(e){this.logger=new Wt(r.name);this.effectiveMemory=Tt();this.isolationTuning=qt();this.pool=new Ft(this.isolationTuning.maxConcurrentWorkers,this.effectiveMemory,.9,this.isolationTuning.tasksPerWorkerCap,Ai,()=>{this.crashesTotal++,this.logger.warn("Worker crashed, replacement spawned")},({reason:e,ageMs:t})=>{this.rotationsTotal++,this.logger.log(`Worker rotation: reason=${e} age=${Math.round(t/1e3)}s`)});this.ceiling=this.isolationTuning.maxConcurrentWorkers;this.prevCpuUsage=process.cpuUsage();this.prevCpuTime=process.hrtime.bigint();this.pressureTicks=0;this.recoveryTicks=0;this.taskCounter=0;this.taskDoneTotal=0;this.taskErrorTotal=0;this.taskTimeoutTotal=0;this.rotationsTotal=0;this.crashesTotal=0;this.responseStreams=new Map;this.taskDurationsMs=[];this.packageCacheService=e.packageCacheService,this.packageCdnLoaderService=e.packageCdnLoaderService,this.logger.log(`Worker pool started: ${this.isolationTuning.maxConcurrentWorkers} workers, ${this.isolationTuning.isolateMemoryLimitMb}MB per isolate, ${this.isolationTuning.isolatePoolSize} isolates/worker, ${this.isolationTuning.tasksPerWorkerCap} tasks/worker cap`),this.tuneTimer=setInterval(()=>this.autoTune(),3e4)}onDestroy(){this.tuneTimer&&clearInterval(this.tuneTimer),this.pool.destroyAll()}autoTune(){let t=process.memoryUsage().rss/this.effectiveMemory,n=process.hrtime.bigint(),i=process.cpuUsage(this.prevCpuUsage),o=Number(n-this.prevCpuTime)/1e3,s=o>0?(i.user+i.system)/o:0;this.prevCpuUsage=process.cpuUsage(),this.prevCpuTime=n;let a=this.pool.getMax(),u=this.pool.getWaitingCount(),l=t>.85||s>.7,f=t<.7&&s<.5,c=u>0,p=a;l?(this.recoveryTicks=0,this.pressureTicks++,this.pressureTicks>=3&&(p=Math.max(1,a-1))):f&&c?(this.pressureTicks=0,this.recoveryTicks++,this.recoveryTicks>=3&&(p=Math.min(this.ceiling,a+2))):(this.pressureTicks=0,this.recoveryTicks=0),p!==a&&(this.pool.resize(p),this.pressureTicks=0,this.recoveryTicks=0,this.logger.log(`Worker pool adjusted: ${a} -> ${p} (rss=${Math.round(t*100)}% cpu=${Math.round(s*100)}% queue=${u})`))}createSnapshot(e){let t={$body:e.$body,$query:e.$query,$params:e.$params,$user:e.$user,$share:e.$share,$data:e.$data,$api:{request:e.$api?.request},$uploadedFile:e.$uploadedFile,$req:this.cloneSnapshotValue(e.$req)};for(let i of Object.keys(e)){if(!i.startsWith("$")||i in t||lr.has(i))continue;let o=this.cloneSnapshotValue(e[i]);o!==void 0&&(t[i]=o)}let n=e.$flow;if(n!=null)try{t.$flow=this.cloneSnapshotValue(n)??{}}catch{t.$flow={}}return t}cloneSnapshotValue(e){if(typeof e!="function")try{return JSON.parse(JSON.stringify(e,(t,n)=>{if(typeof n=="bigint")return String(n);if(typeof n!="function")return n}))}catch{return}}mergeCtxChanges(e,t){if(t){t.$body!==void 0&&(e.$body=t.$body),t.$query!==void 0&&(e.$query=t.$query),t.$params!==void 0&&(e.$params=t.$params),t.$data!==void 0&&(e.$data=t.$data),t.$error!==void 0&&(e.$error=t.$error),t.$statusCode!==void 0&&(e.$statusCode=t.$statusCode),t.$share!==void 0&&(e.$share=t.$share),t.$api!==void 0&&e.$api&&(t.$api.error&&(e.$api.error=t.$api.error),t.$api.response&&(e.$api.response=t.$api.response)),t.$flow!==void 0&&t.$flow!==null&&typeof t.$flow=="object"&&e.$flow!=null&&typeof e.$flow=="object"&&Object.assign(e.$flow,t.$flow);for(let[n,i]of Object.entries(t))n.startsWith("$")&&(n==="$body"||n==="$query"||n==="$params"||n==="$data"||n==="$error"||n==="$statusCode"||n==="$share"||n==="$api"||n==="$flow"||lr.has(n)||n==="$env"||(e[n]=i));delete e.$pkgs}}spawnAndExecute(e,t,n,i){return(async()=>{let o=await this.pool.dispatch(),s=`t_${++this.taskCounter}`,a=Date.now();return new Promise((u,l)=>{let f=!1,c=new AbortController,p=setTimeout(()=>{if(f)return;f=!0,c.abort();let d=new Error(`Script execution timed out after ${i}ms`);this.cleanupResponseStream(s,d),this.pool.unregisterTask(o,s),this.taskTimeoutTotal++,q({event:"task_timeout",id:s,timeoutMs:i}),this.pool.terminateEntry(o),d.code="ERR_SCRIPT_EXECUTION_TIMEOUT",d.isTimeout=!0,l(d)},i);this.pool.registerTask(o,s,{abortController:c,onResult:d=>{if(!f)if(f=!0,clearTimeout(p),this.cleanupResponseStream(s),this.pool.unregisterTask(o,s),this.recordTaskDuration(Date.now()-a),d.success){this.taskDoneTotal++,q({event:"task_done",id:s,ok:!0});let g={value:d.value,valueAbsent:d.valueAbsent===!0,ctxChanges:d.ctxChanges};d.shortCircuit&&(g.shortCircuit=!0),u(g)}else{this.taskErrorTotal++,q({event:"task_done",id:s,ok:!1,message:d.error?.message});let g=new Error(d.error?.message||"Handler execution failed");g.statusCode=d.error?.statusCode,g.code=d.error?.code,g.details=d.error?.details,d.error?.stack&&(g.stack=d.error.stack),d.ctxChanges&&(g.ctxChanges=d.ctxChanges),this.cleanupResponseStream(s,g),l(g)}},onIoCall:d=>{if(f)return;let g=c.signal;d.type==="repoCall"?this.handleIoCall(()=>this.execRepoCall(d,n),o.worker,d.callId,g):d.type==="helpersCall"?this.handleIoCall(()=>this.execHelpersCall(d,n),o.worker,d.callId,g):d.type==="socketCall"?this.handleIoCall(()=>this.execSocketCall(d,n),o.worker,d.callId,g):d.type==="cacheCall"?this.handleIoCall(()=>this.execCacheCall(d,n),o.worker,d.callId,g):d.type==="dispatchCall"?this.handleIoCall(()=>this.execDispatchCall(d,n),o.worker,d.callId,g):d.type==="resCall"&&this.handleIoCall(()=>this.execResCall(d,n),o.worker,d.callId,g)}}),o.worker.postMessage({type:e,id:s,...t})})})()}async handleIoCall(e,t,n,i){if(!i?.aborted)try{let o=await(i?pr.run(i,e):e());if(i?.aborted)return;try{t.postMessage({type:"callResult",callId:n,result:Fn(o)})}catch{}}catch(o){if(i?.aborted)return;try{let s={__userThrow:!0,message:o.message,statusCode:o.statusCode,code:o.errorCode??o.code,details:o.details,messages:o.messages};t.postMessage({type:"callError",callId:n,error:JSON.stringify(s)})}catch{}}}async execRepoCall(e,t){let n=JSON.parse(e.argsJson),i=t?.$repos?.[e.table];if(!i||typeof i[e.method]!="function")throw new Error(`Repo method not found: ${e.table}.${e.method}`);return i[e.method](...n)}async execHelpersCall(e,t){let n=JSON.parse(e.argsJson),i=e.name.split("."),o=t?.$helpers;for(let s of i)o=o?.[s];if(typeof o!="function")throw new Error(`Helper not found: ${e.name}`);return o(...n)}async execSocketCall(e,t){let n=JSON.parse(e.argsJson),i=t?.$socket?.[e.method];if(typeof i!="function")throw new Error(`Socket method not found: ${e.method}`);return i(...n)}async execCacheCall(e,t){let n=JSON.parse(e.argsJson),i=t?.$cache?.[e.method];if(typeof i!="function")throw new Error(`Cache method not found: ${e.method}`);return i(...n)}async execDispatchCall(e,t){let n=JSON.parse(e.argsJson),i=t?.$trigger;if(typeof i!="function")throw new Error("$trigger is not available");return i(...n)}async execResCall(e,t){if(e.method==="streamStart"){let s=JSON.parse(e.argsJson||"[]")[1]||{},a=t?.$res?.stream;if(typeof a!="function")throw new Error("Response method not found: stream");let u=new fr.PassThrough;return this.responseStreams.set(e.id,{stream:u}),a.call(t.$res,u,s),!0}if(e.method==="streamChunk"){let o=this.responseStreams.get(e.id);if(!o)throw new Error(`Response stream not found: ${e.id}`);let s=Buffer.from(e.chunk||"","base64");return o.stream.write(s)||await new Promise((a,u)=>{let l=()=>{c(),a()},f=p=>{c(),u(p)},c=()=>{o.stream.off("drain",l),o.stream.off("error",f)};o.stream.once("drain",l),o.stream.once("error",f)}),!0}if(e.method==="streamEnd"){let o=this.responseStreams.get(e.id);return o&&(o.stream.end(),this.responseStreams.delete(e.id)),!0}if(e.method==="streamError"){let o=this.responseStreams.get(e.id);if(o){let s=e.error?.message||"Response stream failed";o.stream.destroy(new Error(s)),this.responseStreams.delete(e.id)}return!0}let n=JSON.parse(e.argsJson||"[]"),i=t?.$res?.[e.method];if(typeof i!="function")throw new Error(`Response method not found: ${e.method}`);return i.apply(t.$res,n)}cleanupResponseStream(e,t){let n=this.responseStreams.get(e);n&&(this.responseStreams.delete(e),t?n.stream.destroy(t):n.stream.end())}isScriptParseFailure(e){let t=e.message||"";return Oi.some(n=>t.includes(n))}async run(e,t,n){let i=Math.max(1,Math.trunc(Number(n)||3e4)),o=await this.packageCacheService.getPackages(),s=this.packageCdnLoaderService.getPackageSources(o),a=this.createSnapshot(t);q({event:"isolated_run_start",timeoutMs:i,codeLen:e?.length??0});let u;try{let l={code:e,pkgSources:s,snapshot:a,timeoutMs:i,memoryLimitMb:this.isolationTuning.isolateMemoryLimitMb,isolatePoolSize:this.isolationTuning.isolatePoolSize};try{u=await this.spawnAndExecute("execute",l,t,i)}catch(f){let c=f,p=Vt(e,"typescript")||"";if(!this.isScriptParseFailure(c)||p===e)throw f;q({event:"isolated_run_ts_retry",message:c.message}),u=await this.spawnAndExecute("execute",{...l,code:p},t,i)}}catch(l){let f=l;if(q({event:"isolated_run_error",message:f.message,code:f.code,isTimeout:!!f.isTimeout}),f.isTimeout||f.code==="ERR_SCRIPT_EXECUTION_TIMEOUT")throw new ye(i,e);let c=f.statusCode??(typeof f.status=="number"?f.status:void 0);throw je.createException(void 0,c,f.message||"Unknown error",e,f.details||{})}return this.mergeCtxChanges(t,u.ctxChanges||{}),q({event:"isolated_run_ok"}),u.valueAbsent?void 0:u.value}async runBatch(e,t,n){let i=Math.max(1,Math.trunc(Number(n)||3e4)),o=await this.packageCacheService.getPackages(),s=this.packageCdnLoaderService.getPackageSources(o),a=this.createSnapshot(t);q({event:"isolated_batch_start",timeoutMs:i,blocks:e.length});let u;try{let l={codeBlocks:e,pkgSources:s,snapshot:a,timeoutMs:i,memoryLimitMb:this.isolationTuning.isolateMemoryLimitMb,isolatePoolSize:this.isolationTuning.isolatePoolSize};try{u=await this.spawnAndExecute("executeBatch",l,t,i)}catch(f){let c=f,p=e.map(g=>({...g,code:Vt(g.code,"typescript")||""})),d=p.some((g,m)=>g.code!==e[m]?.code);if(!this.isScriptParseFailure(c)||!d)throw f;q({event:"isolated_batch_ts_retry",message:c.message}),u=await this.spawnAndExecute("executeBatch",{...l,codeBlocks:p},t,i)}}catch(l){let f=l;if(q({event:"isolated_batch_error",message:f.message,code:f.code,isTimeout:!!f.isTimeout}),f.ctxChanges&&this.mergeCtxChanges(t,f.ctxChanges),f.isTimeout||f.code==="ERR_SCRIPT_EXECUTION_TIMEOUT")throw new ye(i,"(batch execution)");let c=f.statusCode??(typeof f.status=="number"?f.status:void 0);throw je.createException(void 0,c,f.message||"Unknown error","(batch execution)",f.details||{})}return this.mergeCtxChanges(t,u.ctxChanges||{}),q({event:"isolated_batch_ok"}),{value:u.valueAbsent?void 0:u.value,shortCircuit:u.shortCircuit===!0}}recordTaskDuration(e){this.taskDurationsMs.push(e),this.taskDurationsMs.length>512&&this.taskDurationsMs.shift()}percentile(e,t){if(e.length===0)return 0;let n=[...e].sort((o,s)=>o-s),i=Math.min(n.length-1,Math.max(0,Math.ceil(t/100*n.length)-1));return n[i]}getMetrics(){let e=this.pool.getMetrics(),t=this.taskDurationsMs,n=t.length===0?0:t.reduce((i,o)=>i+o,0)/t.length;return{tuning:this.isolationTuning,pool:e,taskDoneTotal:this.taskDoneTotal,taskErrorTotal:this.taskErrorTotal,taskTimeoutTotal:this.taskTimeoutTotal,rotationsTotal:this.rotationsTotal,crashesTotal:this.crashesTotal,avgTaskMs:n,p95TaskMs:this.percentile(t,95),p99TaskMs:this.percentile(t,99),maxHeapRatio:Math.max(0,...e.workers.map(i=>i.lastHeapRatio||0))}}};var bn=require("node:fs"),Yr=require("node:path");var Rn=require("mongodb");Ve();function Be(r){return r.type==="one-to-many"||r.isInverse===!0||r.type==="one-to-one"&&!!r.mappedBy}function G(r){return(r.type==="many-to-one"||r.type==="one-to-one")&&!Be(r)&&(r.foreignKeyColumn||r.propertyName)||null}function K(r){return r.foreignKeyColumn||r.mappedBy||r.propertyName||null}function re(r){if(!r||typeof r!="object")return r;if(r instanceof Rn.ObjectId)return r.toString();if(r instanceof Date)return r.toISOString();if(Array.isArray(r))return r.map(t=>re(t));if("buffer"in r&&r.buffer&&typeof r.buffer=="object"&&Object.keys(r.buffer).length===12)try{let t=r.buffer,n=Object.keys(t).sort((i,o)=>parseInt(i)-parseInt(o)).map(i=>t[i]);return new Rn.ObjectId(Buffer.from(n)).toString()}catch{}let e={};for(let[t,n]of Object.entries(r))e[t]=n&&typeof n=="object"&&!(n instanceof Buffer)?re(n):n;return e}function fe(r,e){if(e.type!=="many-to-many")return null;let t=e.targetTableName||e.targetTable;if(!t)return null;if(e.mappedBy){let a=t,u=e.mappedBy,l=r,f=e.junctionTableName||Ct(a,u,l);if(e.junctionSourceColumn&&e.junctionTargetColumn)return{junctionName:f,selfColumn:e.junctionSourceColumn,otherColumn:e.junctionTargetColumn,owningTable:a,inverseTable:l};let c=Rt(a,u,l);return{junctionName:f,selfColumn:c.targetColumn,otherColumn:c.sourceColumn,owningTable:a,inverseTable:l}}let n=r,i=t,o=e.junctionTableName||Ct(n,e.propertyName,i);if(e.junctionSourceColumn&&e.junctionTargetColumn)return{junctionName:o,selfColumn:e.junctionSourceColumn,otherColumn:e.junctionTargetColumn,owningTable:n,inverseTable:i};let s=Rt(n,e.propertyName,i);return{junctionName:o,selfColumn:s.sourceColumn,otherColumn:s.targetColumn,owningTable:n,inverseTable:i}}async function Ht(r,e,t){if(!r)return{scalarFields:[],relations:[]};let n=r.tables?.get(e);if(!n)return{scalarFields:[],relations:[]};let i=new Map;for(let u of t)if(u==="*")i.has("")||i.set("",[]),i.get("").push(u);else if(u.includes(".")){let l=u.split("."),f=l[0],c=l.slice(1).join(".");i.has(f)||i.set(f,[]),i.get(f).push(c)}else n.relations?.some(f=>f.propertyName===u)?i.has(u)||i.set(u,["_id"]):(i.has("")||i.set("",[]),i.get("").push(u));let o=[],s=[],a=i.get("")||[];for(let u of a)if(u==="*"){if(n.columns)for(let l of n.columns)o.includes(l.name)||o.push(l.name);if(n.relations)for(let l of n.relations)i.has(l.propertyName)||i.set(l.propertyName,["_id"])}else n.columns?.some(f=>f.name===u)&&!o.includes(u)&&o.push(u);for(let[u,l]of i.entries()){if(u==="")continue;let f=n.relations?.find(m=>m.propertyName===u);if(!f)continue;let c="",p="",d=!1;f.type==="many-to-one"||f.type==="one-to-one"?Be(f)?(c="_id",p=K(f)||f.propertyName,d=!0):(c=G(f)||f.propertyName,p="_id",d=!1):f.type==="one-to-many"?(c="_id",p=K(f)||f.propertyName,d=!0):f.type==="many-to-many"&&(f.mappedBy?(c="_id",p=f.mappedBy,d=!0):(c=f.propertyName,p="_id",d=!1));let g=f.type==="one-to-many"||f.type==="many-to-many";s.push({propertyName:u,targetTable:f.targetTableName,localField:c,foreignField:p,type:g?"many":"one",isInverse:d,nestedFields:l})}return{scalarFields:o,relations:s}}var Yt=ue(require("fs")),vn=ue(require("path"));var Ei=new RegExp("\\p{Mark}","gu");function Tr(r){return r==null?"":String(r).normalize("NFKD").replace(Ei,"").toLowerCase()}function xn(){let r={};for(let e=128;e<=1114111;e++)try{let t=String.fromCodePoint(e),n=Tr(t);n!==t&&(r[t]=n)}catch{}return JSON.stringify(r)}function Gt(){return`function() {
6
+ });`)}},ee=new zt;function Vt(r,e){return ee.compileSource(r,e)}function bi(r){return ee.isExecutableJavaScript(r)}function _i(r,e){return ee.normalizeRecord(r,e)}function wi(r,e,t){return ee.normalizePatch(r,e,t)}function $i(r){return ee.getExecutableScript(r)}function Si(r){return ee.resolveExecutableScript(r)}function Ti(r){return ee.normalizeFlowStepScriptConfig(r)}var Ai=ur.join(__dirname,"execution/worker.js"),Oi=["Invalid or unexpected token","Unexpected identifier","Unexpected token","Missing initializer in const declaration","await is only valid"],pr=new cr.AsyncLocalStorage;function gr(){return pr.getStore()}var Ft=class{constructor(e,t,n,i,o,s,a,u=6e4){this.scriptPath=o;this.onCrash=s;this.onRotate=a;this.entries=[];this.waiting=[];this.cachedMemoryOk=!0;this.lastMemoryCheckMs=0;this.memorySampleIntervalMs=200;this.destroying=!1;this.entryCounter=0;this.max=e,this.effectiveMemory=t,this.rssCeiling=n,this.tasksCap=i,this.drainTimeoutMs=u;for(let l=0;l<e;l++)this.spawnEntry()}getEntries(){return this.entries}spawnEntry(){let e=new dr.Worker(this.scriptPath),t={id:++this.entryCounter,worker:e,tasks:new Map,draining:!1,spawnedAt:Date.now()};return e.on("message",n=>{let i=t.tasks.get(n.id);i&&(n.type==="result"?(typeof n.heapRatio=="number"&&(t.lastHeapRatio=n.heapRatio),n.contextStats&&(t.contextStats=n.contextStats),i.onResult(n),!t.draining&&typeof n.heapRatio=="number"&&n.heapRatio>=.8&&this.rotateEntry(t,`heap=${Math.round(n.heapRatio*100)}%`)):i.onIoCall(n))}),e.on("exit",()=>{let n=t.draining,i=this.destroying;t.drainTimeout&&(clearTimeout(t.drainTimeout),t.drainTimeout=void 0);for(let[,s]of t.tasks)s.abortController.abort(),s.onResult({type:"result",success:!1,error:{message:i?"Worker terminated":"Worker crashed"}});t.tasks.clear();let o=this.entries.indexOf(t);o!==-1&&this.entries.splice(o,1),!n&&!i&&(this.onCrash&&this.onCrash(),this.entries.length<this.max&&this.spawnEntry()),this.drainWaiting()}),this.entries.push(t),t}rotateEntry(e,t){if(e.draining)return;e.draining=!0;let n=Date.now()-e.spawnedAt;if(this.onRotate&&this.onRotate({reason:t,ageMs:n}),this.spawnEntry(),e.tasks.size===0){e.worker.terminate();return}e.drainTimeout=setTimeout(()=>{e.drainTimeout=void 0,e.worker.terminate()},this.drainTimeoutMs)}isMemoryAvailable(){let e=Date.now();return e-this.lastMemoryCheckMs>=this.memorySampleIntervalMs&&(this.cachedMemoryOk=process.memoryUsage().rss/this.effectiveMemory<this.rssCeiling,this.lastMemoryCheckMs=e),this.cachedMemoryOk}findLeastBusy(){let e=null;for(let t of this.entries)t.draining||t.tasks.size<this.tasksCap&&(!e||t.tasks.size<e.tasks.size)&&(e=t);return e}dispatch(){let e=this.findLeastBusy();return e&&(e.tasks.size===0||this.isMemoryAvailable())?Promise.resolve(e):new Promise(t=>this.waiting.push(t))}registerTask(e,t,n){e.tasks.set(t,n)}unregisterTask(e,t){e.tasks.delete(t),e.draining&&e.tasks.size===0&&(e.drainTimeout&&(clearTimeout(e.drainTimeout),e.drainTimeout=void 0),e.worker.terminate()),this.drainWaiting()}drainWaiting(){for(;this.waiting.length>0;){let e=this.findLeastBusy();if(e&&(e.tasks.size===0||this.isMemoryAvailable()))this.waiting.shift()(e);else break}}terminateEntry(e){e.worker.terminate()}resize(e){for(this.max=Math.max(1,e);this.entries.length<this.max;)this.spawnEntry()}getMax(){return this.max}getWaitingCount(){return this.waiting.length}getTotalActiveTasks(){let e=0;for(let t of this.entries)e+=t.tasks.size;return e}getMetrics(){return{max:this.max,activeTasks:this.getTotalActiveTasks(),waitingTasks:this.waiting.length,workers:this.entries.map(e=>({id:e.id,activeTasks:e.tasks.size,draining:e.draining,ageMs:Date.now()-e.spawnedAt,lastHeapRatio:e.lastHeapRatio??0,contextStats:e.contextStats??{}}))}}destroyAll(){this.destroying=!0;for(let e of this.entries)e.worker.terminate();this.entries.length=0,this.waiting.length=0}},lr=new Set(["$helpers","$cache","$repos","$req","$res","$socket","$storage","$logs","$throw","$trigger","$pkgs","$debug"]);function Fn(r){if(r===void 0)return JSON.stringify({__e:"u"});try{return JSON.stringify({__e:"v",d:r},(e,t)=>typeof t=="bigint"?t.toString():t)}catch{return JSON.stringify({__e:"v",d:{__serializationError:!0,message:"Result is not JSON-serializable"}})}}var ze=class r{constructor(e){this.logger=new Wt(r.name);this.effectiveMemory=Tt();this.isolationTuning=qt();this.pool=new Ft(this.isolationTuning.maxConcurrentWorkers,this.effectiveMemory,.9,this.isolationTuning.tasksPerWorkerCap,Ai,()=>{this.crashesTotal++,this.logger.warn("Worker crashed, replacement spawned")},({reason:e,ageMs:t})=>{this.rotationsTotal++,this.logger.log(`Worker rotation: reason=${e} age=${Math.round(t/1e3)}s`)});this.ceiling=this.isolationTuning.maxConcurrentWorkers;this.prevCpuUsage=process.cpuUsage();this.prevCpuTime=process.hrtime.bigint();this.pressureTicks=0;this.recoveryTicks=0;this.taskCounter=0;this.taskDoneTotal=0;this.taskErrorTotal=0;this.taskTimeoutTotal=0;this.rotationsTotal=0;this.crashesTotal=0;this.responseStreams=new Map;this.taskDurationsMs=[];this.packageCacheService=e.packageCacheService,this.packageCdnLoaderService=e.packageCdnLoaderService,this.logger.log(`Worker pool started: ${this.isolationTuning.maxConcurrentWorkers} workers, ${this.isolationTuning.isolateMemoryLimitMb}MB per isolate, ${this.isolationTuning.isolatePoolSize} isolates/worker, ${this.isolationTuning.tasksPerWorkerCap} tasks/worker cap`),this.tuneTimer=setInterval(()=>this.autoTune(),3e4)}onDestroy(){this.tuneTimer&&clearInterval(this.tuneTimer),this.pool.destroyAll()}autoTune(){let t=process.memoryUsage().rss/this.effectiveMemory,n=process.hrtime.bigint(),i=process.cpuUsage(this.prevCpuUsage),o=Number(n-this.prevCpuTime)/1e3,s=o>0?(i.user+i.system)/o:0;this.prevCpuUsage=process.cpuUsage(),this.prevCpuTime=n;let a=this.pool.getMax(),u=this.pool.getWaitingCount(),l=t>.85||s>.7,f=t<.7&&s<.5,c=u>0,p=a;l?(this.recoveryTicks=0,this.pressureTicks++,this.pressureTicks>=3&&(p=Math.max(1,a-1))):f&&c?(this.pressureTicks=0,this.recoveryTicks++,this.recoveryTicks>=3&&(p=Math.min(this.ceiling,a+2))):(this.pressureTicks=0,this.recoveryTicks=0),p!==a&&(this.pool.resize(p),this.pressureTicks=0,this.recoveryTicks=0,this.logger.log(`Worker pool adjusted: ${a} -> ${p} (rss=${Math.round(t*100)}% cpu=${Math.round(s*100)}% queue=${u})`))}createSnapshot(e){let t={$body:e.$body,$query:e.$query,$params:e.$params,$user:e.$user,$share:e.$share,$data:e.$data,$api:{request:e.$api?.request},$uploadedFile:e.$uploadedFile,$req:this.cloneSnapshotValue(e.$req)};for(let i of Object.keys(e)){if(!i.startsWith("$")||i in t||lr.has(i))continue;let o=this.cloneSnapshotValue(e[i]);o!==void 0&&(t[i]=o)}let n=e.$flow;if(n!=null)try{t.$flow=this.cloneSnapshotValue(n)??{}}catch{t.$flow={}}return t}cloneSnapshotValue(e){if(typeof e!="function")try{return JSON.parse(JSON.stringify(e,(t,n)=>{if(typeof n=="bigint")return String(n);if(typeof n!="function")return n}))}catch{return}}mergeCtxChanges(e,t){if(t){t.$body!==void 0&&(e.$body=t.$body),t.$query!==void 0&&(e.$query=t.$query),t.$params!==void 0&&(e.$params=t.$params),t.$data!==void 0&&(e.$data=t.$data),t.$error!==void 0&&(e.$error=t.$error),t.$statusCode!==void 0&&(e.$statusCode=t.$statusCode),t.$share!==void 0&&(e.$share=t.$share),t.$api!==void 0&&e.$api&&(t.$api.error&&(e.$api.error=t.$api.error),t.$api.response&&(e.$api.response=t.$api.response)),t.$flow!==void 0&&t.$flow!==null&&typeof t.$flow=="object"&&e.$flow!=null&&typeof e.$flow=="object"&&Object.assign(e.$flow,t.$flow);for(let[n,i]of Object.entries(t))n.startsWith("$")&&(n==="$body"||n==="$query"||n==="$params"||n==="$data"||n==="$error"||n==="$statusCode"||n==="$share"||n==="$api"||n==="$flow"||lr.has(n)||n==="$env"||(e[n]=i));delete e.$pkgs}}spawnAndExecute(e,t,n,i){return(async()=>{let o=await this.pool.dispatch(),s=`t_${++this.taskCounter}`,a=Date.now();return new Promise((u,l)=>{let f=!1,c=new AbortController,p=setTimeout(()=>{if(f)return;f=!0,c.abort();let d=new Error(`Script execution timed out after ${i}ms`);this.cleanupResponseStream(s,d),this.pool.unregisterTask(o,s),this.taskTimeoutTotal++,q({event:"task_timeout",id:s,timeoutMs:i}),this.pool.terminateEntry(o),d.code="ERR_SCRIPT_EXECUTION_TIMEOUT",d.isTimeout=!0,l(d)},i);this.pool.registerTask(o,s,{abortController:c,onResult:d=>{if(!f)if(f=!0,clearTimeout(p),this.cleanupResponseStream(s),this.pool.unregisterTask(o,s),this.recordTaskDuration(Date.now()-a),d.success){this.taskDoneTotal++,q({event:"task_done",id:s,ok:!0});let g={value:d.value,valueAbsent:d.valueAbsent===!0,ctxChanges:d.ctxChanges};d.shortCircuit&&(g.shortCircuit=!0),u(g)}else{this.taskErrorTotal++,q({event:"task_done",id:s,ok:!1,message:d.error?.message});let g=new Error(d.error?.message||"Handler execution failed");g.statusCode=d.error?.statusCode,g.code=d.error?.code,g.details=d.error?.details,d.error?.stack&&(g.stack=d.error.stack),d.ctxChanges&&(g.ctxChanges=d.ctxChanges),this.cleanupResponseStream(s,g),l(g)}},onIoCall:d=>{if(f)return;let g=c.signal;d.type==="repoCall"?this.handleIoCall(()=>this.execRepoCall(d,n),o.worker,d.callId,g):d.type==="helpersCall"?this.handleIoCall(()=>this.execHelpersCall(d,n),o.worker,d.callId,g):d.type==="socketCall"?this.handleIoCall(()=>this.execSocketCall(d,n),o.worker,d.callId,g):d.type==="cacheCall"?this.handleIoCall(()=>this.execCacheCall(d,n),o.worker,d.callId,g):d.type==="storageCall"?this.handleIoCall(()=>this.execStorageCall(d,n),o.worker,d.callId,g):d.type==="dispatchCall"?this.handleIoCall(()=>this.execDispatchCall(d,n),o.worker,d.callId,g):d.type==="resCall"&&this.handleIoCall(()=>this.execResCall(d,n),o.worker,d.callId,g)}}),o.worker.postMessage({type:e,id:s,...t})})})()}async handleIoCall(e,t,n,i){if(!i?.aborted)try{let o=await(i?pr.run(i,e):e());if(i?.aborted)return;try{t.postMessage({type:"callResult",callId:n,result:Fn(o)})}catch{}}catch(o){if(i?.aborted)return;try{let s={__userThrow:!0,message:o.message,statusCode:o.statusCode,code:o.errorCode??o.code,details:o.details,messages:o.messages};t.postMessage({type:"callError",callId:n,error:JSON.stringify(s)})}catch{}}}async execRepoCall(e,t){let n=JSON.parse(e.argsJson),i=t?.$repos?.[e.table];if(!i||typeof i[e.method]!="function")throw new Error(`Repo method not found: ${e.table}.${e.method}`);return i[e.method](...n)}async execHelpersCall(e,t){let n=JSON.parse(e.argsJson),i=e.name.split("."),o=t?.$helpers;for(let s of i)o=o?.[s];if(typeof o!="function")throw new Error(`Helper not found: ${e.name}`);return o(...n)}async execSocketCall(e,t){let n=JSON.parse(e.argsJson),i=t?.$socket?.[e.method];if(typeof i!="function")throw new Error(`Socket method not found: ${e.method}`);return i(...n)}async execCacheCall(e,t){let n=JSON.parse(e.argsJson),i=t?.$cache?.[e.method];if(typeof i!="function")throw new Error(`Cache method not found: ${e.method}`);return i(...n)}async execStorageCall(e,t){let n=JSON.parse(e.argsJson),i=t?.$storage?.[e.method];if(typeof i!="function")throw new Error(`Storage method not found: ${e.method}`);return i(...n)}async execDispatchCall(e,t){let n=JSON.parse(e.argsJson),i=t?.$trigger;if(typeof i!="function")throw new Error("$trigger is not available");return i(...n)}async execResCall(e,t){if(e.method==="streamStart"){let s=JSON.parse(e.argsJson||"[]")[1]||{},a=t?.$res?.stream;if(typeof a!="function")throw new Error("Response method not found: stream");let u=new fr.PassThrough;return this.responseStreams.set(e.id,{stream:u}),a.call(t.$res,u,s),!0}if(e.method==="streamChunk"){let o=this.responseStreams.get(e.id);if(!o)throw new Error(`Response stream not found: ${e.id}`);let s=Buffer.from(e.chunk||"","base64");return o.stream.write(s)||await new Promise((a,u)=>{let l=()=>{c(),a()},f=p=>{c(),u(p)},c=()=>{o.stream.off("drain",l),o.stream.off("error",f)};o.stream.once("drain",l),o.stream.once("error",f)}),!0}if(e.method==="streamEnd"){let o=this.responseStreams.get(e.id);return o&&(o.stream.end(),this.responseStreams.delete(e.id)),!0}if(e.method==="streamError"){let o=this.responseStreams.get(e.id);if(o){let s=e.error?.message||"Response stream failed";o.stream.destroy(new Error(s)),this.responseStreams.delete(e.id)}return!0}let n=JSON.parse(e.argsJson||"[]"),i=t?.$res?.[e.method];if(typeof i!="function")throw new Error(`Response method not found: ${e.method}`);return i.apply(t.$res,n)}cleanupResponseStream(e,t){let n=this.responseStreams.get(e);n&&(this.responseStreams.delete(e),t?n.stream.destroy(t):n.stream.end())}isScriptParseFailure(e){let t=e.message||"";return Oi.some(n=>t.includes(n))}async run(e,t,n){let i=Math.max(1,Math.trunc(Number(n)||3e4)),o=await this.packageCacheService.getPackages(),s=this.packageCdnLoaderService.getPackageSources(o),a=this.createSnapshot(t);q({event:"isolated_run_start",timeoutMs:i,codeLen:e?.length??0});let u;try{let l={code:e,pkgSources:s,snapshot:a,timeoutMs:i,memoryLimitMb:this.isolationTuning.isolateMemoryLimitMb,isolatePoolSize:this.isolationTuning.isolatePoolSize};try{u=await this.spawnAndExecute("execute",l,t,i)}catch(f){let c=f,p=Vt(e,"typescript")||"";if(!this.isScriptParseFailure(c)||p===e)throw f;q({event:"isolated_run_ts_retry",message:c.message}),u=await this.spawnAndExecute("execute",{...l,code:p},t,i)}}catch(l){let f=l;if(q({event:"isolated_run_error",message:f.message,code:f.code,isTimeout:!!f.isTimeout}),f.isTimeout||f.code==="ERR_SCRIPT_EXECUTION_TIMEOUT")throw new ye(i,e);let c=f.statusCode??(typeof f.status=="number"?f.status:void 0);throw je.createException(void 0,c,f.message||"Unknown error",e,f.details||{})}return this.mergeCtxChanges(t,u.ctxChanges||{}),q({event:"isolated_run_ok"}),u.valueAbsent?void 0:u.value}async runBatch(e,t,n){let i=Math.max(1,Math.trunc(Number(n)||3e4)),o=await this.packageCacheService.getPackages(),s=this.packageCdnLoaderService.getPackageSources(o),a=this.createSnapshot(t);q({event:"isolated_batch_start",timeoutMs:i,blocks:e.length});let u;try{let l={codeBlocks:e,pkgSources:s,snapshot:a,timeoutMs:i,memoryLimitMb:this.isolationTuning.isolateMemoryLimitMb,isolatePoolSize:this.isolationTuning.isolatePoolSize};try{u=await this.spawnAndExecute("executeBatch",l,t,i)}catch(f){let c=f,p=e.map(g=>({...g,code:Vt(g.code,"typescript")||""})),d=p.some((g,m)=>g.code!==e[m]?.code);if(!this.isScriptParseFailure(c)||!d)throw f;q({event:"isolated_batch_ts_retry",message:c.message}),u=await this.spawnAndExecute("executeBatch",{...l,codeBlocks:p},t,i)}}catch(l){let f=l;if(q({event:"isolated_batch_error",message:f.message,code:f.code,isTimeout:!!f.isTimeout}),f.ctxChanges&&this.mergeCtxChanges(t,f.ctxChanges),f.isTimeout||f.code==="ERR_SCRIPT_EXECUTION_TIMEOUT")throw new ye(i,"(batch execution)");let c=f.statusCode??(typeof f.status=="number"?f.status:void 0);throw je.createException(void 0,c,f.message||"Unknown error","(batch execution)",f.details||{})}return this.mergeCtxChanges(t,u.ctxChanges||{}),q({event:"isolated_batch_ok"}),{value:u.valueAbsent?void 0:u.value,shortCircuit:u.shortCircuit===!0}}recordTaskDuration(e){this.taskDurationsMs.push(e),this.taskDurationsMs.length>512&&this.taskDurationsMs.shift()}percentile(e,t){if(e.length===0)return 0;let n=[...e].sort((o,s)=>o-s),i=Math.min(n.length-1,Math.max(0,Math.ceil(t/100*n.length)-1));return n[i]}getMetrics(){let e=this.pool.getMetrics(),t=this.taskDurationsMs,n=t.length===0?0:t.reduce((i,o)=>i+o,0)/t.length;return{tuning:this.isolationTuning,pool:e,taskDoneTotal:this.taskDoneTotal,taskErrorTotal:this.taskErrorTotal,taskTimeoutTotal:this.taskTimeoutTotal,rotationsTotal:this.rotationsTotal,crashesTotal:this.crashesTotal,avgTaskMs:n,p95TaskMs:this.percentile(t,95),p99TaskMs:this.percentile(t,99),maxHeapRatio:Math.max(0,...e.workers.map(i=>i.lastHeapRatio||0))}}};var bn=require("node:fs"),Yr=require("node:path");var Rn=require("mongodb");Ve();function Be(r){return r.type==="one-to-many"||r.isInverse===!0||r.type==="one-to-one"&&!!r.mappedBy}function G(r){return(r.type==="many-to-one"||r.type==="one-to-one")&&!Be(r)&&(r.foreignKeyColumn||r.propertyName)||null}function K(r){return r.foreignKeyColumn||r.mappedBy||r.propertyName||null}function re(r){if(!r||typeof r!="object")return r;if(r instanceof Rn.ObjectId)return r.toString();if(r instanceof Date)return r.toISOString();if(Array.isArray(r))return r.map(t=>re(t));if("buffer"in r&&r.buffer&&typeof r.buffer=="object"&&Object.keys(r.buffer).length===12)try{let t=r.buffer,n=Object.keys(t).sort((i,o)=>parseInt(i)-parseInt(o)).map(i=>t[i]);return new Rn.ObjectId(Buffer.from(n)).toString()}catch{}let e={};for(let[t,n]of Object.entries(r))e[t]=n&&typeof n=="object"&&!(n instanceof Buffer)?re(n):n;return e}function fe(r,e){if(e.type!=="many-to-many")return null;let t=e.targetTableName||e.targetTable;if(!t)return null;if(e.mappedBy){let a=t,u=e.mappedBy,l=r,f=e.junctionTableName||Ct(a,u,l);if(e.junctionSourceColumn&&e.junctionTargetColumn)return{junctionName:f,selfColumn:e.junctionSourceColumn,otherColumn:e.junctionTargetColumn,owningTable:a,inverseTable:l};let c=Rt(a,u,l);return{junctionName:f,selfColumn:c.targetColumn,otherColumn:c.sourceColumn,owningTable:a,inverseTable:l}}let n=r,i=t,o=e.junctionTableName||Ct(n,e.propertyName,i);if(e.junctionSourceColumn&&e.junctionTargetColumn)return{junctionName:o,selfColumn:e.junctionSourceColumn,otherColumn:e.junctionTargetColumn,owningTable:n,inverseTable:i};let s=Rt(n,e.propertyName,i);return{junctionName:o,selfColumn:s.sourceColumn,otherColumn:s.targetColumn,owningTable:n,inverseTable:i}}async function Ht(r,e,t){if(!r)return{scalarFields:[],relations:[]};let n=r.tables?.get(e);if(!n)return{scalarFields:[],relations:[]};let i=new Map;for(let u of t)if(u==="*")i.has("")||i.set("",[]),i.get("").push(u);else if(u.includes(".")){let l=u.split("."),f=l[0],c=l.slice(1).join(".");i.has(f)||i.set(f,[]),i.get(f).push(c)}else n.relations?.some(f=>f.propertyName===u)?i.has(u)||i.set(u,["_id"]):(i.has("")||i.set("",[]),i.get("").push(u));let o=[],s=[],a=i.get("")||[];for(let u of a)if(u==="*"){if(n.columns)for(let l of n.columns)o.includes(l.name)||o.push(l.name);if(n.relations)for(let l of n.relations)i.has(l.propertyName)||i.set(l.propertyName,["_id"])}else n.columns?.some(f=>f.name===u)&&!o.includes(u)&&o.push(u);for(let[u,l]of i.entries()){if(u==="")continue;let f=n.relations?.find(m=>m.propertyName===u);if(!f)continue;let c="",p="",d=!1;f.type==="many-to-one"||f.type==="one-to-one"?Be(f)?(c="_id",p=K(f)||f.propertyName,d=!0):(c=G(f)||f.propertyName,p="_id",d=!1):f.type==="one-to-many"?(c="_id",p=K(f)||f.propertyName,d=!0):f.type==="many-to-many"&&(f.mappedBy?(c="_id",p=f.mappedBy,d=!0):(c=f.propertyName,p="_id",d=!1));let g=f.type==="one-to-many"||f.type==="many-to-many";s.push({propertyName:u,targetTable:f.targetTableName,localField:c,foreignField:p,type:g?"many":"one",isInverse:d,nestedFields:l})}return{scalarFields:o,relations:s}}var Yt=ue(require("fs")),vn=ue(require("path"));var Ei=new RegExp("\\p{Mark}","gu");function Tr(r){return r==null?"":String(r).normalize("NFKD").replace(Ei,"").toLowerCase()}function xn(){let r={};for(let e=128;e<=1114111;e++)try{let t=String.fromCodePoint(e),n=Tr(t);n!==t&&(r[t]=n)}catch{}return JSON.stringify(r)}function Gt(){return`function() {
7
7
  var M = ${xn()};
8
8
  function foldStr(s) {
9
9
  if (s == null) return '';
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@enfyra/kernel",
3
- "version": "1.1.19",
3
+ "version": "1.1.20",
4
4
  "source": "bundled-compiled-kernel"
5
5
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@enfyra/kernel",
3
- "version": "1.1.19",
3
+ "version": "1.1.20",
4
4
  "description": "Closed-distribution Enfyra kernel runtime",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "private": false,