@enfyra/kernel 1.1.45 → 1.1.47
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/execution/worker.js +77 -41
- package/dist/package-metadata.json +1 -1
- package/package.json +1 -1
package/dist/execution/worker.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var W=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var G=W((
|
|
1
|
+
"use strict";var W=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var G=W((De,z)=>{"use strict";var{fork:fe}=require("child_process"),de=require("path");function pe({workerDir:t,activeTaskContexts:e}){let s=new Map,r=new Map,n=new Map,o=null,c=0;function y(f){return Math.max(1,Math.trunc(Number(f)||3e4))}function d(f){for(let a of r.values())clearTimeout(a.timer),a.reject(f);r.clear()}function m(f){let a=typeof f=="string"?JSON.parse(f):f;if(a?.error)throw new Error(a.error);return a?.value}async function w(f){let a=e.get(f.taskId);if(!a)throw new Error(`Package callback context not found: ${f.taskId}`);let i=JSON.stringify(f.callbackId),_=JSON.stringify(f.argsJson||"[]"),g=await a.evalClosure(`return __invokeRuntimeCallback(${i}, ${_});`,[],{arguments:{copy:!0},result:{promise:!0,copy:!0}});return m(g)}function v(){if(o&&o.connected)return o;let f=de.join(t,"package-runtime.child.js"),a=fe(f,[],{stdio:["ignore","ignore","ignore","ipc"],env:{PATH:process.env.PATH||"",HOME:process.env.HOME||"",NODE_ENV:process.env.NODE_ENV||"production",TMPDIR:process.env.TMPDIR||"",LANG:process.env.LANG||""}});return o=a,a.on("message",i=>{if(!i||!i.id)return;if(i.type==="pkgStreamChunk"){let g=n.get(i.id);if(!g)return;g.onChunk(Buffer.from(i.chunk||"","base64")).then(()=>{try{a.send({type:"pkgStreamAck",ackId:i.ackId})}catch{}}).catch(P=>{try{a.send({type:"pkgStreamError",ackId:i.ackId,error:{message:P.message,stack:P.stack}})}catch{}});return}if(i.type==="pkgCallbackCall"){w(i).then(g=>{try{a.send({type:"pkgCallbackResult",id:i.id,value:g})}catch{}}).catch(g=>{try{a.send({type:"pkgCallbackError",id:i.id,error:{message:g.message,stack:g.stack}})}catch{}});return}let _=r.get(i.id);if(_)if(clearTimeout(_.timer),r.delete(i.id),n.delete(i.id),i.ok)_.resolve(i.value);else{let g=new Error(i.error?.message||"Package runtime call failed");g.stack=i.error?.stack||g.stack,_.reject(g)}}),a.on("exit",(i,_)=>{o===a&&(o=null),d(new Error(`Package runtime exited${_?` with signal ${_}`:` with code ${i}`}`))}),a.on("error",i=>{o===a&&(o=null),d(i)}),a}function u(f){return new Promise((a,i)=>{let _=v(),g=`pkg_${++c}`,P=y(f.timeoutMs),C=setTimeout(()=>{r.delete(g),n.delete(g);try{_.kill()}catch{}i(new Error(`Package runtime call timed out after ${P}ms`))},P);r.set(g,{resolve:a,reject:i,timer:C});try{_.send({...f,id:g},R=>{R&&(clearTimeout(C),r.delete(g),i(R))})}catch(R){clearTimeout(C),r.delete(g),i(R)}})}function l(f,a,i,_=[],g=3e4){return new Promise((P,C)=>{let R=v(),S=`pkg_${++c}`,F=y(g),q=setTimeout(()=>{r.delete(S),n.delete(S);try{R.kill()}catch{}C(new Error(`Package runtime stream timed out after ${F}ms`))},F);r.set(S,{resolve:P,reject:C,timer:q}),n.set(S,{onChunk:i});try{R.send({op:"streamHandle",taskId:f,handleId:a,path:_,id:S,timeoutMs:F},L=>{L&&(clearTimeout(q),r.delete(S),n.delete(S),C(L))})}catch(L){clearTimeout(q),r.delete(S),n.delete(S),C(L)}})}function k(f){try{if(!o||!o.connected)return;o.send({...f,id:`pkg_${++c}`,fire:!0})}catch{}}function h(f){try{let a=v();if(!a.connected)return;a.send({op:"cancelTask",taskId:f,id:`pkg_${++c}`,fire:!0})}catch{}}async function b(f,a){let i=s.get(f);if(!i)throw new Error("Package context is not available");if(a.handleId)return u({op:a.kind==="get"?"handleGet":"handleCall",taskId:f,handleId:a.handleId,path:a.path||[],argsJson:a.argsJson||"[]",timeoutMs:a.timeoutMs});let _=i.get(a.packageName);if(!_)throw new Error(`Package "${a.packageName}" is not available`);return u({op:a.kind==="construct"?"construct":"call",taskId:f,packageName:a.packageName,package:{name:_.name,fileUrl:_.fileUrl},path:a.path||[],argsJson:a.argsJson||"[]",timeoutMs:a.timeoutMs})}function x(f,a){s.set(f,a)}function $(f){s.delete(f),k({op:"releaseTask",taskId:f})}function p(){if(o){try{o.kill()}catch{}o=null}}return{cleanupTaskPackages:$,cancelTask:h,executePackageRuntimeCall:b,setTaskPackages:x,streamPackageHandle:l,shutdownPackageRuntime:p}}z.exports={createPackageRuntimeBridge:pe}});var Z=W((Le,X)=>{"use strict";var _e=`
|
|
2
2
|
"use strict";
|
|
3
3
|
let $ctx = {};
|
|
4
4
|
let $pkgs = {};
|
|
@@ -232,31 +232,24 @@ async function __streamResponseFromLocalReadable(stream, options) {
|
|
|
232
232
|
const transform = typeof options?.transform === 'function'
|
|
233
233
|
? options.transform
|
|
234
234
|
: null;
|
|
235
|
+
const decoder = observer || transform ? new TextDecoder('utf-8') : null;
|
|
235
236
|
const relayOptions = { ...(options || {}) };
|
|
236
237
|
delete relayOptions.observer;
|
|
237
238
|
delete relayOptions.transform;
|
|
238
|
-
const notifyObserver = async (
|
|
239
|
+
const notifyObserver = async (text, kind) => {
|
|
239
240
|
if (!observer) return;
|
|
240
|
-
let text;
|
|
241
|
-
try {
|
|
242
|
-
text = new TextDecoder().decode(__streamChunkToBytes(chunk));
|
|
243
|
-
} catch {
|
|
244
|
-
text = '';
|
|
245
|
-
}
|
|
246
241
|
try {
|
|
247
242
|
await observer(text, kind);
|
|
248
243
|
} catch {}
|
|
249
244
|
};
|
|
250
|
-
const relayChunk = async (chunk, kind) => {
|
|
245
|
+
const relayChunk = async (chunk, kind, text) => {
|
|
251
246
|
let output = chunk;
|
|
252
247
|
if (transform) {
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
}
|
|
259
|
-
const transformed = await transform(text, kind);
|
|
248
|
+
const transformed = await transform(
|
|
249
|
+
text,
|
|
250
|
+
kind,
|
|
251
|
+
kind === 'chunk' ? __bytesToBase64(__streamChunkToBytes(chunk)) : '',
|
|
252
|
+
);
|
|
260
253
|
if (transformed === null) return;
|
|
261
254
|
if (transformed !== undefined) output = String(transformed);
|
|
262
255
|
}
|
|
@@ -273,11 +266,15 @@ async function __streamResponseFromLocalReadable(stream, options) {
|
|
|
273
266
|
}));
|
|
274
267
|
try {
|
|
275
268
|
for await (const chunk of stream) {
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
269
|
+
let text = '';
|
|
270
|
+
try { text = decoder ? decoder.decode(__streamChunkToBytes(chunk), { stream: true }) : ''; } catch {}
|
|
271
|
+
await notifyObserver(text, 'chunk');
|
|
272
|
+
await relayChunk(chunk, 'chunk', text);
|
|
273
|
+
}
|
|
274
|
+
let endText = '';
|
|
275
|
+
try { endText = decoder ? decoder.decode() : ''; } catch {}
|
|
276
|
+
await notifyObserver(endText, 'end');
|
|
277
|
+
await relayChunk('', 'end', endText);
|
|
281
278
|
await __call('resCall', JSON.stringify({ method: 'streamEnd' }));
|
|
282
279
|
} catch (error) {
|
|
283
280
|
try {
|
|
@@ -426,12 +423,51 @@ if (typeof TextEncoder === 'undefined') {
|
|
|
426
423
|
};
|
|
427
424
|
}
|
|
428
425
|
|
|
426
|
+
if (typeof atob === 'undefined') {
|
|
427
|
+
globalThis.atob = (input = '') => {
|
|
428
|
+
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
|
|
429
|
+
const source = String(input).replace(/=+$/, '');
|
|
430
|
+
let out = '';
|
|
431
|
+
let value = 0;
|
|
432
|
+
let bits = 0;
|
|
433
|
+
for (const char of source) {
|
|
434
|
+
const index = chars.indexOf(char);
|
|
435
|
+
if (index < 0) continue;
|
|
436
|
+
value = (value << 6) | index;
|
|
437
|
+
bits += 6;
|
|
438
|
+
if (bits >= 8) {
|
|
439
|
+
bits -= 8;
|
|
440
|
+
out += String.fromCharCode((value >> bits) & 0xff);
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
return out;
|
|
444
|
+
};
|
|
445
|
+
}
|
|
446
|
+
|
|
429
447
|
if (typeof TextDecoder === 'undefined') {
|
|
430
448
|
globalThis.TextDecoder = class TextDecoder {
|
|
431
|
-
|
|
432
|
-
|
|
449
|
+
constructor() {
|
|
450
|
+
this.__pending = new Uint8Array();
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
decode(input = new Uint8Array(), options = {}) {
|
|
454
|
+
const source = ArrayBuffer.isView(input) ? input : new Uint8Array(input);
|
|
455
|
+
const bytes = new Uint8Array(this.__pending.length + source.byteLength);
|
|
456
|
+
bytes.set(this.__pending);
|
|
457
|
+
bytes.set(new Uint8Array(source.buffer, source.byteOffset, source.byteLength), this.__pending.length);
|
|
458
|
+
let completeLength = bytes.length;
|
|
459
|
+
if (options.stream) {
|
|
460
|
+
let leadIndex = bytes.length - 1;
|
|
461
|
+
while (leadIndex >= 0 && bytes[leadIndex] >= 0x80 && bytes[leadIndex] <= 0xbf) leadIndex--;
|
|
462
|
+
if (leadIndex >= 0) {
|
|
463
|
+
const lead = bytes[leadIndex];
|
|
464
|
+
const expectedLength = lead >= 0xf0 ? 4 : lead >= 0xe0 ? 3 : lead >= 0xc0 ? 2 : 1;
|
|
465
|
+
if (expectedLength > bytes.length - leadIndex) completeLength = leadIndex;
|
|
466
|
+
}
|
|
467
|
+
}
|
|
433
468
|
let binary = '';
|
|
434
|
-
for (let i = 0; i <
|
|
469
|
+
for (let i = 0; i < completeLength; i++) binary += String.fromCharCode(bytes[i]);
|
|
470
|
+
this.__pending = options.stream ? bytes.slice(completeLength) : new Uint8Array();
|
|
435
471
|
return decodeURIComponent(escape(binary));
|
|
436
472
|
}
|
|
437
473
|
};
|
|
@@ -938,48 +974,48 @@ function __cleanupTask() {
|
|
|
938
974
|
__pendingRuntimeTasks = [];
|
|
939
975
|
return true;
|
|
940
976
|
}
|
|
941
|
-
`;function ge(t){return _e.replace("%%PKG_SETUP%%",t)}X.exports={buildSetupCode:ge}});var{parentPort:
|
|
942
|
-
`),
|
|
943
|
-
`);for(let s of e){let r=s.match(/at\s+(.+\.js):(\d+):(\d+)/);if(!r)continue;let n=r[1].trim();if(Oe.includes(n))continue;let
|
|
944
|
-
`)}function
|
|
977
|
+
`;function ge(t){return _e.replace("%%PKG_SETUP%%",t)}X.exports={buildSetupCode:ge}});var{parentPort:A}=require("worker_threads"),Q=require("fs"),{fileURLToPath:ye}=require("url"),{createPackageRuntimeBridge:he}=G(),{buildSetupCode:me}=Z(),D;try{D=require("isolated-vm")}catch(t){A.postMessage({type:"error",message:"isolated-vm not available: "+t.message}),process.exit(1)}var U=new Map,ne=0,E=new Map,O=new Map,I=he({workerDir:__dirname,activeTaskContexts:E}),ke=500,we=5e3,ve=32,Y=new WeakMap,ae=new WeakMap,se=new WeakMap,j={created:0,reused:0,released:0,evicted:0,scrubFailed:0};function H(t){let e=O.get(t);return Math.max(1,Math.ceil((e??Date.now()+3e4)-Date.now()))}var M=null,be=0,ee=0,te=0;async function Pe(){let t=Date.now();if(t-ee<we)return te;if(ee=t,!M)return 0;let e=0;for(let s of M){let r=s?.isolate;if(!(!r||r.isDisposed))try{let n=await r.getHeapStatistics(),o=n.heap_size_limit||1,c=n.used_heap_size/o;c>e&&(e=c)}catch{}}return te=e,e}async function J(t){t.heapRatio=await Pe(),t.contextStats=xe(),A.postMessage(t)}function xe(){let t=0;if(M)for(let e of M)t+=e?.idleContexts?.length||0;return{...j,idle:t}}function oe(t,e){if(!M){let n=Math.max(1,Math.trunc(Number(e)||8));M=new Array(n).fill(null)}let s=be++%M.length,r=M[s];return(!r||!r.isolate||r.isolate.isDisposed)&&(r={isolate:new D.Isolate({memoryLimit:t}),idleContexts:[]},M[s]=r),r}async function T(t,e,s){let r=Y.get(t);r||(r=new Map,Y.set(t,r));let n=r.get(e);if(n)return n;let o;try{o=await t.compileScript(e,{filename:s})}catch(c){throw c&&typeof c=="object"&&(c.executionStage="compile"),c}if(r.set(e,o),r.size>ke){let c=r.keys().next().value;r.delete(c)}return o}A.on("message",async t=>{if(t.type==="execute")je(t).catch(async e=>{await J({type:"result",id:t.id,success:!1,error:{message:e.message,stack:e.stack}})});else if(t.type==="executeBatch")He(t).catch(async e=>{await J({type:"result",id:t.id,success:!1,error:{message:e.message,stack:e.stack}})});else if(t.type==="invokeRuntimeCallback")Se(t).catch(e=>{A.postMessage({type:"runtimeCallbackResult",callId:t.callId,error:e?.message||String(e)})});else if(t.type==="callResult"){let e=U.get(t.callId);e&&(U.delete(t.callId),e.resolve(t.result))}else if(t.type==="callError"){let e=U.get(t.callId);e&&(U.delete(t.callId),e.reject(new Error(t.error)))}else t.type==="cancelTask"&&I.cancelTask(t.id)});async function Se(t){let e=E.get(t.id);if(!e){A.postMessage({type:"runtimeCallbackResult",callId:t.callId,error:`Runtime callback context not found: ${t.id}`});return}let s=await e.evalClosure(`return __invokeRuntimeCallback(${JSON.stringify(t.callbackId)}, ${JSON.stringify(t.argsJson||"[]")});`,[],{arguments:{copy:!0},result:{promise:!0,copy:!0}}),r=JSON.parse(s);A.postMessage({type:"runtimeCallbackResult",callId:t.callId,...r})}function N(t,e,s){return new Promise((r,n)=>{let o=`cb_${++ne}`;U.set(o,{resolve:r,reject:n}),A.postMessage({type:e,id:t,callId:o,...s})})}function Ce(t,e,s){A.postMessage({type:e,id:t,callId:`f_${++ne}`,...s})}async function $e(t,e){if(e?.method!=="stream")return N(t,"resCall",e);let s=JSON.parse(e.argsJson||"[]"),r=s[0],n=s[1]||{},o=r?.__pkgHandleArg;if(!o)return N(t,"resCall",e);let c=n.observer&&typeof n.observer=="object"?n.observer.__fnRef:null,y=n.transform&&typeof n.transform=="object"?n.transform.__fnRef:null,d=c||y?new TextDecoder("utf-8"):null;delete n.observer,delete n.transform;let m={...n};await N(t,"resCall",{method:"streamStart",argsJson:JSON.stringify([null,m])});let w=async(l,k,h,b="")=>{if(!l)return;let x=E.get(t);if(!x)return;let $=await x.evalClosure(`return __invokeRuntimeCallback(${JSON.stringify(l)}, ${JSON.stringify(JSON.stringify([k,h,b]))});`,[],{arguments:{copy:!0},result:{promise:!0,copy:!0}}),p=JSON.parse($);if(p?.error)throw new Error(p.error);if(p?.value?.__e!=="u")return p?.value},v=async(l,k)=>{if(c)try{await w(c,l,k)}catch{}},u=async(l,k,h)=>{let b=l;if(y){let $=Buffer.from(l),p=await w(y,h,k,k==="chunk"?$.toString("base64"):"");if(p===null)return;p!==void 0&&(b=Buffer.from(String(p)))}let x=Buffer.from(b);x.length!==0&&await N(t,"resCall",{method:"streamChunk",chunk:x.toString("base64")})};try{await I.streamPackageHandle(t,o,async k=>{let h="";try{h=d?d.decode(Buffer.from(k),{stream:!0}):""}catch{}await v(h,"chunk"),await u(k,"chunk",h)},[],H(t));let l="";try{l=d?d.decode():""}catch{}await v(l,"end"),await u("","end",l),await N(t,"resCall",{method:"streamEnd"})}catch(l){try{await N(t,"resCall",{method:"streamError",error:{message:l.message,stack:l.stack}})}catch{}throw await v("","error"),l}return JSON.stringify({__e:"u"})}function Re(t){if(typeof t.sourceCode=="string"&&t.sourceCode.length>0)return t.sourceCode;let e=t.filePath;return!e&&typeof t.fileUrl=="string"&&t.fileUrl.startsWith("file://")&&(e=ye(t.fileUrl)),!e||!Q.existsSync(e)?null:Q.readFileSync(e,"utf8")}async function Me(t,e,s){try{let r=Re(s);if(!r)return null;let n=await t.compileModule(r,{filename:`pkg:${s.safeName}`});await n.instantiate(e,c=>{throw new Error(`Unresolved import in package ${s.safeName}: ${c}`)}),await n.evaluate({timeout:1e4});let o=await n.namespace.get("default");return o!==void 0&&o.typeof!=="undefined"?o.derefInto({release:!1}):n.namespace.derefInto({release:!1})}catch{return null}}function ie(t,e){let s=n=>{let o=2166136261;for(let c=0;c<n.length;c++)o^=n.charCodeAt(c),o=Math.imul(o,16777619);return(o>>>0).toString(36)},r=new Set(e||[]);return t.map(n=>{let o=n.cacheKey||`${n.filePath||""}:${n.fileUrl||""}:${n.mtimeMs||""}:${n.size||""}:${s(n.sourceCode||"")}`,c=r.has(n.name)?"isolate":"proxy";return`${n.name}:${n.version||""}:${o}:${c}`}).join("|")}function ce(t,e){let s=new Set(e.map(d=>d.name)),r=new Set,n=String(t||""),o=/\b(?:\$ctx\.)?\$pkgs\s*\[\s*(['"`])([^'"`]+)\1\s*\]/g,c=/\brequire\s*\(\s*(['"`])([^'"`]+)\1\s*\)/g,y=/\b(?:\$ctx\.)?\$pkgs\.([A-Za-z_$][\w$]*)/g;for(let d of[o,c])for(let m of n.matchAll(d)){let w=m[2];s.has(w)&&r.add(w)}for(let d of n.matchAll(y)){let m=d[1];s.has(m)&&r.add(m)}return r}async function Te(t,e,s,r){let n=await t.createContext(),o=n.global;await o.set("global",o.derefInto());let c=[],y=[],d=new Map;for(let u of s){d.set(u.name,u);let l=r.has(u.name)?await Me(t,n,u):null;l!==null?(await o.set(`__pkg_${u.safeName}`,l),c.push(u)):y.push(u)}I.setTaskPackages(e,d),await o.set("__callRef",new D.Reference(async(u,l,k)=>{let h=JSON.parse(k);return l==="pkgCall"?JSON.stringify(await I.executePackageRuntimeCall(u,h)):l==="resCall"?$e(u,h):N(u,l,h)})),await o.set("__fireRef",new D.Reference((u,l,k)=>{let h=JSON.parse(k);Ce(u,l,h)}));let m=c.map(u=>`$pkgs[${JSON.stringify(u.name)}] = __pkg_${u.safeName};`).concat(y.map(u=>`$pkgs[${JSON.stringify(u.name)}] = __createPkgProxy(${JSON.stringify(u.name)}, []);`)).join(`
|
|
978
|
+
`),w=me(m);return await(await T(t,w,"setup.js")).run(n,{timeout:H(e)}),ae.set(n,ie(s,r)),se.set(n,d),n}async function le(t,e,s,r,n,o,c){let y=t.isolate,d=ie(s,n),m=null;for(let u=t.idleContexts.length-1;u>=0;u--){let l=t.idleContexts[u];if(t.idleContexts.splice(u,1),ae.get(l)===d){m=l,j.reused++;break}try{l.release()}catch{}}m||(m=await Te(y,e,s,n),j.created++),I.setTaskPackages(e,se.get(m)||new Map);let w=m.global;return await w.set("__snapshot",new D.ExternalCopy(r).copyInto()),await w.set("__nextTaskId",e),await w.set("__nextTaskTimeoutMs",o),await w.set("__nextTaskDeadlineMs",c),await(await T(y,"__resetTask(__snapshot, __nextTaskId, __nextTaskTimeoutMs, __nextTaskDeadlineMs);","reset-task.js")).run(m,{timeout:H(e)}),m}async function ue(t,e){if(!(!e||t.isolate.isDisposed)){try{await(await T(t.isolate,"__cleanupTask();","cleanup-task.js")).run(e,{timeout:5e3})}catch{j.scrubFailed++;try{e.release()}catch{}return}if(t.idleContexts.length>=ve){try{e.release()}catch{}j.evicted++;return}t.idleContexts.push(e),j.released++}}function Ae(t){try{let e=JSON.parse(t.message);if(e&&e.__userThrow)return{...e,message:e.message??t.message}}catch{}return null}var Ne=3,Oe=["setup.js","extract.js","extract-error-ctx.js","set-status.js","populate-error.js"];function Je(t){if(!t)return null;let e=t.split(`
|
|
979
|
+
`);for(let s of e){let r=s.match(/at\s+(.+\.js):(\d+):(\d+)/);if(!r)continue;let n=r[1].trim();if(Oe.includes(n))continue;let c=parseInt(r[2])-Ne;if(!(c<=0))return{line:c,column:parseInt(r[3]),phase:n.replace(".js","")}}return null}function Ee(t,e,s){if(!t||!e)return;let r=String(t).split(/\r?\n/),n=Math.max(1,e-1),o=Math.min(r.length,e+1),c=String(o).length,y=[];for(let d=n;d<=o;d++){let m=d===e?">":" ";y.push(`${m} ${String(d).padStart(c," ")}. ${r[d-1]??""}`),d===e&&s&&s>0&&y.push(` ${" ".repeat(c)} ${" ".repeat(Math.max(0,s-1))}^`)}return y.join(`
|
|
980
|
+
`)}function Ie(t,e){if(!(!t||!e)){if(e[t.phase])return e[t.phase];if(t.phase?.startsWith("preHook"))return e.preHook;if(t.phase?.startsWith("postHook"))return e.postHook}}function V(t,e){let s=Ae(t);if(s)return{message:s.message,statusCode:s.statusCode,errorPath:s.errorPath,details:s.details};let r=Je(t.stack),n=t.message||"Unknown error",o=r?`${n} (${r.phase}, line ${r.line})`:n,c=Ie(r,e),y=r?Ee(c,r.line,r.column):void 0;return{message:o,statusCode:t.statusCode||null,details:{errorName:t.name||null,executionStage:t.executionStage||"runtime",...r?{...r,codeFrame:y}:{}}}}async function B(t,e,s){let r=V(e,s);await J({type:"result",id:t,success:!1,error:{...r,stack:e.stack,code:e.code}})}async function je(t){let{id:e,code:s,pkgSources:r,snapshot:n,memoryLimitMb:o,isolatePoolSize:c}=t,y={handler:t.sourceCode||s||""},d=r||[],m=Math.max(1,Math.trunc(Number(t.timeoutMs)||3e4)),w=Date.now()+m;O.set(e,w);let v=ce(s,d),u=oe(o,c),l=u.isolate,k;try{k=await le(u,e,d,n,v,m,w)}catch(h){O.delete(e),K(e),await B(e,h,y);return}E.set(e,k);try{let h=`
|
|
945
981
|
(async () => {
|
|
946
982
|
"use strict";
|
|
947
983
|
${s}
|
|
948
984
|
})().then((__result) => __extractResult(__result, __result === undefined));
|
|
949
|
-
`,
|
|
950
|
-
`),y),
|
|
985
|
+
`,x=await(await T(l,h,"handler.js")).run(k,{timeout:H(e),promise:!0}),$=JSON.parse(x);await J({type:"result",id:e,success:!0,...$})}catch(h){await B(e,h,y)}finally{E.delete(e),O.delete(e),await ue(u,k),K(e)}}async function He(t){let{id:e,codeBlocks:s,pkgSources:r,snapshot:n,memoryLimitMb:o,isolatePoolSize:c}=t,y=r||[],d=Math.max(1,Math.trunc(Number(t.timeoutMs)||3e4)),m=Date.now()+d;O.set(e,m);let w=ce((s||[]).map(p=>p.code||"").join(`
|
|
986
|
+
`),y),v=oe(o,c),u=v.isolate,l;try{l=await le(v,e,y,n,w,d,m)}catch(p){O.delete(e),K(e),await B(e,p);return}E.set(e,l);let k=[],h=[],b={},x=0,$=0;for(let p of s){let f=p.type||"handler",a=p.sourceCode||p.code||"";f==="postHook"?($++,b[`postHook #${$}`]=a,b.postHook=a,h.push(p)):(f==="handler"?b.handler=a:(x++,b[`${f} #${x}`]=a,b.preHook=a),k.push(p))}try{let p=null;for(let a=0;a<k.length;a++){let i=k[a],_=i.type||"handler",g=_==="handler"?"handler":`${_} #${a+1}`,P;_==="preHook"?P=`
|
|
951
987
|
(async () => {
|
|
952
988
|
"use strict";
|
|
953
|
-
${
|
|
989
|
+
${i.code}
|
|
954
990
|
})().then((__r) => {
|
|
955
991
|
if (__r !== undefined) return JSON.stringify({ __shortCircuit: true, value: __r });
|
|
956
992
|
return JSON.stringify({ __shortCircuit: false });
|
|
957
993
|
});`:P=`
|
|
958
994
|
(async () => {
|
|
959
995
|
"use strict";
|
|
960
|
-
${
|
|
996
|
+
${i.code}
|
|
961
997
|
})().then((__r) => {
|
|
962
998
|
$ctx.$data = __r;
|
|
963
999
|
return "__handler_done__";
|
|
964
|
-
});`;try{let
|
|
965
|
-
$ctx.$error = ${JSON.stringify(
|
|
1000
|
+
});`;try{let R=await(await T(u,P,`${g}.js`)).run(l,{timeout:H(e),promise:!0});if(_==="preHook"&&typeof R=="string"){let S=JSON.parse(R);if(S.__shortCircuit){let F=await re(u,l,S.value);await J({type:"result",id:e,success:!0,...F,shortCircuit:!0});return}}}catch(C){p=C;break}}if(!p&&h.length>0&&await(await T(u,'$ctx.$statusCode = 200; "__status_set__";',"set-status.js")).run(l,{timeout:5e3}),p&&h.length>0){let a=V(p,b),i={message:a.message||"Unknown error",name:p.constructor?.name||"Error",stack:p.stack||"",statusCode:a.statusCode||500,details:a.details||{},timestamp:new Date().toISOString()},_=`
|
|
1001
|
+
$ctx.$error = ${JSON.stringify(i)};
|
|
966
1002
|
$ctx.$data = null;
|
|
967
|
-
$ctx.$statusCode = ${
|
|
1003
|
+
$ctx.$statusCode = ${i.statusCode};
|
|
968
1004
|
if ($ctx.$api) {
|
|
969
|
-
$ctx.$api.error = ${JSON.stringify(
|
|
1005
|
+
$ctx.$api.error = ${JSON.stringify(i)};
|
|
970
1006
|
$ctx.$api.response = {
|
|
971
|
-
statusCode: ${
|
|
1007
|
+
statusCode: ${i.statusCode},
|
|
972
1008
|
responseTime: $ctx.$api.request && $ctx.$api.request.timestamp
|
|
973
1009
|
? Date.now() - new Date($ctx.$api.request.timestamp).getTime()
|
|
974
1010
|
: 0,
|
|
975
|
-
timestamp: ${JSON.stringify(
|
|
1011
|
+
timestamp: ${JSON.stringify(i.timestamp)},
|
|
976
1012
|
};
|
|
977
1013
|
}
|
|
978
|
-
"__error_populated__";`;await(await
|
|
1014
|
+
"__error_populated__";`;await(await u.compileScript(_,{filename:"populate-error.js"})).run(l,{timeout:5e3})}for(let a=0;a<h.length;a++){let i=h[a],_=`postHook #${a+1}`,g=`
|
|
979
1015
|
(async () => {
|
|
980
1016
|
"use strict";
|
|
981
|
-
${
|
|
1017
|
+
${i.code}
|
|
982
1018
|
})().then((__r) => {
|
|
983
1019
|
if (__r !== undefined) $ctx.$data = __r;
|
|
984
1020
|
return "__posthook_done__";
|
|
985
|
-
});`;try{await(await
|
|
1021
|
+
});`;try{await(await T(u,g,`${_}.js`)).run(l,{timeout:H(e),promise:!0})}catch{}}if(p){let a=V(p,b),i;try{let P=await(await T(u,"(async () => JSON.stringify(await __extractCtxChanges()))()","extract-error-ctx.js")).run(l,{timeout:5e3,promise:!0});i=JSON.parse(P)}catch{}await J({type:"result",id:e,success:!1,error:{message:a.message,statusCode:a.statusCode,errorPath:a.errorPath,stack:p.stack,code:p.code,details:a.details},ctxChanges:i});return}let f=await re(u,l);await J({type:"result",id:e,success:!0,...f})}catch(p){await B(e,p)}finally{E.delete(e),O.delete(e),await ue(v,l),K(e)}}function K(t){I.cleanupTaskPackages(t)}function Fe(){I.shutdownPackageRuntime()}process.on("exit",Fe);async function re(t,e,s){if(s!==void 0){let c=`__extractResult(${JSON.stringify(s)}, false)`,d=await(await t.compileScript(c,{filename:"extract.js"})).run(e,{timeout:5e3,promise:!0});return JSON.parse(d)}let o=await(await T(t,"__extractResult($ctx.$data, $ctx.$data === undefined)","extract.js")).run(e,{timeout:5e3,promise:!0});return JSON.parse(o)}
|