@enfyra/kernel 1.1.45 → 1.1.46
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 +52 -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 g(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 h(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),p=JSON.stringify(f.argsJson||"[]"),_=await a.evalClosure(`return __invokeRuntimeCallback(${i}, ${p});`,[],{arguments:{copy:!0},result:{promise:!0,copy:!0}});return h(_)}function b(){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 _=n.get(i.id);if(!_)return;_.onChunk(Buffer.from(i.chunk||"","base64")).then(()=>{try{a.send({type:"pkgStreamAck",ackId:i.ackId})}catch{}}).catch(x=>{try{a.send({type:"pkgStreamError",ackId:i.ackId,error:{message:x.message,stack:x.stack}})}catch{}});return}if(i.type==="pkgCallbackCall"){w(i).then(_=>{try{a.send({type:"pkgCallbackResult",id:i.id,value:_})}catch{}}).catch(_=>{try{a.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),n.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(_)}}),a.on("exit",(i,p)=>{o===a&&(o=null),d(new Error(`Package runtime exited${p?` with signal ${p}`:` with code ${i}`}`))}),a.on("error",i=>{o===a&&(o=null),d(i)}),a}function l(f){return new Promise((a,i)=>{let p=b(),_=`pkg_${++c}`,x=g(f.timeoutMs),$=setTimeout(()=>{r.delete(_),n.delete(_);try{p.kill()}catch{}i(new Error(`Package runtime call timed out after ${x}ms`))},x);r.set(_,{resolve:a,reject:i,timer:$});try{p.send({...f,id:_},R=>{R&&(clearTimeout($),r.delete(_),i(R))})}catch(R){clearTimeout($),r.delete(_),i(R)}})}function u(f,a,i,p=[],_=3e4){return new Promise((x,$)=>{let R=b(),S=`pkg_${++c}`,F=g(_),q=setTimeout(()=>{r.delete(S),n.delete(S);try{R.kill()}catch{}$(new Error(`Package runtime stream timed out after ${F}ms`))},F);r.set(S,{resolve:x,reject:$,timer:q}),n.set(S,{onChunk:i});try{R.send({op:"streamHandle",taskId:f,handleId:a,path:p,id:S,timeoutMs:F},L=>{L&&(clearTimeout(q),r.delete(S),n.delete(S),$(L))})}catch(L){clearTimeout(q),r.delete(S),n.delete(S),$(L)}})}function k(f){try{if(!o||!o.connected)return;o.send({...f,id:`pkg_${++c}`,fire:!0})}catch{}}function y(f){try{let a=b();if(!a.connected)return;a.send({op:"cancelTask",taskId:f,id:`pkg_${++c}`,fire:!0})}catch{}}async function v(f,a){let i=s.get(f);if(!i)throw new Error("Package context is not available");if(a.handleId)return l({op:a.kind==="get"?"handleGet":"handleCall",taskId:f,handleId:a.handleId,path:a.path||[],argsJson:a.argsJson||"[]",timeoutMs:a.timeoutMs});let p=i.get(a.packageName);if(!p)throw new Error(`Package "${a.packageName}" is not available`);return l({op:a.kind==="construct"?"construct":"call",taskId:f,packageName:a.packageName,package:{name:p.name,fileUrl:p.fileUrl},path:a.path||[],argsJson:a.argsJson||"[]",timeoutMs:a.timeoutMs})}function C(f,a){s.set(f,a)}function P(f){s.delete(f),k({op:"releaseTask",taskId:f})}function m(){if(o){try{o.kill()}catch{}o=null}}return{cleanupTaskPackages:P,cancelTask:y,executePackageRuntimeCall:v,setTaskPackages:C,streamPackageHandle:u,shutdownPackageRuntime:m}}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,30 +232,19 @@ 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
|
-
let text;
|
|
254
|
-
try {
|
|
255
|
-
text = new TextDecoder().decode(__streamChunkToBytes(chunk));
|
|
256
|
-
} catch {
|
|
257
|
-
text = '';
|
|
258
|
-
}
|
|
259
248
|
const transformed = await transform(text, kind);
|
|
260
249
|
if (transformed === null) return;
|
|
261
250
|
if (transformed !== undefined) output = String(transformed);
|
|
@@ -273,11 +262,15 @@ async function __streamResponseFromLocalReadable(stream, options) {
|
|
|
273
262
|
}));
|
|
274
263
|
try {
|
|
275
264
|
for await (const chunk of stream) {
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
265
|
+
let text = '';
|
|
266
|
+
try { text = decoder ? decoder.decode(__streamChunkToBytes(chunk), { stream: true }) : ''; } catch {}
|
|
267
|
+
await notifyObserver(text, 'chunk');
|
|
268
|
+
await relayChunk(chunk, 'chunk', text);
|
|
269
|
+
}
|
|
270
|
+
let endText = '';
|
|
271
|
+
try { endText = decoder ? decoder.decode() : ''; } catch {}
|
|
272
|
+
await notifyObserver(endText, 'end');
|
|
273
|
+
await relayChunk('', 'end', endText);
|
|
281
274
|
await __call('resCall', JSON.stringify({ method: 'streamEnd' }));
|
|
282
275
|
} catch (error) {
|
|
283
276
|
try {
|
|
@@ -428,10 +421,28 @@ if (typeof TextEncoder === 'undefined') {
|
|
|
428
421
|
|
|
429
422
|
if (typeof TextDecoder === 'undefined') {
|
|
430
423
|
globalThis.TextDecoder = class TextDecoder {
|
|
431
|
-
|
|
432
|
-
|
|
424
|
+
constructor() {
|
|
425
|
+
this.__pending = new Uint8Array();
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
decode(input = new Uint8Array(), options = {}) {
|
|
429
|
+
const source = ArrayBuffer.isView(input) ? input : new Uint8Array(input);
|
|
430
|
+
const bytes = new Uint8Array(this.__pending.length + source.byteLength);
|
|
431
|
+
bytes.set(this.__pending);
|
|
432
|
+
bytes.set(new Uint8Array(source.buffer, source.byteOffset, source.byteLength), this.__pending.length);
|
|
433
|
+
let completeLength = bytes.length;
|
|
434
|
+
if (options.stream) {
|
|
435
|
+
let start = bytes.length;
|
|
436
|
+
while (start > 0 && bytes[start - 1] >= 0x80 && bytes[start - 1] <= 0xbf) start--;
|
|
437
|
+
if (start < bytes.length) {
|
|
438
|
+
const lead = bytes[start];
|
|
439
|
+
const expectedLength = lead >= 0xf0 ? 4 : lead >= 0xe0 ? 3 : lead >= 0xc0 ? 2 : 1;
|
|
440
|
+
if (expectedLength > bytes.length - start) completeLength = start;
|
|
441
|
+
}
|
|
442
|
+
}
|
|
433
443
|
let binary = '';
|
|
434
|
-
for (let i = 0; i <
|
|
444
|
+
for (let i = 0; i < completeLength; i++) binary += String.fromCharCode(bytes[i]);
|
|
445
|
+
this.__pending = options.stream ? bytes.slice(completeLength) : new Uint8Array();
|
|
435
446
|
return decodeURIComponent(escape(binary));
|
|
436
447
|
}
|
|
437
448
|
};
|
|
@@ -938,48 +949,48 @@ function __cleanupTask() {
|
|
|
938
949
|
__pendingRuntimeTasks = [];
|
|
939
950
|
return true;
|
|
940
951
|
}
|
|
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 je(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=
|
|
952
|
+
`;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,j=he({workerDir:__dirname,activeTaskContexts:E}),ke=500,we=5e3,ve=32,Y=new WeakMap,ae=new WeakMap,se=new WeakMap,I={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{...I,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")Ie(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"&&j.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,g=n.transform&&typeof n.transform=="object"?n.transform.__fnRef:null,d=c||g?new TextDecoder("utf-8"):null;delete n.observer,delete n.transform;let h={...n};await N(t,"resCall",{method:"streamStart",argsJson:JSON.stringify([null,h])});let w=async(u,k,y)=>{if(!u)return;let v=E.get(t);if(!v)return;let C=await v.evalClosure(`return __invokeRuntimeCallback(${JSON.stringify(u)}, ${JSON.stringify(JSON.stringify([k,y]))});`,[],{arguments:{copy:!0},result:{promise:!0,copy:!0}}),P=JSON.parse(C);if(P?.error)throw new Error(P.error);if(P?.value?.__e!=="u")return P?.value},b=async(u,k)=>{if(c)try{await w(c,u,k)}catch{}},l=async(u,k,y)=>{let v=u;if(g){let P=await w(g,y,k);if(P===null)return;P!==void 0&&(v=Buffer.from(String(P)))}let C=Buffer.from(v);C.length!==0&&await N(t,"resCall",{method:"streamChunk",chunk:C.toString("base64")})};try{await j.streamPackageHandle(t,o,async k=>{let y="";try{y=d?d.decode(Buffer.from(k),{stream:!0}):""}catch{}await b(y,"chunk"),await l(k,"chunk",y)},[],H(t));let u="";try{u=d?d.decode():""}catch{}await b(u,"end"),await l("","end",u),await N(t,"resCall",{method:"streamEnd"})}catch(u){try{await N(t,"resCall",{method:"streamError",error:{message:u.message,stack:u.stack}})}catch{}throw await b("","error"),u}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,g=/\b(?:\$ctx\.)?\$pkgs\.([A-Za-z_$][\w$]*)/g;for(let d of[o,c])for(let h of n.matchAll(d)){let w=h[2];s.has(w)&&r.add(w)}for(let d of n.matchAll(g)){let h=d[1];s.has(h)&&r.add(h)}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=[],g=[],d=new Map;for(let l of s){d.set(l.name,l);let u=r.has(l.name)?await Me(t,n,l):null;u!==null?(await o.set(`__pkg_${l.safeName}`,u),c.push(l)):g.push(l)}j.setTaskPackages(e,d),await o.set("__callRef",new D.Reference(async(l,u,k)=>{let y=JSON.parse(k);return u==="pkgCall"?JSON.stringify(await j.executePackageRuntimeCall(l,y)):u==="resCall"?$e(l,y):N(l,u,y)})),await o.set("__fireRef",new D.Reference((l,u,k)=>{let y=JSON.parse(k);Ce(l,u,y)}));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(`
|
|
953
|
+
`),w=me(h);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 g=t.isolate,d=ie(s,n),h=null;for(let l=t.idleContexts.length-1;l>=0;l--){let u=t.idleContexts[l];if(t.idleContexts.splice(l,1),ae.get(u)===d){h=u,I.reused++;break}try{u.release()}catch{}}h||(h=await Te(g,e,s,n),I.created++),j.setTaskPackages(e,se.get(h)||new Map);let w=h.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(g,"__resetTask(__snapshot, __nextTaskId, __nextTaskTimeoutMs, __nextTaskDeadlineMs);","reset-task.js")).run(h,{timeout:H(e)}),h}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{I.scrubFailed++;try{e.release()}catch{}return}if(t.idleContexts.length>=ve){try{e.release()}catch{}I.evicted++;return}t.idleContexts.push(e),I.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(`
|
|
954
|
+
`);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,g=[];for(let d=n;d<=o;d++){let h=d===e?">":" ";g.push(`${h} ${String(d).padStart(c," ")}. ${r[d-1]??""}`),d===e&&s&&s>0&&g.push(` ${" ".repeat(c)} ${" ".repeat(Math.max(0,s-1))}^`)}return g.join(`
|
|
955
|
+
`)}function je(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=je(r,e),g=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:g}:{}}}}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 Ie(t){let{id:e,code:s,pkgSources:r,snapshot:n,memoryLimitMb:o,isolatePoolSize:c}=t,g={handler:t.sourceCode||s||""},d=r||[],h=Math.max(1,Math.trunc(Number(t.timeoutMs)||3e4)),w=Date.now()+h;O.set(e,w);let b=ce(s,d),l=oe(o,c),u=l.isolate,k;try{k=await le(l,e,d,n,b,h,w)}catch(y){O.delete(e),K(e),await B(e,y,g);return}E.set(e,k);try{let y=`
|
|
945
956
|
(async () => {
|
|
946
957
|
"use strict";
|
|
947
958
|
${s}
|
|
948
959
|
})().then((__result) => __extractResult(__result, __result === undefined));
|
|
949
|
-
`,
|
|
950
|
-
`),
|
|
960
|
+
`,C=await(await T(u,y,"handler.js")).run(k,{timeout:H(e),promise:!0}),P=JSON.parse(C);await J({type:"result",id:e,success:!0,...P})}catch(y){await B(e,y,g)}finally{E.delete(e),O.delete(e),await ue(l,k),K(e)}}async function He(t){let{id:e,codeBlocks:s,pkgSources:r,snapshot:n,memoryLimitMb:o,isolatePoolSize:c}=t,g=r||[],d=Math.max(1,Math.trunc(Number(t.timeoutMs)||3e4)),h=Date.now()+d;O.set(e,h);let w=ce((s||[]).map(m=>m.code||"").join(`
|
|
961
|
+
`),g),b=oe(o,c),l=b.isolate,u;try{u=await le(b,e,g,n,w,d,h)}catch(m){O.delete(e),K(e),await B(e,m);return}E.set(e,u);let k=[],y=[],v={},C=0,P=0;for(let m of s){let f=m.type||"handler",a=m.sourceCode||m.code||"";f==="postHook"?(P++,v[`postHook #${P}`]=a,v.postHook=a,y.push(m)):(f==="handler"?v.handler=a:(C++,v[`${f} #${C}`]=a,v.preHook=a),k.push(m))}try{let m=null;for(let a=0;a<k.length;a++){let i=k[a],p=i.type||"handler",_=p==="handler"?"handler":`${p} #${a+1}`,x;p==="preHook"?x=`
|
|
951
962
|
(async () => {
|
|
952
963
|
"use strict";
|
|
953
|
-
${
|
|
964
|
+
${i.code}
|
|
954
965
|
})().then((__r) => {
|
|
955
966
|
if (__r !== undefined) return JSON.stringify({ __shortCircuit: true, value: __r });
|
|
956
967
|
return JSON.stringify({ __shortCircuit: false });
|
|
957
|
-
});`:
|
|
968
|
+
});`:x=`
|
|
958
969
|
(async () => {
|
|
959
970
|
"use strict";
|
|
960
|
-
${
|
|
971
|
+
${i.code}
|
|
961
972
|
})().then((__r) => {
|
|
962
973
|
$ctx.$data = __r;
|
|
963
974
|
return "__handler_done__";
|
|
964
|
-
});`;try{let
|
|
965
|
-
$ctx.$error = ${JSON.stringify(
|
|
975
|
+
});`;try{let R=await(await T(l,x,`${_}.js`)).run(u,{timeout:H(e),promise:!0});if(p==="preHook"&&typeof R=="string"){let S=JSON.parse(R);if(S.__shortCircuit){let F=await re(l,u,S.value);await J({type:"result",id:e,success:!0,...F,shortCircuit:!0});return}}}catch($){m=$;break}}if(!m&&y.length>0&&await(await T(l,'$ctx.$statusCode = 200; "__status_set__";',"set-status.js")).run(u,{timeout:5e3}),m&&y.length>0){let a=V(m,v),i={message:a.message||"Unknown error",name:m.constructor?.name||"Error",stack:m.stack||"",statusCode:a.statusCode||500,details:a.details||{},timestamp:new Date().toISOString()},p=`
|
|
976
|
+
$ctx.$error = ${JSON.stringify(i)};
|
|
966
977
|
$ctx.$data = null;
|
|
967
|
-
$ctx.$statusCode = ${
|
|
978
|
+
$ctx.$statusCode = ${i.statusCode};
|
|
968
979
|
if ($ctx.$api) {
|
|
969
|
-
$ctx.$api.error = ${JSON.stringify(
|
|
980
|
+
$ctx.$api.error = ${JSON.stringify(i)};
|
|
970
981
|
$ctx.$api.response = {
|
|
971
|
-
statusCode: ${
|
|
982
|
+
statusCode: ${i.statusCode},
|
|
972
983
|
responseTime: $ctx.$api.request && $ctx.$api.request.timestamp
|
|
973
984
|
? Date.now() - new Date($ctx.$api.request.timestamp).getTime()
|
|
974
985
|
: 0,
|
|
975
|
-
timestamp: ${JSON.stringify(
|
|
986
|
+
timestamp: ${JSON.stringify(i.timestamp)},
|
|
976
987
|
};
|
|
977
988
|
}
|
|
978
|
-
"__error_populated__";`;await(await
|
|
989
|
+
"__error_populated__";`;await(await l.compileScript(p,{filename:"populate-error.js"})).run(u,{timeout:5e3})}for(let a=0;a<y.length;a++){let i=y[a],p=`postHook #${a+1}`,_=`
|
|
979
990
|
(async () => {
|
|
980
991
|
"use strict";
|
|
981
|
-
${
|
|
992
|
+
${i.code}
|
|
982
993
|
})().then((__r) => {
|
|
983
994
|
if (__r !== undefined) $ctx.$data = __r;
|
|
984
995
|
return "__posthook_done__";
|
|
985
|
-
});`;try{await(await
|
|
996
|
+
});`;try{await(await T(l,_,`${p}.js`)).run(u,{timeout:H(e),promise:!0})}catch{}}if(m){let a=V(m,v),i;try{let x=await(await T(l,"(async () => JSON.stringify(await __extractCtxChanges()))()","extract-error-ctx.js")).run(u,{timeout:5e3,promise:!0});i=JSON.parse(x)}catch{}await J({type:"result",id:e,success:!1,error:{message:a.message,statusCode:a.statusCode,errorPath:a.errorPath,stack:m.stack,code:m.code,details:a.details},ctxChanges:i});return}let f=await re(l,u);await J({type:"result",id:e,success:!0,...f})}catch(m){await B(e,m)}finally{E.delete(e),O.delete(e),await ue(b,u),K(e)}}function K(t){j.cleanupTaskPackages(t)}function Fe(){j.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)}
|