@enfyra/kernel 1.1.23 → 1.1.25
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 +115 -13
- package/dist/index.js +6 -6
- package/dist/package-metadata.json +1 -1
- package/package.json +2 -3
package/dist/execution/worker.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var D=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var B=D((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,n=new Map,s=null,c=0;function g(f){return Math.max(1,Math.trunc(Number(f)||3e4))}function u(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=t.get(f.taskId);if(!a)throw new Error(`Package callback context not found: ${f.taskId}`);let i=JSON.stringify(f.callbackId),d=JSON.stringify(f.argsJson||"[]"),_=await a.evalClosure(`return __invokeRuntimeCallback(${i}, ${d});`,[],{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"),a=ce(f,[],{stdio:["ignore","ignore","ignore","ipc"]});return s=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(v=>{try{a.send({type:"pkgStreamError",ackId:i.ackId,error:{message:v.message,stack:v.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 d=r.get(i.id);if(d)if(clearTimeout(d.timer),r.delete(i.id),n.delete(i.id),i.ok)d.resolve(i.value);else{let _=new Error(i.error?.message||"Package runtime call failed");_.stack=i.error?.stack||_.stack,d.reject(_)}}),a.on("exit",(i,d)=>{s===a&&(s=null),u(new Error(`Package runtime exited${d?` with signal ${d}`:` with code ${i}`}`))}),a.on("error",i=>{s===a&&(s=null),u(i)}),a}function l(f){return new Promise((a,i)=>{let d=y(),_=`pkg_${++c}`,v=g(f.timeoutMs),b=setTimeout(()=>{r.delete(_),n.delete(_);try{d.kill()}catch{}i(new Error(`Package runtime call timed out after ${v}ms`))},v);r.set(_,{resolve:a,reject:i,timer:b});try{d.send({...f,id:_},x=>{x&&(clearTimeout(b),r.delete(_),i(x))})}catch(x){clearTimeout(b),r.delete(_),i(x)}})}function m(f,a,i,d=[],_=3e4){return new Promise((v,b)=>{let x=y(),S=`pkg_${++c}`,F=g(_),H=setTimeout(()=>{r.delete(S),n.delete(S);try{x.kill()}catch{}b(new Error(`Package runtime stream timed out after ${F}ms`))},F);r.set(S,{resolve:v,reject:b,timer:H}),n.set(S,{onChunk:i});try{x.send({op:"streamHandle",taskId:f,handleId:a,path:d,id:S},U=>{U&&(clearTimeout(H),r.delete(S),n.delete(S),b(U))})}catch(U){clearTimeout(H),r.delete(S),n.delete(S),b(U)}})}function P(f){try{if(!s||!s.connected)return;s.send({...f,id:`pkg_${++c}`,fire:!0})}catch{}}async function k(f,a){let i=o.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 d=i.get(a.packageName);if(!d)throw new Error(`Package "${a.packageName}" is not available`);return l({op:a.kind==="construct"?"construct":"call",taskId:f,packageName:a.packageName,package:{name:d.name,fileUrl:d.fileUrl},path:a.path||[],argsJson:a.argsJson||"[]",timeoutMs:a.timeoutMs})}function A(f,a){o.set(f,a)}function I(f){o.delete(f),P({op:"releaseTask",taskId:f})}function p(){if(s){try{s.kill()}catch{}s=null}}return{cleanupTaskPackages:I,executePackageRuntimeCall:k,setTaskPackages:A,streamPackageHandle:m,shutdownPackageRuntime:p}}K.exports={createPackageRuntimeBridge:ue}});var V=D((Fe,q)=>{"use strict";var fe=`
|
|
2
2
|
"use strict";
|
|
3
3
|
let $ctx = {};
|
|
4
4
|
let $pkgs = {};
|
|
@@ -7,6 +7,7 @@ let __taskDeadlineMs = 0;
|
|
|
7
7
|
let __logs = [];
|
|
8
8
|
let __runtimeCallbackCounter = 0;
|
|
9
9
|
let __runtimeCallbacks = new Map();
|
|
10
|
+
let __pendingRuntimeTasks = [];
|
|
10
11
|
|
|
11
12
|
const __applyOpts = { result: { promise: true, copy: true } };
|
|
12
13
|
|
|
@@ -98,6 +99,34 @@ function __encodePkgCallPayload(payload) {
|
|
|
98
99
|
return JSON.stringify({ ...payload, timeoutMs: __remainingTaskTimeoutMs() });
|
|
99
100
|
}
|
|
100
101
|
|
|
102
|
+
function __bytesToBase64(bytes) {
|
|
103
|
+
const input = bytes instanceof Uint8Array ? bytes : new Uint8Array(bytes);
|
|
104
|
+
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
|
|
105
|
+
let out = '';
|
|
106
|
+
let i = 0;
|
|
107
|
+
for (; i + 2 < input.length; i += 3) {
|
|
108
|
+
const n = (input[i] << 16) | (input[i + 1] << 8) | input[i + 2];
|
|
109
|
+
out += chars[(n >> 18) & 63] + chars[(n >> 12) & 63] + chars[(n >> 6) & 63] + chars[n & 63];
|
|
110
|
+
}
|
|
111
|
+
if (i < input.length) {
|
|
112
|
+
const a = input[i];
|
|
113
|
+
const b = i + 1 < input.length ? input[i + 1] : 0;
|
|
114
|
+
const n = (a << 16) | (b << 8);
|
|
115
|
+
out += chars[(n >> 18) & 63] + chars[(n >> 12) & 63] + (i + 1 < input.length ? chars[(n >> 6) & 63] : '=') + '=';
|
|
116
|
+
}
|
|
117
|
+
return out;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
function __streamChunkToBytes(chunk) {
|
|
121
|
+
if (chunk === undefined || chunk === null) return new Uint8Array();
|
|
122
|
+
if (typeof chunk === 'string') return new TextEncoder().encode(chunk);
|
|
123
|
+
if (chunk instanceof ArrayBuffer) return new Uint8Array(chunk);
|
|
124
|
+
if (ArrayBuffer.isView(chunk)) {
|
|
125
|
+
return new Uint8Array(chunk.buffer, chunk.byteOffset, chunk.byteLength);
|
|
126
|
+
}
|
|
127
|
+
return new TextEncoder().encode(String(chunk));
|
|
128
|
+
}
|
|
129
|
+
|
|
101
130
|
async function __encodeRuntimeArg(value, seen) {
|
|
102
131
|
if (typeof value === 'function') {
|
|
103
132
|
if (value.__pkgHandlePromise) {
|
|
@@ -196,6 +225,41 @@ async function __stringifyRuntimeArgs(args) {
|
|
|
196
225
|
return JSON.stringify(await Promise.all(args.map((arg) => __encodeRuntimeArg(arg))));
|
|
197
226
|
}
|
|
198
227
|
|
|
228
|
+
async function __streamResponseFromLocalReadable(stream, options) {
|
|
229
|
+
await __call('resCall', JSON.stringify({
|
|
230
|
+
method: 'streamStart',
|
|
231
|
+
argsJson: JSON.stringify([null, options || {}]),
|
|
232
|
+
}));
|
|
233
|
+
try {
|
|
234
|
+
for await (const chunk of stream) {
|
|
235
|
+
await __call('resCall', JSON.stringify({
|
|
236
|
+
method: 'streamChunk',
|
|
237
|
+
chunk: __bytesToBase64(__streamChunkToBytes(chunk)),
|
|
238
|
+
}));
|
|
239
|
+
}
|
|
240
|
+
await __call('resCall', JSON.stringify({ method: 'streamEnd' }));
|
|
241
|
+
} catch (error) {
|
|
242
|
+
try {
|
|
243
|
+
await __call('resCall', JSON.stringify({
|
|
244
|
+
method: 'streamError',
|
|
245
|
+
error: {
|
|
246
|
+
message: error && error.message ? error.message : String(error),
|
|
247
|
+
},
|
|
248
|
+
}));
|
|
249
|
+
} catch {}
|
|
250
|
+
throw error;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
async function __drainPendingRuntimeTasks() {
|
|
255
|
+
while (__pendingRuntimeTasks.length > 0) {
|
|
256
|
+
const tasks = __pendingRuntimeTasks.splice(0, __pendingRuntimeTasks.length);
|
|
257
|
+
const results = await Promise.allSettled(tasks);
|
|
258
|
+
const failed = results.find((result) => result.status === 'rejected');
|
|
259
|
+
if (failed) throw failed.reason;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
|
|
199
263
|
async function __invokeRuntimeCallback(id, argsJson) {
|
|
200
264
|
const fn = __runtimeCallbacks.get(id);
|
|
201
265
|
if (typeof fn !== 'function') {
|
|
@@ -297,6 +361,7 @@ async function __extractCtxChanges() {
|
|
|
297
361
|
}
|
|
298
362
|
|
|
299
363
|
async function __extractResult(result, isAbsent) {
|
|
364
|
+
await __drainPendingRuntimeTasks();
|
|
300
365
|
const valueAbsent = isAbsent === true;
|
|
301
366
|
const out = {
|
|
302
367
|
valueAbsent,
|
|
@@ -615,7 +680,35 @@ function __createPkgProxy(packageName, path) {
|
|
|
615
680
|
});
|
|
616
681
|
}
|
|
617
682
|
|
|
683
|
+
function __createReadableFrom(input) {
|
|
684
|
+
const stream = {
|
|
685
|
+
__enfyraLocalReadable: true,
|
|
686
|
+
async *[Symbol.asyncIterator]() {
|
|
687
|
+
if (input && typeof input[Symbol.asyncIterator] === 'function') {
|
|
688
|
+
for await (const chunk of input) yield chunk;
|
|
689
|
+
return;
|
|
690
|
+
}
|
|
691
|
+
if (input && typeof input[Symbol.iterator] === 'function' && typeof input !== 'string') {
|
|
692
|
+
for (const chunk of input) yield chunk;
|
|
693
|
+
return;
|
|
694
|
+
}
|
|
695
|
+
yield input;
|
|
696
|
+
},
|
|
697
|
+
};
|
|
698
|
+
return stream;
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
const __builtinModules = {
|
|
702
|
+
stream: {
|
|
703
|
+
Readable: {
|
|
704
|
+
from: __createReadableFrom,
|
|
705
|
+
},
|
|
706
|
+
},
|
|
707
|
+
};
|
|
708
|
+
__builtinModules['node:stream'] = __builtinModules.stream;
|
|
709
|
+
|
|
618
710
|
const require = (name) => {
|
|
711
|
+
if (__builtinModules[name] !== undefined) return __builtinModules[name];
|
|
619
712
|
if ($pkgs[name] === undefined) throw new Error('Module "' + name + '" is not available. Install it via Settings \\u2192 Packages');
|
|
620
713
|
return $pkgs[name];
|
|
621
714
|
};
|
|
@@ -635,6 +728,7 @@ function __resetTask(snapshot, taskId, timeoutMs) {
|
|
|
635
728
|
__logs = [];
|
|
636
729
|
__runtimeCallbackCounter = 0;
|
|
637
730
|
__runtimeCallbacks = new Map();
|
|
731
|
+
__pendingRuntimeTasks = [];
|
|
638
732
|
%%PKG_SETUP%%
|
|
639
733
|
$ctx.$pkgs = $pkgs;
|
|
640
734
|
$ctx.$share = $ctx.$share || {};
|
|
@@ -675,8 +769,15 @@ function __resetTask(snapshot, taskId, timeoutMs) {
|
|
|
675
769
|
__call('storageCall', JSON.stringify({ method: String(method), argsJson: await __stringifyRuntimeArgs(args) }))
|
|
676
770
|
});
|
|
677
771
|
$ctx.$res = new Proxy({}, {
|
|
678
|
-
get: (_, method) => async (...args) =>
|
|
679
|
-
|
|
772
|
+
get: (_, method) => async (...args) => {
|
|
773
|
+
const methodName = String(method);
|
|
774
|
+
if (methodName === 'stream' && args[0]?.__enfyraLocalReadable) {
|
|
775
|
+
const task = __streamResponseFromLocalReadable(args[0], args[1]);
|
|
776
|
+
__pendingRuntimeTasks.push(task);
|
|
777
|
+
return task;
|
|
778
|
+
}
|
|
779
|
+
return __call('resCall', JSON.stringify({ method: methodName, argsJson: await __stringifyRuntimeArgs(args) }));
|
|
780
|
+
}
|
|
680
781
|
});
|
|
681
782
|
$ctx.$trigger = async (...args) =>
|
|
682
783
|
__call('dispatchCall', JSON.stringify({ method: 'trigger', argsJson: JSON.stringify(args) }));
|
|
@@ -765,32 +866,33 @@ function __cleanupTask() {
|
|
|
765
866
|
__logs = [];
|
|
766
867
|
__runtimeCallbackCounter = 0;
|
|
767
868
|
__runtimeCallbacks = new Map();
|
|
869
|
+
__pendingRuntimeTasks = [];
|
|
768
870
|
return true;
|
|
769
871
|
}
|
|
770
|
-
`;function de(e){return fe.replace("%%PKG_SETUP%%",e)}
|
|
771
|
-
`),
|
|
772
|
-
`);for(let o of t){let r=o.match(/at\s+(.+\.js):(\d+):(\d+)/);if(!r)continue;let
|
|
773
|
-
`)}function
|
|
872
|
+
`;function de(e){return fe.replace("%%PKG_SETUP%%",e)}q.exports={buildSetupCode:de}});var{parentPort:j}=require("worker_threads"),W=require("fs"),{fileURLToPath:_e}=require("url"),{createPackageRuntimeBridge:pe}=B(),{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,N=pe({workerDir:__dirname,activeTaskContexts:E}),he=500,ye=5e3,me=32,z=new WeakMap,Y=new WeakMap,ee=new WeakMap,T={created:0,reused:0,released:0,evicted:0,scrubFailed:0},C=null,ke=0,G=0,X=0;async function we(){let e=Date.now();if(e-G<ye)return X;if(G=e,!C)return 0;let t=0;for(let o of C){let r=o?.isolate;if(!(!r||r.isDisposed))try{let n=await r.getHeapStatistics(),s=n.heap_size_limit||1,c=n.used_heap_size/s;c>t&&(t=c)}catch{}}return X=t,t}async function M(e){e.heapRatio=await we(),e.contextStats=ve(),j.postMessage(e)}function ve(){let e=0;if(C)for(let t of C)e+=t?.idleContexts?.length||0;return{...T,idle:e}}function te(e,t){if(!C){let n=Math.max(1,Math.trunc(Number(t)||8));C=new Array(n).fill(null)}let o=ke++%C.length,r=C[o];return(!r||!r.isolate||r.isolate.isDisposed)&&(r={isolate:new O.Isolate({memoryLimit:e}),idleContexts:[]},C[o]=r),r}async function $(e,t,o){let r=z.get(e);r||(r=new Map,z.set(e,r));let n=r.get(t);if(n)return n;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,n)=>{let s=`cb_${++Q}`;J.set(s,{resolve:r,reject:n}),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 Se(e,t){if(t?.method!=="stream")return R(e,"resCall",t);let o=JSON.parse(t.argsJson||"[]"),r=o[0],n=o[1]||{},s=r?.__pkgHandleArg;if(!s)return R(e,"resCall",t);await R(e,"resCall",{method:"streamStart",argsJson:JSON.stringify([null,n])});try{await N.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 be(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 xe(e,t,o){try{let r=be(o);if(!r)return null;let n=await e.compileModule(r,{filename:`pkg:${o.safeName}`});await n.instantiate(t,c=>{throw new Error(`Unresolved import in package ${o.safeName}: ${c}`)}),await n.evaluate({timeout:1e4});let s=await n.namespace.get("default");return s!==void 0&&s.typeof!=="undefined"?s.derefInto({release:!1}):n.namespace.derefInto({release:!1})}catch{return null}}function re(e,t){let o=n=>{let s=2166136261;for(let c=0;c<n.length;c++)s^=n.charCodeAt(c),s=Math.imul(s,16777619);return(s>>>0).toString(36)},r=new Set(t||[]);return e.map(n=>{let s=n.cacheKey||`${n.filePath||""}:${n.fileUrl||""}:${n.mtimeMs||""}:${n.size||""}:${o(n.sourceCode||"")}`,c=r.has(n.name)?"isolate":"proxy";return`${n.name}:${n.version||""}:${s}:${c}`}).join("|")}function ne(e,t){let o=new Set(t.map(u=>u.name)),r=new Set,n=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 n.matchAll(u)){let w=h[2];o.has(w)&&r.add(w)}for(let u of n.matchAll(g)){let h=u[1];o.has(h)&&r.add(h)}return r}async function Ce(e,t,o,r){let n=await e.createContext(),s=n.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 xe(e,n,l):null;m!==null?(await s.set(`__pkg_${l.safeName}`,m),c.push(l)):g.push(l)}N.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 N.executePackageRuntimeCall(l,k)):m==="resCall"?Se(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(`
|
|
873
|
+
`),w=ge(h);return await(await $(e,w,"setup.js")).run(n,{timeout:5e3}),Y.set(n,re(o,r)),ee.set(n,u),n}async function ae(e,t,o,r,n,s){let c=e.isolate,g=re(o,n),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,T.reused++;break}try{l.release()}catch{}}u||(u=await Ce(c,t,o,n),T.created++),N.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{T.scrubFailed++;try{t.release()}catch{}return}if(e.idleContexts.length>=me){try{t.release()}catch{}T.evicted++;return}e.idleContexts.push(t),T.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(`
|
|
874
|
+
`);for(let o of t){let r=o.match(/at\s+(.+\.js):(\d+):(\d+)/);if(!r)continue;let n=r[1].trim();if(Me.includes(n))continue;let c=parseInt(r[2])-Re;if(!(c<=0))return{line:c,column:parseInt(r[3]),phase:n.replace(".js","")}}return null}function Te(e,t,o){if(!e||!t)return;let r=String(e).split(/\r?\n/),n=Math.max(1,t-1),s=Math.min(r.length,t+1),c=String(s).length,g=[];for(let u=n;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(`
|
|
875
|
+
`)}function Ne(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 L(e,t){let o=$e(e);if(o)return{message:o.message,statusCode:o.statusCode,errorPath:o.errorPath,details:o.details};let r=Ae(e.stack),n=e.message||"Unknown error",s=r?`${n} (${r.phase}, line ${r.line})`:n,c=Ne(r,t),g=r?Te(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=L(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:n,memoryLimitMb:s,isolatePoolSize:c}=e,g=r||[],u=Math.max(1,Math.trunc(Number(e.timeoutMs)||3e4)),h=ne(o,g),w=te(s,c),y=w.isolate,l=await ae(w,t,g,n,h,u);E.set(t,l);try{let m=`
|
|
774
876
|
(async () => {
|
|
775
877
|
"use strict";
|
|
776
878
|
${o}
|
|
777
879
|
})().then((__result) => __extractResult(__result, __result === undefined));
|
|
778
|
-
`,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(
|
|
779
|
-
`),g),
|
|
880
|
+
`,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(w,l),ie(t)}}async function Oe(e){let{id:t,codeBlocks:o,pkgSources:r,snapshot:n,memoryLimitMb:s,isolatePoolSize:c}=e,g=r||[],u=Math.max(1,Math.trunc(Number(e.timeoutMs)||3e4)),h=ne((o||[]).map(p=>p.code||"").join(`
|
|
881
|
+
`),g),w=te(s,c),y=w.isolate,l=await ae(w,t,g,n,h,u);E.set(t,l);let m=[],P=[],k={},A=0,I=0;for(let p of o){let f=p.type||"handler";f==="postHook"?(I++,k[`postHook #${I}`]=p.code||"",k.postHook=p.code||"",P.push(p)):(f==="handler"?k.handler=p.code||"":(A++,k[`${f} #${A}`]=p.code||"",k.preHook=p.code||""),m.push(p))}try{let p=null;for(let a=0;a<m.length;a++){let i=m[a],d=i.type||"handler",_=d==="handler"?"handler":`${d} #${a+1}`,v;d==="preHook"?v=`
|
|
780
882
|
(async () => {
|
|
781
883
|
"use strict";
|
|
782
884
|
${i.code}
|
|
783
885
|
})().then((__r) => {
|
|
784
886
|
if (__r !== undefined) return JSON.stringify({ __shortCircuit: true, value: __r });
|
|
785
887
|
return JSON.stringify({ __shortCircuit: false });
|
|
786
|
-
});`:
|
|
888
|
+
});`:v=`
|
|
787
889
|
(async () => {
|
|
788
890
|
"use strict";
|
|
789
891
|
${i.code}
|
|
790
892
|
})().then((__r) => {
|
|
791
893
|
$ctx.$data = __r;
|
|
792
894
|
return "__handler_done__";
|
|
793
|
-
});`;try{let
|
|
895
|
+
});`;try{let x=await(await $(y,v,`${_}.js`)).run(l,{timeout:u,promise:!0});if(d==="preHook"&&typeof x=="string"){let S=JSON.parse(x);if(S.__shortCircuit){let F=await Z(y,l,S.value);await M({type:"result",id:t,success:!0,...F,shortCircuit:!0});return}}}catch(b){p=b;break}}if(!p&&P.length>0&&await(await $(y,'$ctx.$statusCode = 200; "__status_set__";',"set-status.js")).run(l,{timeout:5e3}),p&&P.length>0){let a=L(p,k),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()},d=`
|
|
794
896
|
$ctx.$error = ${JSON.stringify(i)};
|
|
795
897
|
$ctx.$data = null;
|
|
796
898
|
$ctx.$statusCode = ${i.statusCode};
|
|
@@ -804,11 +906,11 @@ if ($ctx.$api) {
|
|
|
804
906
|
timestamp: ${JSON.stringify(i.timestamp)},
|
|
805
907
|
};
|
|
806
908
|
}
|
|
807
|
-
"__error_populated__";`;await(await y.compileScript(d,{filename:"populate-error.js"})).run(l,{timeout:5e3})}for(let
|
|
909
|
+
"__error_populated__";`;await(await y.compileScript(d,{filename:"populate-error.js"})).run(l,{timeout:5e3})}for(let a=0;a<P.length;a++){let i=P[a],d=`postHook #${a+1}`,_=`
|
|
808
910
|
(async () => {
|
|
809
911
|
"use strict";
|
|
810
912
|
${i.code}
|
|
811
913
|
})().then((__r) => {
|
|
812
914
|
if (__r !== undefined) $ctx.$data = __r;
|
|
813
915
|
return "__posthook_done__";
|
|
814
|
-
});`;try{await(await $(y,
|
|
916
|
+
});`;try{await(await $(y,_,`${d}.js`)).run(l,{timeout:u,promise:!0})}catch{}}if(p){let a=L(p,k),i;try{let v=await(await $(y,"(async () => JSON.stringify(await __extractCtxChanges()))()","extract-error-ctx.js")).run(l,{timeout:5e3,promise:!0});i=JSON.parse(v)}catch{}await M({type:"result",id:t,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 Z(y,l);await M({type:"result",id:t,success:!0,...f})}catch(p){await oe(t,p)}finally{E.delete(t),await se(w,l),ie(t)}}function ie(e){N.cleanupTaskPackages(e)}function Ee(){N.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)}
|